From 81a49c8c5c84015324844890c7a61b5892cdd7ee Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Thu, 25 Nov 2021 10:20:21 +0100 Subject: [PATCH 001/278] set vendor field width to 9 (matshita overflows at 8) --- src/include/86box/mo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/include/86box/mo.h b/src/include/86box/mo.h index e99d5e381..caf5f2417 100644 --- a/src/include/86box/mo.h +++ b/src/include/86box/mo.h @@ -51,7 +51,7 @@ static const mo_type_t mo_types[KNOWN_MO_TYPES] = { typedef struct { - const char vendor[8]; + const char vendor[9]; const char model[16]; const char revision[5]; int8_t supported_media[KNOWN_MO_TYPES]; From c587a02b1adaae6e305b0f756da04d11cb0a7af5 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Thu, 25 Nov 2021 10:20:56 +0100 Subject: [PATCH 002/278] Initial Qt Commit --- CMakeLists.txt | 1 + src/CMakeLists.txt | 5 +- src/qt/CMakeLists.txt | 86 +++ src/qt/TODO | 1 + src/qt/cpp11_thread.cpp | 130 ++++ src/qt/qt.c | 70 +++ src/qt/qt_cdrom.c | 264 ++++++++ src/qt/qt_deviceconfig.cpp | 157 +++++ src/qt/qt_deviceconfig.hpp | 28 + src/qt/qt_deviceconfig.ui | 74 +++ src/qt/qt_filefield.cpp | 34 ++ src/qt/qt_filefield.hpp | 35 ++ src/qt/qt_filefield.ui | 47 ++ src/qt/qt_harddiskdialog.cpp | 706 +++++++++++++++++++++ src/qt/qt_harddiskdialog.hpp | 57 ++ src/qt/qt_harddiskdialog.ui | 230 +++++++ src/qt/qt_harddrive_common.cpp | 101 +++ src/qt/qt_harddrive_common.hpp | 13 + src/qt/qt_main.cpp | 104 ++++ src/qt/qt_mainwindow.cpp | 299 +++++++++ src/qt/qt_mainwindow.hpp | 83 +++ src/qt/qt_mainwindow.ui | 143 +++++ src/qt/qt_midi.cpp | 32 + src/qt/qt_models_common.cpp | 15 + src/qt/qt_models_common.hpp | 8 + src/qt/qt_platform.cpp | 382 ++++++++++++ src/qt/qt_sdl.c | 743 +++++++++++++++++++++++ src/qt/qt_sdl.h | 73 +++ src/qt/qt_settings.cpp | 131 ++++ src/qt/qt_settings.hpp | 46 ++ src/qt/qt_settings.ui | 87 +++ src/qt/qt_settingsdisplay.cpp | 105 ++++ src/qt/qt_settingsdisplay.hpp | 34 ++ src/qt/qt_settingsdisplay.ui | 77 +++ src/qt/qt_settingsfloppycdrom.cpp | 217 +++++++ src/qt/qt_settingsfloppycdrom.hpp | 35 ++ src/qt/qt_settingsfloppycdrom.ui | 148 +++++ src/qt/qt_settingsharddisks.cpp | 225 +++++++ src/qt/qt_settingsharddisks.hpp | 35 ++ src/qt/qt_settingsharddisks.ui | 95 +++ src/qt/qt_settingsinput.cpp | 114 ++++ src/qt/qt_settingsinput.hpp | 33 + src/qt/qt_settingsinput.ui | 134 ++++ src/qt/qt_settingsmachine.cpp | 348 +++++++++++ src/qt/qt_settingsmachine.hpp | 41 ++ src/qt/qt_settingsmachine.ui | 229 +++++++ src/qt/qt_settingsnetwork.cpp | 113 ++++ src/qt/qt_settingsnetwork.hpp | 33 + src/qt/qt_settingsnetwork.ui | 101 +++ src/qt/qt_settingsotherperipherals.cpp | 133 ++++ src/qt/qt_settingsotherperipherals.hpp | 53 ++ src/qt/qt_settingsotherperipherals.ui | 162 +++++ src/qt/qt_settingsotherremovable.cpp | 267 ++++++++ src/qt/qt_settingsotherremovable.hpp | 52 ++ src/qt/qt_settingsotherremovable.ui | 151 +++++ src/qt/qt_settingsports.cpp | 81 +++ src/qt/qt_settingsports.hpp | 28 + src/qt/qt_settingsports.ui | 133 ++++ src/qt/qt_settingssound.cpp | 223 +++++++ src/qt/qt_settingssound.hpp | 44 ++ src/qt/qt_settingssound.ui | 160 +++++ src/qt/qt_settingsstoragecontrollers.cpp | 233 +++++++ src/qt/qt_settingsstoragecontrollers.hpp | 76 +++ src/qt/qt_settingsstoragecontrollers.ui | 202 ++++++ src/qt/qt_ui.cpp | 111 ++++ src/qt_resources.qrc | 24 + 66 files changed, 8434 insertions(+), 1 deletion(-) create mode 100644 src/qt/CMakeLists.txt create mode 100644 src/qt/TODO create mode 100644 src/qt/cpp11_thread.cpp create mode 100644 src/qt/qt.c create mode 100644 src/qt/qt_cdrom.c create mode 100644 src/qt/qt_deviceconfig.cpp create mode 100644 src/qt/qt_deviceconfig.hpp create mode 100644 src/qt/qt_deviceconfig.ui create mode 100644 src/qt/qt_filefield.cpp create mode 100644 src/qt/qt_filefield.hpp create mode 100644 src/qt/qt_filefield.ui create mode 100644 src/qt/qt_harddiskdialog.cpp create mode 100644 src/qt/qt_harddiskdialog.hpp create mode 100644 src/qt/qt_harddiskdialog.ui create mode 100644 src/qt/qt_harddrive_common.cpp create mode 100644 src/qt/qt_harddrive_common.hpp create mode 100644 src/qt/qt_main.cpp create mode 100644 src/qt/qt_mainwindow.cpp create mode 100644 src/qt/qt_mainwindow.hpp create mode 100644 src/qt/qt_mainwindow.ui create mode 100644 src/qt/qt_midi.cpp create mode 100644 src/qt/qt_models_common.cpp create mode 100644 src/qt/qt_models_common.hpp create mode 100644 src/qt/qt_platform.cpp create mode 100644 src/qt/qt_sdl.c create mode 100644 src/qt/qt_sdl.h create mode 100644 src/qt/qt_settings.cpp create mode 100644 src/qt/qt_settings.hpp create mode 100644 src/qt/qt_settings.ui create mode 100644 src/qt/qt_settingsdisplay.cpp create mode 100644 src/qt/qt_settingsdisplay.hpp create mode 100644 src/qt/qt_settingsdisplay.ui create mode 100644 src/qt/qt_settingsfloppycdrom.cpp create mode 100644 src/qt/qt_settingsfloppycdrom.hpp create mode 100644 src/qt/qt_settingsfloppycdrom.ui create mode 100644 src/qt/qt_settingsharddisks.cpp create mode 100644 src/qt/qt_settingsharddisks.hpp create mode 100644 src/qt/qt_settingsharddisks.ui create mode 100644 src/qt/qt_settingsinput.cpp create mode 100644 src/qt/qt_settingsinput.hpp create mode 100644 src/qt/qt_settingsinput.ui create mode 100644 src/qt/qt_settingsmachine.cpp create mode 100644 src/qt/qt_settingsmachine.hpp create mode 100644 src/qt/qt_settingsmachine.ui create mode 100644 src/qt/qt_settingsnetwork.cpp create mode 100644 src/qt/qt_settingsnetwork.hpp create mode 100644 src/qt/qt_settingsnetwork.ui create mode 100644 src/qt/qt_settingsotherperipherals.cpp create mode 100644 src/qt/qt_settingsotherperipherals.hpp create mode 100644 src/qt/qt_settingsotherperipherals.ui create mode 100644 src/qt/qt_settingsotherremovable.cpp create mode 100644 src/qt/qt_settingsotherremovable.hpp create mode 100644 src/qt/qt_settingsotherremovable.ui create mode 100644 src/qt/qt_settingsports.cpp create mode 100644 src/qt/qt_settingsports.hpp create mode 100644 src/qt/qt_settingsports.ui create mode 100644 src/qt/qt_settingssound.cpp create mode 100644 src/qt/qt_settingssound.hpp create mode 100644 src/qt/qt_settingssound.ui create mode 100644 src/qt/qt_settingsstoragecontrollers.cpp create mode 100644 src/qt/qt_settingsstoragecontrollers.hpp create mode 100644 src/qt/qt_settingsstoragecontrollers.ui create mode 100644 src/qt/qt_ui.cpp create mode 100644 src/qt_resources.qrc diff --git a/CMakeLists.txt b/CMakeLists.txt index 89e661fcb..64d0087e5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,6 +60,7 @@ option(MUNT "MUNT" ON) option(VRAMDUMP "Video RAM dumping" OFF) option(DINPUT "DirectInput" OFF) option(DISCORD "Discord integration" ON) +option(QT "QT GUI" ON) option(NEW_DYNAREC "Use the PCem v15 (\"new\") dynamic recompiler" OFF) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7e9e24e89..f5b3c99f8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -221,7 +221,10 @@ add_subdirectory(sio) add_subdirectory(scsi) add_subdirectory(sound) add_subdirectory(video) -if(APPLE) + +if (QT) + add_subdirectory(qt) +elseif(APPLE) add_subdirectory(mac) add_subdirectory(unix) elseif(WIN32) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt new file mode 100644 index 000000000..ab923e042 --- /dev/null +++ b/src/qt/CMakeLists.txt @@ -0,0 +1,86 @@ +find_package(Qt5 COMPONENTS Core Widgets REQUIRED) + +# Find includes in corresponding build directories +set(CMAKE_INCLUDE_CURRENT_DIR ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTORCC ON) + +add_library(plat STATIC qt.c qt_main.cpp qt_platform.cpp qt_midi.cpp cpp11_thread.cpp) +add_library(ui STATIC + qt_ui.cpp + qt_cdrom.c + qt_sdl.c + + qt_mainwindow.cpp + qt_mainwindow.hpp + qt_mainwindow.ui + + qt_settings.cpp + qt_settings.hpp + qt_settings.ui + + qt_settingsmachine.cpp + qt_settingsmachine.hpp + qt_settingsmachine.ui + qt_settingsdisplay.cpp + qt_settingsdisplay.hpp + qt_settingsdisplay.ui + qt_settingsinput.cpp + qt_settingsinput.hpp + qt_settingsinput.ui + qt_settingssound.cpp + qt_settingssound.hpp + qt_settingssound.ui + qt_settingsnetwork.cpp + qt_settingsnetwork.hpp + qt_settingsnetwork.ui + qt_settingsports.cpp + qt_settingsports.hpp + qt_settingsports.ui + qt_settingsstoragecontrollers.cpp + qt_settingsstoragecontrollers.hpp + qt_settingsstoragecontrollers.ui + qt_settingsharddisks.cpp + qt_settingsharddisks.hpp + qt_settingsharddisks.ui + qt_settingsfloppycdrom.cpp + qt_settingsfloppycdrom.hpp + qt_settingsfloppycdrom.ui + qt_settingsotherremovable.cpp + qt_settingsotherremovable.hpp + qt_settingsotherremovable.ui + qt_settingsotherperipherals.cpp + qt_settingsotherperipherals.hpp + qt_settingsotherperipherals.ui + + qt_deviceconfig.cpp + qt_deviceconfig.hpp + qt_deviceconfig.ui + + qt_filefield.cpp + qt_filefield.hpp + qt_filefield.ui + qt_harddiskdialog.cpp + qt_harddiskdialog.hpp + qt_harddiskdialog.ui + + qt_harddrive_common.cpp + qt_harddrive_common.hpp + qt_models_common.cpp + qt_models_common.hpp + + ../qt_resources.qrc +) + +target_link_libraries( + plat + PRIVATE + Qt5::Widgets +) + +target_link_libraries( + ui + PRIVATE + Qt5::Widgets +) diff --git a/src/qt/TODO b/src/qt/TODO new file mode 100644 index 000000000..a8b0b4970 --- /dev/null +++ b/src/qt/TODO @@ -0,0 +1 @@ +* Joystick support diff --git a/src/qt/cpp11_thread.cpp b/src/qt/cpp11_thread.cpp new file mode 100644 index 000000000..270832f10 --- /dev/null +++ b/src/qt/cpp11_thread.cpp @@ -0,0 +1,130 @@ +#include +#include +#include +#include + +#include <86box/plat.h> + +struct event_cpp11_t +{ + std::condition_variable cond; + std::mutex mutex; + std::atomic_bool state = false; +}; + +extern "C" { + +thread_t * +thread_create(void (*thread_rout)(void *param), void *param) +{ + auto thread = new std::thread([thread_rout, param] { + thread_rout(param); + }); + return thread; +} + +mutex_t * +thread_create_mutex_with_spin_count(unsigned int spin_count) +{ + /* Setting spin count of a mutex is not possible with pthreads. */ + return thread_create_mutex(); +} + +int +thread_wait(thread_t *arg, int timeout) +{ + (void) timeout; + auto thread = reinterpret_cast(arg); + thread->join(); + return 0; +} + +mutex_t * +thread_create_mutex(void) +{ + auto mutex = new std::mutex; + return mutex; +} + +int +thread_wait_mutex(mutex_t *_mutex) +{ + if (_mutex == nullptr) + return(0); + auto mutex = reinterpret_cast(_mutex); + mutex->lock(); + return 1; +} + + +int +thread_release_mutex(mutex_t *_mutex) +{ + if (_mutex == nullptr) + return(0); + auto mutex = reinterpret_cast(_mutex); + mutex->unlock(); + return 1; +} + + +void +thread_close_mutex(mutex_t *_mutex) +{ + auto mutex = reinterpret_cast(_mutex); + delete mutex; +} + +event_t * +thread_create_event() +{ + auto ev = new event_cpp11_t; + return ev; +} + +int +thread_wait_event(event_t *handle, int timeout) +{ + auto event = reinterpret_cast(handle); + auto lock = std::unique_lock(event->mutex); + + if (timeout < 0) { + event->cond.wait(lock, [=] { return event->state.load(); }); + } else { + auto to = std::chrono::system_clock::now() + std::chrono::milliseconds(timeout); + std::cv_status status; + + do { + status = event->cond.wait_until(lock, to); + } while ((status != std::cv_status::timeout) && !event->state); + + if (status == std::cv_status::timeout) { + return 1; + } + } + return 0; +} + +void +thread_set_event(event_t *handle) +{ + auto event = reinterpret_cast(handle); + event->state = true; + event->cond.notify_all(); +} + +void +thread_reset_event(event_t *handle) +{ + auto event = reinterpret_cast(handle); + event->state = false; +} + +void +thread_destroy_event(event_t *handle) +{ + auto event = reinterpret_cast(handle); + delete event; +} + +} diff --git a/src/qt/qt.c b/src/qt/qt.c new file mode 100644 index 000000000..2ebab6f69 --- /dev/null +++ b/src/qt/qt.c @@ -0,0 +1,70 @@ +/* + * C functionality for Qt platform, where the C equivalent is not easily + * implemented in Qt + */ + +#include +#include + +#include <86box/86box.h> +#include <86box/device.h> +#include <86box/plat.h> +#include <86box/timer.h> +#include <86box/nvr.h> + +#include "qt_sdl.h" + +int qt_nvr_save(void) { + return nvr_save(); +} + +char icon_set[256] = ""; /* name of the iconset to be used */ + +wchar_t* plat_get_string(int i) +{ + switch (i) + { + case IDS_2077: + return L"Click to capture mouse."; + case IDS_2078: + return L"Press CTRL-END to release mouse"; + case IDS_2079: + return L"Press CTRL-END or middle button to release mouse"; + case IDS_2080: + return L"Failed to initialize FluidSynth"; + case IDS_4099: + return L"MFM/RLL or ESDI CD-ROM drives never existed"; + case IDS_2093: + return L"Failed to set up PCap"; + case IDS_2094: + return L"No PCap devices found"; + case IDS_2110: + return L"Unable to initialize FreeType"; + case IDS_2111: + return L"Unable to initialize SDL, libsdl2 is required"; + case IDS_2131: + return L"libfreetype is required for ESC/P printer emulation."; + case IDS_2132: + return L"libgs is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files."; + case IDS_2129: + return L"Make sure libpcap is installed and that you are on a libpcap-compatible network connection."; + case IDS_2114: + return L"Unable to initialize Ghostscript"; + case IDS_2063: + return L"Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine."; + case IDS_2064: + return L"Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card."; + case IDS_2128: + return L"Hardware not available"; + } + return L""; +} + +int +plat_vidapi(char* api) { + return 0; +} + +char* plat_vidapi_name(int api) { + return "default"; +} diff --git a/src/qt/qt_cdrom.c b/src/qt/qt_cdrom.c new file mode 100644 index 000000000..9eb3d962a --- /dev/null +++ b/src/qt/qt_cdrom.c @@ -0,0 +1,264 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Handle the platform-side of CDROM/ZIP/MO drives. + * + * + * + * Authors: Sarah Walker, + * Miran Grca, + * Fred N. van Kempen, + * + * Copyright 2016-2018 Miran Grca. + * Copyright 2017,2018 Fred N. van Kempen. + */ + +#include +#include +#include +#include +#include +#include <86box/86box.h> +#include <86box/config.h> +#include <86box/timer.h> +#include <86box/device.h> +#include <86box/cassette.h> +#include <86box/cartridge.h> +#include <86box/fdd.h> +#include <86box/hdd.h> +#include <86box/scsi_device.h> +#include <86box/cdrom.h> +#include <86box/mo.h> +#include <86box/zip.h> +#include <86box/scsi_disk.h> +#include <86box/plat.h> +#include <86box/ui.h> + + + +void +cassette_mount(char *fn, uint8_t wp) +{ + pc_cas_set_fname(cassette, NULL); + memset(cassette_fname, 0, sizeof(cassette_fname)); + cassette_ui_writeprot = wp; + pc_cas_set_fname(cassette, fn); + if (fn != NULL) + memcpy(cassette_fname, fn, MIN(511, strlen(fn))); + ui_sb_update_icon_state(SB_CASSETTE, (fn == NULL) ? 1 : 0); + //media_menu_update_cassette(); + ui_sb_update_tip(SB_CASSETTE); + config_save(); +} + + +void +cassette_eject(void) +{ + pc_cas_set_fname(cassette, NULL); + memset(cassette_fname, 0x00, sizeof(cassette_fname)); + ui_sb_update_icon_state(SB_CASSETTE, 1); + //media_menu_update_cassette(); + ui_sb_update_tip(SB_CASSETTE); + config_save(); +} + + +void +cartridge_mount(uint8_t id, char *fn, uint8_t wp) +{ + cart_close(id); + cart_load(id, fn); + ui_sb_update_icon_state(SB_CARTRIDGE | id, strlen(cart_fns[id]) ? 0 : 1); + //media_menu_update_cartridge(id); + ui_sb_update_tip(SB_CARTRIDGE | id); + config_save(); +} + + +void +cartridge_eject(uint8_t id) +{ + cart_close(id); + ui_sb_update_icon_state(SB_CARTRIDGE | id, 1); + //media_menu_update_cartridge(id); + ui_sb_update_tip(SB_CARTRIDGE | id); + config_save(); +} + + +void +floppy_mount(uint8_t id, char *fn, uint8_t wp) +{ + fdd_close(id); + ui_writeprot[id] = wp; + fdd_load(id, fn); + ui_sb_update_icon_state(SB_FLOPPY | id, strlen(floppyfns[id]) ? 0 : 1); + //media_menu_update_floppy(id); + ui_sb_update_tip(SB_FLOPPY | id); + config_save(); +} + + +void +floppy_eject(uint8_t id) +{ + fdd_close(id); + ui_sb_update_icon_state(SB_FLOPPY | id, 1); + //media_menu_update_floppy(id); + ui_sb_update_tip(SB_FLOPPY | id); + config_save(); +} + + +void +plat_cdrom_ui_update(uint8_t id, uint8_t reload) +{ + cdrom_t *drv = &cdrom[id]; + + if (drv->host_drive == 0) { + ui_sb_update_icon_state(SB_CDROM|id, 1); + } else { + ui_sb_update_icon_state(SB_CDROM|id, 0); + } + + //media_menu_update_cdrom(id); + ui_sb_update_tip(SB_CDROM|id); +} + +void +cdrom_mount(uint8_t id, char *fn) +{ + cdrom[id].prev_host_drive = cdrom[id].host_drive; + strcpy(cdrom[id].prev_image_path, cdrom[id].image_path); + if (cdrom[id].ops && cdrom[id].ops->exit) + cdrom[id].ops->exit(&(cdrom[id])); + cdrom[id].ops = NULL; + memset(cdrom[id].image_path, 0, sizeof(cdrom[id].image_path)); + cdrom_image_open(&(cdrom[id]), fn); + /* Signal media change to the emulated machine. */ + if (cdrom[id].insert) + cdrom[id].insert(cdrom[id].priv); + cdrom[id].host_drive = (strlen(cdrom[id].image_path) == 0) ? 0 : 200; + if (cdrom[id].host_drive == 200) { + ui_sb_update_icon_state(SB_CDROM | id, 0); + } else { + ui_sb_update_icon_state(SB_CDROM | id, 1); + } + //media_menu_update_cdrom(id); + ui_sb_update_tip(SB_CDROM | id); + config_save(); +} + +void +mo_eject(uint8_t id) +{ + mo_t *dev = (mo_t *) mo_drives[id].priv; + + mo_disk_close(dev); + if (mo_drives[id].bus_type) { + /* Signal disk change to the emulated machine. */ + mo_insert(dev); + } + + ui_sb_update_icon_state(SB_MO | id, 1); + //media_menu_update_mo(id); + ui_sb_update_tip(SB_MO | id); + config_save(); +} + + +void +mo_mount(uint8_t id, char *fn, uint8_t wp) +{ + mo_t *dev = (mo_t *) mo_drives[id].priv; + + mo_disk_close(dev); + mo_drives[id].read_only = wp; + mo_load(dev, fn); + mo_insert(dev); + + ui_sb_update_icon_state(SB_MO | id, strlen(mo_drives[id].image_path) ? 0 : 1); + //media_menu_update_mo(id); + ui_sb_update_tip(SB_MO | id); + + config_save(); +} + + +void +mo_reload(uint8_t id) +{ + mo_t *dev = (mo_t *) mo_drives[id].priv; + + mo_disk_reload(dev); + if (strlen(mo_drives[id].image_path) == 0) { + ui_sb_update_icon_state(SB_MO|id, 1); + } else { + ui_sb_update_icon_state(SB_MO|id, 0); + } + + //media_menu_update_mo(id); + ui_sb_update_tip(SB_MO|id); + + config_save(); +} + +void +zip_eject(uint8_t id) +{ + zip_t *dev = (zip_t *) zip_drives[id].priv; + + zip_disk_close(dev); + if (zip_drives[id].bus_type) { + /* Signal disk change to the emulated machine. */ + zip_insert(dev); + } + + ui_sb_update_icon_state(SB_ZIP | id, 1); + //media_menu_update_zip(id); + ui_sb_update_tip(SB_ZIP | id); + config_save(); +} + + +void +zip_mount(uint8_t id, char *fn, uint8_t wp) +{ + zip_t *dev = (zip_t *) zip_drives[id].priv; + + zip_disk_close(dev); + zip_drives[id].read_only = wp; + zip_load(dev, fn); + zip_insert(dev); + + ui_sb_update_icon_state(SB_ZIP | id, strlen(zip_drives[id].image_path) ? 0 : 1); + //media_menu_update_zip(id); + ui_sb_update_tip(SB_ZIP | id); + + config_save(); +} + + +void +zip_reload(uint8_t id) +{ + zip_t *dev = (zip_t *) zip_drives[id].priv; + + zip_disk_reload(dev); + if (strlen(zip_drives[id].image_path) == 0) { + ui_sb_update_icon_state(SB_ZIP|id, 1); + } else { + ui_sb_update_icon_state(SB_ZIP|id, 0); + } + + //media_menu_update_zip(id); + ui_sb_update_tip(SB_ZIP|id); + + config_save(); +} diff --git a/src/qt/qt_deviceconfig.cpp b/src/qt/qt_deviceconfig.cpp new file mode 100644 index 000000000..a0d62c1c9 --- /dev/null +++ b/src/qt/qt_deviceconfig.cpp @@ -0,0 +1,157 @@ +#include "qt_deviceconfig.hpp" +#include "ui_qt_deviceconfig.h" + +#include +#include +#include +#include +#include + +extern "C" { +#include <86box/86box.h> +#include <86box/config.h> +#include <86box/device.h> +} + +#include "qt_filefield.hpp" + +DeviceConfig::DeviceConfig(QWidget *parent) : + QDialog(parent), + ui(new Ui::DeviceConfig) +{ + ui->setupUi(this); +} + +DeviceConfig::~DeviceConfig() +{ + delete ui; +} + +void DeviceConfig::ConfigureDevice(const _device_* device) { + DeviceConfig dc; + dc.setWindowTitle(QString("%1 Device Configuration").arg(device->name)); + + device_context_t device_context; + device_set_context(&device_context, device, 0); + + const auto* config = device->config; + while (config->type != -1) { + switch (config->type) { + case CONFIG_BINARY: + { + auto value = config_get_int(device_context.name, const_cast(config->name), config->default_int); + auto* cbox = new QCheckBox(); + cbox->setObjectName(config->name); + cbox->setChecked(value > 0); + dc.ui->formLayout->addRow(config->description, cbox); + break; + } + case CONFIG_SELECTION: + case CONFIG_MIDI: + case CONFIG_MIDI_IN: + case CONFIG_HEX16: + case CONFIG_HEX20: + { + auto* cbox = new QComboBox(); + cbox->setObjectName(config->name); + auto* model = cbox->model(); + int currentIndex = -1; + int selected = config_get_int(device_context.name, const_cast(config->name), config->default_int); + + for (auto* sel = config->selection; (sel->description != nullptr) && (strlen(sel->description) > 0); ++sel) { + int rows = model->rowCount(); + model->insertRow(rows); + auto idx = model->index(rows, 0); + + model->setData(idx, sel->description, Qt::DisplayRole); + model->setData(idx, sel->value, Qt::UserRole); + + if (selected == sel->value) { + currentIndex = idx.row(); + } + } + + dc.ui->formLayout->addRow(config->description, cbox); + cbox->setCurrentIndex(currentIndex); + break; + } + case CONFIG_SPINNER: + { + int value = config_get_int(device_context.name, const_cast(config->name), config->default_int); + auto* spinBox = new QSpinBox(); + spinBox->setObjectName(config->name); + spinBox->setMaximum(config->spinner.max); + spinBox->setMinimum(config->spinner.min); + if (config->spinner.step > 0) { + spinBox->setSingleStep(config->spinner.step); + } + spinBox->setValue(value); + dc.ui->formLayout->addRow(config->description, spinBox); + break; + } + case CONFIG_FNAME: + { + auto* fileName = config_get_string(device_context.name, const_cast(config->name), const_cast(config->default_string)); + auto* fileField = new FileField(); + fileField->setObjectName(config->name); + fileField->setFileName(fileName); + dc.ui->formLayout->addRow(config->description, fileField); + break; + } + } + ++config; + } + + int res = dc.exec(); + if (res == QDialog::Accepted) { + config = device->config; + while (config->type != -1) { + switch (config->type) { + case CONFIG_BINARY: + { + auto* cbox = dc.findChild(config->name); + config_set_int(device_context.name, const_cast(config->name), cbox->isChecked() ? 1 : 0); + break; + } + case CONFIG_SELECTION: + case CONFIG_MIDI: + case CONFIG_MIDI_IN: + case CONFIG_HEX16: + case CONFIG_HEX20: + { + auto* cbox = dc.findChild(config->name); + config_set_int(device_context.name, const_cast(config->name), cbox->currentData().toInt()); + break; + } + case CONFIG_FNAME: + { + auto* fbox = dc.findChild(config->name); + auto fileName = fbox->fileName().toUtf8(); + config_set_string(device_context.name, const_cast(config->name), fileName.data()); + break; + } + case CONFIG_SPINNER: + { + auto* spinBox = dc.findChild(config->name); + config_set_int(device_context.name, const_cast(config->name), spinBox->value()); + break; + } + } + config++; + } + } +} + +QString DeviceConfig::DeviceName(const _device_* device, const char *internalName, int bus) { + if (QStringLiteral("none") == internalName) { + return "None"; + } else if (QStringLiteral("internal") == internalName) { + return "Internal"; + } else if (device == nullptr) { + return QString(); + } else { + char temp[512]; + device_get_name(device, bus, temp); + return temp; + } +} diff --git a/src/qt/qt_deviceconfig.hpp b/src/qt/qt_deviceconfig.hpp new file mode 100644 index 000000000..3090c96a7 --- /dev/null +++ b/src/qt/qt_deviceconfig.hpp @@ -0,0 +1,28 @@ +#ifndef QT_DEVICECONFIG_HPP +#define QT_DEVICECONFIG_HPP + +#include + +extern "C" { +struct _device_; +} + +namespace Ui { +class DeviceConfig; +} + +class DeviceConfig : public QDialog +{ + Q_OBJECT + +public: + explicit DeviceConfig(QWidget *parent = nullptr); + ~DeviceConfig(); + + static void ConfigureDevice(const _device_* device); + static QString DeviceName(const _device_* device, const char* internalName, int bus); +private: + Ui::DeviceConfig *ui; +}; + +#endif // QT_DEVICECONFIG_HPP diff --git a/src/qt/qt_deviceconfig.ui b/src/qt/qt_deviceconfig.ui new file mode 100644 index 000000000..0a7e7d974 --- /dev/null +++ b/src/qt/qt_deviceconfig.ui @@ -0,0 +1,74 @@ + + + DeviceConfig + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + + + + + Qt::Horizontal + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + DeviceConfig + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + DeviceConfig + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/qt/qt_filefield.cpp b/src/qt/qt_filefield.cpp new file mode 100644 index 000000000..39387fb05 --- /dev/null +++ b/src/qt/qt_filefield.cpp @@ -0,0 +1,34 @@ +#include "qt_filefield.hpp" +#include "ui_qt_filefield.h" + +#include + +FileField::FileField(QWidget *parent) : + QWidget(parent), + ui(new Ui::FileField) +{ + ui->setupUi(this); +} + +FileField::~FileField() +{ + delete ui; +} + +void FileField::setFileName(const QString &fileName) { + fileName_ = fileName; + ui->label->setText(fileName); +} + +void FileField::on_pushButton_clicked() { + QString fileName; + if (createFile_) { + fileName = QFileDialog::getSaveFileName(this, "Create..."); + } else { + fileName = QFileDialog::getOpenFileName(this, "Open..."); + } + + fileName_ = fileName; + ui->label->setText(fileName); + emit fileSelected(fileName); +} diff --git a/src/qt/qt_filefield.hpp b/src/qt/qt_filefield.hpp new file mode 100644 index 000000000..24e3870a3 --- /dev/null +++ b/src/qt/qt_filefield.hpp @@ -0,0 +1,35 @@ +#ifndef QT_FILEFIELD_HPP +#define QT_FILEFIELD_HPP + +#include + +namespace Ui { +class FileField; +} + +class FileField : public QWidget +{ + Q_OBJECT + +public: + explicit FileField(QWidget *parent = nullptr); + ~FileField(); + + QString fileName() const { return fileName_; } + void setFileName(const QString& fileName); + + void setCreateFile(bool createFile) { createFile_ = createFile; } + +signals: + void fileSelected(const QString& fileName); + +private slots: + void on_pushButton_clicked(); + +private: + Ui::FileField *ui; + QString fileName_; + bool createFile_ = false; +}; + +#endif // QT_FILEFIELD_HPP diff --git a/src/qt/qt_filefield.ui b/src/qt/qt_filefield.ui new file mode 100644 index 000000000..b595378e1 --- /dev/null +++ b/src/qt/qt_filefield.ui @@ -0,0 +1,47 @@ + + + FileField + + + + 0 + 0 + 400 + 300 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + Browse + + + + + + + + diff --git a/src/qt/qt_harddiskdialog.cpp b/src/qt/qt_harddiskdialog.cpp new file mode 100644 index 000000000..659c27ea4 --- /dev/null +++ b/src/qt/qt_harddiskdialog.cpp @@ -0,0 +1,706 @@ +#include "qt_harddiskdialog.hpp" +#include "ui_qt_harddiskdialog.h" + +extern "C" { +#include <86box/86box.h> +#include <86box/hdd.h> +#include "../disk/minivhd/minivhd.h" +#include "../disk/minivhd/minivhd_util.h" +} + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "qt_harddrive_common.hpp" +#include "qt_models_common.hpp" + +HarddiskDialog::HarddiskDialog(bool existing, QWidget *parent) : + QDialog(parent), + ui(new Ui::HarddiskDialog) +{ + ui->setupUi(this); + + if (existing) { + setWindowTitle("Add Existing Hard Disk"); + ui->lineEditCylinders->setEnabled(false); + ui->lineEditHeads->setEnabled(false); + ui->lineEditSectors->setEnabled(false); + ui->lineEditSize->setEnabled(false); + ui->comboBoxType->setEnabled(false); + + ui->comboBoxFormat->hide(); + ui->labelFormat->hide(); + + connect(ui->fileField, &FileField::fileSelected, this, &HarddiskDialog::onExistingFileSelected); + } else { + setWindowTitle("Add New Hard Disk"); + ui->fileField->setCreateFile(true); + connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &HarddiskDialog::onCreateNewFile); + } + + auto* model = ui->comboBoxFormat->model(); + model->insertRows(0, 6); + model->setData(model->index(0, 0), "Raw image (.img)"); + model->setData(model->index(1, 0), "HDI image (.hdi)"); + model->setData(model->index(2, 0), "HDX image (.hdx)"); + model->setData(model->index(3, 0), "Fixed-size VHD (.vhd)"); + model->setData(model->index(4, 0), "Dynamic-size VHD (.vhd)"); + model->setData(model->index(5, 0), "Differencing VHD (.vhd)"); + + model = ui->comboBoxBlockSize->model(); + model->insertRows(0, 2); + model->setData(model->index(0, 0), "Large blocks (2 MiB)"); + model->setData(model->index(1, 0), "Small blocks (512 KiB)"); + + ui->comboBoxBlockSize->hide(); + ui->labelBlockSize->hide(); + + Harddrives::populateBuses(ui->comboBoxBus->model()); + ui->comboBoxBus->setCurrentIndex(3); + + model = ui->comboBoxType->model(); + for (int i = 0; i < 127; i++) { + uint64_t size = ((uint64_t) hdd_table[i][0]) * hdd_table[i][1] * hdd_table[i][2]; + uint64_t size_mb = size >> 11LL; + QString text = QString("%1 MiB (CHS: %2, %3, %4)").arg(size_mb).arg(hdd_table[i][0]).arg(hdd_table[i][1]).arg(hdd_table[i][2]); + Models::AddEntry(model, text, i); + } + Models::AddEntry(model, "Custom...", 127); + Models::AddEntry(model, "Custom (large)...", 128); + + ui->lineEditSize->setValidator(new QIntValidator()); + ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); + connect(ui->fileField, &FileField::fileSelected, this, [this] { + ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); + }); +} + +HarddiskDialog::~HarddiskDialog() +{ + delete ui; +} + +uint8_t HarddiskDialog::bus() const { + return static_cast(ui->comboBoxBus->currentData().toUInt()); +} + +uint8_t HarddiskDialog::channel() const { + return static_cast(ui->comboBoxChannel->currentData().toUInt()); +} + +QString HarddiskDialog::fileName() const { + return ui->fileField->fileName(); +} + +void HarddiskDialog::on_comboBoxFormat_currentIndexChanged(int index) { + bool enabled; + if (index == 5) { /* They switched to a diff VHD; disable the geometry fields. */ + enabled = false; + ui->lineEditCylinders->setText(QStringLiteral("(N/A)")); + ui->lineEditHeads->setText(QStringLiteral("(N/A)")); + ui->lineEditSectors->setText(QStringLiteral("(N/A)")); + ui->lineEditSize->setText(QStringLiteral("(N/A)")); + } else { + enabled = true; + ui->lineEditCylinders->setText(QString::number(cylinders_)); + ui->lineEditHeads->setText(QString::number(heads_)); + ui->lineEditSectors->setText(QString::number(sectors_)); + recalcSize(); + } + ui->lineEditCylinders->setEnabled(enabled); + ui->lineEditHeads->setEnabled(enabled); + ui->lineEditSectors->setEnabled(enabled); + ui->lineEditSize->setEnabled(enabled); + ui->comboBoxType->setEnabled(enabled); + + if (index < 4) { + ui->comboBoxBlockSize->hide(); + ui->labelBlockSize->hide(); + } else { + ui->comboBoxBlockSize->show(); + ui->labelBlockSize->show(); + } +} + +/* If the disk geometry requested in the 86Box GUI is not compatible with the internal VHD geometry, + * we adjust it to the next-largest size that is compatible. On average, this will be a difference + * of about 21 MB, and should only be necessary for VHDs larger than 31.5 GB, so should never be more + * than a tenth of a percent change in size. + */ +static void adjust_86box_geometry_for_vhd(MVHDGeom *_86box_geometry, MVHDGeom *vhd_geometry) +{ + if (_86box_geometry->cyl <= 65535) { + vhd_geometry->cyl = _86box_geometry->cyl; + vhd_geometry->heads = _86box_geometry->heads; + vhd_geometry->spt = _86box_geometry->spt; + return; + } + + int desired_sectors = _86box_geometry->cyl * _86box_geometry->heads * _86box_geometry->spt; + if (desired_sectors > 267321600) + desired_sectors = 267321600; + + int remainder = desired_sectors % 85680; /* 8560 is the LCM of 1008 (63*16) and 4080 (255*16) */ + if (remainder > 0) + desired_sectors += (85680 - remainder); + + _86box_geometry->cyl = desired_sectors / (16 * 63); + _86box_geometry->heads = 16; + _86box_geometry->spt = 63; + + vhd_geometry->cyl = desired_sectors / (16 * 255); + vhd_geometry->heads = 16; + vhd_geometry->spt = 255; +} + +static HarddiskDialog* callbackPtr = nullptr; +static MVHDGeom create_drive_vhd_fixed(const QString& fileName, HarddiskDialog* p, uint16_t cyl, uint8_t heads, uint8_t spt) { + MVHDGeom _86box_geometry = { .cyl = cyl, .heads = heads, .spt = spt }; + MVHDGeom vhd_geometry; + adjust_86box_geometry_for_vhd(&_86box_geometry, &vhd_geometry); + + int vhd_error = 0; + QByteArray filenameBytes = fileName.toUtf8(); + callbackPtr = p; + MVHDMeta *vhd = mvhd_create_fixed(filenameBytes.data(), vhd_geometry, &vhd_error, [](uint32_t current_sector, uint32_t total_sectors) { + callbackPtr->fileProgress((current_sector * 100) / total_sectors); + }); + callbackPtr = nullptr; + + if (vhd == NULL) { + _86box_geometry.cyl = 0; + _86box_geometry.heads = 0; + _86box_geometry.spt = 0; + } else { + mvhd_close(vhd); + } + + return _86box_geometry; +} + +static MVHDGeom create_drive_vhd_dynamic(const QString& fileName, uint16_t cyl, uint8_t heads, uint8_t spt, int blocksize) { + MVHDGeom _86box_geometry = { .cyl = cyl, .heads = heads, .spt = spt }; + MVHDGeom vhd_geometry; + adjust_86box_geometry_for_vhd(&_86box_geometry, &vhd_geometry); + int vhd_error = 0; + QByteArray filenameBytes = fileName.toUtf8(); + MVHDCreationOptions options; + options.block_size_in_sectors = blocksize; + options.path = filenameBytes.data(); + options.size_in_bytes = 0; + options.geometry = vhd_geometry; + options.type = MVHD_TYPE_DYNAMIC; + + MVHDMeta *vhd = mvhd_create_ex(options, &vhd_error); + if (vhd == NULL) { + _86box_geometry.cyl = 0; + _86box_geometry.heads = 0; + _86box_geometry.spt = 0; + } else { + mvhd_close(vhd); + } + + return _86box_geometry; +} + +static MVHDGeom create_drive_vhd_diff(const QString& fileName, const QString& parentFileName, int blocksize) { + int vhd_error = 0; + QByteArray filenameBytes = fileName.toUtf8(); + QByteArray parentFilenameBytes = fileName.toUtf8(); + MVHDCreationOptions options; + options.block_size_in_sectors = blocksize; + options.path = filenameBytes.data(); + options.parent_path = parentFilenameBytes.data(); + options.type = MVHD_TYPE_DIFF; + + MVHDMeta *vhd = mvhd_create_ex(options, &vhd_error); + MVHDGeom vhd_geometry; + if (vhd == NULL) { + vhd_geometry.cyl = 0; + vhd_geometry.heads = 0; + vhd_geometry.spt = 0; + } else { + vhd_geometry = mvhd_get_geometry(vhd); + + if (vhd_geometry.spt > 63) { + vhd_geometry.cyl = mvhd_calc_size_sectors(&vhd_geometry) / (16 * 63); + vhd_geometry.heads = 16; + vhd_geometry.spt = 63; + } + + mvhd_close(vhd); + } + + return vhd_geometry; +} + +void HarddiskDialog::onCreateNewFile() { + qint64 size = ui->lineEditSize->text().toUInt() << 20U; + if (size > 0x1FFFFFFE00ll) { + QMessageBox::critical(this, "Disk image too large", "Disk images cannot be larger than 127 GiB"); + return; + } + + int img_format = ui->comboBoxFormat->currentIndex(); + uint32_t zero = 0; + uint32_t base = 0x1000; + uint32_t sector_size = 512; + + auto fileName = ui->fileField->fileName(); + QString expectedSuffix; + switch (img_format) { + case 1: + expectedSuffix = "hdi"; + break; + case 2: + expectedSuffix = "hdx"; + break; + case 3: + case 4: + case 5: + expectedSuffix = "vhd"; + break; + } + if (! expectedSuffix.isEmpty()) { + QFileInfo fileInfo(fileName); + if (fileInfo.suffix().compare(expectedSuffix, Qt::CaseInsensitive) != 0) { + fileName = QString("%1.%2").arg(fileName, expectedSuffix); + ui->fileField->setFileName(fileName); + } + } + + QFile file(fileName); + if (! file.open(QIODevice::WriteOnly)) { + QMessageBox::critical(this, "Unable to write file", "Make sure the file is being saved to a writable directory"); + return; + } + + if (img_format == 1) { /* HDI file */ + QDataStream stream(&file); + stream.setByteOrder(QDataStream::LittleEndian); + if (size >= 0x100000000ll) { + QMessageBox::critical(this, "Disk image too large", "HDI disk images cannot be larger than 4 GiB"); + return; + } + uint32_t s = static_cast(size); + stream << zero; /* 00000000: Zero/unknown */ + stream << zero; /* 00000004: Zero/unknown */ + stream << base; /* 00000008: Offset at which data starts */ + stream << s; /* 0000000C: Full size of the data (32-bit) */ + stream << sector_size; /* 00000010: Sector size in bytes */ + stream << sectors_; /* 00000014: Sectors per cylinder */ + stream << heads_; /* 00000018: Heads per cylinder */ + stream << cylinders_; /* 0000001C: Cylinders */ + + for (int i = 0; i < 0x3f8; i++) { + stream << zero; + } + } else if (img_format == 2) { /* HDX file */ + QDataStream stream(&file); + stream.setByteOrder(QDataStream::LittleEndian); + quint64 signature = 0xD778A82044445459; + stream << signature; /* 00000000: Signature */ + stream << size; /* 00000008: Full size of the data (64-bit) */ + stream << sector_size; /* 00000010: Sector size in bytes */ + stream << sectors_; /* 00000014: Sectors per cylinder */ + stream << heads_; /* 00000018: Heads per cylinder */ + stream << cylinders_; /* 0000001C: Cylinders */ + stream << zero; /* 00000020: [Translation] Sectors per cylinder */ + stream << zero; /* 00000004: [Translation] Heads per cylinder */ + } else if (img_format >= 3) { /* VHD file */ + file.close(); + + MVHDGeom _86box_geometry; + int block_size = ui->comboBoxBlockSize->currentIndex() == 0 ? MVHD_BLOCK_LARGE : MVHD_BLOCK_SMALL; + switch (img_format) { + case 3: + { + QProgressDialog progress("Creating disk image", QString(), 0, 100, this); + connect(this, &HarddiskDialog::fileProgress, &progress, &QProgressDialog::setValue); + std::thread writer([&_86box_geometry, fileName, this] { + _86box_geometry = create_drive_vhd_fixed(fileName, this, cylinders_, heads_, sectors_); + }); + progress.exec(); + writer.join(); + } + break; + case 4: + _86box_geometry = create_drive_vhd_dynamic(fileName, cylinders_, heads_, sectors_, block_size); + break; + case 5: + QString vhdParent = QFileDialog::getOpenFileName(this, "Select the parent VHD", QString(), "VHD files (*.vhd);;All files (*.*)"); + if (vhdParent.isEmpty()) { + return; + } + _86box_geometry = create_drive_vhd_diff(fileName, vhdParent, block_size); + break; + } + + if (img_format != 5) { + QMessageBox::information(this, "Disk image created", "Remember to partition and format the newly-created drive"); + } + + ui->lineEditCylinders->setText(QString::number(_86box_geometry.cyl)); + ui->lineEditHeads->setText(QString::number(_86box_geometry.heads)); + ui->lineEditSectors->setText(QString::number(_86box_geometry.spt)); + cylinders_ = _86box_geometry.cyl; + heads_ = _86box_geometry.heads; + sectors_ = _86box_geometry.spt; + + return; + } + + // formats 0, 1 and 2 + QProgressDialog progress("Creating disk image", QString(), 0, 100, this); + connect(this, &HarddiskDialog::fileProgress, &progress, &QProgressDialog::setValue); + std::thread writer([size, &file, this] { + QDataStream stream(&file); + stream.setByteOrder(QDataStream::LittleEndian); + + QByteArray buf(1048576, 0); + uint64_t mibBlocks = size >> 20; + uint64_t restBlock = size & 0xfffff; + + if (restBlock) { + stream << QByteArray::fromRawData(buf.data(), restBlock); + } + + if (mibBlocks) { + for (uint64_t i = 0; i < mibBlocks; ++i) { + stream << buf; + emit fileProgress(static_cast((i * 100) / mibBlocks)); + } + } + emit fileProgress(100); + }); + + progress.exec(); + writer.join(); + QMessageBox::information(this, "Disk image created", "Remember to partition and format the newly-created drive"); +} + +static void adjust_vhd_geometry_for_86box(MVHDGeom *vhd_geometry) { + if (vhd_geometry->spt <= 63) + return; + + int desired_sectors = vhd_geometry->cyl * vhd_geometry->heads * vhd_geometry->spt; + if (desired_sectors > 267321600) + desired_sectors = 267321600; + + int remainder = desired_sectors % 85680; /* 8560 is the LCM of 1008 (63*16) and 4080 (255*16) */ + if (remainder > 0) + desired_sectors -= remainder; + + vhd_geometry->cyl = desired_sectors / (16 * 63); + vhd_geometry->heads = 16; + vhd_geometry->spt = 63; +} + +void HarddiskDialog::recalcSelection() { + int selection = 127; + for (int i = 0; i < 127; i++) { + if ((cylinders_ == hdd_table[i][0]) && + (heads_ == hdd_table[i][1]) && + (sectors_ == hdd_table[i][2])) + selection = i; + } + if ((selection == 127) && (heads_ == 16) && (sectors_ == 63)) { + selection = 128; + } + ui->comboBoxType->setCurrentIndex(selection); +} + +void HarddiskDialog::onExistingFileSelected(const QString &fileName) { + // TODO : Over to non-existing file selected + /* + if (!(existing & 1)) { + f = _wfopen(wopenfilestring, L"rb"); + if (f != NULL) { + fclose(f); + if (settings_msgbox_ex(MBX_QUESTION_YN, (wchar_t *) IDS_4111, (wchar_t *) IDS_4118, (wchar_t *) IDS_4120, (wchar_t *) IDS_4121, NULL) != 0) / * yes * / + return FALSE; + } + } + + f = _wfopen(wopenfilestring, (existing & 1) ? L"rb" : L"wb"); + if (f == NULL) { + hdd_add_file_open_error: + fclose(f); + settings_msgbox_header(MBX_ERROR, (existing & 1) ? (wchar_t *) IDS_4114 : (wchar_t *) IDS_4115, (existing & 1) ? (wchar_t *) IDS_4107 : (wchar_t *) IDS_4108); + return TRUE; + } + */ + + uint64_t size = 0; + uint32_t sector_size = 0; + uint32_t sectors = 0; + uint32_t heads = 0; + uint32_t cylinders = 0; + int vhd_error = 0; + + QFile file(fileName); + if (! file.open(QIODevice::ReadOnly)) { + QMessageBox::critical(this, "Unable to read file", "Make sure the file exists and is readable"); + return; + } + QByteArray fileNameUtf8 = fileName.toUtf8(); + + QFileInfo fi(file); + if (image_is_hdi(fileNameUtf8.data()) || image_is_hdx(fileNameUtf8.data(), 1)) { + file.seek(0x10); + QDataStream stream(&file); + stream.setByteOrder(QDataStream::LittleEndian); + stream >> sector_size; + if (sector_size != 512) { + QMessageBox::critical(this, "Unsupported disk image", "HDI or HDX images with a sector size other than 512 are not supported"); + return; + } + + sectors = heads = cylinders = 0; + stream >> sectors; + stream >> heads; + stream >> cylinders; + } else if (image_is_vhd(fileNameUtf8.data(), 1)) { + MVHDMeta* vhd = mvhd_open(fileNameUtf8.data(), 0, &vhd_error); + if (vhd == nullptr) { + QMessageBox::critical(this, "Unable to read file", "Make sure the file exists and is readable"); + return; + } else if (vhd_error == MVHD_ERR_TIMESTAMP) { + QMessageBox::StandardButton btn = QMessageBox::warning(this, "Parent and child disk timestamps do not match", "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?", QMessageBox::Yes | QMessageBox::No); + if (btn == QMessageBox::Yes) { + int ts_res = mvhd_diff_update_par_timestamp(vhd, &vhd_error); + if (ts_res != 0) { + QMessageBox::critical(this, "Error", "Could not fix VHD timestamp"); + mvhd_close(vhd); + return; + } + } else { + mvhd_close(vhd); + return; + } + } + + MVHDGeom vhd_geom = mvhd_get_geometry(vhd); + adjust_vhd_geometry_for_86box(&vhd_geom); + cylinders = vhd_geom.cyl; + heads = vhd_geom.heads; + sectors = vhd_geom.spt; + size = static_cast(cylinders * heads * sectors * 512); + mvhd_close(vhd); + } else { + size = file.size(); + if (((size % 17) == 0) && (size <= 142606336)) { + sectors = 17; + if (size <= 26738688) + heads = 4; + else if (((size % 3072) == 0) && (size <= 53477376)) + heads = 6; + else { + int i; + for (i = 5; i < 16; i++) { + if (((size % (i << 9)) == 0) && (size <= ((i * 17) << 19))) + break; + if (i == 5) + i++; + } + heads = i; + } + } else { + sectors = 63; + heads = 16; + } + + cylinders = ((size >> 9) / heads) / sectors; + } + + if ((sectors > max_sectors) || (heads > max_heads) || (cylinders > max_cylinders)) { + QMessageBox::critical(this, "Unable to read file", "Make sure the file exists and is readable"); + return; + } + + heads_ = heads; + sectors_ = sectors; + cylinders_ = cylinders; + ui->lineEditCylinders->setText(QString::number(cylinders)); + ui->lineEditHeads->setText(QString::number(heads)); + ui->lineEditSectors->setText(QString::number(sectors)); + recalcSize(); + recalcSelection(); + + ui->lineEditCylinders->setEnabled(true); + ui->lineEditHeads->setEnabled(true); + ui->lineEditSectors->setEnabled(true); + ui->lineEditSize->setEnabled(true); + ui->comboBoxType->setEnabled(true); +} + +void HarddiskDialog::recalcSize() { + uint64_t size = (static_cast(cylinders_) * static_cast(heads_) * static_cast(sectors_)) << 9; + ui->lineEditSize->setText(QString::number(size >> 20)); +} + +bool HarddiskDialog::checkAndAdjustSectors() { + if (sectors_ > max_sectors) { + sectors_ = max_sectors; + ui->lineEditSectors->setText(QString::number(max_sectors)); + recalcSize(); + recalcSelection(); + return false; + } + return true; +} + +bool HarddiskDialog::checkAndAdjustHeads() { + if (heads_ > max_heads) { + heads_ = max_heads; + ui->lineEditHeads->setText(QString::number(max_heads)); + recalcSize(); + recalcSelection(); + return false; + } + return true; +} + +bool HarddiskDialog::checkAndAdjustCylinders() { + if (cylinders_ > max_cylinders) { + cylinders_ = max_cylinders; + ui->lineEditCylinders->setText(QString::number(max_cylinders)); + recalcSize(); + recalcSelection(); + return false; + } + return true; +} + + +void HarddiskDialog::on_comboBoxBus_currentIndexChanged(int index) { + if (index < 0) { + return; + } + + switch (ui->comboBoxBus->currentData().toInt()) { + case HDD_BUS_DISABLED: + default: + max_sectors = max_heads = max_cylinders = 0; + break; + case HDD_BUS_MFM: + max_sectors = 26; /* 17 for MFM, 26 for RLL. */ + max_heads = 15; + max_cylinders = 2047; + break; + case HDD_BUS_XTA: + max_sectors = 63; + max_heads = 16; + max_cylinders = 1023; + break; + case HDD_BUS_ESDI: + max_sectors = 99; /* ESDI drives usually had 32 to 43 sectors per track. */ + max_heads = 16; + max_cylinders = 266305; + break; + case HDD_BUS_IDE: + max_sectors = 63; + max_heads = 255; + max_cylinders = 266305; + break; + case HDD_BUS_ATAPI: + case HDD_BUS_SCSI: + max_sectors = 99; + max_heads = 255; + max_cylinders = 266305; + break; + } + + checkAndAdjustCylinders(); + checkAndAdjustHeads(); + checkAndAdjustSectors(); + + if (ui->lineEditCylinders->validator() != nullptr) { + delete ui->lineEditCylinders->validator(); + } + if (ui->lineEditHeads->validator() != nullptr) { + delete ui->lineEditHeads->validator(); + } + if (ui->lineEditSectors->validator() != nullptr) { + delete ui->lineEditSectors->validator(); + } + + ui->lineEditCylinders->setValidator(new QIntValidator(1, max_cylinders, this)); + ui->lineEditHeads->setValidator(new QIntValidator(1, max_heads, this)); + ui->lineEditSectors->setValidator(new QIntValidator(1, max_sectors, this)); + + Harddrives::populateBusChannels(ui->comboBoxChannel->model(), ui->comboBoxBus->currentData().toInt()); +} + +void HarddiskDialog::on_lineEditSize_textEdited(const QString &text) { + uint32_t size = text.toUInt(); + /* This is needed to ensure VHD standard compliance. */ + hdd_image_calc_chs(&cylinders_, &heads_, §ors_, size); + ui->lineEditCylinders->setText(QString::number(cylinders_)); + ui->lineEditHeads->setText(QString::number(heads_)); + ui->lineEditSectors->setText(QString::number(sectors_)); + recalcSelection(); + + checkAndAdjustCylinders(); + checkAndAdjustHeads(); + checkAndAdjustSectors(); +} + +void HarddiskDialog::on_lineEditCylinders_textEdited(const QString &text) { + cylinders_ = text.toUInt(); + if (checkAndAdjustCylinders()) { + recalcSize(); + recalcSelection(); + } +} + +void HarddiskDialog::on_lineEditHeads_textEdited(const QString &text) { + heads_ = text.toUInt(); + if (checkAndAdjustHeads()) { + recalcSize(); + recalcSelection(); + } +} + +void HarddiskDialog::on_lineEditSectors_textEdited(const QString &text) { + sectors_ = text.toUInt(); + if (checkAndAdjustSectors()) { + recalcSize(); + recalcSelection(); + } +} + +void HarddiskDialog::on_comboBoxType_currentIndexChanged(int index) { + if (index < 0) { + return; + } + + if ((index != 127) && (index != 128)) { + cylinders_ = hdd_table[index][0]; + heads_ = hdd_table[index][1]; + sectors_ = hdd_table[index][2]; + ui->lineEditCylinders->setText(QString::number(cylinders_)); + ui->lineEditHeads->setText(QString::number(heads_)); + ui->lineEditSectors->setText(QString::number(sectors_)); + recalcSize(); + } else if (index == 128) { + heads_ = 16; + sectors_ = 63; + ui->lineEditHeads->setText(QString::number(heads_)); + ui->lineEditSectors->setText(QString::number(sectors_)); + recalcSize(); + } + + checkAndAdjustCylinders(); + checkAndAdjustHeads(); + checkAndAdjustSectors(); +} diff --git a/src/qt/qt_harddiskdialog.hpp b/src/qt/qt_harddiskdialog.hpp new file mode 100644 index 000000000..e6ced50fb --- /dev/null +++ b/src/qt/qt_harddiskdialog.hpp @@ -0,0 +1,57 @@ +#ifndef QT_HARDDISKDIALOG_HPP +#define QT_HARDDISKDIALOG_HPP + +#include + +namespace Ui { +class HarddiskDialog; +} + +class HarddiskDialog : public QDialog +{ + Q_OBJECT + +public: + explicit HarddiskDialog(bool existing, QWidget *parent = nullptr); + ~HarddiskDialog(); + + uint8_t bus() const; + uint8_t channel() const; + QString fileName() const; + uint32_t cylinders() const { return cylinders_; } + uint32_t heads() const { return heads_; } + uint32_t sectors() const { return sectors_; } + +signals: + void fileProgress(int i); + +private slots: + void on_comboBoxType_currentIndexChanged(int index); + void on_lineEditSectors_textEdited(const QString &arg1); + void on_lineEditHeads_textEdited(const QString &arg1); + void on_lineEditCylinders_textEdited(const QString &arg1); + void on_lineEditSize_textEdited(const QString &arg1); + void on_comboBoxBus_currentIndexChanged(int index); + void on_comboBoxFormat_currentIndexChanged(int index); + void onCreateNewFile(); + void onExistingFileSelected(const QString& fileName); + +private: + Ui::HarddiskDialog *ui; + + uint32_t cylinders_; + uint32_t heads_; + uint32_t sectors_; + + uint32_t max_sectors = 0; + uint32_t max_heads = 0; + uint32_t max_cylinders = 0; + + bool checkAndAdjustCylinders(); + bool checkAndAdjustHeads(); + bool checkAndAdjustSectors(); + void recalcSize(); + void recalcSelection(); +}; + +#endif // QT_HARDDISKDIALOG_HPP diff --git a/src/qt/qt_harddiskdialog.ui b/src/qt/qt_harddiskdialog.ui new file mode 100644 index 000000000..01cbb43ca --- /dev/null +++ b/src/qt/qt_harddiskdialog.ui @@ -0,0 +1,230 @@ + + + HarddiskDialog + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + + 0 + + + + + File name + + + + + + + + + + + + + + Cylinders + + + + + + + Sectors + + + + + + + + + + + + + Size (MiB) + + + + + + + Heads + + + + + + + 32767 + + + + + + + Type + + + + + + + 32767 + + + + + + + + + + + + + + Bus + + + + + + + + + + Channel + + + + + + + + + + + + + + Format + + + + + + + + + + + + 5 + + + + + Block Size + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + FileField + QWidget +
qt_filefield.hpp
+ 1 +
+
+ + lineEditCylinders + lineEditHeads + lineEditSectors + lineEditSize + comboBoxType + comboBoxBus + comboBoxChannel + comboBoxFormat + comboBoxBlockSize + + + + + buttonBox + accepted() + HarddiskDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + HarddiskDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + +
diff --git a/src/qt/qt_harddrive_common.cpp b/src/qt/qt_harddrive_common.cpp new file mode 100644 index 000000000..8c6b478f3 --- /dev/null +++ b/src/qt/qt_harddrive_common.cpp @@ -0,0 +1,101 @@ +#include "qt_harddrive_common.hpp" + +#include + +extern "C" { +#include <86box/hdd.h> +} + +#include + +void Harddrives::populateBuses(QAbstractItemModel *model) { + model->removeRows(0, model->rowCount()); + model->insertRows(0, 6); + model->setData(model->index(0, 0), "MFM/RLL"); + model->setData(model->index(1, 0), "XT IDE"); + model->setData(model->index(2, 0), "ESDI"); + model->setData(model->index(3, 0), "IDE"); + model->setData(model->index(4, 0), "ATAPI"); + model->setData(model->index(5, 0), "SCSI"); + + model->setData(model->index(0, 0), HDD_BUS_MFM, Qt::UserRole); + model->setData(model->index(1, 0), HDD_BUS_XTA, Qt::UserRole); + model->setData(model->index(2, 0), HDD_BUS_ESDI, Qt::UserRole); + model->setData(model->index(3, 0), HDD_BUS_IDE, Qt::UserRole); + model->setData(model->index(4, 0), HDD_BUS_ATAPI, Qt::UserRole); + model->setData(model->index(5, 0), HDD_BUS_SCSI, Qt::UserRole); +} + +void Harddrives::populateRemovableBuses(QAbstractItemModel *model) { + model->removeRows(0, model->rowCount()); + model->insertRows(0, 3); + model->setData(model->index(0, 0), "Disabled"); + model->setData(model->index(1, 0), "ATAPI"); + model->setData(model->index(2, 0), "SCSI"); + + model->setData(model->index(0, 0), HDD_BUS_DISABLED, Qt::UserRole); + model->setData(model->index(1, 0), HDD_BUS_ATAPI, Qt::UserRole); + model->setData(model->index(2, 0), HDD_BUS_SCSI, Qt::UserRole); +} + +void Harddrives::populateBusChannels(QAbstractItemModel *model, int bus) { + model->removeRows(0, model->rowCount()); + + int busRows = 0; + int shifter = 1; + int orer = 1; + int subChannelWidth = 1; + switch (bus) { + case HDD_BUS_MFM: + case HDD_BUS_XTA: + case HDD_BUS_ESDI: + busRows = 2; + break; + case HDD_BUS_IDE: + case HDD_BUS_ATAPI: + busRows = 8; + break; + case HDD_BUS_SCSI: + shifter = 4; + orer = 15; + busRows = 64; + subChannelWidth = 2; + break; + } + + model->insertRows(0, busRows); + for (int i = 0; i < busRows; ++i) { + auto idx = model->index(i, 0); + model->setData(idx, QString("%1:%2").arg(i >> shifter).arg(i & orer, subChannelWidth, 10, QChar('0'))); + model->setData(idx, ((i >> shifter) << shifter) | (i & orer), Qt::UserRole); + } +} + +QString Harddrives::BusChannelName(uint8_t bus, uint8_t channel) { + QString busName; + switch(bus) { + case HDD_BUS_DISABLED: + busName = QString("Disabled"); + break; + case HDD_BUS_MFM: + busName = QString("MFM/RLL (%1:%2)").arg(channel >> 1).arg(channel & 1); + break; + case HDD_BUS_XTA: + busName = QString("XT IDE (%1:%2)").arg(channel >> 1).arg(channel & 1); + break; + case HDD_BUS_ESDI: + busName = QString("ESDI (%1:%2)").arg(channel >> 1).arg(channel & 1); + break; + case HDD_BUS_IDE: + busName = QString("IDE (%1:%2)").arg(channel >> 1).arg(channel & 1); + break; + case HDD_BUS_ATAPI: + busName = QString("ATAPI (%1:%2)").arg(channel >> 1).arg(channel & 1); + break; + case HDD_BUS_SCSI: + busName = QString("SCSI (%1:%2)").arg(channel >> 4).arg(channel & 15, 2, 10, QChar('0')); + break; + } + + return busName; +} diff --git a/src/qt/qt_harddrive_common.hpp b/src/qt/qt_harddrive_common.hpp new file mode 100644 index 000000000..0e0164d54 --- /dev/null +++ b/src/qt/qt_harddrive_common.hpp @@ -0,0 +1,13 @@ +#pragma once + +#include + +class QString; +class QAbstractItemModel; + +namespace Harddrives { + void populateBuses(QAbstractItemModel* model); + void populateRemovableBuses(QAbstractItemModel* model); + void populateBusChannels(QAbstractItemModel* model, int bus); + QString BusChannelName(uint8_t bus, uint8_t channel); +}; diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp new file mode 100644 index 000000000..4d6062917 --- /dev/null +++ b/src/qt/qt_main.cpp @@ -0,0 +1,104 @@ +#include +#include +#include +#include +#include + +#include <86box/86box.h> +#include <86box/plat.h> +#include <86box/ui.h> +#include <86box/video.h> + +#include + +#include "qt_mainwindow.hpp" +#include "qt_sdl.h" + + +// Void Cast +#define VC(x) const_cast(x) + +extern QElapsedTimer elapsed_timer; +extern int nvr_dosave; +extern MainWindow* main_window; + +extern "C" { + extern int qt_nvr_save(void); +} + +void +main_thread_fn() +{ + uint64_t old_time, new_time; + int drawits, frames; + + QThread::currentThread()->setPriority(QThread::HighestPriority); + framecountx = 0; + //title_update = 1; + old_time = elapsed_timer.elapsed(); + drawits = frames = 0; + while (!is_quit && cpu_thread_run) { + /* See if it is time to run a frame of code. */ + new_time = elapsed_timer.elapsed(); + drawits += (new_time - old_time); + old_time = new_time; + if (drawits > 0 && !dopause) { + /* Yes, so do one frame now. */ + drawits -= 10; + if (drawits > 50) + drawits = 0; + + /* Run a block of code. */ + pc_run(); + + /* Every 200 frames we save the machine status. */ + if (++frames >= 200 && nvr_dosave) { + qt_nvr_save(); + nvr_dosave = 0; + frames = 0; + } + } else /* Just so we dont overload the host OS. */ + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + + /* If needed, handle a screen resize. */ + if (doresize && !video_fullscreen && !is_quit) { + if (vid_resize & 2) + plat_resize(fixed_size_x, fixed_size_y); + else + plat_resize(scrnsz_x, scrnsz_y); + doresize = 0; + } + } + + is_quit = 1; +} + +int main(int argc, char* argv[]) { + QApplication app(argc, argv); + elapsed_timer.start(); + + pc_init(argc, argv); + if (! pc_init_modules()) { + ui_msgbox_header(MBX_FATAL, VC(L"No ROMs found."), VC(L"86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory.")); + return 6; + } + + main_window = new MainWindow(); + main_window->show(); + + pc_reset_hard_init(); + + /* Set the PAUSE mode depending on the renderer. */ + // plat_pause(0); + + /* Initialize the rendering window, or fullscreen. */ + auto main_thread = std::thread([] { + main_thread_fn(); + }); + + auto ret = app.exec(); + cpu_thread_run = 0; + main_thread.join(); + + return ret; +} diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp new file mode 100644 index 000000000..d9ae9500d --- /dev/null +++ b/src/qt/qt_mainwindow.cpp @@ -0,0 +1,299 @@ +#include "qt_mainwindow.hpp" +#include "ui_qt_mainwindow.h" + +extern "C" { +#include <86box/86box.h> +#include <86box/keyboard.h> +#include <86box/mouse.h> +#include <86box/config.h> +#include <86box/plat.h> + +#include "qt_sdl.h" +}; + +#include +#include +#include +#include + +#include "qt_settings.hpp" + +CentralWidget::CentralWidget(QWidget *parent) : QWidget(parent) {} +CentralWidget::~CentralWidget() = default; + +MainWindowLabel::MainWindowLabel(QWidget *parent) : QLabel(parent) { + setMouseTracking(true); +} +MainWindowLabel::~MainWindowLabel() = default; +void MainWindowLabel::mouseMoveEvent(QMouseEvent *event) { + pos_ = event->pos(); +} +void MainWindowLabel::mousePressEvent(QMouseEvent *event) { + buttons_ = event->buttons(); +} +void MainWindowLabel::mouseReleaseEvent(QMouseEvent *event) { + buttons_ = event->buttons(); +} + +MainWindow::MainWindow(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::MainWindow) +{ + Q_INIT_RESOURCE(qt_resources); + + ui->setupUi(this); + + connect(this, &MainWindow::pollMouse, this, [] { + sdl_mouse_poll(); + }); + + connect(this, &MainWindow::setMouseCapture, this, [](bool state) { + mouse_capture = state ? 1 : 0; + sdl_mouse_capture(mouse_capture); + }); + + connect(this, &MainWindow::setFullscreen, this, [](bool state) { + video_fullscreen = state ? 1 : 0; + sdl_set_fs(video_fullscreen); + }); + + connect(this, &MainWindow::resizeContents, this, [this](int w, int h) { + sdl_resize(w, h); + }); + + connect(ui->menubar, &QMenuBar::triggered, this, [] { + config_save(); + }); + + ui->actionKeyboard_requires_capture->setChecked(kbd_req_capture); + ui->actionRight_CTRL_is_left_ALT->setChecked(rctrl_is_lalt); + + sdl_inits(); + sdl_timer = new QTimer(this); + connect(sdl_timer, &QTimer::timeout, this, [] { + auto status = sdl_main(); + if (status == SdlMainQuit) { + QApplication::quit(); + } + }); + sdl_timer->start(5); +} + +MainWindow::~MainWindow() { + sdl_close(); + delete ui; +} + +void MainWindow::on_actionKeyboard_requires_capture_triggered() { + kbd_req_capture ^= 1; +} + +void MainWindow::on_actionRight_CTRL_is_left_ALT_triggered() { + rctrl_is_lalt ^= 1; +} + +void MainWindow::on_actionHard_Reset_triggered() { + pc_reset_hard(); +} + +void MainWindow::on_actionCtrl_Alt_Del_triggered() { + pc_send_cad(); +} + +void MainWindow::on_actionCtrl_Alt_Esc_triggered() { + pc_send_cae(); +} + +void MainWindow::on_actionPause_triggered() { + plat_pause(dopause ^ 1); +} + +void MainWindow::on_actionExit_triggered() { + close(); +} + +void MainWindow::on_actionSettings_triggered() { + Settings settings; + settings.exec(); + + switch (settings.result()) { + case QDialog::Accepted: + /* + pc_reset_hard_close(); + settings.save(); + config_changed = 2; + pc_reset_hard_init(); + */ + settings.save(); + config_changed = 2; + pc_reset_hard(); + + break; + case QDialog::Rejected: + break; + } +} + +static const int keycode_entries = 136; +// xmodmap -pk +static const uint16_t xfree86_keycode_table[keycode_entries] = { + /* 0 */ 0, + /* 1 */ 0, + /* 2 */ 0, + /* 3 */ 0, + /* 4 */ 0, + /* 5 */ 0, + /* 6 */ 0, + /* 7 */ 0, + /* 8 */ 0, + /* 9 */ 0x01, // Esc + /* 10 */ 0x02, // 1 + /* 11 */ 0x03, // 2 + /* 12 */ 0x04, // 3 + /* 13 */ 0x05, // 4 + /* 14 */ 0x06, // 5 + /* 15 */ 0x07, // 6 + /* 16 */ 0x08, // 7 + /* 17 */ 0x09, // 8 + /* 18 */ 0x0a, // 9 + /* 19 */ 0x0b, // 0 + /* 20 */ 0x0c, // - + /* 21 */ 0x0d, // = + /* 22 */ 0x0e, // BackSpace + /* 23 */ 0x0f, // Tab + /* 24 */ 0x10, // Q + /* 25 */ 0x11, // W + /* 26 */ 0x12, // E + /* 27 */ 0x13, // R + /* 28 */ 0x14, // T + /* 29 */ 0x15, // Y + /* 30 */ 0x16, // U + /* 31 */ 0x17, // I + /* 32 */ 0x18, // O + /* 33 */ 0x19, // P + /* 34 */ 0x1a, // [ + /* 35 */ 0x1b, // ] + /* 36 */ 0x1c, // Return + /* 37 */ 0x1d, // LeftControl + /* 38 */ 0x1e, // A + /* 39 */ 0x1f, // S + /* 40 */ 0x20, // D + /* 41 */ 0x21, // F + /* 42 */ 0x22, // G + /* 43 */ 0x23, // H + /* 44 */ 0x24, // J + /* 45 */ 0x25, // K + /* 46 */ 0x26, // L + /* 47 */ 0x27, // ; + /* 48 */ 0x28, // ' + /* 49 */ 0x29, // ` (???) + /* 50 */ 0x2a, // LeftShift + /* 51 */ 0x2b, // BackSlash + /* 52 */ 0x2c, // Z + /* 53 */ 0x2d, // X + /* 54 */ 0x2e, // C + /* 55 */ 0x2f, // V + /* 56 */ 0x30, // B + /* 57 */ 0x31, // N + /* 58 */ 0x32, // M + /* 59 */ 0x33, // , + /* 60 */ 0x34, // . + /* 61 */ 0x35, // - + /* 62 */ 0x36, // RightShift + /* 63 */ 0x37, // KeyPad Multiply + /* 64 */ 0x38, // LeftAlt + /* 65 */ 0x39, // Space + /* 66 */ 0x3a, // CapsLock + /* 67 */ 0x3b, // F01 + /* 68 */ 0x3c, // F02 + /* 69 */ 0x3d, // F03 + /* 70 */ 0x3e, // F04 + /* 71 */ 0x3f, // F05 + /* 72 */ 0x40, // F06 + /* 73 */ 0x41, // F07 + /* 74 */ 0x42, // F08 + /* 75 */ 0x43, // F09 + /* 76 */ 0x44, // F10 + /* 77 */ 0x45, // NumLock + /* 78 */ 0x46, // ScrollLock + /* 79 */ 0x47, // KeyPad7 + /* 80 */ 0x48, // KeyPad8 + /* 81 */ 0x49, // KeyPad9 + /* 82 */ 0x4a, // KeyPad Minus + /* 83 */ 0x4b, // KeyPad4 + /* 84 */ 0x4c, // KeyPad5 + /* 85 */ 0x4d, // KeyPad6 + /* 86 */ 0x4e, // KeyPad Plus + /* 87 */ 0x4f, // KeyPad1 + /* 88 */ 0x50, // KeyPad2 + /* 89 */ 0x51, // KeyPad3 + /* 90 */ 0x52, // KeyPad0 + /* 91 */ 0x53, // KeyPad . + /* 92 */ 0, + /* 93 */ 0, + /* 94 */ 0x56, // Less/Great + /* 95 */ 0x57, // F11 + /* 96 */ 0x58, // F12 + /* 97 */ 0, + /* 98 */ 0, + /* 99 */ 0, + /* 100 */ 0, + /* 101 */ 0, + /* 102 */ 0, + /* 103 */ 0, + /* 104 */ 0x11c, // KeyPad Enter + /* 105 */ 0x11d, // RightControl + /* 106 */ 0x135, // KeyPad Divide + /* 107 */ 0x137, // PrintScreen / SysReq + /* 108 */ 0x138, // RightAlt + /* 109 */ 0, + /* 110 */ 0x147, // Home + /* 111 */ 0x148, // Up + /* 112 */ 0x149, // PageUp + /* 113 */ 0x14b, // Left + /* 114 */ 0x14d, // Right + /* 115 */ 0x14f, // End + /* 116 */ 0x150, // Down + /* 117 */ 0x151, // PageDown + /* 118 */ 0x152, // Insert + /* 119 */ 0x153, // Delete + /* 120 */ 0, + /* 121 */ 0, + /* 122 */ 0, + /* 123 */ 0, + /* 124 */ 0, + /* 125 */ 0, + /* 126 */ 0, + /* 127 */ 0, + /* 128 */ 0, + /* 129 */ 0, + /* 130 */ 0, + /* 131 */ 0, + /* 132 */ 0, + /* 133 */ 0x15b, // SuperLeft + /* 134 */ 0x15c, // SuperRight + /* 135 */ 0x15d, // Application +}; + +static void handle_keypress_event(int state, quint32 native_scancode) { + if (native_scancode > keycode_entries) { + return; + } + uint16_t translated_code = xfree86_keycode_table[native_scancode]; + if (translated_code == 0) { + return; + } + keyboard_input(state, translated_code); + + if (keyboard_isfsexit() > 0) { + plat_setfullscreen(0); + } + + if (keyboard_ismsexit() > 0) { + plat_mouse_capture(0); + } +} + +void MainWindow::on_actionFullscreen_triggered() { + setFullscreen(true); +} diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp new file mode 100644 index 000000000..25227d04b --- /dev/null +++ b/src/qt/qt_mainwindow.hpp @@ -0,0 +1,83 @@ +#ifndef QT_MAINWINDOW_HPP +#define QT_MAINWINDOW_HPP + +#include +#include + +namespace Ui { +class MainWindow; +} + +class MainWindowLabel : public QLabel +{ + Q_OBJECT +public: + explicit MainWindowLabel(QWidget *parent = nullptr); + ~MainWindowLabel(); + + const QPoint& pos() { return pos_; } + Qt::MouseButtons buttons() { return buttons_; } +protected: + void mouseMoveEvent(QMouseEvent *event) override; + void mousePressEvent(QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; +private: + QPoint pos_; + Qt::MouseButtons buttons_; +}; + +class CentralWidget : public QWidget +{ + Q_OBJECT +public: + explicit CentralWidget(QWidget *parent = nullptr); + ~CentralWidget(); + + void setSizeHint(QSize size) { size_ = size; } + QSize sizeHint() const override { return size_; } +private: + QSize size_; +}; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = nullptr); + ~MainWindow(); +signals: + void paint(const QImage& image); + void resizeContents(int w, int h); + void pollMouse(); + + void setFullscreen(bool state); + void setMouseCapture(bool state); + +private slots: + void on_actionFullscreen_triggered(); + +private slots: + void on_actionSettings_triggered(); + void on_actionExit_triggered(); + void on_actionPause_triggered(); + void on_actionCtrl_Alt_Del_triggered(); + void on_actionCtrl_Alt_Esc_triggered(); + void on_actionHard_Reset_triggered(); + void on_actionRight_CTRL_is_left_ALT_triggered(); + void on_actionKeyboard_requires_capture_triggered(); + +private: + struct DeltaPos { + int x = 0; + int y = 0; + int z = 0; + }; + Ui::MainWindow *ui; + DeltaPos mouseDelta; + QWindow* sdl_wrapped_window; + QWidget* sdl_wrapped_widget; + QTimer* sdl_timer; +}; + +#endif // QT_MAINWINDOW_HPP diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui new file mode 100644 index 000000000..9e77eee55 --- /dev/null +++ b/src/qt/qt_mainwindow.ui @@ -0,0 +1,143 @@ + + + MainWindow + + + + 0 + 0 + 724 + 274 + + + + 86Box + + + + + 0 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + 0 + 0 + 724 + 20 + + + + + Action + + + + + + + + + + + + + + + + Tools + + + + + + View + + + + + + + + + + + true + + + Keyboard requires capture + + + + + true + + + Right CTRL is left ALT + + + + + Hard Reset + + + + + Ctrl+Alt+Del + + + + + Ctrl+Alt+Esc + + + + + true + + + Pause + + + + + Exit + + + + + Settings + + + + + Fullscreen + + + Ctrl+Alt+PgUp + + + + + + diff --git a/src/qt/qt_midi.cpp b/src/qt/qt_midi.cpp new file mode 100644 index 000000000..0027e5b5a --- /dev/null +++ b/src/qt/qt_midi.cpp @@ -0,0 +1,32 @@ +#include + +extern "C" { + +void plat_midi_play_msg(uint8_t *msg) +{} + +void plat_midi_play_sysex(uint8_t *sysex, unsigned int len) +{} + +void plat_midi_input_init(void) +{} + +void plat_midi_input_close(void) +{} + +int plat_midi_write(uint8_t val) +{ return 0; } + +void plat_midi_init() +{} + +void plat_midi_close() +{} + +int plat_midi_get_num_devs() +{ return 0; } + +int plat_midi_in_get_num_devs(void) +{ return 0; } + +} diff --git a/src/qt/qt_models_common.cpp b/src/qt/qt_models_common.cpp new file mode 100644 index 000000000..892048605 --- /dev/null +++ b/src/qt/qt_models_common.cpp @@ -0,0 +1,15 @@ +#include "qt_models_common.hpp" + +#include + +int Models::AddEntry(QAbstractItemModel *model, const QString& displayRole, int userRole) +{ + int row = model->rowCount(); + model->insertRow(row); + auto idx = model->index(row, 0); + + model->setData(idx, displayRole, Qt::DisplayRole); + model->setData(idx, userRole, Qt::UserRole); + + return row; +} diff --git a/src/qt/qt_models_common.hpp b/src/qt/qt_models_common.hpp new file mode 100644 index 000000000..91cda3836 --- /dev/null +++ b/src/qt/qt_models_common.hpp @@ -0,0 +1,8 @@ +#pragma once + +class QString; +class QAbstractItemModel; +namespace Models +{ + int AddEntry(QAbstractItemModel* model, const QString& displayRole, int userRole); +}; diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp new file mode 100644 index 000000000..45366560c --- /dev/null +++ b/src/qt/qt_platform.cpp @@ -0,0 +1,382 @@ +#include + +#include +#include +#include + +#include + +#include +#include +#include +#include + +#include +#include + +#ifdef Q_OS_UNIX +#include +#endif + +// static QByteArray buf; +extern QElapsedTimer elapsed_timer; +QElapsedTimer elapsed_timer; +static std::mutex blitmx; + +class CharPointer { +public: + CharPointer(char* buf, int size) : b(buf), s(size) {} + CharPointer& operator=(const QByteArray &ba) { + if (s > 0) { + strncpy(b, ba.data(), s-1); + b[s] = 0; + } else { + // if we haven't been told the length of b, just assume enough + // because we didn't get it from emulator code + strcpy(b, ba.data()); + b[ba.size()] = 0; + } + return *this; + } +private: + char* b; + int s; +}; + +extern "C" { +#include <86box/86box.h> +#include <86box/device.h> +#include <86box/gameport.h> +#include <86box/plat_dynld.h> +#include <86box/config.h> +#include <86box/ui.h> + +#include "../cpu/cpu.h" +#include <86box/plat.h> + +volatile int cpu_thread_run = 1; +int mouse_capture = 0; +int fixed_size_x = 640; +int fixed_size_y = 480; +int rctrl_is_lalt = 0; +int update_icons = 0; +int kbd_req_capture = 0; +int hide_status_bar = 0; +uint32_t lang_id = 0x0409, lang_sys = 0x0409; // Multilangual UI variables, for now all set to LCID of en-US + +plat_joystick_t plat_joystick_state[MAX_PLAT_JOYSTICKS]; +joystick_t joystick_state[MAX_JOYSTICKS]; + +int stricmp(const char* s1, const char* s2) +{ + return QByteArray(s1).compare(s2, Qt::CaseInsensitive); +} + +int strnicmp(const char *s1, const char *s2, size_t n) +{ + QByteArray b1(s1, std::min(strlen(s1), n)); + QByteArray b2(s2, std::min(strlen(s2), n)); + return b1.compare(b2, Qt::CaseInsensitive); +} + +void +do_stop(void) +{ + QCoreApplication::quit(); +} + +void plat_get_exe_name(char *s, int size) +{ + CharPointer(s, size) = QCoreApplication::applicationFilePath().toUtf8(); +} + +uint32_t +plat_get_ticks(void) +{ + return elapsed_timer.elapsed(); +} + +uint64_t +plat_timer_read(void) +{ + return elapsed_timer.elapsed(); +} + +FILE * +plat_fopen(const char *path, const char *mode) +{ + /* + QString filepath(path); + if (filepath.isEmpty()) { + return nullptr; + } + + qWarning() << "plat_fopen" << filepath; + bool ok = false; + QFile file(filepath); + auto mode_len = strlen(mode); + for (size_t i = 0; i < mode_len; ++i) { + switch (mode[i]) { + case 'r': + ok = file.open(QIODevice::ReadOnly); + break; + case 'w': + ok = file.open(QIODevice::ReadWrite); + break; + case 'b': + case 't': + break; + default: + qWarning() << "Unhandled open mode" << mode[i]; + } + } + + if (ok) { + qDebug() << "filehandle" << file.handle(); + QFile returned; + qDebug() << "\t" << returned.open(file.handle(), file.openMode(), QFileDevice::FileHandleFlag::DontCloseHandle); + return fdopen(returned.handle(), mode); + } else { + return nullptr; + } + */ +#ifdef Q_OS_WINDOWS + wchar_t *pathw, *modew; + int len; + FILE *fp; + + if (acp_utf8) + return fopen(path, mode); + else { + len = mbstoc16s(NULL, path, 0) + 1; + pathw = malloc(sizeof(wchar_t) * len); + mbstoc16s(pathw, path, len); + + len = mbstoc16s(NULL, mode, 0) + 1; + modew = malloc(sizeof(wchar_t) * len); + mbstoc16s(modew, mode, len); + + fp = _wfopen(pathw, modew); + + free(pathw); + free(modew); + + return fp; + } +#endif +#ifdef Q_OS_UNIX + return fopen(path, mode); +#endif +} + +FILE * +plat_fopen64(const char *path, const char *mode) +{ + return fopen(path, mode); +} + +int +plat_dir_create(char *path) +{ + return QDir().mkdir(path) ? 0 : -1; +} + +int +plat_dir_check(char *path) +{ + QFileInfo fi(path); + return fi.isDir() ? 1 : 0; +} + +int +plat_getcwd(char *bufp, int max) +{ + CharPointer(bufp, max) = QDir::currentPath().toUtf8(); + return 0; +} + +void +plat_get_dirname(char *dest, const char *path) +{ + QFileInfo fi(path); + CharPointer(dest, -1) = fi.dir().path().toUtf8(); +} + +char * +plat_get_extension(char *s) +{ + auto len = strlen(s); + auto idx = QByteArray::fromRawData(s, len).lastIndexOf('.'); + if (idx >= 0) { + return s+idx+1; + } + return s+len; +} + +char * +plat_get_filename(char *s) +{ + auto idx = QByteArray::fromRawData(s, strlen(s)).lastIndexOf(QDir::separator().toLatin1()); + if (idx >= 0) { + return s+idx+1; + } + return s; +} + +int +plat_path_abs(char *path) +{ + QFileInfo fi(path); + return fi.isAbsolute() ? 1 : 0; +} + +void +plat_path_slash(char *path) +{ + auto len = strlen(path); + auto separator = QDir::separator().toLatin1(); + if (path[len-1] != separator) { + path[len] = separator; + path[len+1] = 0; + } +} + +void +plat_append_filename(char *dest, const char *s1, const char *s2) +{ + strcpy(dest, s1); + plat_path_slash(dest); + strcat(dest, s2); +} + +void +plat_tempfile(char *bufp, char *prefix, char *suffix) +{ + QString name; + + if (prefix != nullptr) { + name.append(QString("%1-").arg(prefix)); + } + + name.append("XXXXXX"); + + if (suffix != nullptr) { + name.append(suffix); + } + QTemporaryFile temp(name); + QByteArray buf(bufp); + buf = temp.fileName().toUtf8(); +} + +void plat_remove(char* path) +{ + QFile(path).remove(); +} + +void * +plat_mmap(size_t size, uint8_t executable) +{ +#if defined Q_OS_WINDOWS + return VirtualAlloc(NULL, size, MEM_COMMIT, executable ? PAGE_EXECUTE_READWRITE : PAGE_READWRITE); +#elif defined Q_OS_UNIX +#if defined Q_OS_DARWIN && defined MAP_JIT + void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE | (executable ? MAP_JIT : 0), 0, 0); +#else + void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE, 0, 0); + auto retval = *reinterpret_cast(ret); + return (retval < 0) ? nullptr : ret; +#endif +#endif +} + +void +plat_munmap(void *ptr, size_t size) +{ + munmap(ptr, size); +} + +void +plat_pause(int p) +{ + static wchar_t oldtitle[512]; + wchar_t title[512]; + + dopause = p; + if (p) { + wcsncpy(oldtitle, ui_window_title(NULL), sizeof_w(oldtitle) - 1); + wcscpy(title, oldtitle); + wcscat(title, L" - PAUSED -"); + ui_window_title(title); + } else { + ui_window_title(oldtitle); + } +} + +// because we can't include nvr.h because it's got fields named new +extern int nvr_save(void); + +void +plat_power_off(void) +{ + confirm_exit = 0; + nvr_save(); + config_save(); + + /* Deduct a sufficiently large number of cycles that no instructions will + run before the main thread is terminated */ + cycles -= 99999999; + + cpu_thread_run = 0; +} + +void set_language(uint32_t id) { + lang_id = id; +} + +/* Sets up the program language before initialization. */ +uint32_t plat_language_code(char* langcode) { + /* or maybe not */ + return 0; +} + +/* Converts back the language code to LCID */ +void plat_language_code_r(uint32_t lcid, char* outbuf, int len) { + /* or maybe not */ + return; +} + +void* dynld_module(const char *name, dllimp_t *table) +{ + auto lib = std::unique_ptr(new QLibrary(name)); + if (lib->load()) { + for (auto imp = table; imp->name != nullptr; imp++) + { + if ((imp->func = reinterpret_cast(lib->resolve(imp->name))) != nullptr) + { + return nullptr; + } + } + } + + return lib.release(); +} + +void dynld_close(void *handle) +{ + delete reinterpret_cast(handle); +} + +void joystick_init(void) {} +void joystick_close(void) {} +void joystick_process(void) {} +void startblit() +{ + blitmx.lock(); +} + +void endblit() +{ + blitmx.unlock(); +} + +} diff --git a/src/qt/qt_sdl.c b/src/qt/qt_sdl.c new file mode 100644 index 000000000..30c2aff9d --- /dev/null +++ b/src/qt/qt_sdl.c @@ -0,0 +1,743 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Rendering module for libSDL2 + * + * NOTE: Given all the problems reported with FULLSCREEN use of SDL, + * we will not use that, but, instead, use a new window which + * coverrs the entire desktop. + * + * + * + * Authors: Fred N. van Kempen, + * Michael Dr�ing, + * + * Copyright 2018-2020 Fred N. van Kempen. + * Copyright 2018-2020 Michael Dr�ing. + * + * Redistribution and use in source and binary forms, with + * or without modification, are permitted provided that the + * following conditions are met: + * + * 1. Redistributions of source code must retain the entire + * above notice, this list of conditions and the following + * disclaimer. + * + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names + * of its contributors may be used to endorse or promote + * products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include + +#include +#include +#include +#include +/* This #undef is needed because a SDL include header redefines HAVE_STDARG_H. */ +#undef HAVE_STDARG_H +#define HAVE_STDARG_H +#include <86box/86box.h> +#include <86box/mouse.h> +#include <86box/keyboard.h> +#include <86box/device.h> +#include <86box/plat.h> +#include <86box/plat_dynld.h> +#include <86box/video.h> +#include <86box/ui.h> +#include <86box/version.h> + +#include "qt_sdl.h" + +#define RENDERER_FULL_SCREEN 1 +#define RENDERER_HARDWARE 2 +#define RENDERER_OPENGL 4 + + +static SDL_Window *sdl_win = NULL; +static SDL_Renderer *sdl_render = NULL; +static SDL_Texture *sdl_tex = NULL; +static int sdl_w, sdl_h; +static int sdl_fs, sdl_flags = -1; +static int cur_w, cur_h; +static int cur_ww = 0, cur_wh = 0; +static volatile int sdl_enabled = 0; +static SDL_mutex* sdl_mutex = NULL; +static int blit_w = 0, blit_h = 0, blit_tex_updated = 0; + +static const uint16_t sdl_to_xt[0x200] = + { + [SDL_SCANCODE_ESCAPE] = 0x01, + [SDL_SCANCODE_1] = 0x02, + [SDL_SCANCODE_2] = 0x03, + [SDL_SCANCODE_3] = 0x04, + [SDL_SCANCODE_4] = 0x05, + [SDL_SCANCODE_5] = 0x06, + [SDL_SCANCODE_6] = 0x07, + [SDL_SCANCODE_7] = 0x08, + [SDL_SCANCODE_8] = 0x09, + [SDL_SCANCODE_9] = 0x0A, + [SDL_SCANCODE_0] = 0x0B, + [SDL_SCANCODE_MINUS] = 0x0C, + [SDL_SCANCODE_EQUALS] = 0x0D, + [SDL_SCANCODE_BACKSPACE] = 0x0E, + [SDL_SCANCODE_TAB] = 0x0F, + [SDL_SCANCODE_Q] = 0x10, + [SDL_SCANCODE_W] = 0x11, + [SDL_SCANCODE_E] = 0x12, + [SDL_SCANCODE_R] = 0x13, + [SDL_SCANCODE_T] = 0x14, + [SDL_SCANCODE_Y] = 0x15, + [SDL_SCANCODE_U] = 0x16, + [SDL_SCANCODE_I] = 0x17, + [SDL_SCANCODE_O] = 0x18, + [SDL_SCANCODE_P] = 0x19, + [SDL_SCANCODE_LEFTBRACKET] = 0x1A, + [SDL_SCANCODE_RIGHTBRACKET] = 0x1B, + [SDL_SCANCODE_RETURN] = 0x1C, + [SDL_SCANCODE_LCTRL] = 0x1D, + [SDL_SCANCODE_A] = 0x1E, + [SDL_SCANCODE_S] = 0x1F, + [SDL_SCANCODE_D] = 0x20, + [SDL_SCANCODE_F] = 0x21, + [SDL_SCANCODE_G] = 0x22, + [SDL_SCANCODE_H] = 0x23, + [SDL_SCANCODE_J] = 0x24, + [SDL_SCANCODE_K] = 0x25, + [SDL_SCANCODE_L] = 0x26, + [SDL_SCANCODE_SEMICOLON] = 0x27, + [SDL_SCANCODE_APOSTROPHE] = 0x28, + [SDL_SCANCODE_GRAVE] = 0x29, + [SDL_SCANCODE_LSHIFT] = 0x2A, + [SDL_SCANCODE_BACKSLASH] = 0x2B, + [SDL_SCANCODE_Z] = 0x2C, + [SDL_SCANCODE_X] = 0x2D, + [SDL_SCANCODE_C] = 0x2E, + [SDL_SCANCODE_V] = 0x2F, + [SDL_SCANCODE_B] = 0x30, + [SDL_SCANCODE_N] = 0x31, + [SDL_SCANCODE_M] = 0x32, + [SDL_SCANCODE_COMMA] = 0x33, + [SDL_SCANCODE_PERIOD] = 0x34, + [SDL_SCANCODE_SLASH] = 0x35, + [SDL_SCANCODE_RSHIFT] = 0x36, + [SDL_SCANCODE_KP_MULTIPLY] = 0x37, + [SDL_SCANCODE_LALT] = 0x38, + [SDL_SCANCODE_SPACE] = 0x39, + [SDL_SCANCODE_CAPSLOCK] = 0x3A, + [SDL_SCANCODE_F1] = 0x3B, + [SDL_SCANCODE_F2] = 0x3C, + [SDL_SCANCODE_F3] = 0x3D, + [SDL_SCANCODE_F4] = 0x3E, + [SDL_SCANCODE_F5] = 0x3F, + [SDL_SCANCODE_F6] = 0x40, + [SDL_SCANCODE_F7] = 0x41, + [SDL_SCANCODE_F8] = 0x42, + [SDL_SCANCODE_F9] = 0x43, + [SDL_SCANCODE_F10] = 0x44, + [SDL_SCANCODE_NUMLOCKCLEAR] = 0x45, + [SDL_SCANCODE_SCROLLLOCK] = 0x46, + [SDL_SCANCODE_HOME] = 0x147, + [SDL_SCANCODE_UP] = 0x148, + [SDL_SCANCODE_PAGEUP] = 0x149, + [SDL_SCANCODE_KP_MINUS] = 0x4A, + [SDL_SCANCODE_LEFT] = 0x14B, + [SDL_SCANCODE_KP_5] = 0x4C, + [SDL_SCANCODE_RIGHT] = 0x14D, + [SDL_SCANCODE_KP_PLUS] = 0x4E, + [SDL_SCANCODE_END] = 0x14F, + [SDL_SCANCODE_DOWN] = 0x150, + [SDL_SCANCODE_PAGEDOWN] = 0x151, + [SDL_SCANCODE_INSERT] = 0x152, + [SDL_SCANCODE_DELETE] = 0x153, + [SDL_SCANCODE_F11] = 0x57, + [SDL_SCANCODE_F12] = 0x58, + + [SDL_SCANCODE_KP_ENTER] = 0x11c, + [SDL_SCANCODE_RCTRL] = 0x11d, + [SDL_SCANCODE_KP_DIVIDE] = 0x135, + [SDL_SCANCODE_RALT] = 0x138, + [SDL_SCANCODE_KP_9] = 0x49, + [SDL_SCANCODE_KP_8] = 0x48, + [SDL_SCANCODE_KP_7] = 0x47, + [SDL_SCANCODE_KP_6] = 0x4D, + [SDL_SCANCODE_KP_4] = 0x4B, + [SDL_SCANCODE_KP_3] = 0x51, + [SDL_SCANCODE_KP_2] = 0x50, + [SDL_SCANCODE_KP_1] = 0x4F, + [SDL_SCANCODE_KP_0] = 0x52, + [SDL_SCANCODE_KP_PERIOD] = 0x53, + + [SDL_SCANCODE_LGUI] = 0x15B, + [SDL_SCANCODE_RGUI] = 0x15C, + [SDL_SCANCODE_APPLICATION] = 0x15D, + [SDL_SCANCODE_PRINTSCREEN] = 0x137, + [SDL_SCANCODE_NONUSBACKSLASH] = 0x56, +}; + +typedef struct mouseinputdata +{ + int deltax, deltay, deltaz; + int mousebuttons; +} mouseinputdata; +static mouseinputdata mousedata; + +// #define ENABLE_SDL_LOG 3 +#ifdef ENABLE_SDL_LOG +int sdl_do_log = ENABLE_SDL_LOG; + +static void +sdl_log(const char *fmt, ...) +{ + va_list ap; + + if (sdl_do_log) { + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); + } +} +#else +#define sdl_log(fmt, ...) +#endif + + +static void +sdl_integer_scale(double *d, double *g) +{ + double ratio; + + if (*d > *g) { + ratio = floor(*d / *g); + *d = *g * ratio; + } else { + ratio = ceil(*d / *g); + *d = *g / ratio; + } +} + + +static void +sdl_stretch(int *w, int *h, int *x, int *y) +{ + double hw, gw, hh, gh, dx, dy, dw, dh, gsr, hsr; + + hw = (double) sdl_w; + hh = (double) sdl_h; + gw = (double) *w; + gh = (double) *h; + hsr = hw / hh; + + switch (video_fullscreen_scale) { + case FULLSCR_SCALE_FULL: + default: + *w = sdl_w; + *h = sdl_h; + *x = 0; + *y = 0; + break; + case FULLSCR_SCALE_43: + case FULLSCR_SCALE_KEEPRATIO: + if (video_fullscreen_scale == FULLSCR_SCALE_43) + gsr = 4.0 / 3.0; + else + gsr = gw / gh; + if (gsr <= hsr) { + dw = hh * gsr; + dh = hh; + } else { + dw = hw; + dh = hw / gsr; + } + dx = (hw - dw) / 2.0; + dy = (hh - dh) / 2.0; + *w = (int) dw; + *h = (int) dh; + *x = (int) dx; + *y = (int) dy; + break; + case FULLSCR_SCALE_INT: + gsr = gw / gh; + if (gsr <= hsr) { + dw = hh * gsr; + dh = hh; + } else { + dw = hw; + dh = hw / gsr; + } + sdl_integer_scale(&dw, &gw); + sdl_integer_scale(&dh, &gh); + dx = (hw - dw) / 2.0; + dy = (hh - dh) / 2.0; + *w = (int) dw; + *h = (int) dh; + *x = (int) dx; + *y = (int) dy; + break; + } +} + +static void +sdl_blit(int x, int y, int w, int h) +{ + void *pixeldata; + int pitch; + + if (!sdl_enabled || (x < 0) || (y < 0) || (w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL) || (sdl_render == NULL) || (sdl_tex == NULL)) { + video_blit_complete(); + return; + } + + SDL_LockMutex(sdl_mutex); + SDL_LockTexture(sdl_tex, 0, &pixeldata, &pitch); + + video_copy(pixeldata, &(buffer32->line[y][x]), h * (2048 + 64) * sizeof(uint32_t)); + + if (screenshots) + video_screenshot((uint32_t *) pixeldata, 0, 0, (2048 + 64)); + + blit_w = w; + blit_h = h; + blit_tex_updated = 1; + + SDL_UnlockTexture(sdl_tex); + SDL_UnlockMutex(sdl_mutex); + video_blit_complete(); +} + + +static void +sdl_destroy_window(void) +{ + if (sdl_win != NULL) { + SDL_DestroyWindow(sdl_win); + sdl_win = NULL; + } +} + + +static void +sdl_destroy_texture(void) +{ + if (sdl_tex != NULL) { + SDL_DestroyTexture(sdl_tex); + sdl_tex = NULL; + } + + /* SDL_DestroyRenderer also automatically destroys all associated textures. */ + if (sdl_render != NULL) { + SDL_DestroyRenderer(sdl_render); + sdl_render = NULL; + } +} + + +void +sdl_close(void) +{ + if (sdl_mutex != NULL) + SDL_LockMutex(sdl_mutex); + + /* Unregister our renderer! */ + video_setblit(NULL); + + if (sdl_enabled) + sdl_enabled = 0; + + if (sdl_mutex != NULL) { + SDL_DestroyMutex(sdl_mutex); + sdl_mutex = NULL; + } + + sdl_destroy_texture(); + sdl_destroy_window(); + + /* Quit. */ + SDL_Quit(); + sdl_flags = -1; +} + +static void sdl_select_best_hw_driver(void) { + int i; + SDL_RendererInfo renderInfo; + + for (i = 0; i < SDL_GetNumRenderDrivers(); ++i) { + SDL_GetRenderDriverInfo(i, &renderInfo); + if (renderInfo.flags & SDL_RENDERER_ACCELERATED) { + SDL_SetHint(SDL_HINT_RENDER_DRIVER, renderInfo.name); + return; + } + } +} + +static void +sdl_init_texture(void) +{ + if (sdl_flags & RENDERER_HARDWARE) { + sdl_render = SDL_CreateRenderer(sdl_win, -1, SDL_RENDERER_ACCELERATED); + SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, video_filter_method ? "1" : "0"); + } else { + sdl_render = SDL_CreateRenderer(sdl_win, -1, SDL_RENDERER_SOFTWARE); + } + + sdl_tex = SDL_CreateTexture(sdl_render, SDL_PIXELFORMAT_ARGB8888, + SDL_TEXTUREACCESS_STREAMING, (2048 + 64), (2048 + 64)); + + if (sdl_render == NULL) { + sdl_log("SDL: unable to SDL_CreateRenderer (%s)\n", SDL_GetError()); + } + if (sdl_tex == NULL) { + sdl_log("SDL: unable to SDL_CreateTexture (%s)\n", SDL_GetError()); + } +} + + +static void +sdl_reinit_texture(void) +{ + if (sdl_flags == -1) + return; + + sdl_destroy_texture(); + sdl_init_texture(); +} + + +void sdl_set_fs(int fs) { + SDL_SetWindowFullscreen(sdl_win, fs ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0); + SDL_SetRelativeMouseMode((SDL_bool)mouse_capture); + + sdl_fs = fs; + + if (fs) { + sdl_flags |= RENDERER_FULL_SCREEN; + } else { + sdl_flags &= ~RENDERER_FULL_SCREEN; + } + + sdl_reinit_texture(); +} + + +static int +sdl_init_common(void* win, int flags) +{ + wchar_t temp[128]; + SDL_version ver; + + sdl_log("SDL: init (fs=%d)\n", 0); + + /* Get and log the version of the DLL we are using. */ + SDL_GetVersion(&ver); + sdl_log("SDL: version %d.%d.%d\n", ver.major, ver.minor, ver.patch); + + /* Initialize the SDL system. */ + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + sdl_log("SDL: initialization failed (%s)\n", SDL_GetError()); + return(0); + } + + if (flags & RENDERER_HARDWARE) { + if (flags & RENDERER_OPENGL) + SDL_SetHint(SDL_HINT_RENDER_DRIVER, "OpenGL"); + else + sdl_select_best_hw_driver(); + } + + /* Get the size of the (current) desktop. */ + SDL_DisplayMode dm; + if (SDL_GetDesktopDisplayMode(0, &dm) != 0) { + sdl_log("SDL: SDL_GetDesktopDisplayMode failed (%s)\n", SDL_GetError()); + return(0); + } + sdl_w = dm.w; + sdl_h = dm.h; + sdl_flags = flags; + + sdl_win = SDL_CreateWindow("86Box renderer", 640, 480, 100, 100, sdl_flags); + if (sdl_win == NULL) { + sdl_log("SDL: unable to CreateWindowFrom (%s)\n", SDL_GetError()); + } + sdl_init_texture(); + sdl_set_fs(video_fullscreen & 1); + + /* Make sure we get a clean exit. */ + atexit(sdl_close); + + /* Register our renderer! */ + video_setblit(sdl_blit); + + sdl_enabled = 1; + sdl_mutex = SDL_CreateMutex(); + + return(1); +} + + +int +sdl_inits(void* win) +{ + return sdl_init_common(win, 0); +} + + +int +sdl_inith(void* win) +{ + return sdl_init_common(win, RENDERER_HARDWARE); +} + + +int +sdl_initho(void* win) +{ + return sdl_init_common(win, RENDERER_HARDWARE | RENDERER_OPENGL); +} + + +int +sdl_pause(void) +{ + return(0); +} + + +void +sdl_resize(int w, int h) +{ + int ww = 0, wh = 0; + + if (video_fullscreen & 2) + return; + + if ((w == cur_w) && (h == cur_h)) + return; + + SDL_LockMutex(sdl_mutex); + + ww = w; + wh = h; + + if (sdl_fs) { +// sdl_stretch(&ww, &wh, &wx, &wy); +// MoveWindow(hwndRender, wx, wy, ww, wh, TRUE); + } + + cur_w = w; + cur_h = h; + + cur_ww = ww; + cur_wh = wh; + + SDL_SetWindowSize(sdl_win, cur_ww, cur_wh); + sdl_reinit_texture(); + + SDL_UnlockMutex(sdl_mutex); +} + + +void +sdl_enable(int enable) +{ + if (sdl_flags == -1) + return; + + SDL_LockMutex(sdl_mutex); + sdl_enabled = !!enable; + + if (enable == 1) { + SDL_SetWindowSize(sdl_win, cur_ww, cur_wh); + sdl_reinit_texture(); + } + + SDL_UnlockMutex(sdl_mutex); +} + + +void +sdl_reload(void) +{ + if (sdl_flags & RENDERER_HARDWARE) { + SDL_LockMutex(sdl_mutex); + + SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, video_filter_method ? "1" : "0"); + sdl_reinit_texture(); + + SDL_UnlockMutex(sdl_mutex); + } +} + +static int mouse_inside = 0; +enum sdl_main_status sdl_main() { + int ret = SdlMainOk; + SDL_Rect r_src; + SDL_Event event; + + while (SDL_PollEvent(&event)) + { + switch(event.type) + { + case SDL_QUIT: + ret = SdlMainQuit; + break; + case SDL_MOUSEWHEEL: + { + if (mouse_capture || video_fullscreen) + { + if (event.wheel.direction == SDL_MOUSEWHEEL_FLIPPED) + { + event.wheel.x *= -1; + event.wheel.y *= -1; + } + mousedata.deltaz = event.wheel.y; + } + break; + } + case SDL_MOUSEMOTION: + { + if (mouse_capture || video_fullscreen) + { + mousedata.deltax += event.motion.xrel; + mousedata.deltay += event.motion.yrel; + } + break; + } + case SDL_MOUSEBUTTONDOWN: + case SDL_MOUSEBUTTONUP: + { + if ((event.button.button == SDL_BUTTON_LEFT) + && !(mouse_capture || video_fullscreen) + && event.button.state == SDL_RELEASED + && mouse_inside) + { + plat_mouse_capture(1); + break; + } + if (mouse_get_buttons() < 3 && event.button.button == SDL_BUTTON_MIDDLE && !video_fullscreen) + { + plat_mouse_capture(0); + break; + } + if (mouse_capture || video_fullscreen) + { + int buttonmask = 0; + + switch(event.button.button) + { + case SDL_BUTTON_LEFT: + buttonmask = 1; + break; + case SDL_BUTTON_RIGHT: + buttonmask = 2; + break; + case SDL_BUTTON_MIDDLE: + buttonmask = 4; + break; + } + if (event.button.state == SDL_PRESSED) + { + mousedata.mousebuttons |= buttonmask; + } + else mousedata.mousebuttons &= ~buttonmask; + } + break; + } + case SDL_RENDER_DEVICE_RESET: + case SDL_RENDER_TARGETS_RESET: + { + sdl_reinit_texture(); + break; + } + case SDL_KEYDOWN: + case SDL_KEYUP: + { + uint16_t xtkey = 0; + switch(event.key.keysym.scancode) + { + default: + xtkey = sdl_to_xt[event.key.keysym.scancode]; + break; + } + keyboard_input(event.key.state == SDL_PRESSED, xtkey); + } + break; + case SDL_WINDOWEVENT: + { + switch (event.window.event) + { + case SDL_WINDOWEVENT_ENTER: + mouse_inside = 1; + break; + case SDL_WINDOWEVENT_LEAVE: + mouse_inside = 0; + break; + } + } + } + } + + if (blit_tex_updated > 0) { + SDL_LockMutex(sdl_mutex); + int status = SDL_RenderClear(sdl_render); + if (status) { + sdl_log("SDL: unable to SDL_RenderClear (%s)\n", SDL_GetError()); + } + + r_src.x = 0; + r_src.y = 0; + r_src.w = blit_w; + r_src.h = blit_h; + + status = SDL_RenderCopy(sdl_render, sdl_tex, &r_src, 0); + if (status) { + sdl_log("SDL: unable to copy texture to renderer (%s)\n", SDL_GetError()); + } + + SDL_RenderPresent(sdl_render); + blit_tex_updated = 0; + SDL_UnlockMutex(sdl_mutex); + } + + if (mouse_capture && keyboard_ismsexit()) { + plat_mouse_capture(0); + } + if (video_fullscreen && keyboard_isfsexit()) { + plat_setfullscreen(0); + } + + return ret; +} + +void sdl_mouse_capture(int on) { + SDL_SetRelativeMouseMode((SDL_bool)on); +} + +void sdl_mouse_poll() { + mouse_x = mousedata.deltax; + mouse_y = mousedata.deltay; + mouse_z = mousedata.deltaz; + mousedata.deltax = mousedata.deltay = mousedata.deltaz = 0; + mouse_buttons = mousedata.mousebuttons; +} diff --git a/src/qt/qt_sdl.h b/src/qt/qt_sdl.h new file mode 100644 index 000000000..02fd47ddf --- /dev/null +++ b/src/qt/qt_sdl.h @@ -0,0 +1,73 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Definitions for the libSDL2 rendering module. + * + * + * + * Authors: Fred N. van Kempen, + * Michael Drüing, + * + * Copyright 2018,2019 Fred N. van Kempen. + * Copyright 2018,2019 Michael Drüing. + * + * Redistribution and use in source and binary forms, with + * or without modification, are permitted provided that the + * following conditions are met: + * + * 1. Redistributions of source code must retain the entire + * above notice, this list of conditions and the following + * disclaimer. + * + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names + * of its contributors may be used to endorse or promote + * products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef WIN_SDL_H +# define WIN_SDL_H + +extern void* sdl_win_handle; +extern void sdl_close(void); +extern int sdl_inits(); +extern int sdl_inith(); +extern int sdl_initho(); +extern int sdl_pause(void); +extern void sdl_resize(int w, int h); +extern void sdl_enable(int enable); +extern void sdl_set_fs(int fs); +extern void sdl_reload(void); + +enum sdl_main_status { + SdlMainOk, + SdlMainQuit, +}; + +extern enum sdl_main_status sdl_main(); + +extern void sdl_mouse_capture(int on); +extern void sdl_mouse_poll(); + +#endif /*WIN_SDL_H*/ diff --git a/src/qt/qt_settings.cpp b/src/qt/qt_settings.cpp new file mode 100644 index 000000000..b2716b1e0 --- /dev/null +++ b/src/qt/qt_settings.cpp @@ -0,0 +1,131 @@ +#include "qt_settings.hpp" +#include "ui_qt_settings.h" + +#include "qt_settingsmachine.hpp" +#include "qt_settingsdisplay.hpp" +#include "qt_settingsinput.hpp" +#include "qt_settingssound.hpp" +#include "qt_settingsnetwork.hpp" +#include "qt_settingsports.hpp" +#include "qt_settingsstoragecontrollers.hpp" +#include "qt_settingsharddisks.hpp" +#include "qt_settingsfloppycdrom.hpp" +#include "qt_settingsotherremovable.hpp" +#include "qt_settingsotherperipherals.hpp" + +#include + +class SettingsModel : public QAbstractListModel { +public: + SettingsModel(QObject* parent) : QAbstractListModel(parent) {} + + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + int rowCount(const QModelIndex &parent = QModelIndex()) const override; +private: + QStringList pages = { + "Machine", + "Display", + "Input Devices", + "Sound", + "Network", + "Ports (COM & LPT)", + "Storage Controllers", + "Hard Disks", + "Floppy & CD-ROM Drives", + "Other Removable Devices", + "Other Peripherals", + }; + QStringList page_icons = { + "machine", + "display", + "input_devices", + "sound", + "network", + "ports", + "storage_controllers", + "hard_disk", + "floppy_and_cdrom_drives", + "other_removable_devices", + "other_peripherals", + }; +}; + +QVariant SettingsModel::data(const QModelIndex &index, int role) const { + Q_ASSERT(checkIndex(index, QAbstractItemModel::CheckIndexOption::IndexIsValid | QAbstractItemModel::CheckIndexOption::ParentIsInvalid)); + + switch (role) { + case Qt::DisplayRole: + return pages.at(index.row()); + case Qt::DecorationRole: + return QIcon(QString(":/settings/win/icons/%1.ico").arg(page_icons[index.row()])); + default: + return {}; + } +} + +int SettingsModel::rowCount(const QModelIndex &parent) const { + (void) parent; + return pages.size(); +} + +Settings::Settings(QWidget *parent) : + QDialog(parent), + ui(new Ui::Settings) +{ + ui->setupUi(this); + + ui->listView->setModel(new SettingsModel(this)); + + machine = new SettingsMachine(this); + display = new SettingsDisplay(this); + input = new SettingsInput(this); + sound = new SettingsSound(this); + network = new SettingsNetwork(this); + ports = new SettingsPorts(this); + storageControllers = new SettingsStorageControllers(this); + harddisks = new SettingsHarddisks(this); + floppyCdrom = new SettingsFloppyCDROM(this); + otherRemovable = new SettingsOtherRemovable(this); + otherPeripherals = new SettingsOtherPeripherals(this); + + ui->stackedWidget->addWidget(machine); + ui->stackedWidget->addWidget(display); + ui->stackedWidget->addWidget(input); + ui->stackedWidget->addWidget(sound); + ui->stackedWidget->addWidget(network); + ui->stackedWidget->addWidget(ports); + ui->stackedWidget->addWidget(storageControllers); + ui->stackedWidget->addWidget(harddisks); + ui->stackedWidget->addWidget(floppyCdrom); + ui->stackedWidget->addWidget(otherRemovable); + ui->stackedWidget->addWidget(otherPeripherals); + + connect(machine, &SettingsMachine::currentMachineChanged, display, &SettingsDisplay::onCurrentMachineChanged); + connect(machine, &SettingsMachine::currentMachineChanged, input, &SettingsInput::onCurrentMachineChanged); + connect(machine, &SettingsMachine::currentMachineChanged, sound, &SettingsSound::onCurrentMachineChanged); + connect(machine, &SettingsMachine::currentMachineChanged, network, &SettingsNetwork::onCurrentMachineChanged); + connect(machine, &SettingsMachine::currentMachineChanged, storageControllers, &SettingsStorageControllers::onCurrentMachineChanged); + + connect(ui->listView->selectionModel(), &QItemSelectionModel::currentChanged, this, [this](const QModelIndex ¤t, const QModelIndex &previous) { + ui->stackedWidget->setCurrentIndex(current.row()); + }); +} + +Settings::~Settings() +{ + delete ui; +} + +void Settings::save() { + machine->save(); + display->save(); + input->save(); + sound->save(); + network->save(); + ports->save(); + storageControllers->save(); + harddisks->save(); + floppyCdrom->save(); + otherRemovable->save(); + otherPeripherals->save(); +} diff --git a/src/qt/qt_settings.hpp b/src/qt/qt_settings.hpp new file mode 100644 index 000000000..2fa189186 --- /dev/null +++ b/src/qt/qt_settings.hpp @@ -0,0 +1,46 @@ +#ifndef QT_SETTINGS_HPP +#define QT_SETTINGS_HPP + +#include + +namespace Ui { +class Settings; +} + +class SettingsMachine; +class SettingsDisplay; +class SettingsInput; +class SettingsSound; +class SettingsNetwork; +class SettingsPorts; +class SettingsStorageControllers; +class SettingsHarddisks; +class SettingsFloppyCDROM; +class SettingsOtherRemovable; +class SettingsOtherPeripherals; + +class Settings : public QDialog +{ + Q_OBJECT + +public: + explicit Settings(QWidget *parent = nullptr); + ~Settings(); + void save(); + +private: + Ui::Settings *ui; + SettingsMachine* machine; + SettingsDisplay* display; + SettingsInput* input; + SettingsSound* sound; + SettingsNetwork* network; + SettingsPorts* ports; + SettingsStorageControllers* storageControllers; + SettingsHarddisks* harddisks; + SettingsFloppyCDROM* floppyCdrom; + SettingsOtherRemovable* otherRemovable; + SettingsOtherPeripherals* otherPeripherals; +}; + +#endif // QT_SETTINGS_HPP diff --git a/src/qt/qt_settings.ui b/src/qt/qt_settings.ui new file mode 100644 index 000000000..5bfca9748 --- /dev/null +++ b/src/qt/qt_settings.ui @@ -0,0 +1,87 @@ + + + Settings + + + + 0 + 0 + 900 + 595 + + + + 86Box Settings + + + + + + + + + + + + -1 + + + + + + + + + + Qt::Horizontal + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + Settings + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Settings + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/qt/qt_settingsdisplay.cpp b/src/qt/qt_settingsdisplay.cpp new file mode 100644 index 000000000..70ec09c89 --- /dev/null +++ b/src/qt/qt_settingsdisplay.cpp @@ -0,0 +1,105 @@ +#include "qt_settingsdisplay.hpp" +#include "ui_qt_settingsdisplay.h" + +#include + +extern "C" { +#include <86box/86box.h> +#include <86box/device.h> +#include <86box/machine.h> +#include <86box/video.h> +} + +#include "qt_deviceconfig.hpp" +#include "qt_models_common.hpp" + +SettingsDisplay::SettingsDisplay(QWidget *parent) : + QWidget(parent), + ui(new Ui::SettingsDisplay) +{ + ui->setupUi(this); + + onCurrentMachineChanged(machine); +} + +SettingsDisplay::~SettingsDisplay() +{ + delete ui; +} + +void SettingsDisplay::save() { + gfxcard = ui->comboBoxVideo->currentData().toInt(); + voodoo_enabled = ui->checkBoxVoodoo->isChecked() ? 1 : 0; +} + +void SettingsDisplay::onCurrentMachineChanged(int machineId) { + // win_settings_video_proc, WM_INITDIALOG + this->machineId = machineId; + + auto* machine = &machines[machineId]; + auto* model = ui->comboBoxVideo->model(); + auto removeRows = model->rowCount(); + + int c = 0; + int selectedRow = 0; + while (true) { + /* Skip "internal" if machine doesn't have it. */ + if ((c == 1) && !(machine->flags & MACHINE_VIDEO)) { + c++; + continue; + } + + const device_t* video_dev = video_card_getdevice(c); + QString name = DeviceConfig::DeviceName(video_dev, video_get_internal_name(c), 1); + if (name.isEmpty()) { + break; + } + + if (video_card_available(c) && + device_is_valid(video_dev, machine->flags)) { + int row = Models::AddEntry(model, name, c); + if (c == gfxcard) { + selectedRow = row - removeRows; + } + } + + c++; + } + model->removeRows(0, removeRows); + + if (machine->flags & MACHINE_VIDEO_ONLY) { + ui->comboBoxVideo->setEnabled(false); + selectedRow = 1; + } else { + ui->comboBoxVideo->setEnabled(true); + } + ui->comboBoxVideo->setCurrentIndex(selectedRow); +} + +void SettingsDisplay::on_pushButtonConfigure_clicked() { + auto* device = video_card_getdevice(ui->comboBoxVideo->currentData().toInt()); + DeviceConfig::ConfigureDevice(device); +} + +void SettingsDisplay::on_pushButtonConfigureVoodoo_clicked() { + DeviceConfig::ConfigureDevice(&voodoo_device); +} + +void SettingsDisplay::on_comboBoxVideo_currentIndexChanged(int index) { + if (index < 0) { + return; + } + int videoCard = ui->comboBoxVideo->currentData().toInt(); + ui->pushButtonConfigure->setEnabled(video_card_has_config(videoCard) > 0); + + bool machineHasPci = machines[machineId].flags & MACHINE_BUS_PCI; + ui->checkBoxVoodoo->setEnabled(machineHasPci); + if (machineHasPci) { + ui->checkBoxVoodoo->setChecked(voodoo_enabled); + } + ui->pushButtonConfigureVoodoo->setEnabled(machineHasPci && ui->checkBoxVoodoo->isChecked()); +} + +void SettingsDisplay::on_checkBoxVoodoo_stateChanged(int state) { + ui->pushButtonConfigureVoodoo->setEnabled(state == Qt::Checked); +} diff --git a/src/qt/qt_settingsdisplay.hpp b/src/qt/qt_settingsdisplay.hpp new file mode 100644 index 000000000..768f40311 --- /dev/null +++ b/src/qt/qt_settingsdisplay.hpp @@ -0,0 +1,34 @@ +#ifndef QT_SETTINGSDISPLAY_HPP +#define QT_SETTINGSDISPLAY_HPP + +#include + +namespace Ui { +class SettingsDisplay; +} + +class SettingsDisplay : public QWidget +{ + Q_OBJECT + +public: + explicit SettingsDisplay(QWidget *parent = nullptr); + ~SettingsDisplay(); + + void save(); + +public slots: + void onCurrentMachineChanged(int machineId); + +private slots: + void on_checkBoxVoodoo_stateChanged(int state); + void on_comboBoxVideo_currentIndexChanged(int index); + void on_pushButtonConfigureVoodoo_clicked(); + void on_pushButtonConfigure_clicked(); + +private: + Ui::SettingsDisplay *ui; + int machineId = 0; +}; + +#endif // QT_SETTINGSDISPLAY_HPP diff --git a/src/qt/qt_settingsdisplay.ui b/src/qt/qt_settingsdisplay.ui new file mode 100644 index 000000000..02ee3a1a9 --- /dev/null +++ b/src/qt/qt_settingsdisplay.ui @@ -0,0 +1,77 @@ + + + SettingsDisplay + + + + 0 + 0 + 400 + 300 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + Video + + + + + + + Configure + + + + + + + Configure + + + + + + + Voodoo Graphics + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + diff --git a/src/qt/qt_settingsfloppycdrom.cpp b/src/qt/qt_settingsfloppycdrom.cpp new file mode 100644 index 000000000..5a578ca61 --- /dev/null +++ b/src/qt/qt_settingsfloppycdrom.cpp @@ -0,0 +1,217 @@ +#include "qt_settingsfloppycdrom.hpp" +#include "ui_qt_settingsfloppycdrom.h" + +extern "C" { +#include <86box/timer.h> +#include <86box/fdd.h> +#include <86box/cdrom.h> +} + +#include + +#include "qt_models_common.hpp" +#include "qt_harddrive_common.hpp" + +static void setFloppyType(QAbstractItemModel* model, const QModelIndex& idx, int type) { + QIcon icon; + if (type == 0) { + icon = QIcon(":/settings/win/icons/floppy_disabled.ico"); + } else if (type >= 1 && type <= 6) { + icon = QIcon(":/settings/win/icons/floppy_525.ico"); + } else { + icon = QIcon(":/settings/win/icons/floppy_35.ico"); + } + + model->setData(idx, fdd_getname(type)); + model->setData(idx, type, Qt::UserRole); + model->setData(idx, icon, Qt::DecorationRole); +} + +static void setCDROMBus(QAbstractItemModel* model, const QModelIndex& idx, uint8_t bus, uint8_t channel) { + QIcon icon; + switch (bus) { + case CDROM_BUS_DISABLED: + icon = QIcon(":/settings/win/icons/cdrom_disabled.ico"); + break; + case CDROM_BUS_ATAPI: + case CDROM_BUS_SCSI: + icon = QIcon(":/settings/win/icons/cdrom.ico"); + break; + } + + auto i = idx.siblingAtColumn(0); + model->setData(i, Harddrives::BusChannelName(bus, channel)); + model->setData(i, bus, Qt::UserRole); + model->setData(i, channel, Qt::UserRole + 1); + model->setData(i, icon, Qt::DecorationRole); +} + +static void setCDROMSpeed(QAbstractItemModel* model, const QModelIndex& idx, uint8_t speed) { + auto i = idx.siblingAtColumn(1); + model->setData(i, QString("%1x").arg(speed)); + model->setData(i, speed, Qt::UserRole); +} + +SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent) : + QWidget(parent), + ui(new Ui::SettingsFloppyCDROM) +{ + ui->setupUi(this); + + auto* model = ui->comboBoxFloppyType->model(); + int i = 0; + while (true) { + QString name = fdd_getname(i); + if (name.isEmpty()) { + break; + } + + Models::AddEntry(model, name, i); + ++i; + } + + model = new QStandardItemModel(0, 3, this); + ui->tableViewFloppy->setModel(model); + model->setHeaderData(0, Qt::Horizontal, "Type"); + model->setHeaderData(1, Qt::Horizontal, "Turbo"); + model->setHeaderData(2, Qt::Horizontal, "Check BPB"); + + model->insertRows(0, FDD_NUM); + /* Floppy drives category */ + for (int i = 0; i < FDD_NUM; i++) { + auto idx = model->index(i, 0); + int type = fdd_get_type(i); + setFloppyType(model, idx, type); + model->setData(idx.siblingAtColumn(1), fdd_get_turbo(i) > 0 ? "On" : "Off"); + model->setData(idx.siblingAtColumn(2), fdd_get_check_bpb(i) > 0 ? "On" : "Off"); + } + + ui->tableViewFloppy->resizeColumnsToContents(); + ui->tableViewFloppy->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); + + connect(ui->tableViewFloppy->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &SettingsFloppyCDROM::onFloppyRowChanged); + ui->tableViewFloppy->setCurrentIndex(model->index(0, 0)); + + + Harddrives::populateRemovableBuses(ui->comboBoxBus->model()); + model = ui->comboBoxSpeed->model(); + for (int i = 0; i <= 72; i++) { + Models::AddEntry(model, QString("%1x").arg(i), i); + } + + model = new QStandardItemModel(0, 2, this); + ui->tableViewCDROM->setModel(model); + model->setHeaderData(0, Qt::Horizontal, "Bus"); + model->setHeaderData(1, Qt::Horizontal, "Speed"); + model->insertRows(0, CDROM_NUM); + for (int i = 0; i < CDROM_NUM; i++) { + auto idx = model->index(i, 0); + setCDROMBus(model, idx, cdrom[i].bus_type, cdrom[i].res); + setCDROMSpeed(model, idx.siblingAtColumn(1), cdrom[i].speed); + } + ui->tableViewCDROM->resizeColumnsToContents(); + ui->tableViewCDROM->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); + + connect(ui->tableViewCDROM->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &SettingsFloppyCDROM::onCDROMRowChanged); + ui->tableViewCDROM->setCurrentIndex(model->index(0, 0)); +} + +SettingsFloppyCDROM::~SettingsFloppyCDROM() +{ + delete ui; +} + +void SettingsFloppyCDROM::save() { + auto* model = ui->tableViewFloppy->model(); + for (int i = 0; i < FDD_NUM; i++) { + fdd_set_type(i, model->index(i, 0).data(Qt::UserRole).toInt()); + fdd_set_turbo(i, model->index(i, 1).data() == "On" ? 1 : 0); + fdd_set_check_bpb(i, model->index(i, 2).data() == "On" ? 1 : 0); + } + + /* Removable devices category */ + model = ui->tableViewCDROM->model(); + memset(cdrom, 0, sizeof(cdrom)); + for (int i = 0; i < CDROM_NUM; i++) { + cdrom[i].bus_type = model->index(i, 0).data(Qt::UserRole).toUInt(); + cdrom[i].res = model->index(i, 0).data(Qt::UserRole + 1).toUInt(); + cdrom[i].speed = model->index(i, 1).data(Qt::UserRole).toUInt(); + } +} + +void SettingsFloppyCDROM::onFloppyRowChanged(const QModelIndex ¤t) { + int type = current.siblingAtColumn(0).data(Qt::UserRole).toInt(); + ui->comboBoxFloppyType->setCurrentIndex(type); + ui->checkBoxTurboTimings->setChecked(current.siblingAtColumn(1).data() == "On"); + ui->checkBoxCheckBPB->setChecked(current.siblingAtColumn(2).data() == "On"); +} + +void SettingsFloppyCDROM::onCDROMRowChanged(const QModelIndex ¤t) { + uint8_t bus = current.siblingAtColumn(0).data(Qt::UserRole).toUInt(); + uint8_t channel = current.siblingAtColumn(0).data(Qt::UserRole + 1).toUInt(); + uint8_t speed = current.siblingAtColumn(1).data(Qt::UserRole).toUInt(); + + ui->comboBoxBus->setCurrentIndex(-1); + auto* model = ui->comboBoxBus->model(); + auto match = model->match(model->index(0, 0), Qt::UserRole, bus); + if (! match.isEmpty()) { + ui->comboBoxBus->setCurrentIndex(match.first().row()); + } + + model = ui->comboBoxChannel->model(); + match = model->match(model->index(0, 0), Qt::UserRole, channel); + if (! match.isEmpty()) { + ui->comboBoxChannel->setCurrentIndex(match.first().row()); + } + ui->comboBoxSpeed->setCurrentIndex(speed); +} + +void SettingsFloppyCDROM::on_checkBoxTurboTimings_stateChanged(int arg1) { + auto idx = ui->tableViewFloppy->selectionModel()->currentIndex(); + ui->tableViewFloppy->model()->setData(idx.siblingAtColumn(1), arg1 == Qt::Checked ? "On" : "Off"); +} + +void SettingsFloppyCDROM::on_checkBoxCheckBPB_stateChanged(int arg1) { + auto idx = ui->tableViewFloppy->selectionModel()->currentIndex(); + ui->tableViewFloppy->model()->setData(idx.siblingAtColumn(2), arg1 == Qt::Checked ? "On" : "Off"); +} + +void SettingsFloppyCDROM::on_comboBoxFloppyType_activated(int index) { + setFloppyType(ui->tableViewFloppy->model(), ui->tableViewFloppy->selectionModel()->currentIndex(), index); +} + +void SettingsFloppyCDROM::on_comboBoxBus_currentIndexChanged(int index) { + if (index < 0) { + return; + } + + int bus = ui->comboBoxBus->currentData().toInt(); + bool enabled = (bus != CDROM_BUS_DISABLED); + ui->comboBoxChannel->setEnabled(enabled); + ui->comboBoxSpeed->setEnabled(enabled); + Harddrives::populateBusChannels(ui->comboBoxChannel->model(), bus); +} + +void SettingsFloppyCDROM::on_comboBoxSpeed_activated(int index) { + auto idx = ui->tableViewCDROM->selectionModel()->currentIndex(); + setCDROMSpeed(ui->tableViewCDROM->model(), idx.siblingAtColumn(1), index); +} + + +void SettingsFloppyCDROM::on_comboBoxBus_activated(int) { + setCDROMBus( + ui->tableViewCDROM->model(), + ui->tableViewCDROM->selectionModel()->currentIndex(), + ui->comboBoxBus->currentData().toUInt(), + ui->comboBoxChannel->currentData().toUInt()); +} + + +void SettingsFloppyCDROM::on_comboBoxChannel_activated(int) { + setCDROMBus( + ui->tableViewCDROM->model(), + ui->tableViewCDROM->selectionModel()->currentIndex(), + ui->comboBoxBus->currentData().toUInt(), + ui->comboBoxChannel->currentData().toUInt()); +} + diff --git a/src/qt/qt_settingsfloppycdrom.hpp b/src/qt/qt_settingsfloppycdrom.hpp new file mode 100644 index 000000000..f68646ab0 --- /dev/null +++ b/src/qt/qt_settingsfloppycdrom.hpp @@ -0,0 +1,35 @@ +#ifndef QT_SETTINGSFLOPPYCDROM_HPP +#define QT_SETTINGSFLOPPYCDROM_HPP + +#include + +namespace Ui { +class SettingsFloppyCDROM; +} + +class SettingsFloppyCDROM : public QWidget +{ + Q_OBJECT + +public: + explicit SettingsFloppyCDROM(QWidget *parent = nullptr); + ~SettingsFloppyCDROM(); + + void save(); + +private slots: + void on_comboBoxChannel_activated(int index); + void on_comboBoxBus_activated(int index); + void on_comboBoxSpeed_activated(int index); + void on_comboBoxBus_currentIndexChanged(int index); + void on_comboBoxFloppyType_activated(int index); + void on_checkBoxCheckBPB_stateChanged(int arg1); + void on_checkBoxTurboTimings_stateChanged(int arg1); + void onFloppyRowChanged(const QModelIndex ¤t); + void onCDROMRowChanged(const QModelIndex ¤t); + +private: + Ui::SettingsFloppyCDROM *ui; +}; + +#endif // QT_SETTINGSFLOPPYCDROM_HPP diff --git a/src/qt/qt_settingsfloppycdrom.ui b/src/qt/qt_settingsfloppycdrom.ui new file mode 100644 index 000000000..222728356 --- /dev/null +++ b/src/qt/qt_settingsfloppycdrom.ui @@ -0,0 +1,148 @@ + + + SettingsFloppyCDROM + + + + 0 + 0 + 544 + 617 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Floppy Drives + + + + + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + false + + + + + + + + + Type + + + + + + + + + + Turbo Timings + + + + + + + Check BPB + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + CD-ROM Drives + + + + + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + false + + + + + + + + + Channel + + + + + + + + + + Speed + + + + + + + Bus + + + + + + + + + + + + + + + + diff --git a/src/qt/qt_settingsharddisks.cpp b/src/qt/qt_settingsharddisks.cpp new file mode 100644 index 000000000..ddd419636 --- /dev/null +++ b/src/qt/qt_settingsharddisks.cpp @@ -0,0 +1,225 @@ +#include "qt_settingsharddisks.hpp" +#include "ui_qt_settingsharddisks.h" + +extern "C" { +#include <86box/86box.h> +#include <86box/hdd.h> +} + +#include + +#include "qt_harddiskdialog.hpp" +#include "qt_harddrive_common.hpp" + +const int ColumnBus = 0; +const int ColumnFilename = 1; +const int ColumnCylinders = 2; +const int ColumnHeads = 3; +const int ColumnSectors = 4; +const int ColumnSize = 5; + +const int DataBus = Qt::UserRole; +const int DataBusChannel = Qt::UserRole + 1; + +/* +static void +normalize_hd_list() +{ + hard_disk_t ihdd[HDD_NUM]; + int i, j; + + j = 0; + memset(ihdd, 0x00, HDD_NUM * sizeof(hard_disk_t)); + + for (i = 0; i < HDD_NUM; i++) { + if (temp_hdd[i].bus != HDD_BUS_DISABLED) { + memcpy(&(ihdd[j]), &(temp_hdd[i]), sizeof(hard_disk_t)); + j++; + } + } + + memcpy(temp_hdd, ihdd, HDD_NUM * sizeof(hard_disk_t)); +} +*/ + +static QString busChannelName(const QModelIndex& idx) { + return Harddrives::BusChannelName(idx.data(DataBus).toUInt(), idx.data(DataBusChannel).toUInt()); +} + +static void addRow(QAbstractItemModel* model, hard_disk_t* hd) { + const QString userPath = usr_path; + + int row = model->rowCount(); + model->insertRow(row); + + QString busName = Harddrives::BusChannelName(hd->bus, hd->channel); + model->setData(model->index(row, ColumnBus), busName); + model->setData(model->index(row, ColumnBus), QIcon(":/settings/win/icons/hard_disk.ico"), Qt::DecorationRole); + model->setData(model->index(row, ColumnBus), hd->bus, DataBus); + model->setData(model->index(row, ColumnBus), hd->channel, DataBusChannel); + QString fileName = hd->fn; + if (fileName.startsWith(userPath, Qt::CaseInsensitive)) { + model->setData(model->index(row, ColumnFilename), fileName.mid(userPath.size())); + } else { + model->setData(model->index(row, ColumnFilename), fileName); + } + model->setData(model->index(row, ColumnFilename), fileName, Qt::UserRole); + + model->setData(model->index(row, ColumnCylinders), hd->tracks); + model->setData(model->index(row, ColumnHeads), hd->hpc); + model->setData(model->index(row, ColumnSectors), hd->spt); + model->setData(model->index(row, ColumnSize), (hd->tracks * hd->hpc * hd->spt) >> 11); +} + +SettingsHarddisks::SettingsHarddisks(QWidget *parent) : + QWidget(parent), + ui(new Ui::SettingsHarddisks) +{ + ui->setupUi(this); + + QAbstractItemModel* model = new QStandardItemModel(0, 6, this); + model->setHeaderData(ColumnBus, Qt::Horizontal, "Bus"); + model->setHeaderData(ColumnFilename, Qt::Horizontal, "File"); + model->setHeaderData(ColumnCylinders, Qt::Horizontal, "C"); + model->setHeaderData(ColumnHeads, Qt::Horizontal, "H"); + model->setHeaderData(ColumnSectors, Qt::Horizontal, "S"); + model->setHeaderData(ColumnSize, Qt::Horizontal, "MiB"); + ui->tableView->setModel(model); + + for (int i = 0; i < HDD_NUM; i++) { + if (hdd[i].bus > 0) { + addRow(model, &hdd[i]); + } + } + ui->tableView->resizeColumnsToContents(); + ui->tableView->horizontalHeader()->setSectionResizeMode(ColumnFilename, QHeaderView::Stretch); + + auto* tableSelectionModel = ui->tableView->selectionModel(); + connect(tableSelectionModel, &QItemSelectionModel::currentRowChanged, this, &SettingsHarddisks::onTableRowChanged); + onTableRowChanged(QModelIndex()); + + Harddrives::populateBuses(ui->comboBoxBus->model()); + on_comboBoxBus_currentIndexChanged(0); +} + +SettingsHarddisks::~SettingsHarddisks() +{ + delete ui; +} + +void SettingsHarddisks::save() { + memset(hdd, 0, sizeof(hdd)); + + auto* model = ui->tableView->model(); + int rows = model->rowCount(); + for (int i = 0; i < rows; ++i) { + auto idx = model->index(i, ColumnBus); + hdd[i].bus = idx.data(DataBus).toUInt(); + hdd[i].channel = idx.data(DataBusChannel).toUInt(); + hdd[i].tracks = idx.siblingAtColumn(ColumnCylinders).data().toUInt(); + hdd[i].hpc = idx.siblingAtColumn(ColumnHeads).data().toUInt(); + hdd[i].spt = idx.siblingAtColumn(ColumnSectors).data().toUInt(); + + QByteArray fileName = idx.siblingAtColumn(ColumnFilename).data(Qt::UserRole).toString().toUtf8(); + strncpy(hdd[i].fn, fileName.data(), sizeof(hdd[i].fn)); + hdd[i].priv = nullptr; + } +} + +void SettingsHarddisks::on_comboBoxBus_currentIndexChanged(int index) { + if (index < 0) { + return; + } + + auto idx = ui->tableView->selectionModel()->currentIndex(); + if (idx.isValid()) { + auto* model = ui->tableView->model(); + auto col = idx.siblingAtColumn(ColumnBus); + model->setData(col, ui->comboBoxBus->currentData(Qt::UserRole), DataBus); + model->setData(col, busChannelName(col), Qt::DisplayRole); + } + + Harddrives::populateBusChannels(ui->comboBoxChannel->model(), ui->comboBoxBus->currentData().toInt()); +} + +void SettingsHarddisks::on_comboBoxChannel_currentIndexChanged(int index) { + if (index < 0) { + return; + } + + auto idx = ui->tableView->selectionModel()->currentIndex(); + if (idx.isValid()) { + auto* model = ui->tableView->model(); + auto col = idx.siblingAtColumn(ColumnBus); + model->setData(col, ui->comboBoxChannel->currentData(Qt::UserRole), DataBusChannel); + model->setData(col, busChannelName(col), Qt::DisplayRole); + } +} + +void SettingsHarddisks::onTableRowChanged(const QModelIndex ¤t) { + bool hidden = !current.isValid(); + ui->labelBus->setHidden(hidden); + ui->labelChannel->setHidden(hidden); + ui->comboBoxBus->setHidden(hidden); + ui->comboBoxChannel->setHidden(hidden); + + uint32_t bus = current.siblingAtColumn(ColumnBus).data(DataBus).toUInt(); + uint32_t busChannel = current.siblingAtColumn(ColumnBus).data(DataBusChannel).toUInt(); + + auto* model = ui->comboBoxBus->model(); + auto match = model->match(model->index(0, 0), Qt::UserRole, bus); + if (! match.isEmpty()) { + ui->comboBoxBus->setCurrentIndex(match.first().row()); + } + model = ui->comboBoxChannel->model(); + match = model->match(model->index(0, 0), Qt::UserRole, busChannel); + if (! match.isEmpty()) { + ui->comboBoxChannel->setCurrentIndex(match.first().row()); + } +} + +static void addDriveFromDialog(Ui::SettingsHarddisks* ui, const HarddiskDialog& dlg) { + QByteArray fn = dlg.fileName().toUtf8(); + + hard_disk_t hd; + hd.bus = dlg.bus(); + hd.channel = dlg.channel(); + hd.tracks = dlg.cylinders(); + hd.hpc = dlg.heads(); + hd.spt = dlg.sectors(); + strncpy(hd.fn, fn.data(), sizeof(hd.fn)); + + addRow(ui->tableView->model(), &hd); + ui->tableView->resizeColumnsToContents(); + ui->tableView->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch); +} + +void SettingsHarddisks::on_pushButtonNew_clicked() { + HarddiskDialog dialog(false, this); + switch (dialog.exec()) { + case QDialog::Accepted: + addDriveFromDialog(ui, dialog); + break; + } +} + + +void SettingsHarddisks::on_pushButtonExisting_clicked() { + HarddiskDialog dialog(true, this); + switch (dialog.exec()) { + case QDialog::Accepted: + addDriveFromDialog(ui, dialog); + break; + } +} + +void SettingsHarddisks::on_pushButtonRemove_clicked() { + auto idx = ui->tableView->selectionModel()->currentIndex(); + if (! idx.isValid()) { + return; + } + + auto* model = ui->tableView->model(); + model->removeRow(idx.row()); +} + diff --git a/src/qt/qt_settingsharddisks.hpp b/src/qt/qt_settingsharddisks.hpp new file mode 100644 index 000000000..0289d2ccb --- /dev/null +++ b/src/qt/qt_settingsharddisks.hpp @@ -0,0 +1,35 @@ +#ifndef QT_SETTINGSHARDDISKS_HPP +#define QT_SETTINGSHARDDISKS_HPP + +#include + +namespace Ui { +class SettingsHarddisks; +} + +class SettingsHarddisks : public QWidget +{ + Q_OBJECT + +public: + explicit SettingsHarddisks(QWidget *parent = nullptr); + ~SettingsHarddisks(); + + void save(); + +private slots: + void on_comboBoxChannel_currentIndexChanged(int index); + +private slots: + void on_pushButtonRemove_clicked(); + void on_pushButtonExisting_clicked(); + void on_pushButtonNew_clicked(); + void on_comboBoxBus_currentIndexChanged(int index); + + void onTableRowChanged(const QModelIndex& current); + +private: + Ui::SettingsHarddisks *ui; +}; + +#endif // QT_SETTINGSHARDDISKS_HPP diff --git a/src/qt/qt_settingsharddisks.ui b/src/qt/qt_settingsharddisks.ui new file mode 100644 index 000000000..4bded8aab --- /dev/null +++ b/src/qt/qt_settingsharddisks.ui @@ -0,0 +1,95 @@ + + + SettingsHarddisks + + + + 0 + 0 + 400 + 300 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + false + + + + + + + + + Bus + + + + + + + + + + ID + + + + + + + + + + + + + + New + + + + + + + Existing + + + + + + + Remove + + + + + + + + + + diff --git a/src/qt/qt_settingsinput.cpp b/src/qt/qt_settingsinput.cpp new file mode 100644 index 000000000..8a8d8e1bf --- /dev/null +++ b/src/qt/qt_settingsinput.cpp @@ -0,0 +1,114 @@ +#include "qt_settingsinput.hpp" +#include "ui_qt_settingsinput.h" + +#include + +extern "C" { +#include <86box/86box.h> +#include <86box/device.h> +#include <86box/machine.h> +#include <86box/mouse.h> +#include <86box/gameport.h> +} + +#include "qt_deviceconfig.hpp" + +SettingsInput::SettingsInput(QWidget *parent) : + QWidget(parent), + ui(new Ui::SettingsInput) +{ + ui->setupUi(this); + + onCurrentMachineChanged(machine); +} + +SettingsInput::~SettingsInput() +{ + delete ui; +} + +void SettingsInput::save() { + mouse_type = ui->comboBoxMouse->currentData().toInt(); + joystick_type = ui->comboBoxJoystick->currentData().toInt(); +} + +void SettingsInput::onCurrentMachineChanged(int machineId) { + // win_settings_video_proc, WM_INITDIALOG + this->machineId = machineId; + + const auto* machine = &machines[machineId]; + auto* mouseModel = ui->comboBoxMouse->model(); + auto removeRows = mouseModel->rowCount(); + + int selectedRow = 0; + for (int i = 0; i < mouse_get_ndev(); ++i) { + const auto* dev = mouse_get_device(i); + if ((i == MOUSE_TYPE_INTERNAL) && !(machines[machineId].flags & MACHINE_MOUSE)) { + continue; + } + + if (device_is_valid(dev, machine->flags) == 0) { + continue; + } + + QString name = DeviceConfig::DeviceName(dev, mouse_get_internal_name(i), 0); + int row = mouseModel->rowCount(); + mouseModel->insertRow(row); + auto idx = mouseModel->index(row, 0); + + mouseModel->setData(idx, name, Qt::DisplayRole); + mouseModel->setData(idx, i, Qt::UserRole); + + if (i == mouse_type) { + selectedRow = row - removeRows; + } + } + mouseModel->removeRows(0, removeRows); + ui->comboBoxMouse->setCurrentIndex(selectedRow); + + + int i = 0; + char* joyName = joystick_get_name(i); + auto* joystickModel = ui->comboBoxJoystick->model(); + removeRows = joystickModel->rowCount(); + selectedRow = 0; + while (joyName) { + int row = joystickModel->rowCount(); + joystickModel->insertRow(row); + auto idx = joystickModel->index(row, 0); + + joystickModel->setData(idx, joyName, Qt::DisplayRole); + joystickModel->setData(idx, i, Qt::UserRole); + + if (i == joystick_type) { + selectedRow = row - removeRows; + } + + ++i; + joyName = joystick_get_name(i); + } + joystickModel->removeRows(0, removeRows); + ui->comboBoxJoystick->setCurrentIndex(selectedRow); +} + +void SettingsInput::on_comboBoxMouse_currentIndexChanged(int index) { + int mouseId = ui->comboBoxMouse->currentData().toInt(); + ui->pushButtonConfigureMouse->setEnabled(mouse_has_config(mouseId) > 0); +} + + +void SettingsInput::on_comboBoxJoystick_currentIndexChanged(int index) { + int joystickId = ui->comboBoxJoystick->currentData().toInt(); + for (int i = 0; i < 4; ++i) { + auto* btn = findChild(QString("pushButtonJoystick%1").arg(i+1)); + if (btn == nullptr) { + continue; + } + btn->setEnabled(joystick_get_max_joysticks(joystickId) > i); + } +} + +void SettingsInput::on_pushButtonConfigureMouse_clicked() { + int mouseId = ui->comboBoxMouse->currentData().toInt(); + DeviceConfig::ConfigureDevice(mouse_get_device(mouseId)); +} diff --git a/src/qt/qt_settingsinput.hpp b/src/qt/qt_settingsinput.hpp new file mode 100644 index 000000000..f69453dea --- /dev/null +++ b/src/qt/qt_settingsinput.hpp @@ -0,0 +1,33 @@ +#ifndef QT_SETTINGSINPUT_HPP +#define QT_SETTINGSINPUT_HPP + +#include + +namespace Ui { +class SettingsInput; +} + +class SettingsInput : public QWidget +{ + Q_OBJECT + +public: + explicit SettingsInput(QWidget *parent = nullptr); + ~SettingsInput(); + + void save(); + +public slots: + void onCurrentMachineChanged(int machineId); + +private slots: + void on_pushButtonConfigureMouse_clicked(); + void on_comboBoxJoystick_currentIndexChanged(int index); + void on_comboBoxMouse_currentIndexChanged(int index); + +private: + Ui::SettingsInput *ui; + int machineId = 0; +}; + +#endif // QT_SETTINGSINPUT_HPP diff --git a/src/qt/qt_settingsinput.ui b/src/qt/qt_settingsinput.ui new file mode 100644 index 000000000..28bf16eb8 --- /dev/null +++ b/src/qt/qt_settingsinput.ui @@ -0,0 +1,134 @@ + + + SettingsInput + + + + 0 + 0 + 400 + 300 + + + + Form + + + + 0 + + + 0 + + + 0 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Mouse + + + + + + + + + + Configure + + + + + + + Joystick + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Joystick 1... + + + + + + + Joystick 2... + + + + + + + Joystick 3... + + + + + + + Joystick 4... + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + diff --git a/src/qt/qt_settingsmachine.cpp b/src/qt/qt_settingsmachine.cpp new file mode 100644 index 000000000..d42216107 --- /dev/null +++ b/src/qt/qt_settingsmachine.cpp @@ -0,0 +1,348 @@ +#include "qt_settingsmachine.hpp" +#include "ui_qt_settingsmachine.h" + +#include +#include +#include +#include +#include + +extern "C" { +#include "../cpu/cpu.h" + +#include <86box/86box.h> +#include <86box/config.h> +#include <86box/device.h> +#include <86box/machine.h> +} + +// from nvr.h, which we can't import into CPP code +#define TIME_SYNC_DISABLED 0 +#define TIME_SYNC_ENABLED 1 +#define TIME_SYNC_UTC 2 + +#include "qt_deviceconfig.hpp" +#include "qt_models_common.hpp" + +/* +class MachineModel : public QAbstractListModel { +public: + MachineModel(QObject* parent) : QAbstractListModel(parent) {} + + bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override; + bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; +private: + struct Entry { + QString name; + int id; + }; + QList entries; +}; + +bool MachineModel::insertRows(int row, int count, const QModelIndex &parent) { + beginInsertRows(parent, row, row + count - 1); + for (int i = 0; i < count; ++i) { + entries.insert(row, Entry{}); + } + endInsertRows(); + + return true; +} + +bool MachineModel::removeRows(int row, int count, const QModelIndex &parent) { + beginRemoveRows(parent, row, row + count - 1); + for (int i = 0; i < count; ++i) { + entries.removeAt(row); + } + endRemoveRows(); + + return true; +} + +QVariant MachineModel::data(const QModelIndex &index, int role) const { + Q_ASSERT(checkIndex(index, QAbstractItemModel::CheckIndexOption::IndexIsValid | QAbstractItemModel::CheckIndexOption::ParentIsInvalid)); + + switch (role) { + case Qt::DisplayRole: + return entries.at(index.row()).name; + case Qt::UserRole: + return entries.at(index.row()).id; + default: + return {}; + } +} + +int MachineModel::rowCount(const QModelIndex &parent) const { + (void) parent; + return entries.size(); +} + +bool MachineModel::setData(const QModelIndex &index, const QVariant &value, int role) { + Entry* entry = nullptr; + if (index.row() < entries.size()) { + entry = &entries[index.row()]; + } else if (index.row() == entries.size()) { + entries.append(Entry{}); + entry = &entries.back(); + } + + bool ret = true; + if (entry != nullptr) { + switch (role) { + case Qt::DisplayRole: + entry->name = value.toString(); + case Qt::UserRole: + entry->id = value.toInt(); + default: + ret = false; + break; + } + } + return ret; +} +*/ + +SettingsMachine::SettingsMachine(QWidget *parent) : + QWidget(parent), + ui(new Ui::SettingsMachine) +{ + ui->setupUi(this); + + switch (time_sync) { + case TIME_SYNC_ENABLED: + ui->radioButtonLocalTime->setChecked(true); + break; + case TIME_SYNC_ENABLED | TIME_SYNC_UTC: + ui->radioButtonUTC->setChecked(true); + break; + case TIME_SYNC_DISABLED: + default: + ui->radioButtonDisabled->setChecked(true); + break; + } + + auto* waitStatesModel = ui->comboBoxWaitStates->model(); + waitStatesModel->insertRows(0, 9); + auto idx = waitStatesModel->index(0, 0); + waitStatesModel->setData(idx, "Default", Qt::DisplayRole); + waitStatesModel->setData(idx, 0, Qt::UserRole); + for (int i = 0; i < 8; ++i) { + idx = waitStatesModel->index(i+1, 0); + waitStatesModel->setData(idx, QString("%1 Wait State(s)").arg(i), Qt::DisplayRole); + waitStatesModel->setData(idx, i+1, Qt::UserRole); + } + + int selectedMachineType = 0; + auto* machineTypesModel = ui->comboBoxMachineType->model(); + for (int i = 0; i < MACHINE_TYPE_MAX; ++i) { + Models::AddEntry(machineTypesModel, machine_types[i].name, machine_types[i].id); + if (machine_types[i].id == machines[machine].type) { + selectedMachineType = i; + } + } + ui->comboBoxMachineType->setCurrentIndex(selectedMachineType); +} + +SettingsMachine::~SettingsMachine() { + delete ui; +} + +void SettingsMachine::save() { + machine = ui->comboBoxMachine->currentData().toInt(); + cpu_f = const_cast(&cpu_families[ui->comboBoxCPU->currentData().toInt()]); + cpu = ui->comboBoxSpeed->currentData().toInt(); + fpu_type = ui->comboBoxFPU->currentData().toInt(); + cpu_use_dynarec = ui->checkBoxDynamicRecompiler->isChecked() ? 1 : 0; + if (machines[machine].ram_granularity < 1024) { + mem_size = ui->spinBoxRAM->value(); + } else { + mem_size = ui->spinBoxRAM->value() * 1024; + } + if (ui->comboBoxWaitStates->isEnabled()) { + cpu_waitstates = ui->comboBoxWaitStates->currentData().toInt(); + } else { + cpu_waitstates = 0; + } + + time_sync = 0; + if (ui->radioButtonLocalTime->isChecked()) { + time_sync = TIME_SYNC_ENABLED; + } + if (ui->radioButtonUTC->isChecked()) { + time_sync = TIME_SYNC_ENABLED | TIME_SYNC_UTC; + } +} + +void SettingsMachine::on_comboBoxMachineType_currentIndexChanged(int index) { + auto* model = ui->comboBoxMachine->model(); + int removeRows = model->rowCount(); + + int selectedMachineRow = 0; + for (int i = 0; i < machine_count(); ++i) { + if ((machines[i].type == index) && machine_available(i)) { + int row = Models::AddEntry(model, machines[i].name, i); + if (i == machine) { + selectedMachineRow = row - removeRows; + } + } + } + model->removeRows(0, removeRows); + + ui->comboBoxMachine->setCurrentIndex(-1); + ui->comboBoxMachine->setCurrentIndex(selectedMachineRow); +} + + +void SettingsMachine::on_comboBoxMachine_currentIndexChanged(int index) { + // win_settings_machine_recalc_machine + if (index < 0) { + return; + } + + int machineId = ui->comboBoxMachine->currentData().toInt(); + const auto* device = machine_getdevice(machineId); + ui->pushButtonConfigure->setEnabled((device != nullptr) && (device->config != nullptr)); + + auto* modelCpu = ui->comboBoxCPU->model(); + int removeRows = modelCpu->rowCount(); + + int i = 0; + int eligibleRows = 0; + int selectedCpuFamilyRow = 0; + while (cpu_families[i].package != 0) { + if (cpu_family_is_eligible(&cpu_families[i], machineId)) { + Models::AddEntry(modelCpu, QString("%1 %2").arg(cpu_families[i].manufacturer, cpu_families[i].name), i); + if (&cpu_families[i] == cpu_f) { + selectedCpuFamilyRow = eligibleRows; + } + ++eligibleRows; + } + ++i; + } + modelCpu->removeRows(0, removeRows); + ui->comboBoxCPU->setEnabled(eligibleRows > 1); + ui->comboBoxCPU->setCurrentIndex(-1); + ui->comboBoxCPU->setCurrentIndex(selectedCpuFamilyRow); + + auto* machine = &machines[machineId]; + if ((machine->ram_granularity < 1024)) { + ui->spinBoxRAM->setMinimum(machine->min_ram); + ui->spinBoxRAM->setMaximum(machine->max_ram); + ui->spinBoxRAM->setSingleStep(machine->ram_granularity); + ui->spinBoxRAM->setSuffix(" KiB"); + ui->spinBoxRAM->setValue(mem_size); + } else { + uint maxram; +#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64)) + maxram = std::min(machine->max_ram, 2097152U); +#else + maxram = std::min(machine->max_ram, 3145728U); +#endif + ui->spinBoxRAM->setMinimum(machine->min_ram / 1024); + ui->spinBoxRAM->setMaximum(maxram / 1024); + ui->spinBoxRAM->setSingleStep(machine->ram_granularity / 1024); + ui->spinBoxRAM->setSuffix(" MiB"); + ui->spinBoxRAM->setValue(mem_size / 1024); + } + ui->spinBoxRAM->setEnabled(machine->min_ram != machine->max_ram); + ui->spinBoxRAM->setEnabled(machine->min_ram != machine->max_ram); + + emit currentMachineChanged(machineId); +} + + +void SettingsMachine::on_comboBoxCPU_currentIndexChanged(int index) { + if (index < 0) { + return; + } + + int machineId = ui->comboBoxMachine->currentData().toInt(); + int cpuFamilyId = ui->comboBoxCPU->currentData().toInt(); + const auto* cpuFamily = &cpu_families[cpuFamilyId]; + + auto* modelSpeed = ui->comboBoxSpeed->model(); + int removeRows = modelSpeed->rowCount(); + + // win_settings_machine_recalc_cpu_m + int i = 0; + int eligibleRows = 0; + int selectedSpeedRow = 0; + while (cpuFamily->cpus[i].cpu_type != 0) { + if (cpu_is_eligible(cpuFamily, i, machineId)) { + Models::AddEntry(modelSpeed, QString("%1").arg(cpuFamily->cpus[i].name), i); + if (cpu == i) { + selectedSpeedRow = eligibleRows; + } + ++eligibleRows; + } + ++i; + } + modelSpeed->removeRows(0, removeRows); + ui->comboBoxSpeed->setEnabled(eligibleRows > 1); + ui->comboBoxSpeed->setCurrentIndex(-1); + ui->comboBoxSpeed->setCurrentIndex(selectedSpeedRow); +} + + +void SettingsMachine::on_comboBoxSpeed_currentIndexChanged(int index) { + if (index < 0) { + return; + } + + // win_settings_machine_recalc_cpu + int cpuFamilyId = ui->comboBoxCPU->currentData().toInt(); + const auto* cpuFamily = &cpu_families[cpuFamilyId]; + int cpuId = ui->comboBoxSpeed->currentData().toInt(); + uint cpuType = cpuFamily->cpus[cpuId].cpu_type; + + if ((cpuType >= CPU_286) && (cpuType <= CPU_386DX)) { + ui->comboBoxWaitStates->setEnabled(true); + ui->comboBoxWaitStates->setCurrentIndex(cpu_waitstates); + } else { + ui->comboBoxWaitStates->setCurrentIndex(0); + ui->comboBoxWaitStates->setEnabled(false); + } + +#ifdef USE_DYNAREC + uint8_t flags = cpuFamily->cpus[cpuId].cpu_flags; + if (! (flags & CPU_SUPPORTS_DYNAREC)) { + ui->checkBoxDynamicRecompiler->setChecked(false); + ui->checkBoxDynamicRecompiler->setEnabled(false); + } else if (flags & CPU_REQUIRES_DYNAREC) { + ui->checkBoxDynamicRecompiler->setChecked(true); + ui->checkBoxDynamicRecompiler->setEnabled(false); + } else { + ui->checkBoxDynamicRecompiler->setChecked(cpu_use_dynarec); + ui->checkBoxDynamicRecompiler->setEnabled(true); + } +#endif + + // win_settings_machine_recalc_fpu + auto* modelFpu = ui->comboBoxFPU->model(); + int removeRows = modelFpu->rowCount(); + + int i = 0; + int selectedFpuRow = 0; + for (const char* fpuName = fpu_get_name_from_index(cpuFamily, cpuId, i); fpuName != nullptr; fpuName = fpu_get_name_from_index(cpuFamily, cpuId, ++i)) { + auto fpuType = fpu_get_type_from_index(cpuFamily, cpuId, i); + Models::AddEntry(modelFpu, QString("%1").arg(fpuName), fpuType); + if (fpu_type == fpuType) { + selectedFpuRow = i; + } + } + + modelFpu->removeRows(0, removeRows); + ui->comboBoxFPU->setEnabled(modelFpu->rowCount() > 1); + ui->comboBoxFPU->setCurrentIndex(-1); + ui->comboBoxFPU->setCurrentIndex(selectedFpuRow); +} + +void SettingsMachine::on_pushButtonConfigure_clicked() { + // deviceconfig_inst_open + int machineId = ui->comboBoxMachine->currentData().toInt(); + const auto* device = machine_getdevice(machineId); + DeviceConfig::ConfigureDevice(device); +} diff --git a/src/qt/qt_settingsmachine.hpp b/src/qt/qt_settingsmachine.hpp new file mode 100644 index 000000000..d0d4aabd2 --- /dev/null +++ b/src/qt/qt_settingsmachine.hpp @@ -0,0 +1,41 @@ +#ifndef QT_SETTINGSMACHINE_HPP +#define QT_SETTINGSMACHINE_HPP + +#include + +namespace Ui { +class SettingsMachine; +} + +class SettingsMachine : public QWidget +{ + Q_OBJECT + +public: + explicit SettingsMachine(QWidget *parent = nullptr); + ~SettingsMachine(); + + void save(); + +signals: + void currentMachineChanged(int machineId); +private slots: + void on_pushButtonConfigure_clicked(); + +private slots: + void on_comboBoxSpeed_currentIndexChanged(int index); + +private slots: + void on_comboBoxCPU_currentIndexChanged(int index); + +private slots: + void on_comboBoxMachine_currentIndexChanged(int index); + +private slots: + void on_comboBoxMachineType_currentIndexChanged(int index); + +private: + Ui::SettingsMachine *ui; +}; + +#endif // QT_SETTINGSMACHINE_HPP diff --git a/src/qt/qt_settingsmachine.ui b/src/qt/qt_settingsmachine.ui new file mode 100644 index 000000000..5e902a751 --- /dev/null +++ b/src/qt/qt_settingsmachine.ui @@ -0,0 +1,229 @@ + + + SettingsMachine + + + + 0 + 0 + 458 + 390 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Machine Type + + + + + + + + + + Machine + + + + + + + CPU + + + + + + + FPU + + + + + + + Wait States + + + + + + + Memory + + + + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + Speed + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + 0 + 0 + + + + Configure + + + + + + + + + + + + + + 2 + 2 + + + + Dynamic Recompiler + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Time Synchronization + + + + + + Disabled + + + + + + + Enabled (Local Time) + + + + + + + Enabled (UTC) + + + + + + + + + + + diff --git a/src/qt/qt_settingsnetwork.cpp b/src/qt/qt_settingsnetwork.cpp new file mode 100644 index 000000000..18d06a520 --- /dev/null +++ b/src/qt/qt_settingsnetwork.cpp @@ -0,0 +1,113 @@ +#include "qt_settingsnetwork.hpp" +#include "ui_qt_settingsnetwork.h" + +extern "C" { +#include <86box/86box.h> +#include <86box/device.h> +#include <86box/machine.h> +#include <86box/network.h> +} + +#include "qt_models_common.hpp" +#include "qt_deviceconfig.hpp" + +static void enableElements(Ui::SettingsNetwork *ui) { + int netType = ui->comboBoxNetwork->currentData().toInt(); + ui->comboBoxPcap->setEnabled(netType == NET_TYPE_PCAP); + + bool adaptersEnabled = netType == NET_TYPE_SLIRP || + (netType == NET_TYPE_PCAP && ui->comboBoxPcap->currentData().toInt() > 0); + ui->comboBoxAdapter->setEnabled(adaptersEnabled); + ui->pushButtonConfigure->setEnabled(adaptersEnabled && ui->comboBoxAdapter->currentIndex() > 0); +} + +SettingsNetwork::SettingsNetwork(QWidget *parent) : + QWidget(parent), + ui(new Ui::SettingsNetwork) +{ + ui->setupUi(this); + + auto* model = ui->comboBoxNetwork->model(); + Models::AddEntry(model, "None", NET_TYPE_NONE); + Models::AddEntry(model, "PCap", NET_TYPE_PCAP); + Models::AddEntry(model, "SLiRP", NET_TYPE_SLIRP); + ui->comboBoxNetwork->setCurrentIndex(network_type); + + int selectedRow = 0; + model = ui->comboBoxPcap->model(); + QString currentPcapDevice = network_host; + for (int c = 0; c < network_ndev; c++) { + + Models::AddEntry(model, network_devs[c].description, c); + if (QString(network_devs[c].device) == currentPcapDevice) { + selectedRow = c; + } + } + ui->comboBoxPcap->setCurrentIndex(-1); + ui->comboBoxPcap->setCurrentIndex(selectedRow); + + onCurrentMachineChanged(machine); + enableElements(ui); +} + +SettingsNetwork::~SettingsNetwork() +{ + delete ui; +} + +void SettingsNetwork::save() { + network_type = ui->comboBoxNetwork->currentData().toInt(); + memset(network_host, '\0', sizeof(network_host)); + strcpy(network_host, network_devs[ui->comboBoxPcap->currentData().toInt()].device); + network_card = ui->comboBoxAdapter->currentData().toInt(); +} + +void SettingsNetwork::onCurrentMachineChanged(int machineId) { + this->machineId = machineId; + auto* machine = &machines[machineId]; + + auto* model = ui->comboBoxAdapter->model(); + auto removeRows = model->rowCount(); + int c = 0; + int selectedRow = 0; + while (true) { + auto name = DeviceConfig::DeviceName(network_card_getdevice(c), network_card_get_internal_name(c), 1); + if (name.isEmpty()) { + break; + } + + if (network_card_available(c) && device_is_valid(network_card_getdevice(c), machine->flags)) { + int row = Models::AddEntry(model, name, c); + if (c == network_card) { + selectedRow = row - removeRows; + } + } + + c++; + } + model->removeRows(0, removeRows); + ui->comboBoxAdapter->setEnabled(model->rowCount() > 0); + ui->comboBoxAdapter->setCurrentIndex(-1); + ui->comboBoxAdapter->setCurrentIndex(selectedRow); +} + +void SettingsNetwork::on_comboBoxNetwork_currentIndexChanged(int index) { + if (index < 0) { + return; + } + + enableElements(ui); +} + +void SettingsNetwork::on_comboBoxAdapter_currentIndexChanged(int index) { + if (index < 0) { + return; + } + + enableElements(ui); +} + +void SettingsNetwork::on_pushButtonConfigure_clicked() { + DeviceConfig::ConfigureDevice(network_card_getdevice(ui->comboBoxAdapter->currentData().toInt())); +} + diff --git a/src/qt/qt_settingsnetwork.hpp b/src/qt/qt_settingsnetwork.hpp new file mode 100644 index 000000000..f17eb98f1 --- /dev/null +++ b/src/qt/qt_settingsnetwork.hpp @@ -0,0 +1,33 @@ +#ifndef QT_SETTINGSNETWORK_HPP +#define QT_SETTINGSNETWORK_HPP + +#include + +namespace Ui { +class SettingsNetwork; +} + +class SettingsNetwork : public QWidget +{ + Q_OBJECT + +public: + explicit SettingsNetwork(QWidget *parent = nullptr); + ~SettingsNetwork(); + + void save(); + +public slots: + void onCurrentMachineChanged(int machineId); + +private slots: + void on_pushButtonConfigure_clicked(); + void on_comboBoxAdapter_currentIndexChanged(int index); + void on_comboBoxNetwork_currentIndexChanged(int index); + +private: + Ui::SettingsNetwork *ui; + int machineId = 0; +}; + +#endif // QT_SETTINGSNETWORK_HPP diff --git a/src/qt/qt_settingsnetwork.ui b/src/qt/qt_settingsnetwork.ui new file mode 100644 index 000000000..045ddbbae --- /dev/null +++ b/src/qt/qt_settingsnetwork.ui @@ -0,0 +1,101 @@ + + + SettingsNetwork + + + + 0 + 0 + 400 + 300 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + PCap Device + + + + + + + Network Adapter + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + Network Type + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + Configure + + + + + + + + + + + diff --git a/src/qt/qt_settingsotherperipherals.cpp b/src/qt/qt_settingsotherperipherals.cpp new file mode 100644 index 000000000..e52c3ead1 --- /dev/null +++ b/src/qt/qt_settingsotherperipherals.cpp @@ -0,0 +1,133 @@ +#include "qt_settingsotherperipherals.hpp" +#include "ui_qt_settingsotherperipherals.h" + +extern "C" { +#include <86box/86box.h> +#include <86box/device.h> +#include <86box/isamem.h> +#include <86box/isartc.h> +} + +#include "qt_deviceconfig.hpp" +#include "qt_models_common.hpp" + +SettingsOtherPeripherals::SettingsOtherPeripherals(QWidget *parent) : + QWidget(parent), + ui(new Ui::SettingsOtherPeripherals) +{ + ui->setupUi(this); + + ui->checkBoxISABugger->setChecked(bugger_enabled > 0 ? true : false); + ui->checkBoxPOSTCard->setChecked(postcard_enabled > 0 ? true : false); + + auto* model = ui->comboBoxRTC->model(); + int d = 0; + int selectedRow = 0; + while (true) { + QString name = DeviceConfig::DeviceName(isartc_get_device(d), isartc_get_internal_name(d), 0); + if (name.isEmpty()) { + break; + } + + int row = Models::AddEntry(model, name, d); + if (d == isartc_type) { + selectedRow = row; + } + ++d; + } + ui->comboBoxRTC->setCurrentIndex(selectedRow); + + for (int c = 0; c < ISAMEM_MAX; c++) { + auto* cbox = findChild(QString("comboBoxCard%1").arg(c + 1)); + model = cbox->model(); + d = 0; + selectedRow = 0; + while (true) { + QString name = DeviceConfig::DeviceName(isamem_get_device(d), isamem_get_internal_name(d), 0); + if (name.isEmpty()) { + break; + } + + int row = Models::AddEntry(model, name, d); + if (d == isartc_type) { + selectedRow = row; + } + ++d; + } + cbox->setCurrentIndex(-1); + cbox->setCurrentIndex(selectedRow); + } +} + +SettingsOtherPeripherals::~SettingsOtherPeripherals() +{ + delete ui; +} + +void SettingsOtherPeripherals::save() { + /* Other peripherals category */ + bugger_enabled = ui->checkBoxISABugger->isChecked() ? 1 : 0; + postcard_enabled = ui->checkBoxPOSTCard->isChecked() ? 1 : 0; + isartc_type = ui->comboBoxRTC->currentData().toInt(); + + /* ISA memory boards. */ + for (int i = 0; i < ISAMEM_MAX; i++) { + auto* cbox = findChild(QString("comboBoxCard%1").arg(i + 1)); + isamem_type[i] = cbox->currentData().toInt(); + } +} + +void SettingsOtherPeripherals::on_comboBoxRTC_currentIndexChanged(int index) { + if (index < 0) { + return; + } + ui->pushButtonConfigureRTC->setEnabled(index != 0); +} + +void SettingsOtherPeripherals::on_pushButtonConfigureRTC_clicked() { + DeviceConfig::ConfigureDevice(isartc_get_device(ui->comboBoxRTC->currentData().toInt())); +} + +void SettingsOtherPeripherals::on_comboBoxCard1_currentIndexChanged(int index) { + if (index < 0) { + return; + } + ui->pushButtonConfigureCard1->setEnabled(index != 0); +} + +void SettingsOtherPeripherals::on_pushButtonConfigureCard1_clicked() { + DeviceConfig::ConfigureDevice(isamem_get_device(ui->comboBoxCard1->currentData().toInt())); +} + +void SettingsOtherPeripherals::on_comboBoxCard2_currentIndexChanged(int index) { + if (index < 0) { + return; + } + ui->pushButtonConfigureCard2->setEnabled(index != 0); +} + +void SettingsOtherPeripherals::on_pushButtonConfigureCard2_clicked() { + DeviceConfig::ConfigureDevice(isamem_get_device(ui->comboBoxCard2->currentData().toInt())); +} + +void SettingsOtherPeripherals::on_comboBoxCard3_currentIndexChanged(int index) { + if (index < 0) { + return; + } + ui->pushButtonConfigureCard3->setEnabled(index != 0); +} + +void SettingsOtherPeripherals::on_pushButtonConfigureCard3_clicked() { + DeviceConfig::ConfigureDevice(isamem_get_device(ui->comboBoxCard3->currentData().toInt())); +} + +void SettingsOtherPeripherals::on_comboBoxCard4_currentIndexChanged(int index) { + if (index < 0) { + return; + } + ui->pushButtonConfigureCard4->setEnabled(index != 0); +} + +void SettingsOtherPeripherals::on_pushButtonConfigureCard4_clicked() { + DeviceConfig::ConfigureDevice(isamem_get_device(ui->comboBoxCard4->currentData().toInt())); +} diff --git a/src/qt/qt_settingsotherperipherals.hpp b/src/qt/qt_settingsotherperipherals.hpp new file mode 100644 index 000000000..605b629ba --- /dev/null +++ b/src/qt/qt_settingsotherperipherals.hpp @@ -0,0 +1,53 @@ +#ifndef QT_SETTINGSOTHERPERIPHERALS_HPP +#define QT_SETTINGSOTHERPERIPHERALS_HPP + +#include + +namespace Ui { +class SettingsOtherPeripherals; +} + +class SettingsOtherPeripherals : public QWidget +{ + Q_OBJECT + +public: + explicit SettingsOtherPeripherals(QWidget *parent = nullptr); + ~SettingsOtherPeripherals(); + + void save(); +private slots: + void on_pushButtonConfigureCard4_clicked(); + +private slots: + void on_comboBoxCard4_currentIndexChanged(int index); + +private slots: + void on_pushButtonConfigureCard3_clicked(); + +private slots: + void on_comboBoxCard3_currentIndexChanged(int index); + +private slots: + void on_pushButtonConfigureCard2_clicked(); + +private slots: + void on_comboBoxCard2_currentIndexChanged(int index); + +private slots: + void on_pushButtonConfigureCard1_clicked(); + +private slots: + void on_comboBoxCard1_currentIndexChanged(int index); + +private slots: + void on_pushButtonConfigureRTC_clicked(); + +private slots: + void on_comboBoxRTC_currentIndexChanged(int index); + +private: + Ui::SettingsOtherPeripherals *ui; +}; + +#endif // QT_SETTINGSOTHERPERIPHERALS_HPP diff --git a/src/qt/qt_settingsotherperipherals.ui b/src/qt/qt_settingsotherperipherals.ui new file mode 100644 index 000000000..a47b79425 --- /dev/null +++ b/src/qt/qt_settingsotherperipherals.ui @@ -0,0 +1,162 @@ + + + SettingsOtherPeripherals + + + + 0 + 0 + 421 + 458 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + ISA RTC + + + + + + + + + + Configure + + + + + + + + + ISA Memory Expansion + + + + + + Configure + + + + + + + + + + Configure + + + + + + + Card 2 + + + + + + + Card 3 + + + + + + + Configure + + + + + + + + + + Card 1 + + + + + + + + + + + + + Configure + + + + + + + Card 4 + + + + + + + + + + + + ISABugger Device + + + + + + + POST card + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + diff --git a/src/qt/qt_settingsotherremovable.cpp b/src/qt/qt_settingsotherremovable.cpp new file mode 100644 index 000000000..2e989cda1 --- /dev/null +++ b/src/qt/qt_settingsotherremovable.cpp @@ -0,0 +1,267 @@ +#include "qt_settingsotherremovable.hpp" +#include "ui_qt_settingsotherremovable.h" + +extern "C" { +#include <86box/timer.h> +#include <86box/scsi_device.h> +#include <86box/mo.h> +#include <86box/zip.h> +} + +#include + +#include "qt_models_common.hpp" +#include "qt_harddrive_common.hpp" + +static QString moDriveTypeName(int i) { + return QString("%1 %2 %3").arg(mo_drive_types[i].vendor, mo_drive_types[i].model, mo_drive_types[i].revision); +} + +static void setMOBus(QAbstractItemModel* model, const QModelIndex& idx, uint8_t bus, uint8_t channel) { + QIcon icon; + switch (bus) { + case MO_BUS_DISABLED: + icon = QIcon(":/settings/win/icons/mo_disabled.ico"); + break; + case MO_BUS_ATAPI: + case MO_BUS_SCSI: + icon = QIcon(":/settings/win/icons/mo.ico"); + break; + } + + auto i = idx.siblingAtColumn(0); + model->setData(i, Harddrives::BusChannelName(bus, channel)); + model->setData(i, bus, Qt::UserRole); + model->setData(i, channel, Qt::UserRole + 1); + model->setData(i, icon, Qt::DecorationRole); +} + +static void setMOType(QAbstractItemModel* model, const QModelIndex& idx, uint32_t type) { + auto i = idx.siblingAtColumn(1); + if (idx.siblingAtColumn(0).data(Qt::UserRole).toUInt() == MO_BUS_DISABLED) { + model->setData(i, "None"); + } else { + model->setData(i, moDriveTypeName(type)); + } + model->setData(i, type, Qt::UserRole); +} + +static void setZIPBus(QAbstractItemModel* model, const QModelIndex& idx, uint8_t bus, uint8_t channel) { + QIcon icon; + switch (bus) { + case ZIP_BUS_DISABLED: + icon = QIcon(":/settings/win/icons/zip_disabled.ico"); + break; + case ZIP_BUS_ATAPI: + case ZIP_BUS_SCSI: + icon = QIcon(":/settings/win/icons/zip.ico"); + break; + } + + auto i = idx.siblingAtColumn(0); + model->setData(i, Harddrives::BusChannelName(bus, channel)); + model->setData(i, bus, Qt::UserRole); + model->setData(i, channel, Qt::UserRole + 1); + model->setData(i, icon, Qt::DecorationRole); +} + +static void setZIPType(QAbstractItemModel* model, const QModelIndex& idx, bool is250) { + auto i = idx.siblingAtColumn(1); + model->setData(i, is250 ? "ZIP 250" : "ZIP 100"); + model->setData(i, is250, Qt::UserRole); +} + +SettingsOtherRemovable::SettingsOtherRemovable(QWidget *parent) : + QWidget(parent), + ui(new Ui::SettingsOtherRemovable) +{ + ui->setupUi(this); + + Harddrives::populateRemovableBuses(ui->comboBoxMOBus->model()); + auto* model = ui->comboBoxMOType->model(); + for (uint32_t i = 0; i < KNOWN_MO_DRIVE_TYPES; i++) { + Models::AddEntry(model, moDriveTypeName(i), i); + } + + model = new QStandardItemModel(0, 2, this); + ui->tableViewMO->setModel(model); + model->setHeaderData(0, Qt::Horizontal, "Bus"); + model->setHeaderData(1, Qt::Horizontal, "Type"); + model->insertRows(0, MO_NUM); + for (int i = 0; i < MO_NUM; i++) { + auto idx = model->index(i, 0); + setMOBus(model, idx, mo_drives[i].bus_type, mo_drives[i].res); + setMOType(model, idx.siblingAtColumn(1), mo_drives[i].type); + } + ui->tableViewMO->resizeColumnsToContents(); + ui->tableViewMO->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); + + connect(ui->tableViewMO->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &SettingsOtherRemovable::onMORowChanged); + ui->tableViewMO->setCurrentIndex(model->index(0, 0)); + + + + + Harddrives::populateRemovableBuses(ui->comboBoxZIPBus->model()); + + model = new QStandardItemModel(0, 2, this); + ui->tableViewZIP->setModel(model); + model->setHeaderData(0, Qt::Horizontal, "Bus"); + model->setHeaderData(1, Qt::Horizontal, "Type"); + model->insertRows(0, ZIP_NUM); + for (int i = 0; i < ZIP_NUM; i++) { + auto idx = model->index(i, 0); + setZIPBus(model, idx, zip_drives[i].bus_type, zip_drives[i].res); + setZIPType(model, idx, zip_drives[i].is_250 > 0); + } + ui->tableViewZIP->resizeColumnsToContents(); + ui->tableViewZIP->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); + + connect(ui->tableViewZIP->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &SettingsOtherRemovable::onZIPRowChanged); + ui->tableViewZIP->setCurrentIndex(model->index(0, 0)); +} + +SettingsOtherRemovable::~SettingsOtherRemovable() +{ + delete ui; +} + +void SettingsOtherRemovable::save() { + auto* model = ui->tableViewMO->model(); + memset(mo_drives, 0, sizeof(mo_drives)); + for (int i = 0; i < MO_NUM; i++) { + mo_drives[i].f = NULL; + mo_drives[i].priv = NULL; + mo_drives[i].bus_type = model->index(i, 0).data(Qt::UserRole).toUInt(); + mo_drives[i].res = model->index(i, 0).data(Qt::UserRole + 1).toUInt(); + mo_drives[i].type = model->index(i, 1).data(Qt::UserRole).toUInt(); + } + + model = ui->tableViewZIP->model(); + memset(zip_drives, 0, sizeof(zip_drives)); + for (int i = 0; i < ZIP_NUM; i++) { + zip_drives[i].f = NULL; + zip_drives[i].priv = NULL; + zip_drives[i].bus_type = model->index(i, 0).data(Qt::UserRole).toUInt(); + zip_drives[i].res = model->index(i, 0).data(Qt::UserRole + 1).toUInt(); + zip_drives[i].is_250 = model->index(i, 1).data(Qt::UserRole).toBool() ? 1 : 0; + } +} + +void SettingsOtherRemovable::onMORowChanged(const QModelIndex ¤t) { + uint8_t bus = current.siblingAtColumn(0).data(Qt::UserRole).toUInt(); + uint8_t channel = current.siblingAtColumn(0).data(Qt::UserRole + 1).toUInt(); + uint8_t type = current.siblingAtColumn(1).data(Qt::UserRole).toUInt(); + + ui->comboBoxMOBus->setCurrentIndex(-1); + auto* model = ui->comboBoxMOBus->model(); + auto match = model->match(model->index(0, 0), Qt::UserRole, bus); + if (! match.isEmpty()) { + ui->comboBoxMOBus->setCurrentIndex(match.first().row()); + } + + model = ui->comboBoxMOChannel->model(); + match = model->match(model->index(0, 0), Qt::UserRole, channel); + if (! match.isEmpty()) { + ui->comboBoxMOChannel->setCurrentIndex(match.first().row()); + } + ui->comboBoxMOType->setCurrentIndex(type); +} + +void SettingsOtherRemovable::onZIPRowChanged(const QModelIndex ¤t) { + uint8_t bus = current.siblingAtColumn(0).data(Qt::UserRole).toUInt(); + uint8_t channel = current.siblingAtColumn(0).data(Qt::UserRole + 1).toUInt(); + bool is250 = current.siblingAtColumn(1).data(Qt::UserRole).toBool(); + + ui->comboBoxZIPBus->setCurrentIndex(-1); + auto* model = ui->comboBoxZIPBus->model(); + auto match = model->match(model->index(0, 0), Qt::UserRole, bus); + if (! match.isEmpty()) { + ui->comboBoxZIPBus->setCurrentIndex(match.first().row()); + } + + model = ui->comboBoxZIPChannel->model(); + match = model->match(model->index(0, 0), Qt::UserRole, channel); + if (! match.isEmpty()) { + ui->comboBoxZIPChannel->setCurrentIndex(match.first().row()); + } + ui->checkBoxZIP250->setChecked(is250); +} + +void SettingsOtherRemovable::on_comboBoxMOBus_currentIndexChanged(int index) { + if (index < 0) { + return; + } + + int bus = ui->comboBoxMOBus->currentData().toInt(); + bool enabled = (bus != MO_BUS_DISABLED); + ui->comboBoxMOChannel->setEnabled(enabled); + ui->comboBoxMOType->setEnabled(enabled); + Harddrives::populateBusChannels(ui->comboBoxMOChannel->model(), bus); +} + +void SettingsOtherRemovable::on_comboBoxMOBus_activated(int) { + setMOBus( + ui->tableViewMO->model(), + ui->tableViewMO->selectionModel()->currentIndex(), + ui->comboBoxMOBus->currentData().toUInt(), + ui->comboBoxMOChannel->currentData().toUInt()); + setMOType( + ui->tableViewMO->model(), + ui->tableViewMO->selectionModel()->currentIndex(), + ui->comboBoxMOType->currentData().toUInt()); + ui->tableViewMO->resizeColumnsToContents(); + ui->tableViewMO->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); +} + +void SettingsOtherRemovable::on_comboBoxMOChannel_activated(int) { + setMOBus( + ui->tableViewMO->model(), + ui->tableViewMO->selectionModel()->currentIndex(), + ui->comboBoxMOBus->currentData().toUInt(), + ui->comboBoxMOChannel->currentData().toUInt()); +} + +void SettingsOtherRemovable::on_comboBoxMOType_activated(int) { + setMOType( + ui->tableViewMO->model(), + ui->tableViewMO->selectionModel()->currentIndex(), + ui->comboBoxMOType->currentData().toUInt()); + ui->tableViewMO->resizeColumnsToContents(); + ui->tableViewMO->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); +} + +void SettingsOtherRemovable::on_comboBoxZIPBus_currentIndexChanged(int index) { + if (index < 0) { + return; + } + + int bus = ui->comboBoxZIPBus->currentData().toInt(); + bool enabled = (bus != ZIP_BUS_DISABLED); + ui->comboBoxZIPChannel->setEnabled(enabled); + ui->checkBoxZIP250->setEnabled(enabled); + Harddrives::populateBusChannels(ui->comboBoxZIPChannel->model(), bus); +} + +void SettingsOtherRemovable::on_comboBoxZIPBus_activated(int) { + setZIPBus( + ui->tableViewZIP->model(), + ui->tableViewZIP->selectionModel()->currentIndex(), + ui->comboBoxZIPBus->currentData().toUInt(), + ui->comboBoxZIPChannel->currentData().toUInt()); +} + +void SettingsOtherRemovable::on_comboBoxZIPChannel_activated(int) { + setZIPBus( + ui->tableViewZIP->model(), + ui->tableViewZIP->selectionModel()->currentIndex(), + ui->comboBoxZIPBus->currentData().toUInt(), + ui->comboBoxZIPChannel->currentData().toUInt()); +} + +void SettingsOtherRemovable::on_checkBoxZIP250_stateChanged(int state) { + setZIPType( + ui->tableViewZIP->model(), + ui->tableViewZIP->selectionModel()->currentIndex(), + state == Qt::Checked); +} diff --git a/src/qt/qt_settingsotherremovable.hpp b/src/qt/qt_settingsotherremovable.hpp new file mode 100644 index 000000000..c48f6f819 --- /dev/null +++ b/src/qt/qt_settingsotherremovable.hpp @@ -0,0 +1,52 @@ +#ifndef QT_SETTINGSOTHERREMOVABLE_HPP +#define QT_SETTINGSOTHERREMOVABLE_HPP + +#include + +namespace Ui { +class SettingsOtherRemovable; +} + +class SettingsOtherRemovable : public QWidget +{ + Q_OBJECT + +public: + explicit SettingsOtherRemovable(QWidget *parent = nullptr); + ~SettingsOtherRemovable(); + + void save(); + +private slots: + void on_checkBoxZIP250_stateChanged(int arg1); + +private slots: + void on_comboBoxZIPChannel_activated(int index); + +private slots: + void on_comboBoxZIPBus_activated(int index); + +private slots: + void on_comboBoxZIPBus_currentIndexChanged(int index); + +private slots: + void on_comboBoxMOType_activated(int index); + +private slots: + void on_comboBoxMOChannel_activated(int index); + +private slots: + void on_comboBoxMOBus_activated(int index); + +private slots: + void on_comboBoxMOBus_currentIndexChanged(int index); + +private slots: + void onMORowChanged(const QModelIndex ¤t); + void onZIPRowChanged(const QModelIndex ¤t); + +private: + Ui::SettingsOtherRemovable *ui; +}; + +#endif // QT_SETTINGSOTHERREMOVABLE_HPP diff --git a/src/qt/qt_settingsotherremovable.ui b/src/qt/qt_settingsotherremovable.ui new file mode 100644 index 000000000..7d2b7a6d7 --- /dev/null +++ b/src/qt/qt_settingsotherremovable.ui @@ -0,0 +1,151 @@ + + + SettingsOtherRemovable + + + + 0 + 0 + 418 + 433 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + MO Drives + + + + + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + false + + + + + + + + + Bus + + + + + + + Channel + + + + + + + + + + + + + Type + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + ZIP Drives + + + + + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + false + + + + + + + + + Bus + + + + + + + + + + Channel + + + + + + + + + + ZIP 250 + + + + + + + + + + diff --git a/src/qt/qt_settingsports.cpp b/src/qt/qt_settingsports.cpp new file mode 100644 index 000000000..4c6446ef4 --- /dev/null +++ b/src/qt/qt_settingsports.cpp @@ -0,0 +1,81 @@ +#include "qt_settingsports.hpp" +#include "ui_qt_settingsports.h" + +extern "C" { +#include <86box/86box.h> +#include <86box/timer.h> +#include <86box/device.h> +#include <86box/machine.h> +#include <86box/lpt.h> +} + +#include "qt_deviceconfig.hpp" +#include "qt_models_common.hpp" + +SettingsPorts::SettingsPorts(QWidget *parent) : + QWidget(parent), + ui(new Ui::SettingsPorts) +{ + ui->setupUi(this); + + for (int i = 0; i < 3; i++) { + auto* cbox = findChild(QString("comboBoxLpt%1").arg(i+1)); + auto* model = cbox->model(); + int c = 0; + int selectedRow = 0; + while (true) { + const char* lptName = lpt_device_get_name(c); + if (lptName == nullptr) { + break; + } + + Models::AddEntry(model, lptName, c); + if (c == lpt_ports[i].device) { + selectedRow = c; + } + c++; + } + cbox->setCurrentIndex(selectedRow); + + auto* checkBox = findChild(QString("checkBoxParallel%1").arg(i+1)); + checkBox->setChecked(lpt_ports[i].enabled > 0); + cbox->setEnabled(lpt_ports[i].enabled > 0); + } + + for (int i = 0; i < 4; i++) { + auto* checkBox = findChild(QString("checkBoxSerial%1").arg(i+1)); + checkBox->setChecked(serial_enabled[i] > 0); + } +} + +SettingsPorts::~SettingsPorts() +{ + delete ui; +} + +void SettingsPorts::save() { + for (int i = 0; i < 3; i++) { + auto* cbox = findChild(QString("comboBoxLpt%1").arg(i+1)); + auto* checkBox = findChild(QString("checkBoxParallel%1").arg(i+1)); + lpt_ports[i].device = cbox->currentData().toInt(); + lpt_ports[i].enabled = checkBox->isChecked() ? 1 : 0; + } + + for (int i = 0; i < 4; i++) { + auto* checkBox = findChild(QString("checkBoxSerial%1").arg(i+1)); + serial_enabled[i] = checkBox->isChecked() ? 1 : 0; + } +} + +void SettingsPorts::on_checkBoxParallel1_stateChanged(int state) { + ui->comboBoxLpt1->setEnabled(state == Qt::Checked); +} + +void SettingsPorts::on_checkBoxParallel2_stateChanged(int state) { + ui->comboBoxLpt2->setEnabled(state == Qt::Checked); +} + +void SettingsPorts::on_checkBoxParallel3_stateChanged(int state) { + ui->comboBoxLpt3->setEnabled(state == Qt::Checked); +} + diff --git a/src/qt/qt_settingsports.hpp b/src/qt/qt_settingsports.hpp new file mode 100644 index 000000000..e4a8a050a --- /dev/null +++ b/src/qt/qt_settingsports.hpp @@ -0,0 +1,28 @@ +#ifndef QT_SETTINGSPORTS_HPP +#define QT_SETTINGSPORTS_HPP + +#include + +namespace Ui { +class SettingsPorts; +} + +class SettingsPorts : public QWidget +{ + Q_OBJECT + +public: + explicit SettingsPorts(QWidget *parent = nullptr); + ~SettingsPorts(); + + void save(); +private slots: + void on_checkBoxParallel3_stateChanged(int arg1); + void on_checkBoxParallel2_stateChanged(int arg1); + void on_checkBoxParallel1_stateChanged(int arg1); + +private: + Ui::SettingsPorts *ui; +}; + +#endif // QT_SETTINGSPORTS_HPP diff --git a/src/qt/qt_settingsports.ui b/src/qt/qt_settingsports.ui new file mode 100644 index 000000000..4831948dc --- /dev/null +++ b/src/qt/qt_settingsports.ui @@ -0,0 +1,133 @@ + + + SettingsPorts + + + + 0 + 0 + 398 + 341 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + LPT1 Device + + + + + + + + + + LPT2 Device + + + + + + + + + + LPT3 Device + + + + + + + + + + + + + + Serial Port 1 + + + + + + + Parallel Port 1 + + + + + + + Serial Port 2 + + + + + + + Parallel Port 2 + + + + + + + Serial Port 3 + + + + + + + Parallel Port 3 + + + + + + + Serial Port 4 + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + diff --git a/src/qt/qt_settingssound.cpp b/src/qt/qt_settingssound.cpp new file mode 100644 index 000000000..7dd3fc51a --- /dev/null +++ b/src/qt/qt_settingssound.cpp @@ -0,0 +1,223 @@ +#include "qt_settingssound.hpp" +#include "ui_qt_settingssound.h" + +extern "C" { +#include <86box/86box.h> +#include <86box/timer.h> +#include <86box/device.h> +#include <86box/machine.h> +#include <86box/sound.h> +#include <86box/midi.h> +#include <86box/snd_mpu401.h> +} + +#include "qt_deviceconfig.hpp" +#include "qt_models_common.hpp" + +SettingsSound::SettingsSound(QWidget *parent) : + QWidget(parent), + ui(new Ui::SettingsSound) +{ + ui->setupUi(this); + onCurrentMachineChanged(machine); +} + +SettingsSound::~SettingsSound() +{ + delete ui; +} + +void SettingsSound::save() { + sound_card_current = ui->comboBoxSoundCard->currentData().toInt(); + midi_device_current = ui->comboBoxMidiOut->currentData().toInt(); + midi_input_device_current = ui->comboBoxMidiIn->currentData().toInt(); + mpu401_standalone_enable = ui->checkBoxMPU401->isChecked() ? 1 : 0; + SSI2001 = ui->checkBoxSSI2001->isChecked() ? 1 : 0;; + GAMEBLASTER = ui->checkBoxCMS->isChecked() ? 1 : 0; + GUS = ui->checkBoxGUS->isChecked() ? 1 : 0;; + sound_is_float = ui->checkBoxFloat32->isChecked() ? 1 : 0;; +} + +void SettingsSound::onCurrentMachineChanged(int machineId) { + this->machineId = machineId; + auto* machine = &machines[machineId]; + + auto* model = ui->comboBoxSoundCard->model(); + auto removeRows = model->rowCount(); + int c = 0; + int selectedRow = 0; + while (true) { + /* Skip "internal" if machine doesn't have it. */ + if ((c == 1) && !(machine->flags & MACHINE_SOUND)) { + c++; + continue; + } + + auto* sound_dev = sound_card_getdevice(c); + QString name = DeviceConfig::DeviceName(sound_dev, sound_card_get_internal_name(c), 1); + if (name.isEmpty()) { + break; + } + + if (sound_card_available(c)) { + if (device_is_valid(sound_dev, machine->flags)) { + int row = Models::AddEntry(model, name, c); + if (c == sound_card_current) { + selectedRow = row - removeRows; + } + } + } + + c++; + } + model->removeRows(0, removeRows); + ui->comboBoxSoundCard->setEnabled(model->rowCount() > 0); + ui->comboBoxSoundCard->setCurrentIndex(-1); + ui->comboBoxSoundCard->setCurrentIndex(selectedRow); + + model = ui->comboBoxMidiOut->model(); + removeRows = model->rowCount(); + c = 0; + selectedRow = 0; + while (true) { + QString name = DeviceConfig::DeviceName(midi_device_getdevice(c), midi_device_get_internal_name(c), 0); + if (name.isEmpty()) { + break; + } + + if (midi_device_available(c)) { + int row = Models::AddEntry(model, name, c); + if (c == midi_input_device_current) { + selectedRow = row - removeRows; + } + } + c++; + } + model->removeRows(0, removeRows); + ui->comboBoxMidiOut->setEnabled(model->rowCount() > 0); + ui->comboBoxMidiOut->setCurrentIndex(-1); + ui->comboBoxMidiOut->setCurrentIndex(selectedRow); + + model = ui->comboBoxMidiIn->model(); + removeRows = model->rowCount(); + c = 0; + selectedRow = 0; + while (true) { + QString name = DeviceConfig::DeviceName(midi_in_device_getdevice(c), midi_device_get_internal_name(c), 0); + if (name.isEmpty()) { + break; + } + + if (midi_in_device_available(c)) { + int row = Models::AddEntry(model, name, c); + if (c == midi_device_current) { + selectedRow = row - removeRows; + } + } + + c++; + } + model->removeRows(0, removeRows); + ui->comboBoxMidiIn->setEnabled(model->rowCount() > 0); + ui->comboBoxMidiIn->setCurrentIndex(-1); + ui->comboBoxMidiIn->setCurrentIndex(selectedRow); + + ui->checkBoxMPU401->setChecked(mpu401_standalone_enable > 0); + ui->checkBoxSSI2001->setChecked(SSI2001 > 0); + ui->checkBoxCMS->setChecked(GAMEBLASTER > 0); + ui->checkBoxGUS->setChecked(GUS > 0); + ui->checkBoxFloat32->setChecked(sound_is_float > 0); + + ui->pushButtonConfigureSSI2001->setEnabled((SSI2001 > 0) && (machine->flags & MACHINE_BUS_ISA)); + ui->pushButtonConfigureCMS->setEnabled((GAMEBLASTER > 0) && (machine->flags & MACHINE_BUS_ISA)); + ui->pushButtonConfigureGUS->setEnabled((GUS > 0) && (machine->flags & MACHINE_BUS_ISA16)); +} + +static bool allowMpu401(Ui::SettingsSound *ui) { + QString midiOut = midi_device_get_internal_name(ui->comboBoxMidiOut->currentData().toInt()); + QString midiIn = midi_in_device_get_internal_name(ui->comboBoxMidiIn->currentData().toInt()); + + if (midiOut.isEmpty()) { + return false; + } + + if (midiOut == QStringLiteral("none") && midiIn == QStringLiteral("none")) { + return false; + } + + return true; +} + +void SettingsSound::on_comboBoxSoundCard_currentIndexChanged(int index) { + if (index < 0) { + return; + } + ui->pushButtonConfigureSoundCard->setEnabled(sound_card_has_config(ui->comboBoxSoundCard->currentData().toInt())); +} + + +void SettingsSound::on_pushButtonConfigureSoundCard_clicked() { + DeviceConfig::ConfigureDevice(sound_card_getdevice(ui->comboBoxSoundCard->currentData().toInt())); +} + +void SettingsSound::on_comboBoxMidiOut_currentIndexChanged(int index) { + if (index < 0) { + return; + } + ui->pushButtonConfigureMidiOut->setEnabled(midi_device_has_config(ui->comboBoxMidiOut->currentData().toInt())); + ui->checkBoxMPU401->setEnabled(allowMpu401(ui)); + ui->pushButtonConfigureMPU401->setEnabled(allowMpu401(ui) && ui->checkBoxMPU401->isChecked()); +} + +void SettingsSound::on_pushButtonConfigureMidiOut_clicked() { + DeviceConfig::ConfigureDevice(midi_device_getdevice(ui->comboBoxMidiOut->currentData().toInt())); +} + +void SettingsSound::on_comboBoxMidiIn_currentIndexChanged(int index) { + if (index < 0) { + return; + } + ui->pushButtonConfigureMidiIn->setEnabled(midi_in_device_has_config(ui->comboBoxMidiIn->currentData().toInt())); + ui->checkBoxMPU401->setEnabled(allowMpu401(ui)); + ui->pushButtonConfigureMPU401->setEnabled(allowMpu401(ui) && ui->checkBoxMPU401->isChecked()); +} + +void SettingsSound::on_pushButtonConfigureMidiIn_clicked() { + DeviceConfig::ConfigureDevice(midi_in_device_getdevice(ui->comboBoxMidiIn->currentData().toInt())); +} + +void SettingsSound::on_checkBoxMPU401_stateChanged(int state) { + ui->pushButtonConfigureMPU401->setEnabled(state == Qt::Checked); +} + +void SettingsSound::on_checkBoxSSI2001_stateChanged(int state) { + ui->pushButtonConfigureSSI2001->setEnabled(state == Qt::Checked); +} + +void SettingsSound::on_checkBoxCMS_stateChanged(int state) { + ui->pushButtonConfigureCMS->setEnabled(state == Qt::Checked); +} + +void SettingsSound::on_checkBoxGUS_stateChanged(int state) { + ui->pushButtonConfigureGUS->setEnabled(state == Qt::Checked); +} + +void SettingsSound::on_pushButtonConfigureMPU401_clicked() { + if (machines[machineId].flags & MACHINE_MCA) { + DeviceConfig::ConfigureDevice(&mpu401_mca_device); + } else { + DeviceConfig::ConfigureDevice(&mpu401_device); + } +} + +void SettingsSound::on_pushButtonConfigureSSI2001_clicked() { + DeviceConfig::ConfigureDevice(&ssi2001_device); +} + +void SettingsSound::on_pushButtonConfigureCMS_clicked() { + DeviceConfig::ConfigureDevice(&cms_device); +} + +void SettingsSound::on_pushButtonConfigureGUS_clicked() { + DeviceConfig::ConfigureDevice(&gus_device); +} diff --git a/src/qt/qt_settingssound.hpp b/src/qt/qt_settingssound.hpp new file mode 100644 index 000000000..c649eb2a2 --- /dev/null +++ b/src/qt/qt_settingssound.hpp @@ -0,0 +1,44 @@ +#ifndef QT_SETTINGSSOUND_HPP +#define QT_SETTINGSSOUND_HPP + +#include + +namespace Ui { +class SettingsSound; +} + +class SettingsSound : public QWidget +{ + Q_OBJECT + +public: + explicit SettingsSound(QWidget *parent = nullptr); + ~SettingsSound(); + + void save(); + +public slots: + void onCurrentMachineChanged(int machineId); + +private slots: + void on_pushButtonConfigureGUS_clicked(); + void on_pushButtonConfigureCMS_clicked(); + void on_pushButtonConfigureSSI2001_clicked(); + void on_pushButtonConfigureMPU401_clicked(); + void on_checkBoxGUS_stateChanged(int arg1); + void on_checkBoxCMS_stateChanged(int arg1); + void on_checkBoxSSI2001_stateChanged(int arg1); + void on_checkBoxMPU401_stateChanged(int arg1); + void on_pushButtonConfigureMidiIn_clicked(); + void on_pushButtonConfigureMidiOut_clicked(); + void on_comboBoxMidiIn_currentIndexChanged(int index); + void on_comboBoxMidiOut_currentIndexChanged(int index); + void on_pushButtonConfigureSoundCard_clicked(); + void on_comboBoxSoundCard_currentIndexChanged(int index); + +private: + Ui::SettingsSound *ui; + int machineId = 0; +}; + +#endif // QT_SETTINGSSOUND_HPP diff --git a/src/qt/qt_settingssound.ui b/src/qt/qt_settingssound.ui new file mode 100644 index 000000000..6290f63aa --- /dev/null +++ b/src/qt/qt_settingssound.ui @@ -0,0 +1,160 @@ + + + SettingsSound + + + + 0 + 0 + 387 + 332 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + MIDI In + + + + + + + Innovation SSI-2001 + + + + + + + Gravis Ultrasound + + + + + + + Sound Card + + + + + + + Configure + + + + + + + + + + MIDI Out + + + + + + + Standalone MPU-401 + + + + + + + Configure + + + + + + + Configure + + + + + + + Configure + + + + + + + CMS / Game Blaster + + + + + + + + + + + + + Configure + + + + + + + Use FLOAT32 sound + + + + + + + Configure + + + + + + + Configure + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + diff --git a/src/qt/qt_settingsstoragecontrollers.cpp b/src/qt/qt_settingsstoragecontrollers.cpp new file mode 100644 index 000000000..64bb0e488 --- /dev/null +++ b/src/qt/qt_settingsstoragecontrollers.cpp @@ -0,0 +1,233 @@ +#include "qt_settingsstoragecontrollers.hpp" +#include "ui_qt_settingsstoragecontrollers.h" + +extern "C" { +#include <86box/86box.h> +#include <86box/timer.h> +#include <86box/device.h> +#include <86box/machine.h> +#include <86box/hdc.h> +#include <86box/hdc_ide.h> +#include <86box/fdc_ext.h> +#include <86box/scsi.h> +#include <86box/scsi_device.h> +#include <86box/cassette.h> +} + +#include "qt_deviceconfig.hpp" +#include "qt_models_common.hpp" + +SettingsStorageControllers::SettingsStorageControllers(QWidget *parent) : + QWidget(parent), + ui(new Ui::SettingsStorageControllers) +{ + ui->setupUi(this); + + ui->checkBoxCassette->setChecked(cassette_enable > 0); + + onCurrentMachineChanged(machine); +} + +SettingsStorageControllers::~SettingsStorageControllers() +{ + delete ui; +} + +void SettingsStorageControllers::save() { + /* Storage devices category */ + for (int i = 0; i < SCSI_BUS_MAX; ++i) { + auto* cbox = findChild(QString("comboBoxSCSI%1").arg(i+1)); + scsi_card_current[i] = cbox->currentData().toInt(); + } + hdc_current = ui->comboBoxHD->currentData().toInt(); + fdc_type = ui->comboBoxFD->currentData().toInt(); + ide_ter_enabled = ui->checkBoxTertiaryIDE->isChecked() ? 1 : 0; + ide_qua_enabled = ui->checkBoxQuaternaryIDE->isChecked() ? 1 : 0; + cassette_enable = ui->checkBoxCassette->isChecked() ? 1 : 0; +} + +void SettingsStorageControllers::onCurrentMachineChanged(int machineId) { + this->machineId = machineId; + auto* machine = &machines[machineId]; + + /*HD controller config*/ + auto* model = ui->comboBoxHD->model(); + auto removeRows = model->rowCount(); + int c = 0; + int selectedRow = 0; + while (true) { + /* Skip "internal" if machine doesn't have it. */ + if ((c == 1) && !(machine->flags & MACHINE_HDC)) { + c++; + continue; + } + + QString name = DeviceConfig::DeviceName(hdc_get_device(c), hdc_get_internal_name(c), 1); + if (name.isEmpty()) { + break; + } + + if (hdc_available(c)) { + auto* hdc_dev = hdc_get_device(c); + + if (device_is_valid(hdc_dev, machine->flags)) { + int row = Models::AddEntry(model, name, c); + if (c == hdc_current) { + selectedRow = row - removeRows; + } + } + } + c++; + } + model->removeRows(0, removeRows); + ui->comboBoxHD->setEnabled(model->rowCount() > 0); + ui->comboBoxHD->setCurrentIndex(-1); + ui->comboBoxHD->setCurrentIndex(selectedRow); + + /*FD controller config*/ + model = ui->comboBoxFD->model(); + removeRows = model->rowCount(); + c = 0; + selectedRow = 0; + while (true) { + QString name = DeviceConfig::DeviceName(fdc_card_getdevice(c), fdc_card_get_internal_name(c), 1); + if (name.isEmpty()) { + break; + } + + if (fdc_card_available(c)) { + auto* fdc_dev = fdc_card_getdevice(c); + + if (device_is_valid(fdc_dev, machine->flags)) { + int row = Models::AddEntry(model, name, c); + if (c == fdc_type) { + selectedRow = row - removeRows; + } + } + } + c++; + } + model->removeRows(0, removeRows); + ui->comboBoxFD->setEnabled(model->rowCount() > 0); + ui->comboBoxFD->setCurrentIndex(-1); + ui->comboBoxFD->setCurrentIndex(selectedRow); + + for (int i = 0; i < SCSI_BUS_MAX; ++i) { + auto* cbox = findChild(QString("comboBoxSCSI%1").arg(i+1)); + model = cbox->model(); + removeRows = model->rowCount(); + c = 0; + selectedRow = 0; + + while (true) { + auto name = DeviceConfig::DeviceName(scsi_card_getdevice(c), scsi_card_get_internal_name(c), 1); + if (name.isEmpty()) { + break; + } + + if (scsi_card_available(c)) { + auto* scsi_dev = scsi_card_getdevice(c); + if (device_is_valid(scsi_dev, machine->flags)) { + int row = Models::AddEntry(model, name, c); + if (c == scsi_card_current[i]) { + selectedRow = row - removeRows; + } + } + } + c++; + } + + model->removeRows(0, removeRows); + cbox->setEnabled(model->rowCount() > 0); + cbox->setCurrentIndex(-1); + cbox->setCurrentIndex(selectedRow); + } + + int is_at = IS_AT(machineId); + ui->checkBoxTertiaryIDE->setEnabled(is_at > 0); + ui->checkBoxQuaternaryIDE->setEnabled(is_at > 0); +} + +void SettingsStorageControllers::on_comboBoxHD_currentIndexChanged(int index) { + if (index < 0) { + return; + } + ui->pushButtonHD->setEnabled(hdc_has_config(ui->comboBoxHD->currentData().toInt()) > 0); +} + +void SettingsStorageControllers::on_comboBoxFD_currentIndexChanged(int index) { + if (index < 0) { + return; + } + ui->pushButtonFD->setEnabled(hdc_has_config(ui->comboBoxFD->currentData().toInt()) > 0); +} + +void SettingsStorageControllers::on_checkBoxTertiaryIDE_stateChanged(int arg1) { + ui->pushButtonTertiaryIDE->setEnabled(arg1 == Qt::Checked); +} + + +void SettingsStorageControllers::on_checkBoxQuaternaryIDE_stateChanged(int arg1) { + ui->pushButtonQuaternaryIDE->setEnabled(arg1 == Qt::Checked); +} + +void SettingsStorageControllers::on_pushButtonHD_clicked() { + DeviceConfig::ConfigureDevice(hdc_get_device(ui->comboBoxHD->currentData().toInt())); +} + +void SettingsStorageControllers::on_pushButtonFD_clicked() { + DeviceConfig::ConfigureDevice(fdc_card_getdevice(ui->comboBoxFD->currentData().toInt())); +} + +void SettingsStorageControllers::on_pushButtonTertiaryIDE_clicked() { + DeviceConfig::ConfigureDevice(&ide_ter_device); +} + +void SettingsStorageControllers::on_pushButtonQuaternaryIDE_clicked() { + DeviceConfig::ConfigureDevice(&ide_qua_device); +} + +void SettingsStorageControllers::on_comboBoxSCSI1_currentIndexChanged(int index) { + if (index < 0) { + return; + } + ui->pushButtonSCSI1->setEnabled(scsi_card_has_config(ui->comboBoxSCSI1->currentData().toInt()) > 0); +} + +void SettingsStorageControllers::on_comboBoxSCSI2_currentIndexChanged(int index) { + if (index < 0) { + return; + } + ui->pushButtonSCSI2->setEnabled(scsi_card_has_config(ui->comboBoxSCSI2->currentData().toInt()) > 0); +} + +void SettingsStorageControllers::on_comboBoxSCSI3_currentIndexChanged(int index) { + if (index < 0) { + return; + } + ui->pushButtonSCSI3->setEnabled(scsi_card_has_config(ui->comboBoxSCSI3->currentData().toInt()) > 0); +} + +void SettingsStorageControllers::on_comboBoxSCSI4_currentIndexChanged(int index) { + if (index < 0) { + return; + } + ui->pushButtonSCSI4->setEnabled(scsi_card_has_config(ui->comboBoxSCSI4->currentData().toInt()) > 0); +} + + +void SettingsStorageControllers::on_pushButtonSCSI1_clicked() { + DeviceConfig::ConfigureDevice(scsi_card_getdevice(ui->comboBoxSCSI1->currentData().toInt())); +} + +void SettingsStorageControllers::on_pushButtonSCSI2_clicked() { + DeviceConfig::ConfigureDevice(scsi_card_getdevice(ui->comboBoxSCSI2->currentData().toInt())); +} + +void SettingsStorageControllers::on_pushButtonSCSI3_clicked() { + DeviceConfig::ConfigureDevice(scsi_card_getdevice(ui->comboBoxSCSI3->currentData().toInt())); +} + +void SettingsStorageControllers::on_pushButtonSCSI4_clicked() { + DeviceConfig::ConfigureDevice(scsi_card_getdevice(ui->comboBoxSCSI4->currentData().toInt())); +} diff --git a/src/qt/qt_settingsstoragecontrollers.hpp b/src/qt/qt_settingsstoragecontrollers.hpp new file mode 100644 index 000000000..de2e36646 --- /dev/null +++ b/src/qt/qt_settingsstoragecontrollers.hpp @@ -0,0 +1,76 @@ +#ifndef QT_SETTINGSSTORAGECONTROLLERS_HPP +#define QT_SETTINGSSTORAGECONTROLLERS_HPP + +#include + +namespace Ui { +class SettingsStorageControllers; +} + +class SettingsStorageControllers : public QWidget +{ + Q_OBJECT + +public: + explicit SettingsStorageControllers(QWidget *parent = nullptr); + ~SettingsStorageControllers(); + + void save(); + +public slots: + void onCurrentMachineChanged(int machineId); + +private slots: + void on_pushButtonSCSI4_clicked(); + +private slots: + void on_pushButtonSCSI3_clicked(); + +private slots: + void on_pushButtonSCSI2_clicked(); + +private slots: + void on_pushButtonSCSI1_clicked(); + +private slots: + void on_comboBoxSCSI4_currentIndexChanged(int index); + +private slots: + void on_comboBoxSCSI3_currentIndexChanged(int index); + +private slots: + void on_comboBoxSCSI2_currentIndexChanged(int index); + +private slots: + void on_comboBoxSCSI1_currentIndexChanged(int index); + +private slots: + void on_pushButtonQuaternaryIDE_clicked(); + +private slots: + void on_pushButtonTertiaryIDE_clicked(); + +private slots: + void on_pushButtonFD_clicked(); + +private slots: + void on_pushButtonHD_clicked(); + +private slots: + void on_checkBoxQuaternaryIDE_stateChanged(int arg1); + +private slots: + void on_checkBoxTertiaryIDE_stateChanged(int arg1); + +private slots: + void on_comboBoxFD_currentIndexChanged(int index); + +private slots: + void on_comboBoxHD_currentIndexChanged(int index); + +private: + Ui::SettingsStorageControllers *ui; + int machineId = 0; +}; + +#endif // QT_SETTINGSSTORAGECONTROLLERS_HPP diff --git a/src/qt/qt_settingsstoragecontrollers.ui b/src/qt/qt_settingsstoragecontrollers.ui new file mode 100644 index 000000000..3d1bf7dba --- /dev/null +++ b/src/qt/qt_settingsstoragecontrollers.ui @@ -0,0 +1,202 @@ + + + SettingsStorageControllers + + + + 0 + 0 + 496 + 449 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + HD Controller + + + + + + + Configure + + + + + + + FD Controller + + + + + + + + + + Configure + + + + + + + + + + Tertiary IDE Controller + + + + + + + Quaternary IDE Controller + + + + + + + false + + + Configure + + + + + + + false + + + Configure + + + + + + + + + SCSI + + + + + + + + + Configure + + + + + + + Controller 1 + + + + + + + + + + + + + Controller 4 + + + + + + + Controller 2 + + + + + + + Configure + + + + + + + Configure + + + + + + + Controller 3 + + + + + + + + + + Configure + + + + + + + + + + Cassette + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + diff --git a/src/qt/qt_ui.cpp b/src/qt/qt_ui.cpp new file mode 100644 index 000000000..05e14332e --- /dev/null +++ b/src/qt/qt_ui.cpp @@ -0,0 +1,111 @@ +#include + +#include +#include + +#include + +#include "qt_mainwindow.hpp" + +std::atomic_int resize_pending = 0; +std::atomic_int resize_w = 0; +std::atomic_int resize_h = 0; + +MainWindow* main_window = nullptr; + +extern "C" { + +#include <86box/plat.h> + +void +ui_sb_update_icon_state(int tag, int state) +{ + +} + +void +ui_sb_update_icon(int tag, int active) +{ + +} + +void +plat_delay_ms(uint32_t count) +{ + QThread::msleep(count); +} + +void +ui_sb_update_tip(int arg) +{ + +} + +void +ui_sb_update_panes() +{ + +} + +void ui_sb_bugui(char *str) +{ + +} + +void ui_sb_set_ready(int ready) {} + +wchar_t* ui_window_title(wchar_t* str) +{ + if (str == nullptr) { + static wchar_t title[512]; + int chars = main_window->windowTitle().toWCharArray(title); + title[chars] = 0; + str = title; + } else { + main_window->setWindowTitle(QString::fromWCharArray(str)); + } + return str; +} + +void mouse_poll() { + main_window->pollMouse(); +} + +void plat_resize(int w, int h) { + resize_w = w; + resize_h = h; + resize_pending = 1; + + main_window->resizeContents(w, h); +} + +void plat_setfullscreen(int on) { + main_window->setFullscreen(on > 0 ? true : false); +} + +void plat_mouse_capture(int on) { + main_window->setMouseCapture(on > 0 ? true : false); +} + +int ui_msgbox_header(int flags, void *header, void* message) +{ + if (header <= (void*)7168) header = plat_get_string(reinterpret_cast(header)); + if (message <= (void*)7168) message = plat_get_string(reinterpret_cast(message)); + + auto hdr = QString::fromWCharArray(reinterpret_cast(header)); + auto msg = QString::fromWCharArray(reinterpret_cast(message)); + + QMessageBox box(QMessageBox::Warning, hdr, msg); + box.exec(); + return 0; +} + +int ui_msgbox(int flags, void *message) { + return ui_msgbox_header(flags, nullptr, message); +} + +void ui_sb_set_text_w(wchar_t *wstr) { + main_window->statusBar()->showMessage(QString::fromWCharArray(wstr)); +} + +} diff --git a/src/qt_resources.qrc b/src/qt_resources.qrc new file mode 100644 index 000000000..b542fb305 --- /dev/null +++ b/src/qt_resources.qrc @@ -0,0 +1,24 @@ + + + win/icons/machine.ico + win/icons/display.ico + win/icons/input_devices.ico + win/icons/sound.ico + win/icons/network.ico + win/icons/ports.ico + win/icons/storage_controllers.ico + win/icons/hard_disk.ico + win/icons/floppy_and_cdrom_drives.ico + win/icons/other_peripherals.ico + win/icons/other_removable_devices.ico + win/icons/floppy_35.ico + win/icons/floppy_525.ico + win/icons/floppy_disabled.ico + win/icons/cdrom_disabled.ico + win/icons/cdrom.ico + win/icons/mo.ico + win/icons/mo_disabled.ico + win/icons/zip.ico + win/icons/zip_disabled.ico + + From 4d7434809f8dceec22a04a7dffccc48af2b0c297 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Thu, 25 Nov 2021 10:27:09 +0100 Subject: [PATCH 003/278] some branch notes --- README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/README.md b/README.md index 3dcf0f3a6..fce7599c5 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,23 @@ 86Box ===== +**This Branch** I've added initial Qt support to 86Box because I wanted to +have the configuration dialogs available on Linux, similar to what was +available on PCem. + +This is work-in-progress! + +Implemented +----------- +* The settings dialog +* Full screen switching +* Keyboard and mouse + +Missing +------- +* Status updates (activity lights) +* Display output options (like forced 4:3) +* Entering full screen from within the emulated screen + **86Box** is a low level x86 emulator that runs older operating systems and software designed for IBM PC systems and compatibles from 1981 through fairly recent system designs based on the PCI bus. Features From 6c81074f0a87f215a00f22dfad8122ccfc3aad32 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Sun, 28 Nov 2021 20:49:05 +0100 Subject: [PATCH 004/278] added status icons --- src/qt/CMakeLists.txt | 5 +- src/qt/qt_machinestatus.cpp | 408 ++++++++++++++++++++++++++++++++++++ src/qt/qt_machinestatus.hpp | 32 +++ src/qt/qt_machinestatus.ui | 44 ++++ src/qt/qt_mainwindow.cpp | 57 ++--- src/qt/qt_mainwindow.hpp | 36 +--- src/qt/qt_mainwindow.ui | 13 +- src/qt/qt_ui.cpp | 63 +++--- src/qt_resources.qrc | 51 +++-- 9 files changed, 593 insertions(+), 116 deletions(-) create mode 100644 src/qt/qt_machinestatus.cpp create mode 100644 src/qt/qt_machinestatus.hpp create mode 100644 src/qt/qt_machinestatus.ui diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index ab923e042..a9a80d042 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -1,5 +1,3 @@ -find_package(Qt5 COMPONENTS Core Widgets REQUIRED) - # Find includes in corresponding build directories set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) @@ -15,6 +13,9 @@ add_library(ui STATIC qt_mainwindow.cpp qt_mainwindow.hpp qt_mainwindow.ui + qt_machinestatus.cpp + qt_machinestatus.hpp + qt_machinestatus.ui qt_settings.cpp qt_settings.hpp diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp new file mode 100644 index 000000000..d876343d7 --- /dev/null +++ b/src/qt/qt_machinestatus.cpp @@ -0,0 +1,408 @@ +#include "qt_machinestatus.hpp" +#include "ui_qt_machinestatus.h" + +extern "C" { +#define EMU_CPU_H // superhack - don't want timer.h to include cpu.h here, and some combo is preventing a compile +extern uint64_t tsc; + +#include <86box/hdd.h> +#include <86box/timer.h> +#include <86box/86box.h> +#include <86box/device.h> +#include <86box/cartridge.h> +#include <86box/cassette.h> +#include <86box/cdrom.h> +#include <86box/fdd.h> +#include <86box/hdc.h> +#include <86box/scsi.h> +#include <86box/scsi_device.h> +#include <86box/zip.h> +#include <86box/mo.h> +#include <86box/plat.h> +#include <86box/machine.h> +#include <86box/network.h> +#include <86box/ui.h> +}; + +#include +#include +#include +#include + +namespace { + struct PixmapSetActive { + QPixmap normal; + QPixmap active; + void load(const QString& basePath); + }; + struct PixmapSetEmpty { + QPixmap normal; + QPixmap empty; + void load(const QString& basePath); + }; + struct PixmapSetEmptyActive { + QPixmap normal; + QPixmap active; + QPixmap empty; + QPixmap empty_active; + void load(const QString& basePath); + }; + struct Pixmaps { + PixmapSetEmpty cartridge; + PixmapSetEmptyActive cassette; + PixmapSetEmptyActive floppy_disabled; + PixmapSetEmptyActive floppy_525; + PixmapSetEmptyActive floppy_35; + PixmapSetEmptyActive cdrom; + PixmapSetEmptyActive zip; + PixmapSetEmptyActive mo; + PixmapSetActive hd; + PixmapSetActive net; + QPixmap sound; + }; + + struct StateActive { + QLabel label; + QTimer timer; + PixmapSetActive* pixmaps = nullptr; + bool active = false; + + void setActive(bool b) { + active = b; + label.setPixmap(active ? pixmaps->active : pixmaps->normal); + timer.start(75); + } + }; + struct StateEmpty { + QLabel label; + PixmapSetEmpty* pixmaps = nullptr; + bool empty = false; + + void setEmpty(bool e) { + empty = e; + label.setPixmap(empty ? pixmaps->empty : pixmaps->normal); + } + }; + struct StateEmptyActive { + QLabel label; + QTimer timer; + PixmapSetEmptyActive* pixmaps = nullptr; + bool empty = false; + bool active = false; + + void setActive(bool b) { + active = b; + refresh(); + timer.start(75); + } + void setEmpty(bool b) { + empty = b; + refresh(); + } + void refresh() { + if (empty) { + label.setPixmap(active ? pixmaps->empty_active : pixmaps->empty); + } else { + label.setPixmap(active ? pixmaps->active : pixmaps->normal); + } + } + }; + + static const QSize pixmap_size(32, 32); + static const QString pixmap_empty = QStringLiteral("_empty"); + static const QString pixmap_active = QStringLiteral("_active"); + static const QString pixmap_empty_active = QStringLiteral("_empty_active"); + void PixmapSetEmpty::load(const QString &basePath) { + normal = QIcon(basePath.arg(QStringLiteral(""))).pixmap(pixmap_size); + empty = QIcon(basePath.arg(pixmap_empty)).pixmap(pixmap_size); + } + + void PixmapSetActive::load(const QString &basePath) { + normal = QIcon(basePath.arg(QStringLiteral(""))).pixmap(pixmap_size); + active = QIcon(basePath.arg(pixmap_active)).pixmap(pixmap_size); + } + + void PixmapSetEmptyActive::load(const QString &basePath) { + normal = QIcon(basePath.arg(QStringLiteral(""))).pixmap(pixmap_size); + active = QIcon(basePath.arg(pixmap_active)).pixmap(pixmap_size); + empty = QIcon(basePath.arg(pixmap_empty)).pixmap(pixmap_size); + empty_active = QIcon(basePath.arg(pixmap_empty_active)).pixmap(pixmap_size); + } +} + +struct MachineStatus::States { + Pixmaps pixmaps; + + States(QObject* parent) { + pixmaps.cartridge.load(":/settings/win/icons/cartridge%1.ico"); + pixmaps.cassette.load(":/settings/win/icons/cassette%1.ico"); + pixmaps.floppy_disabled.normal = QIcon(QStringLiteral(":/settings/win/icons/floppy_disabled.ico")).pixmap(pixmap_size); + pixmaps.floppy_disabled.active = pixmaps.floppy_disabled.normal; + pixmaps.floppy_disabled.empty = pixmaps.floppy_disabled.normal; + pixmaps.floppy_disabled.empty_active = pixmaps.floppy_disabled.normal; + pixmaps.floppy_525.load(":/settings/win/icons/floppy_525%1.ico"); + pixmaps.floppy_35.load(":/settings/win/icons/floppy_35%1.ico"); + pixmaps.cdrom.load(":/settings/win/icons/cdrom%1.ico"); + pixmaps.zip.load(":/settings/win/icons/zip%1.ico"); + pixmaps.mo.load(":/settings/win/icons/mo%1.ico"); + pixmaps.hd.load(":/settings/win/icons/hard_disk%1.ico"); + pixmaps.net.load(":/settings/win/icons/network%1.ico"); + pixmaps.sound = QIcon(":/settings/win/icons/sound.ico").pixmap(pixmap_size); + + cartridge[0].pixmaps = &pixmaps.cartridge; + cartridge[1].pixmaps = &pixmaps.cartridge; + cassette.pixmaps = &pixmaps.cassette; + QObject::connect(&cassette.timer, &QTimer::timeout, parent, [&]{ cassette.setActive(false); }); + for (auto& f : fdd) { + f.pixmaps = &pixmaps.floppy_disabled; + QObject::connect(&f.timer, &QTimer::timeout, parent, [&]{ f.setActive(false); }); + } + for (auto& c : cdrom) { + c.pixmaps = &pixmaps.cdrom; + QObject::connect(&c.timer, &QTimer::timeout, parent, [&]{ c.setActive(false); }); + } + for (auto& z : zip) { + z.pixmaps = &pixmaps.zip; + QObject::connect(&z.timer, &QTimer::timeout, parent, [&]{ z.setActive(false); }); + } + for (auto& m : mo) { + m.pixmaps = &pixmaps.mo; + QObject::connect(&m.timer, &QTimer::timeout, parent, [&]{ m.setActive(false); }); + } + for (auto& h : hdds) { + h.pixmaps = &pixmaps.hd; + QObject::connect(&h.timer, &QTimer::timeout, parent, [&]{ h.setActive(false); }); + } + net.pixmaps = &pixmaps.net; + sound.setPixmap(pixmaps.sound); + } + + std::array cartridge; + StateEmptyActive cassette; + std::array fdd; + std::array cdrom; + std::array zip; + std::array mo; + std::array hdds; + StateActive net; + QLabel sound; +}; + +MachineStatus::MachineStatus(QWidget *parent) : + QWidget(parent), + ui(new Ui::MachineStatus) +{ + ui->setupUi(this); + d = std::make_unique(this); +} + +MachineStatus::~MachineStatus() +{ + delete ui; +} + +static int hdd_count(int bus) { + int c = 0; + int i; + + for (i = 0; i < HDD_NUM; i++) { + if (hdd[i].bus == bus) { + c++; + } + } + + return(c); +} + +void MachineStatus::refresh() { + bool has_cart = machines[machine].flags & MACHINE_CARTRIDGE; + bool has_mfm = machines[machine].flags & MACHINE_MFM; + bool has_xta = machines[machine].flags & MACHINE_XTA; + bool has_esdi = machines[machine].flags & MACHINE_ESDI; + bool has_ide = machines[machine].flags & MACHINE_IDE_QUAD; + bool has_scsi = machines[machine].flags & MACHINE_SCSI_DUAL; + + int c_mfm = hdd_count(HDD_BUS_MFM); + int c_esdi = hdd_count(HDD_BUS_ESDI); + int c_xta = hdd_count(HDD_BUS_XTA); + int c_ide = hdd_count(HDD_BUS_IDE); + int c_scsi = hdd_count(HDD_BUS_SCSI); + int do_net = (network_type == NET_TYPE_NONE) || (network_card == 0); + + while (ui->statusIcons->count() > 0) { + auto item = ui->statusIcons->itemAt(0); + ui->statusIcons->removeItem(item); + delete item; + } + + if (cassette_enable) { + d->cassette.setEmpty(QString(cassette_fname).isEmpty()); + ui->statusIcons->addWidget(&d->cassette.label); + } + + if (has_cart) { + for (int i = 0; i < 2; ++i) { + d->cartridge[i].setEmpty(QString(cart_fns[i]).isEmpty()); + ui->statusIcons->addWidget(&d->cartridge[i].label); + } + } + + for (size_t i = 0; i < FDD_NUM; ++i) { + if (fdd_get_type(i) != 0) { + int t = fdd_get_type(i); + if (t == 0) { + d->fdd[i].pixmaps = &d->pixmaps.floppy_disabled; + } else if (t >= 1 && t <= 6) { + d->fdd[i].pixmaps = &d->pixmaps.floppy_525; + } else { + d->fdd[i].pixmaps = &d->pixmaps.floppy_35; + } + d->fdd[i].setEmpty(QString(floppyfns[i]).isEmpty()); + d->fdd[i].setActive(false); + ui->statusIcons->addWidget(&d->fdd[i].label); + } + } + + auto hdc_name = QString(hdc_get_internal_name(hdc_current)); + for (size_t i = 0; i < CDROM_NUM; i++) { + /* Could be Internal or External IDE.. */ + if ((cdrom[i].bus_type == CDROM_BUS_ATAPI) && + !has_ide && hdc_name != QStringLiteral("ide")) + continue; + if ((cdrom[i].bus_type == CDROM_BUS_SCSI) && !has_scsi && + (scsi_card_current[0] == 0) && (scsi_card_current[1] == 0) && + (scsi_card_current[2] == 0) && (scsi_card_current[3] == 0)) + continue; + if (cdrom[i].bus_type != 0) { + d->cdrom[i].setEmpty(cdrom[i].host_drive != 200 || QString(cdrom[i].image_path).isEmpty()); + d->cdrom[i].setActive(false); + ui->statusIcons->addWidget(&d->cdrom[i].label); + } + } + for (size_t i = 0; i < ZIP_NUM; i++) { + /* Could be Internal or External IDE.. */ + if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && + !has_ide && hdc_name != QStringLiteral("ide")) + continue; + if ((zip_drives[i].bus_type == ZIP_BUS_SCSI) && !has_scsi && + (scsi_card_current[0] == 0) && (scsi_card_current[1] == 0) && + (scsi_card_current[2] == 0) && (scsi_card_current[3] == 0)) + continue; + if (zip_drives[i].bus_type != 0) { + d->zip[i].setEmpty(QString(zip_drives[i].image_path).isEmpty()); + d->zip[i].setActive(false); + ui->statusIcons->addWidget(&d->zip[i].label); + } + } + for (size_t i = 0; i < MO_NUM; i++) { + /* Could be Internal or External IDE.. */ + if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && + !has_ide && hdc_name != QStringLiteral("ide")) + continue; + if ((mo_drives[i].bus_type == MO_BUS_SCSI) && !has_scsi && + (scsi_card_current[0] == 0) && (scsi_card_current[1] == 0) && + (scsi_card_current[2] == 0) && (scsi_card_current[3] == 0)) + continue; + if (mo_drives[i].bus_type != 0) { + d->mo[i].setEmpty(QString(mo_drives[i].image_path).isEmpty()); + d->mo[i].setActive(false); + ui->statusIcons->addWidget(&d->mo[i].label); + } + } + + if ((has_mfm || hdc_name == QStringLiteral("st506")) && c_mfm > 0) { + d->hdds[HDD_BUS_MFM].setActive(false); + ui->statusIcons->addWidget(&d->hdds[HDD_BUS_MFM].label); + } + if ((has_esdi || hdc_name == QStringLiteral("esdi")) && c_esdi > 0) { + d->hdds[HDD_BUS_ESDI].setActive(false); + ui->statusIcons->addWidget(&d->hdds[HDD_BUS_ESDI].label); + } + if ((has_xta || hdc_name == QStringLiteral("xta")) && c_xta > 0) { + d->hdds[HDD_BUS_XTA].setActive(false); + ui->statusIcons->addWidget(&d->hdds[HDD_BUS_XTA].label); + } + if ((has_ide || hdc_name == QStringLiteral("xtide") || hdc_name == QStringLiteral("ide")) && c_ide > 0) { + d->hdds[HDD_BUS_IDE].setActive(false); + ui->statusIcons->addWidget(&d->hdds[HDD_BUS_IDE].label); + } + if ((has_scsi || (scsi_card_current[0] != 0) || (scsi_card_current[1] != 0) || + (scsi_card_current[2] != 0) || (scsi_card_current[3] != 0)) && c_scsi > 0) { + d->hdds[HDD_BUS_SCSI].setActive(false); + ui->statusIcons->addWidget(&d->hdds[HDD_BUS_SCSI].label); + } + + if (do_net) { + d->net.setActive(false); + ui->statusIcons->addWidget(&d->net.label); + } + ui->statusIcons->addWidget(&d->sound); + ui->statusIcons->addItem(new QSpacerItem(20, 40, QSizePolicy::Expanding, QSizePolicy::Minimum)); +} + +void MachineStatus::setActivity(int tag, bool active) { + int category = tag & 0xfffffff0; + int item = tag & 0xf; + switch (category) { + case SB_CASSETTE: + break; + case SB_CARTRIDGE: + break; + case SB_FLOPPY: + d->fdd[item].setActive(active); + break; + case SB_CDROM: + d->cdrom[item].setActive(active); + break; + case SB_ZIP: + d->zip[item].setActive(active); + break; + case SB_MO: + d->mo[item].setActive(active); + break; + case SB_HDD: + d->hdds[item].setActive(active); + break; + case SB_NETWORK: + d->net.setActive(active); + break; + case SB_SOUND: + break; + case SB_TEXT: + break; + } +} + +void MachineStatus::setEmpty(int tag, bool empty) { + int category = tag & 0xfffffff0; + int item = tag & 0xf; + switch (category) { + case SB_CASSETTE: + d->cassette.setEmpty(empty); + break; + case SB_CARTRIDGE: + d->cartridge[item].setEmpty(empty); + break; + case SB_FLOPPY: + d->fdd[item].setEmpty(empty); + break; + case SB_CDROM: + d->cdrom[item].setEmpty(empty); + break; + case SB_ZIP: + d->zip[item].setEmpty(empty); + break; + case SB_MO: + d->mo[item].setEmpty(empty); + break; + case SB_HDD: + break; + case SB_NETWORK: + break; + case SB_SOUND: + break; + case SB_TEXT: + break; + } +} + diff --git a/src/qt/qt_machinestatus.hpp b/src/qt/qt_machinestatus.hpp new file mode 100644 index 000000000..e3f0a6409 --- /dev/null +++ b/src/qt/qt_machinestatus.hpp @@ -0,0 +1,32 @@ +#ifndef QT_MACHINESTATUS_HPP +#define QT_MACHINESTATUS_HPP + +#include + +class QLabel; + +namespace Ui { +class MachineStatus; +} + +class MachineStatus : public QWidget +{ + Q_OBJECT + +public: + explicit MachineStatus(QWidget *parent = nullptr); + ~MachineStatus(); + +public slots: + void refresh(); + void setActivity(int tag, bool active); + void setEmpty(int tag, bool active); + +private: + Ui::MachineStatus *ui; + + struct States; + std::unique_ptr d; +}; + +#endif // QT_MACHINESTATUS_HPP diff --git a/src/qt/qt_machinestatus.ui b/src/qt/qt_machinestatus.ui new file mode 100644 index 000000000..b05f1f8c3 --- /dev/null +++ b/src/qt/qt_machinestatus.ui @@ -0,0 +1,44 @@ + + + MachineStatus + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + + + + + + diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index d9ae9500d..8c179bb2c 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -3,8 +3,8 @@ extern "C" { #include <86box/86box.h> -#include <86box/keyboard.h> -#include <86box/mouse.h> +//#include <86box/keyboard.h> +//#include <86box/mouse.h> #include <86box/config.h> #include <86box/plat.h> @@ -18,23 +18,6 @@ extern "C" { #include "qt_settings.hpp" -CentralWidget::CentralWidget(QWidget *parent) : QWidget(parent) {} -CentralWidget::~CentralWidget() = default; - -MainWindowLabel::MainWindowLabel(QWidget *parent) : QLabel(parent) { - setMouseTracking(true); -} -MainWindowLabel::~MainWindowLabel() = default; -void MainWindowLabel::mouseMoveEvent(QMouseEvent *event) { - pos_ = event->pos(); -} -void MainWindowLabel::mousePressEvent(QMouseEvent *event) { - buttons_ = event->buttons(); -} -void MainWindowLabel::mouseReleaseEvent(QMouseEvent *event) { - buttons_ = event->buttons(); -} - MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) @@ -65,6 +48,10 @@ MainWindow::MainWindow(QWidget *parent) : config_save(); }); + connect(this, &MainWindow::updateStatusBarPanes, ui->machineStatus, &MachineStatus::refresh); + connect(this, &MainWindow::updateStatusBarActivity, ui->machineStatus, &MachineStatus::setActivity); + connect(this, &MainWindow::updateStatusBarEmpty, ui->machineStatus, &MachineStatus::setEmpty); + ui->actionKeyboard_requires_capture->setChecked(kbd_req_capture); ui->actionRight_CTRL_is_left_ALT->setChecked(rctrl_is_lalt); @@ -275,24 +262,24 @@ static const uint16_t xfree86_keycode_table[keycode_entries] = { /* 135 */ 0x15d, // Application }; -static void handle_keypress_event(int state, quint32 native_scancode) { - if (native_scancode > keycode_entries) { - return; - } - uint16_t translated_code = xfree86_keycode_table[native_scancode]; - if (translated_code == 0) { - return; - } - keyboard_input(state, translated_code); +//static void handle_keypress_event(int state, quint32 native_scancode) { +// if (native_scancode > keycode_entries) { +// return; +// } +// uint16_t translated_code = xfree86_keycode_table[native_scancode]; +// if (translated_code == 0) { +// return; +// } +// keyboard_input(state, translated_code); - if (keyboard_isfsexit() > 0) { - plat_setfullscreen(0); - } +// if (keyboard_isfsexit() > 0) { +// plat_setfullscreen(0); +// } - if (keyboard_ismsexit() > 0) { - plat_mouse_capture(0); - } -} +// if (keyboard_ismsexit() > 0) { +// plat_mouse_capture(0); +// } +//} void MainWindow::on_actionFullscreen_triggered() { setFullscreen(true); diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 25227d04b..3428ca098 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -8,37 +8,6 @@ namespace Ui { class MainWindow; } -class MainWindowLabel : public QLabel -{ - Q_OBJECT -public: - explicit MainWindowLabel(QWidget *parent = nullptr); - ~MainWindowLabel(); - - const QPoint& pos() { return pos_; } - Qt::MouseButtons buttons() { return buttons_; } -protected: - void mouseMoveEvent(QMouseEvent *event) override; - void mousePressEvent(QMouseEvent *event) override; - void mouseReleaseEvent(QMouseEvent *event) override; -private: - QPoint pos_; - Qt::MouseButtons buttons_; -}; - -class CentralWidget : public QWidget -{ - Q_OBJECT -public: - explicit CentralWidget(QWidget *parent = nullptr); - ~CentralWidget(); - - void setSizeHint(QSize size) { size_ = size; } - QSize sizeHint() const override { return size_; } -private: - QSize size_; -}; - class MainWindow : public QMainWindow { Q_OBJECT @@ -50,14 +19,15 @@ signals: void paint(const QImage& image); void resizeContents(int w, int h); void pollMouse(); + void updateStatusBarPanes(); + void updateStatusBarActivity(int tag, bool active); + void updateStatusBarEmpty(int tag, bool empty); void setFullscreen(bool state); void setMouseCapture(bool state); private slots: void on_actionFullscreen_triggered(); - -private slots: void on_actionSettings_triggered(); void on_actionExit_triggered(); void on_actionPause_triggered(); diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 9e77eee55..0e854a8f2 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -7,7 +7,7 @@ 0 0 724 - 274 + 427 @@ -36,6 +36,9 @@ 0 + + + @@ -138,6 +141,14 @@ + + + MachineStatus + QWidget +
qt_machinestatus.hpp
+ 1 +
+
diff --git a/src/qt/qt_ui.cpp b/src/qt/qt_ui.cpp index 05e14332e..08614a48e 100644 --- a/src/qt/qt_ui.cpp +++ b/src/qt/qt_ui.cpp @@ -1,5 +1,6 @@ #include +#include #include #include @@ -17,43 +18,12 @@ extern "C" { #include <86box/plat.h> -void -ui_sb_update_icon_state(int tag, int state) -{ - -} - -void -ui_sb_update_icon(int tag, int active) -{ - -} - void plat_delay_ms(uint32_t count) { QThread::msleep(count); } -void -ui_sb_update_tip(int arg) -{ - -} - -void -ui_sb_update_panes() -{ - -} - -void ui_sb_bugui(char *str) -{ - -} - -void ui_sb_set_ready(int ready) {} - wchar_t* ui_window_title(wchar_t* str) { if (str == nullptr) { @@ -108,4 +78,35 @@ void ui_sb_set_text_w(wchar_t *wstr) { main_window->statusBar()->showMessage(QString::fromWCharArray(wstr)); } +void +ui_sb_update_tip(int arg) { + qDebug() << Q_FUNC_INFO << arg; +} + +void +ui_sb_update_panes() { + main_window->updateStatusBarPanes(); +} + +void ui_sb_bugui(char *str) { + main_window->statusBar()->showMessage(str); +} + +void ui_sb_set_ready(int ready) { + qDebug() << Q_FUNC_INFO << ready; +} + +void +ui_sb_update_icon_state(int tag, int state) { + if (main_window == nullptr) { + return; + } + main_window->updateStatusBarEmpty(tag, state > 0 ? true : false); +} + +void +ui_sb_update_icon(int tag, int active) { + main_window->updateStatusBarActivity(tag, active > 0 ? true : false); +} + } diff --git a/src/qt_resources.qrc b/src/qt_resources.qrc index b542fb305..8c66e5ca2 100644 --- a/src/qt_resources.qrc +++ b/src/qt_resources.qrc @@ -1,24 +1,47 @@ - win/icons/machine.ico + win/icons/cartridge.ico + win/icons/cartridge_empty.ico + win/icons/cassette.ico + win/icons/cassette_active.ico + win/icons/cassette_empty.ico + win/icons/cassette_empty_active.ico + win/icons/cdrom.ico + win/icons/cdrom_active.ico + win/icons/cdrom_disabled.ico + win/icons/cdrom_empty.ico + win/icons/cdrom_empty_active.ico win/icons/display.ico - win/icons/input_devices.ico - win/icons/sound.ico - win/icons/network.ico - win/icons/ports.ico - win/icons/storage_controllers.ico - win/icons/hard_disk.ico + win/icons/floppy_35.ico + win/icons/floppy_35_active.ico + win/icons/floppy_35_empty.ico + win/icons/floppy_35_empty_active.ico + win/icons/floppy_525.ico + win/icons/floppy_525_active.ico + win/icons/floppy_525_empty.ico + win/icons/floppy_525_empty_active.ico win/icons/floppy_and_cdrom_drives.ico + win/icons/floppy_disabled.ico + win/icons/hard_disk.ico + win/icons/hard_disk_active.ico + win/icons/input_devices.ico + win/icons/machine.ico + win/icons/mo.ico + win/icons/mo_active.ico + win/icons/mo_disabled.ico + win/icons/mo_empty.ico + win/icons/mo_empty_active.ico + win/icons/network.ico + win/icons/network_active.ico win/icons/other_peripherals.ico win/icons/other_removable_devices.ico - win/icons/floppy_35.ico - win/icons/floppy_525.ico - win/icons/floppy_disabled.ico - win/icons/cdrom_disabled.ico - win/icons/cdrom.ico - win/icons/mo.ico - win/icons/mo_disabled.ico + win/icons/ports.ico + win/icons/sound.ico + win/icons/storage_controllers.ico win/icons/zip.ico + win/icons/zip_active.ico win/icons/zip_disabled.ico + win/icons/zip_empty.ico + win/icons/zip_empty_active.ico From 859ee888cea555850beab86ad19239d356dbb740 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Sun, 28 Nov 2021 20:50:02 +0100 Subject: [PATCH 005/278] fixed macos bundling (thanks to @dob205) --- src/CMakeLists.txt | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f5b3c99f8..bf5a46bc3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -129,6 +129,10 @@ if(APPLE) endif() +if(QT) + find_package(Qt5 COMPONENTS Core Widgets REQUIRED) +endif() + find_package(Freetype REQUIRED) include_directories(${FREETYPE_INCLUDE_DIRS}) if(APPLE) @@ -189,14 +193,28 @@ else() install(TARGETS 86Box) endif() - # adjustments for macOS app bundles if(APPLE) set(APPS ${CMAKE_CURRENT_BINARY_DIR}/86Box.app) install(CODE " + include(InstallRequiredSystemLibraries) include(BundleUtilities) fixup_bundle(\"${APPS}\" \"\" \"\")" COMPONENT Runtime) + + # needed for Qt packaging + # get the macdeployqt path + get_target_property(_qmake_executable Qt5::qmake IMPORTED_LOCATION) + get_filename_component(_qt_bin_dir "${_qmake_executable}" DIRECTORY) + find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${_qt_bin_dir}") + + # excecute macdeployqt + add_custom_command(TARGET 86Box POST_BUILD + COMMAND "${MACDEPLOYQT_EXECUTABLE}" + "$/../.." + -always-overwrite + COMMENT "Running macdeployqt..." + ) endif() if(VCPKG_TOOLCHAIN) @@ -221,14 +239,14 @@ add_subdirectory(sio) add_subdirectory(scsi) add_subdirectory(sound) add_subdirectory(video) +if (APPLE) + add_subdirectory(mac) +endif() if (QT) add_subdirectory(qt) -elseif(APPLE) - add_subdirectory(mac) - add_subdirectory(unix) elseif(WIN32) add_subdirectory(win) else() add_subdirectory(unix) -endif() +endif() \ No newline at end of file From 6aef88c957f670a6ed47cf1e8c1cd92d3e5ec532 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Sun, 28 Nov 2021 20:54:32 +0100 Subject: [PATCH 006/278] set project cpp-files to c++17 when qt is included, search and link to a threading library --- src/CMakeLists.txt | 5 ++++- src/qt/CMakeLists.txt | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index bf5a46bc3..3a6477dfe 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -130,6 +130,9 @@ if(APPLE) endif() if(QT) + set(CMAKE_CXX_STANDARD 17) + set(CMAKE_CXX_STANDARD_REQUIRED ON) + set(CMAKE_CXX_EXTENSIONS OFF) find_package(Qt5 COMPONENTS Core Widgets REQUIRED) endif() @@ -249,4 +252,4 @@ elseif(WIN32) add_subdirectory(win) else() add_subdirectory(unix) -endif() \ No newline at end of file +endif() diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index a9a80d042..0f119f8c5 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -4,6 +4,8 @@ set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) +find_package(Threads REQUIRED) + add_library(plat STATIC qt.c qt_main.cpp qt_platform.cpp qt_midi.cpp cpp11_thread.cpp) add_library(ui STATIC qt_ui.cpp @@ -78,10 +80,12 @@ target_link_libraries( plat PRIVATE Qt5::Widgets + Threads::Threads ) target_link_libraries( ui PRIVATE Qt5::Widgets + Threads::Threads ) From ccb851343ebefdfde3dfca3b4a21545cf67cecc7 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Sun, 28 Nov 2021 21:00:41 +0100 Subject: [PATCH 007/278] replaced blitter function with a copy from win_sdl --- src/qt/qt_sdl.c | 47 ++++++++++++++++++----------------------------- 1 file changed, 18 insertions(+), 29 deletions(-) diff --git a/src/qt/qt_sdl.c b/src/qt/qt_sdl.c index 30c2aff9d..072531bd6 100644 --- a/src/qt/qt_sdl.c +++ b/src/qt/qt_sdl.c @@ -85,7 +85,6 @@ static int cur_w, cur_h; static int cur_ww = 0, cur_wh = 0; static volatile int sdl_enabled = 0; static SDL_mutex* sdl_mutex = NULL; -static int blit_w = 0, blit_h = 0, blit_tex_updated = 0; static const uint16_t sdl_to_xt[0x200] = { @@ -302,8 +301,9 @@ sdl_stretch(int *w, int *h, int *x, int *y) static void sdl_blit(int x, int y, int w, int h) { + SDL_Rect r_src; void *pixeldata; - int pitch; + int ret, pitch; if (!sdl_enabled || (x < 0) || (y < 0) || (w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL) || (sdl_render == NULL) || (sdl_tex == NULL)) { video_blit_complete(); @@ -318,13 +318,24 @@ sdl_blit(int x, int y, int w, int h) if (screenshots) video_screenshot((uint32_t *) pixeldata, 0, 0, (2048 + 64)); - blit_w = w; - blit_h = h; - blit_tex_updated = 1; - SDL_UnlockTexture(sdl_tex); - SDL_UnlockMutex(sdl_mutex); + video_blit_complete(); + + SDL_RenderClear(sdl_render); + + r_src.x = 0; + r_src.y = 0; + r_src.w = w; + r_src.h = h; + + ret = SDL_RenderCopy(sdl_render, sdl_tex, &r_src, 0); + if (ret) + sdl_log("SDL: unable to copy texture to renderer (%s)\n", sdl_GetError()); + + SDL_RenderPresent(sdl_render); + + SDL_UnlockMutex(sdl_mutex); } @@ -698,28 +709,6 @@ enum sdl_main_status sdl_main() { } } - if (blit_tex_updated > 0) { - SDL_LockMutex(sdl_mutex); - int status = SDL_RenderClear(sdl_render); - if (status) { - sdl_log("SDL: unable to SDL_RenderClear (%s)\n", SDL_GetError()); - } - - r_src.x = 0; - r_src.y = 0; - r_src.w = blit_w; - r_src.h = blit_h; - - status = SDL_RenderCopy(sdl_render, sdl_tex, &r_src, 0); - if (status) { - sdl_log("SDL: unable to copy texture to renderer (%s)\n", SDL_GetError()); - } - - SDL_RenderPresent(sdl_render); - blit_tex_updated = 0; - SDL_UnlockMutex(sdl_mutex); - } - if (mouse_capture && keyboard_ismsexit()) { plat_mouse_capture(0); } From 6211834a219dff290a48f311605b0ae0f9d3b564 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Sun, 28 Nov 2021 21:06:39 +0100 Subject: [PATCH 008/278] status updates are done --- README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fce7599c5..c66286455 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ 86Box ===== -**This Branch** I've added initial Qt support to 86Box because I wanted to +**This Branch:** I've added initial Qt support to 86Box because I wanted to have the configuration dialogs available on Linux, similar to what was available on PCem. @@ -11,13 +11,16 @@ Implemented * The settings dialog * Full screen switching * Keyboard and mouse - -Missing -------- * Status updates (activity lights) + +TODO +---- +* Emulation state and updates (titlebar in windows) * Display output options (like forced 4:3) * Entering full screen from within the emulated screen +Original Readme +=============== **86Box** is a low level x86 emulator that runs older operating systems and software designed for IBM PC systems and compatibles from 1981 through fairly recent system designs based on the PCI bus. Features From 22c89177d59c9b02224c212dc0227a8e8c81112f Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Mon, 29 Nov 2021 10:51:29 +0100 Subject: [PATCH 009/278] use real glib when compiling for Qt on Unix platforms --- src/network/slirp/CMakeLists.txt | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/network/slirp/CMakeLists.txt b/src/network/slirp/CMakeLists.txt index 2a6a8adb9..afc64a382 100644 --- a/src/network/slirp/CMakeLists.txt +++ b/src/network/slirp/CMakeLists.txt @@ -13,12 +13,28 @@ # Copyright 2020,2021 David Hrdlička. # -add_library(slirp STATIC tinyglib.c arp_table.c bootp.c cksum.c dnssearch.c if.c ip_icmp.c - ip_input.c ip_output.c mbuf.c misc.c sbuf.c slirp.c socket.c tcp_input.c - tcp_output.c tcp_subr.c tcp_timer.c udp.c util.c version.c) +add_library(slirp STATIC arp_table.c bootp.c cksum.c dnssearch.c if.c ip_icmp.c + ip_input.c ip_output.c mbuf.c misc.c sbuf.c slirp.c socket.c tcp_input.c + tcp_output.c tcp_subr.c tcp_timer.c udp.c util.c version.c) -#target_link_libraries(slirp wsock32 iphlpapi) -#target_link_libraries(slirp) if (CMAKE_SYSTEM_NAME MATCHES "Windows") -target_link_libraries(slirp wsock32 iphlpapi) + target_link_libraries(slirp wsock32 iphlpapi) +endif() + +if(QT) + if(UNIX AND NOT APPLE) + find_package(PkgConfig REQUIRED) + pkg_check_modules(GLIB_PKG glib-2.0) + if (GLIB_PKG_FOUND) + include_directories(${GLIB_PKG_INCLUDE_DIRS}) + target_link_libraries(slirp glib-2.0) + target_compile_definitions(slirp PRIVATE TINYGLIB_USE_GLIB) + else() + message(ERROR "GLib development headers are required when compiling with Qt on Unix") + endif() + else() + target_sources(slirp PRIVATE tinyglib.c) + endif() +else() + target_sources(slirp PRIVATE tinyglib.c) endif() From 97d844c3fc4d8e844fca07a504d8cb4459443b10 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Mon, 29 Nov 2021 10:51:44 +0100 Subject: [PATCH 010/278] match g_strlcpy with glib proper --- src/network/slirp/misc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/slirp/misc.c b/src/network/slirp/misc.c index 4b520fc43..3bea32ac1 100644 --- a/src/network/slirp/misc.c +++ b/src/network/slirp/misc.c @@ -11,7 +11,7 @@ #ifdef BSD #define g_strlcpy strlcpy #else -extern int g_strlcpy(gchar* dest, const gchar* src, gsize dest_size); +extern gsize g_strlcpy(gchar* dest, const gchar* src, gsize dest_size); #endif #endif From 238fb7ef6222316c133904f032a49cb2ebdfb28b Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Mon, 29 Nov 2021 12:25:27 +0100 Subject: [PATCH 011/278] handle messageboxes inside qt's thread --- src/qt/qt_main.cpp | 7 +++---- src/qt/qt_mainwindow.cpp | 8 ++++++-- src/qt/qt_mainwindow.hpp | 1 + src/qt/qt_ui.cpp | 7 ++----- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 4d6062917..3fb6dd2ca 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -77,15 +77,14 @@ int main(int argc, char* argv[]) { QApplication app(argc, argv); elapsed_timer.start(); + main_window = new MainWindow(); + main_window->show(); + pc_init(argc, argv); if (! pc_init_modules()) { ui_msgbox_header(MBX_FATAL, VC(L"No ROMs found."), VC(L"86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory.")); return 6; } - - main_window = new MainWindow(); - main_window->show(); - pc_reset_hard_init(); /* Set the PAUSE mode depending on the renderer. */ diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 8c179bb2c..4f7b9fc9b 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -3,8 +3,6 @@ extern "C" { #include <86box/86box.h> -//#include <86box/keyboard.h> -//#include <86box/mouse.h> #include <86box/config.h> #include <86box/plat.h> @@ -15,6 +13,7 @@ extern "C" { #include #include #include +#include #include "qt_settings.hpp" @@ -26,6 +25,11 @@ MainWindow::MainWindow(QWidget *parent) : ui->setupUi(this); + connect(this, &MainWindow::showMessage, this, [this](const QString& header, const QString& message) { + QMessageBox box(QMessageBox::Warning, header, message, QMessageBox::NoButton, this); + box.exec(); + }, Qt::BlockingQueuedConnection); + connect(this, &MainWindow::pollMouse, this, [] { sdl_mouse_poll(); }); diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 3428ca098..a22088830 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -25,6 +25,7 @@ signals: void setFullscreen(bool state); void setMouseCapture(bool state); + void showMessage(const QString& header, const QString& message); private slots: void on_actionFullscreen_triggered(); diff --git a/src/qt/qt_ui.cpp b/src/qt/qt_ui.cpp index 08614a48e..decca9f24 100644 --- a/src/qt/qt_ui.cpp +++ b/src/qt/qt_ui.cpp @@ -2,7 +2,6 @@ #include #include -#include #include @@ -57,16 +56,14 @@ void plat_mouse_capture(int on) { main_window->setMouseCapture(on > 0 ? true : false); } -int ui_msgbox_header(int flags, void *header, void* message) -{ +int ui_msgbox_header(int flags, void *header, void* message) { if (header <= (void*)7168) header = plat_get_string(reinterpret_cast(header)); if (message <= (void*)7168) message = plat_get_string(reinterpret_cast(message)); auto hdr = QString::fromWCharArray(reinterpret_cast(header)); auto msg = QString::fromWCharArray(reinterpret_cast(message)); - QMessageBox box(QMessageBox::Warning, hdr, msg); - box.exec(); + main_window->showMessage(hdr, msg); return 0; } From 8385051f6a6a834bb9a55cf0c3c9c52f1d683f26 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Mon, 29 Nov 2021 17:25:31 +0100 Subject: [PATCH 012/278] fixup showMessage from both qt thread and external thread, while blocking --- src/qt/qt_mainwindow.cpp | 19 +++++++++++++++---- src/qt/qt_mainwindow.hpp | 4 +++- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 4f7b9fc9b..34f3a0340 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -12,6 +12,7 @@ extern "C" { #include #include #include +#include #include #include @@ -25,10 +26,7 @@ MainWindow::MainWindow(QWidget *parent) : ui->setupUi(this); - connect(this, &MainWindow::showMessage, this, [this](const QString& header, const QString& message) { - QMessageBox box(QMessageBox::Warning, header, message, QMessageBox::NoButton, this); - box.exec(); - }, Qt::BlockingQueuedConnection); + connect(this, &MainWindow::showMessageForNonQtThread, this, &MainWindow::showMessage_, Qt::BlockingQueuedConnection); connect(this, &MainWindow::pollMouse, this, [] { sdl_mouse_poll(); @@ -288,3 +286,16 @@ static const uint16_t xfree86_keycode_table[keycode_entries] = { void MainWindow::on_actionFullscreen_triggered() { setFullscreen(true); } + +void MainWindow::showMessage(const QString& header, const QString& message) { + if (QThread::currentThread() == this->thread()) { + showMessage_(header, message); + } else { + emit showMessageForNonQtThread(header, message); + } +} + +void MainWindow::showMessage_(const QString &header, const QString &message) { + QMessageBox box(QMessageBox::Warning, header, message, QMessageBox::NoButton, this); + box.exec(); +} diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index a22088830..655a8edc8 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -15,6 +15,8 @@ class MainWindow : public QMainWindow public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); + + void showMessage(const QString& header, const QString& message); signals: void paint(const QImage& image); void resizeContents(int w, int h); @@ -25,8 +27,8 @@ signals: void setFullscreen(bool state); void setMouseCapture(bool state); - void showMessage(const QString& header, const QString& message); + void showMessageForNonQtThread(const QString& header, const QString& message); private slots: void on_actionFullscreen_triggered(); void on_actionSettings_triggered(); From 668887a30abf0adb0c382c1e8bff34bcf47f6bf9 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Mon, 29 Nov 2021 19:03:00 +0100 Subject: [PATCH 013/278] missed showMessage_ declaration --- src/qt/qt_mainwindow.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 655a8edc8..ba7867120 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -40,6 +40,7 @@ private slots: void on_actionRight_CTRL_is_left_ALT_triggered(); void on_actionKeyboard_requires_capture_triggered(); + void showMessage_(const QString& header, const QString& message); private: struct DeltaPos { int x = 0; From 0108c93e2d88055df129f3b8669a21273218032f Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 30 Nov 2021 16:26:49 +0600 Subject: [PATCH 014/278] Render emulator output on main window Introduce hardware renderer --- src/qt/CMakeLists.txt | 14 + src/qt/cocoa_mouse.hpp | 10 + src/qt/macos_event_filter.mm | 107 ++++++ src/qt/qt_gleswidget.cpp | 154 ++++++++ src/qt/qt_gleswidget.hpp | 41 ++ src/qt/qt_main.cpp | 11 + src/qt/qt_mainwindow.cpp | 703 +++++++++++++++++++++++++++-------- src/qt/qt_mainwindow.hpp | 6 + src/qt/qt_ui.cpp | 5 + 9 files changed, 888 insertions(+), 163 deletions(-) create mode 100644 src/qt/cocoa_mouse.hpp create mode 100644 src/qt/macos_event_filter.mm create mode 100644 src/qt/qt_gleswidget.cpp create mode 100644 src/qt/qt_gleswidget.hpp diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 0f119f8c5..9bda243b2 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -6,6 +6,11 @@ set(CMAKE_AUTORCC ON) find_package(Threads REQUIRED) +set(UI_EXTRA_FILES) +if (APPLE) + set(UI_EXTRA_FILES "macos_event_filter.mm") +endif() + add_library(plat STATIC qt.c qt_main.cpp qt_platform.cpp qt_midi.cpp cpp11_thread.cpp) add_library(ui STATIC qt_ui.cpp @@ -18,6 +23,10 @@ add_library(ui STATIC qt_machinestatus.cpp qt_machinestatus.hpp qt_machinestatus.ui + qt_gleswidget.cpp + qt_gleswidget.hpp + + ${UI_EXTRA_FILES} qt_settings.cpp qt_settings.hpp @@ -89,3 +98,8 @@ target_link_libraries( Qt5::Widgets Threads::Threads ) + +if (NOT APPLE) + find_package(X11 REQUIRED) + target_link_libraries(ui PRIVATE X11::X11) +endif() \ No newline at end of file diff --git a/src/qt/cocoa_mouse.hpp b/src/qt/cocoa_mouse.hpp new file mode 100644 index 000000000..83939a233 --- /dev/null +++ b/src/qt/cocoa_mouse.hpp @@ -0,0 +1,10 @@ +#include +#include + +class CocoaEventFilter : public QAbstractNativeEventFilter +{ +public: + CocoaEventFilter() {}; + ~CocoaEventFilter(); + virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) override; +}; \ No newline at end of file diff --git a/src/qt/macos_event_filter.mm b/src/qt/macos_event_filter.mm new file mode 100644 index 000000000..e942b5f49 --- /dev/null +++ b/src/qt/macos_event_filter.mm @@ -0,0 +1,107 @@ +#include +#include "86box/plat.h" +#include "cocoa_mouse.hpp" +#import +extern "C" +{ +#include <86box/86box.h> +#include <86box/keyboard.h> +#include <86box/mouse.h> +#include <86box/config.h> +//#include <86box/plat.h> +#include <86box/plat_dynld.h> +#include <86box/device.h> +#include <86box/timer.h> +#include <86box/ui.h> +#include <86box/video.h> +extern int mouse_capture; +} + +typedef struct mouseinputdata +{ + int deltax, deltay, deltaz; + int mousebuttons; +} mouseinputdata; + +extern SDL_mutex* mousemutex; +extern mouseinputdata mousedata; + +CocoaEventFilter::~CocoaEventFilter() +{ + +} + +bool CocoaEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *result) +{ + if (mouse_capture) + { + if (eventType == "mac_generic_NSEvent") + { + NSEvent* event = (NSEvent*)message; + if ([event type] == NSEventTypeMouseMoved) + { + SDL_LockMutex(mousemutex); + mousedata.deltax += [event deltaX]; + mousedata.deltay += [event deltaY]; + SDL_UnlockMutex(mousemutex); + return true; + } + if ([event type] == NSEventTypeScrollWheel) + { + SDL_LockMutex(mousemutex); + mousedata.deltaz += [event deltaY]; + SDL_UnlockMutex(mousemutex); + return true; + } + switch ([event type]) + { + default: return false; + case NSEventTypeLeftMouseDown: + { + SDL_LockMutex(mousemutex); + mousedata.mousebuttons |= 1; + SDL_UnlockMutex(mousemutex); + break; + } + case NSEventTypeLeftMouseUp: + { + SDL_LockMutex(mousemutex); + mousedata.mousebuttons &= ~1; + SDL_UnlockMutex(mousemutex); + break; + } + case NSEventTypeRightMouseDown: + { + SDL_LockMutex(mousemutex); + mousedata.mousebuttons |= 2; + SDL_UnlockMutex(mousemutex); + break; + } + case NSEventTypeRightMouseUp: + { + SDL_LockMutex(mousemutex); + mousedata.mousebuttons &= ~2; + SDL_UnlockMutex(mousemutex); + break; + } + case NSEventTypeOtherMouseDown: + { + SDL_LockMutex(mousemutex); + mousedata.mousebuttons |= 4; + SDL_UnlockMutex(mousemutex); + break; + } + case NSEventTypeOtherMouseUp: + { + if (mouse_get_buttons() < 3) { plat_mouse_capture(0); return true; } + SDL_LockMutex(mousemutex); + mousedata.mousebuttons &= ~4; + SDL_UnlockMutex(mousemutex); + break; + } + } + return true; + } + } + return false; +} diff --git a/src/qt/qt_gleswidget.cpp b/src/qt/qt_gleswidget.cpp new file mode 100644 index 000000000..d7078db45 --- /dev/null +++ b/src/qt/qt_gleswidget.cpp @@ -0,0 +1,154 @@ +#include +#include +#include "qt_gleswidget.hpp" +#ifdef __APPLE__ +#include +#endif + +extern "C" +{ +#include <86box/mouse.h> +#include <86box/plat.h> +#include <86box/video.h> +} + +typedef struct mouseinputdata +{ + int deltax, deltay, deltaz; + int mousebuttons; +} mouseinputdata; + +mouseinputdata mousedata; +SDL_mutex* mousemutex; + +void +qt_mouse_capture(int on) +{ + if (!on) + { + mouse_capture = 0; + QApplication::setOverrideCursor(Qt::ArrowCursor); +#ifdef __APPLE__ + CGAssociateMouseAndMouseCursorPosition(true); +#endif + return; + } + mouse_capture = 1; + QApplication::setOverrideCursor(Qt::BlankCursor); +#ifdef __APPLE__ + CGAssociateMouseAndMouseCursorPosition(false); +#endif + return; +} + +void qt_mouse_poll() +{ + SDL_LockMutex(mousemutex); + mouse_x = mousedata.deltax; + mouse_y = mousedata.deltay; + mouse_z = mousedata.deltaz; + mousedata.deltax = mousedata.deltay = mousedata.deltaz = 0; + mouse_buttons = mousedata.mousebuttons; + SDL_UnlockMutex(mousemutex); +} + +void GLESWidget::resizeGL(int w, int h) +{ + glViewport(0, 0, w, h); +} + +void GLESWidget::initializeGL() +{ + initializeOpenGLFunctions(); +} +void GLESWidget::paintGL() +{ + QPainter painter(this); + //painter.fillRect(rect, QColor(0, 0, 0)); + painter.drawImage(QRect(0, 0, width(), height()), m_image.convertToFormat(QImage::Format_RGBA8888), QRect(sx, sy, sw, sh)); + painter.end(); + update(); +} + +void GLESWidget::mouseReleaseEvent(QMouseEvent *event) +{ + if (this->geometry().contains(event->pos()) && event->button() == Qt::LeftButton && !mouse_capture) + { + this->grabMouse(); + return; + } + if (mouse_capture && event->button() == Qt::MiddleButton && mouse_get_buttons() < 3) + { + this->releaseMouse(); + return; + } + if (mouse_capture) + { + SDL_LockMutex(mousemutex); + mousedata.mousebuttons &= ~event->button(); + SDL_UnlockMutex(mousemutex); + } +} +void GLESWidget::mousePressEvent(QMouseEvent *event) +{ + if (mouse_capture) + { + SDL_LockMutex(mousemutex); + mousedata.mousebuttons |= event->button(); + SDL_UnlockMutex(mousemutex); + } +} +void GLESWidget::wheelEvent(QWheelEvent *event) +{ + if (mouse_capture) + { + SDL_LockMutex(mousemutex); + mousedata.deltay += event->pixelDelta().y(); + SDL_UnlockMutex(mousemutex); + } +} + +int ignoreNextMouseEvent = 0; +void GLESWidget::mouseMoveEvent(QMouseEvent *event) +{ + if (!mouse_capture) { event->ignore(); return; } +#ifdef __APPLE__ + event->accept(); + return; +#else + static QPoint oldPos = QCursor::pos(); + if (ignoreNextMouseEvent) { oldPos = event->pos(); ignoreNextMouseEvent--; event->accept(); return; } + SDL_LockMutex(mousemutex); + mousedata.deltax += event->pos().x() - oldPos.x(); + mousedata.deltay += event->pos().y() - oldPos.y(); + SDL_UnlockMutex(mousemutex); + QCursor::setPos(mapToGlobal(QPoint(width() / 2, height() / 2))); + oldPos = event->pos(); + ignoreNextMouseEvent = 1; +#endif +} + +void GLESWidget::qt_real_blit(int x, int y, int w, int h) +{ + // printf("Offpainter thread ID: %X\n", SDL_ThreadID()); + if ((w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL)) + { + video_blit_complete(); + return; + } + sx = x; + sy = y; + sw = this->w = w; + sh = this->h = h; + auto imagebits = m_image.bits(); + for (int y1 = y; y1 < (y + h - 1); y1++) + { + auto scanline = imagebits + (y1 * (2048 + 64) * 4); + video_copy(scanline + (x * 4), &(buffer32->line[y1][x]), w * 4); + } + if (screenshots) + { + video_screenshot((uint32_t *)imagebits, 0, 0, 2048 + 64); + } + video_blit_complete(); +} \ No newline at end of file diff --git a/src/qt/qt_gleswidget.hpp b/src/qt/qt_gleswidget.hpp new file mode 100644 index 000000000..8689cdf1d --- /dev/null +++ b/src/qt/qt_gleswidget.hpp @@ -0,0 +1,41 @@ +#include +#include +#include +#include +#include + +class GLESWidget : public QOpenGLWidget, protected QOpenGLFunctions +{ + Q_OBJECT + +private: + QImage m_image{QSize(2048 + 64, 2048 + 64), QImage::Format_RGB32}; + int x, y, w, h, sx, sy, sw, sh; +public: + void resizeGL(int w, int h) override; + void initializeGL() override; + void paintGL() override; + GLESWidget(QWidget* parent = nullptr) + : QOpenGLWidget(parent) + { + setMinimumSize(16, 16); + } + ~GLESWidget() + { + makeCurrent(); + } + void mousePressEvent(QMouseEvent* event) override; + void mouseReleaseEvent(QMouseEvent* event) override; + void mouseMoveEvent(QMouseEvent* event) override; + void wheelEvent(QWheelEvent *event) override; + void keyPressEvent(QKeyEvent* event) override + { + event->ignore(); + } + void keyReleaseEvent(QKeyEvent* event) override + { + event->ignore(); + } +public slots: + void qt_real_blit(int x, int y, int w, int h); +}; \ No newline at end of file diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 3fb6dd2ca..56a486ac8 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -11,8 +11,11 @@ #include +#include "SDL.h" +#include "SDL_mutex.h" #include "qt_mainwindow.hpp" #include "qt_sdl.h" +#include "cocoa_mouse.hpp" // Void Cast @@ -73,9 +76,16 @@ main_thread_fn() is_quit = 1; } +extern SDL_mutex* mousemutex; int main(int argc, char* argv[]) { QApplication app(argc, argv); +#ifdef __APPLE__ + CocoaEventFilter cocoafilter; + app.installNativeEventFilter(&cocoafilter); +#endif elapsed_timer.start(); + SDL_Init(SDL_INIT_TIMER); + mousemutex = SDL_CreateMutex(); main_window = new MainWindow(); main_window->show(); @@ -91,6 +101,7 @@ int main(int argc, char* argv[]) { // plat_pause(0); /* Initialize the rendering window, or fullscreen. */ + QTimer::singleShot(50, []() { plat_resize(640, 480); } ); auto main_thread = std::thread([] { main_thread_fn(); }); diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 34f3a0340..fdde83dc5 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -1,10 +1,14 @@ #include "qt_mainwindow.hpp" +#include "ui_qt_machinestatus.h" #include "ui_qt_mainwindow.h" +#include extern "C" { #include <86box/86box.h> #include <86box/config.h> +#include <86box/keyboard.h> #include <86box/plat.h> +#include <86box/video.h> #include "qt_sdl.h" }; @@ -16,7 +20,19 @@ extern "C" { #include #include +#include + #include "qt_settings.hpp" +#include "qt_gleswidget.hpp" + +#ifdef __unix__ +#include +#include +#endif + +extern void qt_mouse_poll(); +extern void qt_mouse_capture(int); +extern "C" void qt_blit(int x, int y, int w, int h); MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), @@ -25,25 +41,36 @@ MainWindow::MainWindow(QWidget *parent) : Q_INIT_RESOURCE(qt_resources); ui->setupUi(this); + video_setblit(qt_blit); + + this->hw_widget = new GLESWidget(this); + this->hw_widget->setMouseTracking(true); + this->hw_widget->setGeometry(QRect(this->menuWidget() ? QPoint(0,this->menuWidget()->size().height()) : QPoint(0,0), QSize(640, 480))); + this->setCentralWidget(this->hw_widget); + connect(this, &MainWindow::blitToWidget, (GLESWidget*)this->hw_widget, &GLESWidget::qt_real_blit); connect(this, &MainWindow::showMessageForNonQtThread, this, &MainWindow::showMessage_, Qt::BlockingQueuedConnection); connect(this, &MainWindow::pollMouse, this, [] { - sdl_mouse_poll(); + qt_mouse_poll(); }); - connect(this, &MainWindow::setMouseCapture, this, [](bool state) { + connect(this, &MainWindow::setMouseCapture, this, [this](bool state) { mouse_capture = state ? 1 : 0; - sdl_mouse_capture(mouse_capture); + qt_mouse_capture(mouse_capture); + if (mouse_capture) hw_widget->grabMouse(); + else hw_widget->releaseMouse(); }); - connect(this, &MainWindow::setFullscreen, this, [](bool state) { + connect(this, &MainWindow::setFullscreen, this, [this](bool state) { video_fullscreen = state ? 1 : 0; - sdl_set_fs(video_fullscreen); + //sdl_set_fs(video_fullscreen); + this->setFullscreen(state); }); connect(this, &MainWindow::resizeContents, this, [this](int w, int h) { - sdl_resize(w, h); + this->hw_widget->resize(w, h); + this->resize(w, h + menuBar()->height() + statusBar()->height()); }); connect(ui->menubar, &QMenuBar::triggered, this, [] { @@ -56,7 +83,7 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionKeyboard_requires_capture->setChecked(kbd_req_capture); ui->actionRight_CTRL_is_left_ALT->setChecked(rctrl_is_lalt); - +#if 0 sdl_inits(); sdl_timer = new QTimer(this); connect(sdl_timer, &QTimer::timeout, this, [] { @@ -66,10 +93,13 @@ MainWindow::MainWindow(QWidget *parent) : } }); sdl_timer->start(5); +#endif } MainWindow::~MainWindow() { - sdl_close(); + //sdl_close(); + startblit(); + //delete hw_widget; delete ui; } @@ -123,165 +153,494 @@ void MainWindow::on_actionSettings_triggered() { } } -static const int keycode_entries = 136; -// xmodmap -pk -static const uint16_t xfree86_keycode_table[keycode_entries] = { - /* 0 */ 0, - /* 1 */ 0, - /* 2 */ 0, - /* 3 */ 0, - /* 4 */ 0, - /* 5 */ 0, - /* 6 */ 0, - /* 7 */ 0, - /* 8 */ 0, - /* 9 */ 0x01, // Esc - /* 10 */ 0x02, // 1 - /* 11 */ 0x03, // 2 - /* 12 */ 0x04, // 3 - /* 13 */ 0x05, // 4 - /* 14 */ 0x06, // 5 - /* 15 */ 0x07, // 6 - /* 16 */ 0x08, // 7 - /* 17 */ 0x09, // 8 - /* 18 */ 0x0a, // 9 - /* 19 */ 0x0b, // 0 - /* 20 */ 0x0c, // - - /* 21 */ 0x0d, // = - /* 22 */ 0x0e, // BackSpace - /* 23 */ 0x0f, // Tab - /* 24 */ 0x10, // Q - /* 25 */ 0x11, // W - /* 26 */ 0x12, // E - /* 27 */ 0x13, // R - /* 28 */ 0x14, // T - /* 29 */ 0x15, // Y - /* 30 */ 0x16, // U - /* 31 */ 0x17, // I - /* 32 */ 0x18, // O - /* 33 */ 0x19, // P - /* 34 */ 0x1a, // [ - /* 35 */ 0x1b, // ] - /* 36 */ 0x1c, // Return - /* 37 */ 0x1d, // LeftControl - /* 38 */ 0x1e, // A - /* 39 */ 0x1f, // S - /* 40 */ 0x20, // D - /* 41 */ 0x21, // F - /* 42 */ 0x22, // G - /* 43 */ 0x23, // H - /* 44 */ 0x24, // J - /* 45 */ 0x25, // K - /* 46 */ 0x26, // L - /* 47 */ 0x27, // ; - /* 48 */ 0x28, // ' - /* 49 */ 0x29, // ` (???) - /* 50 */ 0x2a, // LeftShift - /* 51 */ 0x2b, // BackSlash - /* 52 */ 0x2c, // Z - /* 53 */ 0x2d, // X - /* 54 */ 0x2e, // C - /* 55 */ 0x2f, // V - /* 56 */ 0x30, // B - /* 57 */ 0x31, // N - /* 58 */ 0x32, // M - /* 59 */ 0x33, // , - /* 60 */ 0x34, // . - /* 61 */ 0x35, // - - /* 62 */ 0x36, // RightShift - /* 63 */ 0x37, // KeyPad Multiply - /* 64 */ 0x38, // LeftAlt - /* 65 */ 0x39, // Space - /* 66 */ 0x3a, // CapsLock - /* 67 */ 0x3b, // F01 - /* 68 */ 0x3c, // F02 - /* 69 */ 0x3d, // F03 - /* 70 */ 0x3e, // F04 - /* 71 */ 0x3f, // F05 - /* 72 */ 0x40, // F06 - /* 73 */ 0x41, // F07 - /* 74 */ 0x42, // F08 - /* 75 */ 0x43, // F09 - /* 76 */ 0x44, // F10 - /* 77 */ 0x45, // NumLock - /* 78 */ 0x46, // ScrollLock - /* 79 */ 0x47, // KeyPad7 - /* 80 */ 0x48, // KeyPad8 - /* 81 */ 0x49, // KeyPad9 - /* 82 */ 0x4a, // KeyPad Minus - /* 83 */ 0x4b, // KeyPad4 - /* 84 */ 0x4c, // KeyPad5 - /* 85 */ 0x4d, // KeyPad6 - /* 86 */ 0x4e, // KeyPad Plus - /* 87 */ 0x4f, // KeyPad1 - /* 88 */ 0x50, // KeyPad2 - /* 89 */ 0x51, // KeyPad3 - /* 90 */ 0x52, // KeyPad0 - /* 91 */ 0x53, // KeyPad . - /* 92 */ 0, - /* 93 */ 0, - /* 94 */ 0x56, // Less/Great - /* 95 */ 0x57, // F11 - /* 96 */ 0x58, // F12 - /* 97 */ 0, - /* 98 */ 0, - /* 99 */ 0, - /* 100 */ 0, - /* 101 */ 0, - /* 102 */ 0, - /* 103 */ 0, - /* 104 */ 0x11c, // KeyPad Enter - /* 105 */ 0x11d, // RightControl - /* 106 */ 0x135, // KeyPad Divide - /* 107 */ 0x137, // PrintScreen / SysReq - /* 108 */ 0x138, // RightAlt - /* 109 */ 0, - /* 110 */ 0x147, // Home - /* 111 */ 0x148, // Up - /* 112 */ 0x149, // PageUp - /* 113 */ 0x14b, // Left - /* 114 */ 0x14d, // Right - /* 115 */ 0x14f, // End - /* 116 */ 0x150, // Down - /* 117 */ 0x151, // PageDown - /* 118 */ 0x152, // Insert - /* 119 */ 0x153, // Delete - /* 120 */ 0, - /* 121 */ 0, - /* 122 */ 0, - /* 123 */ 0, - /* 124 */ 0, - /* 125 */ 0, - /* 126 */ 0, - /* 127 */ 0, - /* 128 */ 0, - /* 129 */ 0, - /* 130 */ 0, - /* 131 */ 0, - /* 132 */ 0, - /* 133 */ 0x15b, // SuperLeft - /* 134 */ 0x15c, // SuperRight - /* 135 */ 0x15d, // Application +std::array x11_to_xt_base +{ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0x01, + 0x02, + 0x03, + 0x04, + 0x05, + 0x06, + 0x07, + 0x08, + 0x09, + 0x0A, + 0x0B, + 0x0C, + 0x0D, + 0x0E, + 0x0F, + 0x10, + 0x11, + 0x12, + 0x13, + 0x14, + 0x15, + 0x16, + 0x17, + 0x18, + 0x19, + 0x1A, + 0x1B, + 0x1C, + 0x1D, + 0x1E, + 0x1F, + 0x20, + 0x21, + 0x22, + 0x23, + 0x24, + 0x25, + 0x26, + 0x27, + 0x28, + 0x29, + 0x2A, + 0x2B, + 0x2C, + 0x2D, + 0x2E, + 0x2F, + 0x30, + 0x31, + 0x32, + 0x33, + 0x34, + 0x35, + 0x36, + 0x37, + 0x38, + 0x39, + 0x3A, + 0x3B, + 0x3C, + 0x3D, + 0x3E, + 0x3F, + 0x40, + 0x41, + 0x42, + 0x43, + 0x44, + 0x45, + 0x46, + 0x47, + 0x48, + 0x49, + 0x4A, + 0x4B, + 0x4C, + 0x4D, + 0x4E, + 0x4F, + 0x50, + 0x51, + 0x52, + 0x53, + 0x54, + 0x55, + 0x56, + 0x57, + 0x58, + 0x147, + 0x148, + 0x149, + 0, + 0x14B, + 0, + 0x14D, + 0x14F, + 0x150, + 0x151, + 0x152, + 0x153, + 0x11C, + 0x11D, + 0, // Pause/Break key. + 0x137, + 0x135, + 0x138, + 0, // Ditto as above comment. + 0x15B, + 0x15C, + 0x15D, }; -//static void handle_keypress_event(int state, quint32 native_scancode) { -// if (native_scancode > keycode_entries) { -// return; -// } -// uint16_t translated_code = xfree86_keycode_table[native_scancode]; -// if (translated_code == 0) { -// return; -// } -// keyboard_input(state, translated_code); +std::array x11_to_xt_2 +{ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0x01, + 0x02, + 0x03, + 0x04, + 0x05, + 0x06, + 0x07, + 0x08, + 0x09, + 0x0A, + 0x0B, + 0x0C, + 0x0D, + 0x0E, + 0x0F, + 0x10, + 0x11, + 0x12, + 0x13, + 0x14, + 0x15, + 0x16, + 0x17, + 0x18, + 0x19, + 0x1A, + 0x1B, + 0x1C, + 0x1D, + 0x1E, + 0x1F, + 0x20, + 0x21, + 0x22, + 0x23, + 0x24, + 0x25, + 0x26, + 0x27, + 0x28, + 0x29, + 0x2A, + 0x2B, + 0x2C, + 0x2D, + 0x2E, + 0x2F, + 0x30, + 0x31, + 0x32, + 0x33, + 0x34, + 0x35, + 0x36, + 0x37, + 0x38, + 0x39, + 0x3A, + 0x3B, + 0x3C, + 0x3D, + 0x3E, + 0x3F, + 0x40, + 0x41, + 0x42, + 0x43, + 0x44, + 0x45, + 0x46, + 0x47, + 0x48, + 0x49, + 0x4A, + 0x4B, + 0x4C, + 0x4D, + 0x4E, + 0x4F, + 0x50, + 0x51, + 0x52, + 0x53, + 0x54, + 0x55, + 0x56, + 0x57, + 0x58, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0x11C, + 0x11D, + 0x135, + 0x137, + 0x138, + 0, + 0x147, + 0x148, + 0x149, + 0x14B, + 0x14D, + 0x14F, + 0x150, + 0x151, + 0x152, + 0x153 +}; -// if (keyboard_isfsexit() > 0) { -// plat_setfullscreen(0); -// } +std::array x11_to_xt_vnc +{ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0x1D, + 0x11D, + 0x2A, + 0x36, + 0, + 0, + 0x38, + 0x138, + 0x39, + 0x0B, + 0x02, + 0x03, + 0x04, + 0x05, + 0x06, + 0x07, + 0x08, + 0x09, + 0x0A, + 0x0C, + 0x0D, + 0x1A, + 0x1B, + 0x27, + 0x28, + 0x29, + 0x33, + 0x34, + 0x35, + 0x2B, + 0x1E, + 0x30, + 0x2E, + 0x20, + 0x12, + 0x21, + 0x22, + 0x23, + 0x17, + 0x24, + 0x25, + 0x26, + 0x32, + 0x31, + 0x18, + 0x19, + 0x10, + 0x13, + 0x1F, + 0x14, + 0x16, + 0x2F, + 0x11, + 0x2D, + 0x15, + 0x2C, + 0x0E, + 0x1C, + 0x0F, + 0x01, + 0x153, + 0x147, + 0x14F, + 0x149, + 0x151, + 0x148, + 0x150, + 0x14B, + 0x14D, +}; -// if (keyboard_ismsexit() > 0) { -// plat_mouse_capture(0); -// } -//} +std::array darwin_to_xt +{ + 0x1E, + 0x1F, + 0x20, + 0x21, + 0x23, + 0x22, + 0x2C, + 0x2D, + 0x2E, + 0x2F, + 0x2B, + 0x30, + 0x10, + 0x11, + 0x12, + 0x13, + 0x15, + 0x14, + 0x02, + 0x03, + 0x04, + 0x05, + 0x07, + 0x06, + 0x0D, + 0x0A, + 0x08, + 0x0C, + 0x09, + 0x0B, + 0x1B, + 0x18, + 0x16, + 0x1A, + 0x17, + 0x19, + 0x1C, + 0x26, + 0x24, + 0x28, + 0x25, + 0x27, + 0x2B, + 0x33, + 0x35, + 0x31, + 0x32, + 0x34, + 0x0F, + 0x39, + 0x29, + 0x0E, + 0x11C, + 0x01, + 0x15C, + 0x15B, + 0x2A, + 0x3A, + 0x38, + 0x1D, + 0x36, + 0x138, + 0x11D, + 0x15C, + 0, + 0x53, + 0, + 0x37, + 0, + 0x4E, + 0, + 0x45, + 0x130, + 0x12E, + 0x120, + 0x135, + 0x11C, + 0, + 0x4A, + 0, + 0, + 0, + 0x52, + 0x4F, + 0x50, + 0x51, + 0x4B, + 0x4C, + 0x4D, + 0x47, + 0, + 0x48, + 0x49, + 0, + 0, + 0, + 0x3F, + 0x40, + 0x41, + 0x3D, + 0x42, + 0x43, + 0, + 0x57, + 0, + 0x137, + 0, + 0x46, + 0, + 0x44, + 0x15D, + 0x58, + 0, + 0, // Pause/Break key. + 0x152, + 0x147, + 0x149, + 0x153, + 0x3E, + 0x14F, + 0x3C, + 0x151, + 0x3B, + 0x14B, + 0x14D, + 0x150, + 0x148, + 0, +}; + +static std::array& selected_keycode = x11_to_xt_base; + +uint16_t x11_keycode_to_keysym(uint32_t keycode) +{ +#ifdef __APPLE__ + return darwin_to_xt[keycode]; +#else + static Display* x11display = nullptr; + if (QApplication::platformName().contains("wayland")) + { + selected_keycode = x11_to_xt_2; + } + else if (!x11display) + { + x11display = XOpenDisplay(nullptr); + if (XKeysymToKeycode(x11display, XK_Home) == 110) + { + selected_keycode = x11_to_xt_2; + } + else if (XKeysymToKeycode(x11display, XK_Home) == 69) + { + selected_keycode = x11_to_xt_vnc; + } + } + return selected_keycode[keycode]; +#endif +} void MainWindow::on_actionFullscreen_triggered() { setFullscreen(true); @@ -299,3 +658,21 @@ void MainWindow::showMessage_(const QString &header, const QString &message) { QMessageBox box(QMessageBox::Warning, header, message, QMessageBox::NoButton, this); box.exec(); } + +void MainWindow::keyPressEvent(QKeyEvent* event) +{ +#ifdef __APPLE__ + keyboard_input(1, x11_keycode_to_keysym(event->nativeVirtualKey())); +#else + keyboard_input(1, x11_keycode_to_keysym(event->nativeScanCode())); +#endif +} + +void MainWindow::keyReleaseEvent(QKeyEvent* event) +{ +#ifdef __APPLE__ + keyboard_input(0, x11_keycode_to_keysym(event->nativeVirtualKey())); +#else + keyboard_input(0, x11_keycode_to_keysym(event->nativeScanCode())); +#endif +} diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index ba7867120..7a075a174 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -3,6 +3,7 @@ #include #include +#include namespace Ui { class MainWindow; @@ -19,6 +20,7 @@ public: void showMessage(const QString& header, const QString& message); signals: void paint(const QImage& image); + void blitToWidget(int x, int y, int w, int h); void resizeContents(int w, int h); void pollMouse(); void updateStatusBarPanes(); @@ -41,6 +43,9 @@ private slots: void on_actionKeyboard_requires_capture_triggered(); void showMessage_(const QString& header, const QString& message); +protected: + void keyPressEvent(QKeyEvent* event) override; + void keyReleaseEvent(QKeyEvent* event) override; private: struct DeltaPos { int x = 0; @@ -51,6 +56,7 @@ private: DeltaPos mouseDelta; QWindow* sdl_wrapped_window; QWidget* sdl_wrapped_widget; + QWidget* hw_widget; QTimer* sdl_timer; }; diff --git a/src/qt/qt_ui.cpp b/src/qt/qt_ui.cpp index decca9f24..1e24ac792 100644 --- a/src/qt/qt_ui.cpp +++ b/src/qt/qt_ui.cpp @@ -36,6 +36,11 @@ wchar_t* ui_window_title(wchar_t* str) return str; } +extern "C" void qt_blit(int x, int y, int w, int h) +{ + main_window->blitToWidget(x, y, w, h); +} + void mouse_poll() { main_window->pollMouse(); } From 563869a06e314f922266e7bb0e6f688a884fee93 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 1 Dec 2021 01:00:41 +0600 Subject: [PATCH 015/278] Fix macOS builds --- src/include/86box/plat.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/include/86box/plat.h b/src/include/86box/plat.h index ca116a684..de5daf1ff 100644 --- a/src/include/86box/plat.h +++ b/src/include/86box/plat.h @@ -20,6 +20,8 @@ #ifndef EMU_PLAT_H # define EMU_PLAT_H +#include "86box/device.h" +#include "86box/machine.h" #ifndef GLOBAL # define GLOBAL extern #endif @@ -158,6 +160,25 @@ extern int ioctl_open(uint8_t id, char d); extern void ioctl_reset(uint8_t id); extern void ioctl_close(uint8_t id); +#ifdef __APPLE__ +#define thread_t plat_thread_t +#define event_t plat_event_t +#define mutex_t plat_mutex_t + +#define thread_create plat_thread_create +#define thread_wait plat_thread_wait +#define thread_create_event plat_thread_create_event +#define thread_set_event plat_thread_set_event +#define thread_reset_event plat_thread_reset_event +#define thread_wait_event plat_thread_wait_event +#define thread_destroy_event plat_thread_destroy_event + +#define thread_create_mutex plat_thread_create_mutex +#define thread_create_mutex_with_spin_count plat_thread_create_mutex_with_spin_count +#define thread_close_mutex plat_thread_close_mutex +#define thread_wait_mutex plat_thread_wait_mutex +#define thread_release_mutex plat_thread_release_mutex +#endif /* Thread support. */ typedef void thread_t; From de88caf4b19313673cb63537640ea46c8042c9bc Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 1 Dec 2021 01:11:06 +0600 Subject: [PATCH 016/278] Accidentally left mouse capture half-baked --- src/qt/qt_gleswidget.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_gleswidget.cpp b/src/qt/qt_gleswidget.cpp index d7078db45..cf44b80fe 100644 --- a/src/qt/qt_gleswidget.cpp +++ b/src/qt/qt_gleswidget.cpp @@ -74,12 +74,12 @@ void GLESWidget::mouseReleaseEvent(QMouseEvent *event) { if (this->geometry().contains(event->pos()) && event->button() == Qt::LeftButton && !mouse_capture) { - this->grabMouse(); + plat_mouse_capture(1); return; } if (mouse_capture && event->button() == Qt::MiddleButton && mouse_get_buttons() < 3) { - this->releaseMouse(); + plat_mouse_capture(0); return; } if (mouse_capture) From 6fb22514fae2787fc9c2b1c81d4e6544d5b107ae Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Tue, 30 Nov 2021 20:18:13 +0100 Subject: [PATCH 017/278] simplified macos_event_filter.mm inclusion, link to X11 if UNIX-and-not-Apple --- src/qt/CMakeLists.txt | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 9bda243b2..bf4b561c0 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -6,11 +6,6 @@ set(CMAKE_AUTORCC ON) find_package(Threads REQUIRED) -set(UI_EXTRA_FILES) -if (APPLE) - set(UI_EXTRA_FILES "macos_event_filter.mm") -endif() - add_library(plat STATIC qt.c qt_main.cpp qt_platform.cpp qt_midi.cpp cpp11_thread.cpp) add_library(ui STATIC qt_ui.cpp @@ -26,8 +21,6 @@ add_library(ui STATIC qt_gleswidget.cpp qt_gleswidget.hpp - ${UI_EXTRA_FILES} - qt_settings.cpp qt_settings.hpp qt_settings.ui @@ -84,6 +77,9 @@ add_library(ui STATIC ../qt_resources.qrc ) +if (APPLE) + target_sources(ui PRIVATE macos_event_filter.mm) +endif() target_link_libraries( plat @@ -99,7 +95,7 @@ target_link_libraries( Threads::Threads ) -if (NOT APPLE) +if (UNIX AND NOT APPLE) find_package(X11 REQUIRED) target_link_libraries(ui PRIVATE X11::X11) -endif() \ No newline at end of file +endif() From 4cd5cb76d946315f342d4fb82afdce73b76a901a Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Tue, 30 Nov 2021 20:20:53 +0100 Subject: [PATCH 018/278] return null when dynld_module fails to load library --- src/qt/qt_platform.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index 45366560c..11cded7be 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -356,6 +356,8 @@ void* dynld_module(const char *name, dllimp_t *table) return nullptr; } } + } else { + return nullptr; } return lib.release(); From 82f6f6f5e8177b051245c66555159cd7d476ae2e Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Tue, 30 Nov 2021 20:34:07 +0100 Subject: [PATCH 019/278] fixed up dynld_module, actually loads and sets pointers correct now (tested against libpcap) --- src/qt/qt_platform.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index 11cded7be..47a771442 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -347,14 +347,23 @@ void plat_language_code_r(uint32_t lcid, char* outbuf, int len) { void* dynld_module(const char *name, dllimp_t *table) { - auto lib = std::unique_ptr(new QLibrary(name)); + QString libraryName = name; + QFileInfo fi(libraryName); + QStringList removeSuffixes = {"dll", "dylib", "so"}; + if (removeSuffixes.contains(fi.suffix())) { + libraryName = fi.completeBaseName(); + } + + auto lib = std::unique_ptr(new QLibrary(libraryName)); if (lib->load()) { for (auto imp = table; imp->name != nullptr; imp++) { - if ((imp->func = reinterpret_cast(lib->resolve(imp->name))) != nullptr) - { + auto ptr = lib->resolve(imp->name); + if (ptr == nullptr) { return nullptr; } + auto imp_ptr = reinterpret_cast(imp->func); + *imp_ptr = reinterpret_cast(ptr); } } else { return nullptr; From 9cdb4f90cade793fc9110eac8257c82aca58f707 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Tue, 30 Nov 2021 20:52:14 +0100 Subject: [PATCH 020/278] only need to signal update when we've been blitted --- src/qt/qt_gleswidget.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_gleswidget.cpp b/src/qt/qt_gleswidget.cpp index cf44b80fe..71ad041d6 100644 --- a/src/qt/qt_gleswidget.cpp +++ b/src/qt/qt_gleswidget.cpp @@ -67,7 +67,6 @@ void GLESWidget::paintGL() //painter.fillRect(rect, QColor(0, 0, 0)); painter.drawImage(QRect(0, 0, width(), height()), m_image.convertToFormat(QImage::Format_RGBA8888), QRect(sx, sy, sw, sh)); painter.end(); - update(); } void GLESWidget::mouseReleaseEvent(QMouseEvent *event) @@ -151,4 +150,5 @@ void GLESWidget::qt_real_blit(int x, int y, int w, int h) video_screenshot((uint32_t *)imagebits, 0, 0, 2048 + 64); } video_blit_complete(); -} \ No newline at end of file + update(); +} From 7e38ff7d4da627e07da9adf496d5a0e893861274 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Tue, 30 Nov 2021 21:04:55 +0100 Subject: [PATCH 021/278] removed sdl from gleswidget, use slots to update mouse movement --- src/qt/qt_gleswidget.cpp | 21 +-------------------- src/qt/qt_gleswidget.hpp | 11 ++++++++++- src/qt/qt_main.cpp | 2 -- src/qt/qt_mainwindow.cpp | 15 +-------------- src/qt/qt_mainwindow.hpp | 4 +++- 5 files changed, 15 insertions(+), 38 deletions(-) diff --git a/src/qt/qt_gleswidget.cpp b/src/qt/qt_gleswidget.cpp index 71ad041d6..3cd91c5a7 100644 --- a/src/qt/qt_gleswidget.cpp +++ b/src/qt/qt_gleswidget.cpp @@ -1,4 +1,3 @@ -#include #include #include "qt_gleswidget.hpp" #ifdef __APPLE__ @@ -12,14 +11,6 @@ extern "C" #include <86box/video.h> } -typedef struct mouseinputdata -{ - int deltax, deltay, deltaz; - int mousebuttons; -} mouseinputdata; - -mouseinputdata mousedata; -SDL_mutex* mousemutex; void qt_mouse_capture(int on) @@ -41,15 +32,13 @@ qt_mouse_capture(int on) return; } -void qt_mouse_poll() +void GLESWidget::qt_mouse_poll() { - SDL_LockMutex(mousemutex); mouse_x = mousedata.deltax; mouse_y = mousedata.deltay; mouse_z = mousedata.deltaz; mousedata.deltax = mousedata.deltay = mousedata.deltaz = 0; mouse_buttons = mousedata.mousebuttons; - SDL_UnlockMutex(mousemutex); } void GLESWidget::resizeGL(int w, int h) @@ -83,27 +72,21 @@ void GLESWidget::mouseReleaseEvent(QMouseEvent *event) } if (mouse_capture) { - SDL_LockMutex(mousemutex); mousedata.mousebuttons &= ~event->button(); - SDL_UnlockMutex(mousemutex); } } void GLESWidget::mousePressEvent(QMouseEvent *event) { if (mouse_capture) { - SDL_LockMutex(mousemutex); mousedata.mousebuttons |= event->button(); - SDL_UnlockMutex(mousemutex); } } void GLESWidget::wheelEvent(QWheelEvent *event) { if (mouse_capture) { - SDL_LockMutex(mousemutex); mousedata.deltay += event->pixelDelta().y(); - SDL_UnlockMutex(mousemutex); } } @@ -117,10 +100,8 @@ void GLESWidget::mouseMoveEvent(QMouseEvent *event) #else static QPoint oldPos = QCursor::pos(); if (ignoreNextMouseEvent) { oldPos = event->pos(); ignoreNextMouseEvent--; event->accept(); return; } - SDL_LockMutex(mousemutex); mousedata.deltax += event->pos().x() - oldPos.x(); mousedata.deltay += event->pos().y() - oldPos.y(); - SDL_UnlockMutex(mousemutex); QCursor::setPos(mapToGlobal(QPoint(width() / 2, height() / 2))); oldPos = event->pos(); ignoreNextMouseEvent = 1; diff --git a/src/qt/qt_gleswidget.hpp b/src/qt/qt_gleswidget.hpp index 8689cdf1d..76701c917 100644 --- a/src/qt/qt_gleswidget.hpp +++ b/src/qt/qt_gleswidget.hpp @@ -38,4 +38,13 @@ public: } public slots: void qt_real_blit(int x, int y, int w, int h); -}; \ No newline at end of file + void qt_mouse_poll(); + +private: + struct mouseinputdata { + int deltax, deltay, deltaz; + int mousebuttons; + }; + mouseinputdata mousedata; + +}; diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 56a486ac8..bbdbc6dc3 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -76,7 +76,6 @@ main_thread_fn() is_quit = 1; } -extern SDL_mutex* mousemutex; int main(int argc, char* argv[]) { QApplication app(argc, argv); #ifdef __APPLE__ @@ -85,7 +84,6 @@ int main(int argc, char* argv[]) { #endif elapsed_timer.start(); SDL_Init(SDL_INIT_TIMER); - mousemutex = SDL_CreateMutex(); main_window = new MainWindow(); main_window->show(); diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index fdde83dc5..44c07fc58 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -51,9 +51,7 @@ MainWindow::MainWindow(QWidget *parent) : connect(this, &MainWindow::showMessageForNonQtThread, this, &MainWindow::showMessage_, Qt::BlockingQueuedConnection); - connect(this, &MainWindow::pollMouse, this, [] { - qt_mouse_poll(); - }); + connect(this, &MainWindow::pollMouse, hw_widget, &GLESWidget::qt_mouse_poll); connect(this, &MainWindow::setMouseCapture, this, [this](bool state) { mouse_capture = state ? 1 : 0; @@ -83,17 +81,6 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionKeyboard_requires_capture->setChecked(kbd_req_capture); ui->actionRight_CTRL_is_left_ALT->setChecked(rctrl_is_lalt); -#if 0 - sdl_inits(); - sdl_timer = new QTimer(this); - connect(sdl_timer, &QTimer::timeout, this, [] { - auto status = sdl_main(); - if (status == SdlMainQuit) { - QApplication::quit(); - } - }); - sdl_timer->start(5); -#endif } MainWindow::~MainWindow() { diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 7a075a174..173caa8b1 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -9,6 +9,8 @@ namespace Ui { class MainWindow; } +class GLESWidget; + class MainWindow : public QMainWindow { Q_OBJECT @@ -56,7 +58,7 @@ private: DeltaPos mouseDelta; QWindow* sdl_wrapped_window; QWidget* sdl_wrapped_widget; - QWidget* hw_widget; + GLESWidget* hw_widget; QTimer* sdl_timer; }; From 6c2d7bef4a657e2f86649042c4dc65f827ee5390 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Tue, 30 Nov 2021 21:18:25 +0100 Subject: [PATCH 022/278] promote the gleswidget to centralwidget via the .ui file --- src/qt/qt_gleswidget.hpp | 4 +++- src/qt/qt_mainwindow.cpp | 23 ++++++++++------------- src/qt/qt_mainwindow.hpp | 12 ------------ src/qt/qt_mainwindow.ui | 9 ++++----- 4 files changed, 17 insertions(+), 31 deletions(-) diff --git a/src/qt/qt_gleswidget.hpp b/src/qt/qt_gleswidget.hpp index 76701c917..2ac888724 100644 --- a/src/qt/qt_gleswidget.hpp +++ b/src/qt/qt_gleswidget.hpp @@ -1,3 +1,5 @@ +#pragma once + #include #include #include @@ -16,7 +18,7 @@ public: void initializeGL() override; void paintGL() override; GLESWidget(QWidget* parent = nullptr) - : QOpenGLWidget(parent) + : QOpenGLWidget(parent), QOpenGLFunctions() { setMinimumSize(16, 16); } diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 44c07fc58..c7c643ce6 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -42,22 +42,19 @@ MainWindow::MainWindow(QWidget *parent) : ui->setupUi(this); video_setblit(qt_blit); + ui->glesWidget->setMouseTracking(true); - this->hw_widget = new GLESWidget(this); - this->hw_widget->setMouseTracking(true); - this->hw_widget->setGeometry(QRect(this->menuWidget() ? QPoint(0,this->menuWidget()->size().height()) : QPoint(0,0), QSize(640, 480))); - this->setCentralWidget(this->hw_widget); - connect(this, &MainWindow::blitToWidget, (GLESWidget*)this->hw_widget, &GLESWidget::qt_real_blit); + connect(this, &MainWindow::blitToWidget, ui->glesWidget, &GLESWidget::qt_real_blit); connect(this, &MainWindow::showMessageForNonQtThread, this, &MainWindow::showMessage_, Qt::BlockingQueuedConnection); - connect(this, &MainWindow::pollMouse, hw_widget, &GLESWidget::qt_mouse_poll); + connect(this, &MainWindow::pollMouse, ui->glesWidget, &GLESWidget::qt_mouse_poll); connect(this, &MainWindow::setMouseCapture, this, [this](bool state) { mouse_capture = state ? 1 : 0; qt_mouse_capture(mouse_capture); - if (mouse_capture) hw_widget->grabMouse(); - else hw_widget->releaseMouse(); + if (mouse_capture) ui->glesWidget->grabMouse(); + else ui->glesWidget->releaseMouse(); }); connect(this, &MainWindow::setFullscreen, this, [this](bool state) { @@ -67,17 +64,17 @@ MainWindow::MainWindow(QWidget *parent) : }); connect(this, &MainWindow::resizeContents, this, [this](int w, int h) { - this->hw_widget->resize(w, h); - this->resize(w, h + menuBar()->height() + statusBar()->height()); + ui->glesWidget->resize(w, h); + resize(w, h + menuBar()->height() + statusBar()->height()); }); connect(ui->menubar, &QMenuBar::triggered, this, [] { config_save(); }); - connect(this, &MainWindow::updateStatusBarPanes, ui->machineStatus, &MachineStatus::refresh); - connect(this, &MainWindow::updateStatusBarActivity, ui->machineStatus, &MachineStatus::setActivity); - connect(this, &MainWindow::updateStatusBarEmpty, ui->machineStatus, &MachineStatus::setEmpty); +// connect(this, &MainWindow::updateStatusBarPanes, ui->machineStatus, &MachineStatus::refresh); +// connect(this, &MainWindow::updateStatusBarActivity, ui->machineStatus, &MachineStatus::setActivity); +// connect(this, &MainWindow::updateStatusBarEmpty, ui->machineStatus, &MachineStatus::setEmpty); ui->actionKeyboard_requires_capture->setChecked(kbd_req_capture); ui->actionRight_CTRL_is_left_ALT->setChecked(rctrl_is_lalt); diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 173caa8b1..d3356b8e6 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -9,8 +9,6 @@ namespace Ui { class MainWindow; } -class GLESWidget; - class MainWindow : public QMainWindow { Q_OBJECT @@ -49,17 +47,7 @@ protected: void keyPressEvent(QKeyEvent* event) override; void keyReleaseEvent(QKeyEvent* event) override; private: - struct DeltaPos { - int x = 0; - int y = 0; - int z = 0; - }; Ui::MainWindow *ui; - DeltaPos mouseDelta; - QWindow* sdl_wrapped_window; - QWidget* sdl_wrapped_widget; - GLESWidget* hw_widget; - QTimer* sdl_timer; }; #endif // QT_MAINWINDOW_HPP diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 0e854a8f2..9c055ef62 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -37,7 +37,7 @@ 0 - + @@ -143,10 +143,9 @@ - MachineStatus - QWidget -
qt_machinestatus.hpp
- 1 + GLESWidget + QOpenGLWidget +
qt_gleswidget.hpp
From 358feb19ccbc60375cb1a5cbc007ac02cb9a5960 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Tue, 30 Nov 2021 21:26:51 +0100 Subject: [PATCH 023/278] fixed up fullscreen --- src/qt/qt_mainwindow.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index c7c643ce6..292a50d00 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -57,12 +57,6 @@ MainWindow::MainWindow(QWidget *parent) : else ui->glesWidget->releaseMouse(); }); - connect(this, &MainWindow::setFullscreen, this, [this](bool state) { - video_fullscreen = state ? 1 : 0; - //sdl_set_fs(video_fullscreen); - this->setFullscreen(state); - }); - connect(this, &MainWindow::resizeContents, this, [this](int w, int h) { ui->glesWidget->resize(w, h); resize(w, h + menuBar()->height() + statusBar()->height()); @@ -627,7 +621,13 @@ uint16_t x11_keycode_to_keysym(uint32_t keycode) } void MainWindow::on_actionFullscreen_triggered() { - setFullscreen(true); + if (video_fullscreen > 0) { + showNormal(); + video_fullscreen = 0; + } else { + showFullScreen(); + video_fullscreen = 1; + } } void MainWindow::showMessage(const QString& header, const QString& message) { From a6f8e6b68e802cf79a0a20d2036ef720ce17d21a Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Tue, 30 Nov 2021 21:29:58 +0100 Subject: [PATCH 024/278] plugged in keyboard_isfsexit and keyboard_ismsexit to ungrab mouse and leave fullscreen --- src/qt/qt_mainwindow.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 292a50d00..6e17e3cc8 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -650,6 +650,14 @@ void MainWindow::keyPressEvent(QKeyEvent* event) #else keyboard_input(1, x11_keycode_to_keysym(event->nativeScanCode())); #endif + + if (keyboard_isfsexit()) { + ui->actionFullscreen->trigger(); + } + + if (keyboard_ismsexit()) { + plat_mouse_capture(0); + } } void MainWindow::keyReleaseEvent(QKeyEvent* event) From cee1c93d49e35234aa2b665f8d907fba75d12404 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Tue, 30 Nov 2021 22:06:41 +0100 Subject: [PATCH 025/278] refactored machinestatus to update the qstatusbar --- src/qt/qt_machinestatus.cpp | 108 +++++++++++++++++++++++------------- src/qt/qt_machinestatus.hpp | 14 ++--- src/qt/qt_machinestatus.ui | 44 --------------- src/qt/qt_mainwindow.cpp | 16 ++++-- src/qt/qt_mainwindow.hpp | 5 +- 5 files changed, 89 insertions(+), 98 deletions(-) delete mode 100644 src/qt/qt_machinestatus.ui diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index d876343d7..d61e2f04a 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -1,5 +1,4 @@ #include "qt_machinestatus.hpp" -#include "ui_qt_machinestatus.h" extern "C" { #define EMU_CPU_H // superhack - don't want timer.h to include cpu.h here, and some combo is preventing a compile @@ -28,6 +27,7 @@ extern uint64_t tsc; #include #include #include +#include namespace { struct PixmapSetActive { @@ -62,29 +62,35 @@ namespace { }; struct StateActive { - QLabel label; + std::unique_ptr label; QTimer timer; PixmapSetActive* pixmaps = nullptr; bool active = false; void setActive(bool b) { active = b; - label.setPixmap(active ? pixmaps->active : pixmaps->normal); + if (! label) { + return; + } + label->setPixmap(active ? pixmaps->active : pixmaps->normal); timer.start(75); } }; struct StateEmpty { - QLabel label; + std::unique_ptr label; PixmapSetEmpty* pixmaps = nullptr; bool empty = false; void setEmpty(bool e) { empty = e; - label.setPixmap(empty ? pixmaps->empty : pixmaps->normal); + if (! label) { + return; + } + label->setPixmap(empty ? pixmaps->empty : pixmaps->normal); } }; struct StateEmptyActive { - QLabel label; + std::unique_ptr label; QTimer timer; PixmapSetEmptyActive* pixmaps = nullptr; bool empty = false; @@ -100,15 +106,18 @@ namespace { refresh(); } void refresh() { + if (! label) { + return; + } if (empty) { - label.setPixmap(active ? pixmaps->empty_active : pixmaps->empty); + label->setPixmap(active ? pixmaps->empty_active : pixmaps->empty); } else { - label.setPixmap(active ? pixmaps->active : pixmaps->normal); + label->setPixmap(active ? pixmaps->active : pixmaps->normal); } } }; - static const QSize pixmap_size(32, 32); + static const QSize pixmap_size(16, 16); static const QString pixmap_empty = QStringLiteral("_empty"); static const QString pixmap_active = QStringLiteral("_active"); static const QString pixmap_empty_active = QStringLiteral("_empty_active"); @@ -174,7 +183,6 @@ struct MachineStatus::States { QObject::connect(&h.timer, &QTimer::timeout, parent, [&]{ h.setActive(false); }); } net.pixmaps = &pixmaps.net; - sound.setPixmap(pixmaps.sound); } std::array cartridge; @@ -185,21 +193,16 @@ struct MachineStatus::States { std::array mo; std::array hdds; StateActive net; - QLabel sound; + std::unique_ptr sound; }; -MachineStatus::MachineStatus(QWidget *parent) : - QWidget(parent), - ui(new Ui::MachineStatus) +MachineStatus::MachineStatus(QObject *parent) : + QObject(parent) { - ui->setupUi(this); d = std::make_unique(this); } -MachineStatus::~MachineStatus() -{ - delete ui; -} +MachineStatus::~MachineStatus() = default; static int hdd_count(int bus) { int c = 0; @@ -214,7 +217,7 @@ static int hdd_count(int bus) { return(c); } -void MachineStatus::refresh() { +void MachineStatus::refresh(QStatusBar* sbar) { bool has_cart = machines[machine].flags & MACHINE_CARTRIDGE; bool has_mfm = machines[machine].flags & MACHINE_MFM; bool has_xta = machines[machine].flags & MACHINE_XTA; @@ -229,26 +232,45 @@ void MachineStatus::refresh() { int c_scsi = hdd_count(HDD_BUS_SCSI); int do_net = (network_type == NET_TYPE_NONE) || (network_card == 0); - while (ui->statusIcons->count() > 0) { - auto item = ui->statusIcons->itemAt(0); - ui->statusIcons->removeItem(item); - delete item; + sbar->removeWidget(d->cassette.label.get()); + for (int i = 0; i < 2; ++i) { + sbar->removeWidget(d->cartridge[i].label.get()); } + for (size_t i = 0; i < FDD_NUM; ++i) { + sbar->removeWidget(d->fdd[i].label.get()); + } + for (size_t i = 0; i < CDROM_NUM; i++) { + sbar->removeWidget(d->cdrom[i].label.get()); + } + for (size_t i = 0; i < ZIP_NUM; i++) { + sbar->removeWidget(d->zip[i].label.get()); + } + for (size_t i = 0; i < MO_NUM; i++) { + sbar->removeWidget(d->mo[i].label.get()); + } + for (size_t i = 0; i < HDD_BUS_USB; i++) { + sbar->removeWidget(d->hdds[i].label.get()); + } + sbar->removeWidget(d->net.label.get()); + sbar->removeWidget(d->sound.get()); if (cassette_enable) { + d->cassette.label = std::make_unique(); d->cassette.setEmpty(QString(cassette_fname).isEmpty()); - ui->statusIcons->addWidget(&d->cassette.label); + sbar->addWidget(d->cassette.label.get()); } if (has_cart) { for (int i = 0; i < 2; ++i) { + d->cartridge[i].label = std::make_unique(); d->cartridge[i].setEmpty(QString(cart_fns[i]).isEmpty()); - ui->statusIcons->addWidget(&d->cartridge[i].label); + sbar->addWidget(d->cartridge[i].label.get()); } } for (size_t i = 0; i < FDD_NUM; ++i) { if (fdd_get_type(i) != 0) { + d->fdd[i].label = std::make_unique(); int t = fdd_get_type(i); if (t == 0) { d->fdd[i].pixmaps = &d->pixmaps.floppy_disabled; @@ -259,7 +281,7 @@ void MachineStatus::refresh() { } d->fdd[i].setEmpty(QString(floppyfns[i]).isEmpty()); d->fdd[i].setActive(false); - ui->statusIcons->addWidget(&d->fdd[i].label); + sbar->addWidget(d->fdd[i].label.get()); } } @@ -274,9 +296,10 @@ void MachineStatus::refresh() { (scsi_card_current[2] == 0) && (scsi_card_current[3] == 0)) continue; if (cdrom[i].bus_type != 0) { + d->cdrom[i].label = std::make_unique(); d->cdrom[i].setEmpty(cdrom[i].host_drive != 200 || QString(cdrom[i].image_path).isEmpty()); d->cdrom[i].setActive(false); - ui->statusIcons->addWidget(&d->cdrom[i].label); + sbar->addWidget(d->cdrom[i].label.get()); } } for (size_t i = 0; i < ZIP_NUM; i++) { @@ -289,9 +312,10 @@ void MachineStatus::refresh() { (scsi_card_current[2] == 0) && (scsi_card_current[3] == 0)) continue; if (zip_drives[i].bus_type != 0) { + d->zip[i].label = std::make_unique(); d->zip[i].setEmpty(QString(zip_drives[i].image_path).isEmpty()); d->zip[i].setActive(false); - ui->statusIcons->addWidget(&d->zip[i].label); + sbar->addWidget(d->zip[i].label.get()); } } for (size_t i = 0; i < MO_NUM; i++) { @@ -304,40 +328,48 @@ void MachineStatus::refresh() { (scsi_card_current[2] == 0) && (scsi_card_current[3] == 0)) continue; if (mo_drives[i].bus_type != 0) { + d->mo[i].label = std::make_unique(); d->mo[i].setEmpty(QString(mo_drives[i].image_path).isEmpty()); d->mo[i].setActive(false); - ui->statusIcons->addWidget(&d->mo[i].label); + sbar->addWidget(d->mo[i].label.get()); } } if ((has_mfm || hdc_name == QStringLiteral("st506")) && c_mfm > 0) { + d->hdds[HDD_BUS_MFM].label = std::make_unique(); d->hdds[HDD_BUS_MFM].setActive(false); - ui->statusIcons->addWidget(&d->hdds[HDD_BUS_MFM].label); + sbar->addWidget(d->hdds[HDD_BUS_MFM].label.get()); } if ((has_esdi || hdc_name == QStringLiteral("esdi")) && c_esdi > 0) { + d->hdds[HDD_BUS_ESDI].label = std::make_unique(); d->hdds[HDD_BUS_ESDI].setActive(false); - ui->statusIcons->addWidget(&d->hdds[HDD_BUS_ESDI].label); + sbar->addWidget(d->hdds[HDD_BUS_ESDI].label.get()); } if ((has_xta || hdc_name == QStringLiteral("xta")) && c_xta > 0) { + d->hdds[HDD_BUS_XTA].label = std::make_unique(); d->hdds[HDD_BUS_XTA].setActive(false); - ui->statusIcons->addWidget(&d->hdds[HDD_BUS_XTA].label); + sbar->addWidget(d->hdds[HDD_BUS_XTA].label.get()); } if ((has_ide || hdc_name == QStringLiteral("xtide") || hdc_name == QStringLiteral("ide")) && c_ide > 0) { + d->hdds[HDD_BUS_IDE].label = std::make_unique(); d->hdds[HDD_BUS_IDE].setActive(false); - ui->statusIcons->addWidget(&d->hdds[HDD_BUS_IDE].label); + sbar->addWidget(d->hdds[HDD_BUS_IDE].label.get()); } if ((has_scsi || (scsi_card_current[0] != 0) || (scsi_card_current[1] != 0) || (scsi_card_current[2] != 0) || (scsi_card_current[3] != 0)) && c_scsi > 0) { + d->hdds[HDD_BUS_SCSI].label = std::make_unique(); d->hdds[HDD_BUS_SCSI].setActive(false); - ui->statusIcons->addWidget(&d->hdds[HDD_BUS_SCSI].label); + sbar->addWidget(d->hdds[HDD_BUS_SCSI].label.get()); } if (do_net) { + d->net.label = std::make_unique(); d->net.setActive(false); - ui->statusIcons->addWidget(&d->net.label); + sbar->addWidget(d->net.label.get()); } - ui->statusIcons->addWidget(&d->sound); - ui->statusIcons->addItem(new QSpacerItem(20, 40, QSizePolicy::Expanding, QSizePolicy::Minimum)); + d->sound = std::make_unique(); + d->sound->setPixmap(d->pixmaps.sound); + sbar->addWidget(d->sound.get()); } void MachineStatus::setActivity(int tag, bool active) { diff --git a/src/qt/qt_machinestatus.hpp b/src/qt/qt_machinestatus.hpp index e3f0a6409..7ca07255c 100644 --- a/src/qt/qt_machinestatus.hpp +++ b/src/qt/qt_machinestatus.hpp @@ -3,28 +3,22 @@ #include -class QLabel; +class QStatusBar; -namespace Ui { -class MachineStatus; -} - -class MachineStatus : public QWidget +class MachineStatus : public QObject { Q_OBJECT public: - explicit MachineStatus(QWidget *parent = nullptr); + explicit MachineStatus(QObject *parent = nullptr); ~MachineStatus(); public slots: - void refresh(); + void refresh(QStatusBar* sbar); void setActivity(int tag, bool active); void setEmpty(int tag, bool active); private: - Ui::MachineStatus *ui; - struct States; std::unique_ptr d; }; diff --git a/src/qt/qt_machinestatus.ui b/src/qt/qt_machinestatus.ui deleted file mode 100644 index b05f1f8c3..000000000 --- a/src/qt/qt_machinestatus.ui +++ /dev/null @@ -1,44 +0,0 @@ - - - MachineStatus - - - - 0 - 0 - 400 - 300 - - - - Form - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - - - - - - - - diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 6e17e3cc8..e8c56e530 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -1,7 +1,5 @@ #include "qt_mainwindow.hpp" -#include "ui_qt_machinestatus.h" #include "ui_qt_mainwindow.h" -#include extern "C" { #include <86box/86box.h> @@ -24,6 +22,7 @@ extern "C" { #include "qt_settings.hpp" #include "qt_gleswidget.hpp" +#include "qt_machinestatus.hpp" #ifdef __unix__ #include @@ -39,6 +38,7 @@ MainWindow::MainWindow(QWidget *parent) : ui(new Ui::MainWindow) { Q_INIT_RESOURCE(qt_resources); + status = std::make_unique(this); ui->setupUi(this); video_setblit(qt_blit); @@ -66,9 +66,15 @@ MainWindow::MainWindow(QWidget *parent) : config_save(); }); -// connect(this, &MainWindow::updateStatusBarPanes, ui->machineStatus, &MachineStatus::refresh); -// connect(this, &MainWindow::updateStatusBarActivity, ui->machineStatus, &MachineStatus::setActivity); -// connect(this, &MainWindow::updateStatusBarEmpty, ui->machineStatus, &MachineStatus::setEmpty); + connect(this, &MainWindow::updateStatusBarPanes, this, [this] { + status->refresh(ui->statusbar); + }); + connect(this, &MainWindow::updateStatusBarActivity, this, [this](int i, bool b) { + status->setActivity(i, b); + }); + connect(this, &MainWindow::updateStatusBarEmpty, this, [this](int i, bool b) { + status->setEmpty(i, b); + }); ui->actionKeyboard_requires_capture->setChecked(kbd_req_capture); ui->actionRight_CTRL_is_left_ALT->setChecked(rctrl_is_lalt); diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index d3356b8e6..9f3dee140 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -3,12 +3,14 @@ #include #include -#include +#include namespace Ui { class MainWindow; } +class MachineStatus; + class MainWindow : public QMainWindow { Q_OBJECT @@ -48,6 +50,7 @@ protected: void keyReleaseEvent(QKeyEvent* event) override; private: Ui::MainWindow *ui; + std::unique_ptr status; }; #endif // QT_MAINWINDOW_HPP From 2297c337513d4facaf7fe326b647fe100818cc7d Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 1 Dec 2021 11:15:42 +0600 Subject: [PATCH 026/278] Fix macOS builds --- src/qt/CMakeLists.txt | 2 +- src/qt/cocoa_mouse.hpp | 2 +- src/qt/macos_event_filter.mm | 31 ++++++++++++------------------- src/qt/qt_gleswidget.cpp | 6 +++++- src/qt/qt_machinestatus.cpp | 2 ++ src/qt/qt_platform.cpp | 2 +- 6 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index bf4b561c0..b3ce7121b 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -17,7 +17,7 @@ add_library(ui STATIC qt_mainwindow.ui qt_machinestatus.cpp qt_machinestatus.hpp - qt_machinestatus.ui + #qt_machinestatus.ui qt_gleswidget.cpp qt_gleswidget.hpp diff --git a/src/qt/cocoa_mouse.hpp b/src/qt/cocoa_mouse.hpp index 83939a233..6d481fd89 100644 --- a/src/qt/cocoa_mouse.hpp +++ b/src/qt/cocoa_mouse.hpp @@ -7,4 +7,4 @@ public: CocoaEventFilter() {}; ~CocoaEventFilter(); virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) override; -}; \ No newline at end of file +}; diff --git a/src/qt/macos_event_filter.mm b/src/qt/macos_event_filter.mm index e942b5f49..4dd7ef2ae 100644 --- a/src/qt/macos_event_filter.mm +++ b/src/qt/macos_event_filter.mm @@ -1,5 +1,5 @@ #include -#include "86box/plat.h" +//#include "86box/plat.h" #include "cocoa_mouse.hpp" #import extern "C" @@ -15,6 +15,7 @@ extern "C" #include <86box/ui.h> #include <86box/video.h> extern int mouse_capture; +extern void plat_mouse_capture(int); } typedef struct mouseinputdata @@ -23,8 +24,7 @@ typedef struct mouseinputdata int mousebuttons; } mouseinputdata; -extern SDL_mutex* mousemutex; -extern mouseinputdata mousedata; +static mouseinputdata mousedata; CocoaEventFilter::~CocoaEventFilter() { @@ -40,17 +40,13 @@ bool CocoaEventFilter::nativeEventFilter(const QByteArray &eventType, void *mess NSEvent* event = (NSEvent*)message; if ([event type] == NSEventTypeMouseMoved) { - SDL_LockMutex(mousemutex); mousedata.deltax += [event deltaX]; mousedata.deltay += [event deltaY]; - SDL_UnlockMutex(mousemutex); return true; } if ([event type] == NSEventTypeScrollWheel) { - SDL_LockMutex(mousemutex); mousedata.deltaz += [event deltaY]; - SDL_UnlockMutex(mousemutex); return true; } switch ([event type]) @@ -58,45 +54,33 @@ bool CocoaEventFilter::nativeEventFilter(const QByteArray &eventType, void *mess default: return false; case NSEventTypeLeftMouseDown: { - SDL_LockMutex(mousemutex); mousedata.mousebuttons |= 1; - SDL_UnlockMutex(mousemutex); break; } case NSEventTypeLeftMouseUp: { - SDL_LockMutex(mousemutex); mousedata.mousebuttons &= ~1; - SDL_UnlockMutex(mousemutex); break; } case NSEventTypeRightMouseDown: { - SDL_LockMutex(mousemutex); mousedata.mousebuttons |= 2; - SDL_UnlockMutex(mousemutex); break; } case NSEventTypeRightMouseUp: { - SDL_LockMutex(mousemutex); mousedata.mousebuttons &= ~2; - SDL_UnlockMutex(mousemutex); break; } case NSEventTypeOtherMouseDown: { - SDL_LockMutex(mousemutex); mousedata.mousebuttons |= 4; - SDL_UnlockMutex(mousemutex); break; } case NSEventTypeOtherMouseUp: { if (mouse_get_buttons() < 3) { plat_mouse_capture(0); return true; } - SDL_LockMutex(mousemutex); mousedata.mousebuttons &= ~4; - SDL_UnlockMutex(mousemutex); break; } } @@ -105,3 +89,12 @@ bool CocoaEventFilter::nativeEventFilter(const QByteArray &eventType, void *mess } return false; } + +extern "C" void macos_poll_mouse() +{ + mouse_x = mousedata.deltax; + mouse_y = mousedata.deltay; + mouse_z = mousedata.deltaz; + mousedata.deltax = mousedata.deltay = mousedata.deltaz = 0; + mouse_buttons = mousedata.mousebuttons; +} diff --git a/src/qt/qt_gleswidget.cpp b/src/qt/qt_gleswidget.cpp index 3cd91c5a7..24c9e4a36 100644 --- a/src/qt/qt_gleswidget.cpp +++ b/src/qt/qt_gleswidget.cpp @@ -11,7 +11,7 @@ extern "C" #include <86box/video.h> } - +extern "C" void macos_poll_mouse(); void qt_mouse_capture(int on) { @@ -34,11 +34,15 @@ qt_mouse_capture(int on) void GLESWidget::qt_mouse_poll() { +#ifdef __APPLE__ + return macos_poll_mouse(); +#else mouse_x = mousedata.deltax; mouse_y = mousedata.deltay; mouse_z = mousedata.deltaz; mousedata.deltax = mousedata.deltay = mousedata.deltaz = 0; mouse_buttons = mousedata.mousebuttons; +#endif } void GLESWidget::resizeGL(int w, int h) diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index d61e2f04a..b2c8d0ad1 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -29,6 +29,8 @@ extern uint64_t tsc; #include #include +#include + namespace { struct PixmapSetActive { QPixmap normal; diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index 47a771442..6be563814 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -283,10 +283,10 @@ plat_mmap(size_t size, uint8_t executable) void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE | (executable ? MAP_JIT : 0), 0, 0); #else void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE, 0, 0); +#endif auto retval = *reinterpret_cast(ret); return (retval < 0) ? nullptr : ret; #endif -#endif } void From ac52b32adb804d1c5b6b78f7a007b055773848d4 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 1 Dec 2021 14:50:49 +0600 Subject: [PATCH 027/278] Keep emulator paused while settings is open Reduces crashes --- src/qt/qt_mainwindow.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index e8c56e530..f70e55147 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -116,7 +116,11 @@ void MainWindow::on_actionExit_triggered() { } void MainWindow::on_actionSettings_triggered() { - Settings settings; + int currentPause = dopause; + plat_pause(1); + Settings settings(this); + settings.setModal(true); + settings.setWindowModality(Qt::WindowModal); settings.exec(); switch (settings.result()) { @@ -135,6 +139,7 @@ void MainWindow::on_actionSettings_triggered() { case QDialog::Rejected: break; } + plat_pause(currentPause); } std::array x11_to_xt_base From 88452f7957ff6fd4304e25df6839bd82c82ce507 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 1 Dec 2021 15:55:41 +0600 Subject: [PATCH 028/278] Implement title bar statistics --- src/qt/qt_main.cpp | 8 ++++++++ src/qt/qt_mainwindow.cpp | 31 +++++++++++++++++++++++++++++++ src/qt/qt_mainwindow.hpp | 6 ++++++ src/qt/qt_ui.cpp | 6 +++--- 4 files changed, 48 insertions(+), 3 deletions(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index bbdbc6dc3..f011fd9f7 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -13,6 +13,7 @@ #include "SDL.h" #include "SDL_mutex.h" +#include "SDL_timer.h" #include "qt_mainwindow.hpp" #include "qt_sdl.h" #include "cocoa_mouse.hpp" @@ -76,6 +77,12 @@ main_thread_fn() is_quit = 1; } +uint32_t timer_onesec(uint32_t interval, void* param) +{ + pc_onesec(); + return interval; +} + int main(int argc, char* argv[]) { QApplication app(argc, argv); #ifdef __APPLE__ @@ -97,6 +104,7 @@ int main(int argc, char* argv[]) { /* Set the PAUSE mode depending on the renderer. */ // plat_pause(0); + SDL_AddTimer(1000, timer_onesec, nullptr); /* Initialize the rendering window, or fullscreen. */ QTimer::singleShot(50, []() { plat_resize(640, 480); } ); diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index f70e55147..9adad9656 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -48,6 +48,9 @@ MainWindow::MainWindow(QWidget *parent) : connect(this, &MainWindow::showMessageForNonQtThread, this, &MainWindow::showMessage_, Qt::BlockingQueuedConnection); + connect(this, &MainWindow::setTitleForNonQtThread, this, &MainWindow::setTitle_, Qt::BlockingQueuedConnection); + connect(this, &MainWindow::getTitleForNonQtThread, this, &MainWindow::getTitle_, Qt::BlockingQueuedConnection); + connect(this, &MainWindow::pollMouse, ui->glesWidget, &GLESWidget::qt_mouse_poll); connect(this, &MainWindow::setMouseCapture, this, [this](bool state) { @@ -641,6 +644,34 @@ void MainWindow::on_actionFullscreen_triggered() { } } +void MainWindow::setTitle_(const wchar_t *title) +{ + this->setWindowTitle(QString::fromWCharArray(title)); +} + +void MainWindow::setTitle(const wchar_t *title) +{ + if (QThread::currentThread() == this->thread()) { + setTitle_(title); + } else { + emit setTitleForNonQtThread(title); + } +} + +void MainWindow::getTitle_(wchar_t *title) +{ + this->windowTitle().toWCharArray(title); +} + +void MainWindow::getTitle(wchar_t *title) +{ + if (QThread::currentThread() == this->thread()) { + getTitle_(title); + } else { + emit getTitleForNonQtThread(title); + } +} + void MainWindow::showMessage(const QString& header, const QString& message) { if (QThread::currentThread() == this->thread()) { showMessage_(header, message); diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 9f3dee140..ba93df369 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -20,6 +20,8 @@ public: ~MainWindow(); void showMessage(const QString& header, const QString& message); + void setTitle(const wchar_t* title); + void getTitle(wchar_t* title); signals: void paint(const QImage& image); void blitToWidget(int x, int y, int w, int h); @@ -33,6 +35,8 @@ signals: void setMouseCapture(bool state); void showMessageForNonQtThread(const QString& header, const QString& message); + void setTitleForNonQtThread(const wchar_t* title); + void getTitleForNonQtThread(wchar_t* title); private slots: void on_actionFullscreen_triggered(); void on_actionSettings_triggered(); @@ -45,6 +49,8 @@ private slots: void on_actionKeyboard_requires_capture_triggered(); void showMessage_(const QString& header, const QString& message); + void setTitle_(const wchar_t* title); + void getTitle_(wchar_t* title); protected: void keyPressEvent(QKeyEvent* event) override; void keyReleaseEvent(QKeyEvent* event) override; diff --git a/src/qt/qt_ui.cpp b/src/qt/qt_ui.cpp index 1e24ac792..c4de70282 100644 --- a/src/qt/qt_ui.cpp +++ b/src/qt/qt_ui.cpp @@ -27,11 +27,11 @@ wchar_t* ui_window_title(wchar_t* str) { if (str == nullptr) { static wchar_t title[512]; - int chars = main_window->windowTitle().toWCharArray(title); - title[chars] = 0; + memset(title, 0, sizeof(title)); + main_window->getTitle(title); str = title; } else { - main_window->setWindowTitle(QString::fromWCharArray(str)); + main_window->setTitle(str); } return str; } From 23dbb85fa8c267fb008a4a15dde8ad5f91b939e0 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 2 Dec 2021 00:47:02 +0600 Subject: [PATCH 029/278] Significantly improve renderer performance --- src/qt/qt_gleswidget.cpp | 19 +++++++++++++------ src/qt/qt_gleswidget.hpp | 8 +++++++- src/qt/qt_mainwindow.cpp | 7 +++++-- src/qt/qt_mainwindow.hpp | 2 +- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/qt/qt_gleswidget.cpp b/src/qt/qt_gleswidget.cpp index 24c9e4a36..c30e5cefa 100644 --- a/src/qt/qt_gleswidget.cpp +++ b/src/qt/qt_gleswidget.cpp @@ -1,4 +1,5 @@ #include +#include #include "qt_gleswidget.hpp" #ifdef __APPLE__ #include @@ -53,13 +54,20 @@ void GLESWidget::resizeGL(int w, int h) void GLESWidget::initializeGL() { initializeOpenGLFunctions(); + connect(this, &GLESWidget::reqUpdate, this, &GLESWidget::reqUpdate_); } + void GLESWidget::paintGL() { QPainter painter(this); - //painter.fillRect(rect, QColor(0, 0, 0)); - painter.drawImage(QRect(0, 0, width(), height()), m_image.convertToFormat(QImage::Format_RGBA8888), QRect(sx, sy, sw, sh)); + painter.drawImage(QRect(0, 0, width(), height()), m_image.convertToFormat(QImage::Format_RGBX8888), QRect(sx, sy, sw, sh)); painter.end(); + firstupdate = true; +} + +void GLESWidget::reqUpdate_() +{ + update(); } void GLESWidget::mouseReleaseEvent(QMouseEvent *event) @@ -114,8 +122,7 @@ void GLESWidget::mouseMoveEvent(QMouseEvent *event) void GLESWidget::qt_real_blit(int x, int y, int w, int h) { - // printf("Offpainter thread ID: %X\n", SDL_ThreadID()); - if ((w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL)) + if ((w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL) || !firstupdate) { video_blit_complete(); return; @@ -124,7 +131,7 @@ void GLESWidget::qt_real_blit(int x, int y, int w, int h) sy = y; sw = this->w = w; sh = this->h = h; - auto imagebits = m_image.bits(); + static auto imagebits = m_image.bits(); for (int y1 = y; y1 < (y + h - 1); y1++) { auto scanline = imagebits + (y1 * (2048 + 64) * 4); @@ -135,5 +142,5 @@ void GLESWidget::qt_real_blit(int x, int y, int w, int h) video_screenshot((uint32_t *)imagebits, 0, 0, 2048 + 64); } video_blit_complete(); - update(); + this->reqUpdate(); } diff --git a/src/qt/qt_gleswidget.hpp b/src/qt/qt_gleswidget.hpp index 2ac888724..2fa8d8d67 100644 --- a/src/qt/qt_gleswidget.hpp +++ b/src/qt/qt_gleswidget.hpp @@ -6,6 +6,8 @@ #include #include +#include + class GLESWidget : public QOpenGLWidget, protected QOpenGLFunctions { Q_OBJECT @@ -38,9 +40,13 @@ public: { event->ignore(); } +signals: + void reqUpdate(); + public slots: void qt_real_blit(int x, int y, int w, int h); void qt_mouse_poll(); + void reqUpdate_(); private: struct mouseinputdata { @@ -48,5 +54,5 @@ private: int mousebuttons; }; mouseinputdata mousedata; - + std::atomic firstupdate{false}; }; diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 9adad9656..ad3a4df14 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -44,8 +44,6 @@ MainWindow::MainWindow(QWidget *parent) : video_setblit(qt_blit); ui->glesWidget->setMouseTracking(true); - connect(this, &MainWindow::blitToWidget, ui->glesWidget, &GLESWidget::qt_real_blit); - connect(this, &MainWindow::showMessageForNonQtThread, this, &MainWindow::showMessage_, Qt::BlockingQueuedConnection); connect(this, &MainWindow::setTitleForNonQtThread, this, &MainWindow::setTitle_, Qt::BlockingQueuedConnection); @@ -702,6 +700,11 @@ void MainWindow::keyPressEvent(QKeyEvent* event) } } +void MainWindow::blitToWidget(int x, int y, int w, int h) +{ + ui->glesWidget->qt_real_blit(x, y, w, h); +} + void MainWindow::keyReleaseEvent(QKeyEvent* event) { #ifdef __APPLE__ diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index ba93df369..3c5055027 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -22,9 +22,9 @@ public: void showMessage(const QString& header, const QString& message); void setTitle(const wchar_t* title); void getTitle(wchar_t* title); + void blitToWidget(int x, int y, int w, int h); signals: void paint(const QImage& image); - void blitToWidget(int x, int y, int w, int h); void resizeContents(int w, int h); void pollMouse(); void updateStatusBarPanes(); From fc9d73b541b5347dd00fa9b0328eec92e6b95165 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 2 Dec 2021 16:26:33 +0600 Subject: [PATCH 030/278] Wayland mouse support Fix moving items with mouse when captured on macOS --- CMakeLists.txt | 2 +- src/qt/CMakeLists.txt | 19 + src/qt/macos_event_filter.mm | 5 +- src/qt/qt_gleswidget.cpp | 14 + src/qt/qt_gleswidget.hpp | 12 + src/qt/qt_mainwindow.cpp | 20 +- src/qt/wl_mouse.cpp | 89 +++++ src/qt/wl_mouse.hpp | 5 + .../pointer-constraints-unstable-v1.xml | 339 ++++++++++++++++++ wl_protocols/relative-pointer-unstable-v1.xml | 136 +++++++ 10 files changed, 636 insertions(+), 5 deletions(-) create mode 100644 src/qt/wl_mouse.cpp create mode 100644 src/qt/wl_mouse.hpp create mode 100644 wl_protocols/pointer-constraints-unstable-v1.xml create mode 100644 wl_protocols/relative-pointer-unstable-v1.xml diff --git a/CMakeLists.txt b/CMakeLists.txt index 64d0087e5..76f55f86c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,7 @@ # Copyright 2020,2021 David Hrdlička. # -cmake_minimum_required(VERSION 3.15) +cmake_minimum_required(VERSION 3.16) cmake_policy(SET CMP0091 NEW) cmake_policy(SET CMP0079 NEW) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index b3ce7121b..9a2be5a7f 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -85,6 +85,7 @@ target_link_libraries( plat PRIVATE Qt5::Widgets + Qt5::Gui Threads::Threads ) @@ -92,10 +93,28 @@ target_link_libraries( ui PRIVATE Qt5::Widgets + Qt5::Gui Threads::Threads ) if (UNIX AND NOT APPLE) find_package(X11 REQUIRED) target_link_libraries(ui PRIVATE X11::X11) + find_package(ECM NO_MODULE) + if (ECM_FOUND) + list(APPEND CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) + find_package(Wayland COMPONENTS Client) + if (Wayland_FOUND) + target_link_libraries(ui PRIVATE Wayland::Client) + find_package(WaylandScanner REQUIRED) + if (WaylandScanner_FOUND) + set(WL_SOURCE_VAR) + ecm_add_wayland_client_protocol(WL_SOURCE_VAR PROTOCOL ${CMAKE_SOURCE_DIR}/wl_protocols/relative-pointer-unstable-v1.xml BASENAME relative-pointer-unstable-v1) + ecm_add_wayland_client_protocol(WL_SOURCE_VAR PROTOCOL ${CMAKE_SOURCE_DIR}/wl_protocols/pointer-constraints-unstable-v1.xml BASENAME pointer-constraints-unstable-v1) + target_include_directories(ui PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ${Qt5Gui_PRIVATE_INCLUDE_DIRS}) + target_sources(ui PRIVATE ${WL_SOURCE_VAR} wl_mouse.cpp) + target_compile_definitions(ui PRIVATE WAYLAND) + endif() + endif() + endif() endif() diff --git a/src/qt/macos_event_filter.mm b/src/qt/macos_event_filter.mm index 4dd7ef2ae..a3200aa8e 100644 --- a/src/qt/macos_event_filter.mm +++ b/src/qt/macos_event_filter.mm @@ -38,7 +38,10 @@ bool CocoaEventFilter::nativeEventFilter(const QByteArray &eventType, void *mess if (eventType == "mac_generic_NSEvent") { NSEvent* event = (NSEvent*)message; - if ([event type] == NSEventTypeMouseMoved) + if ([event type] == NSEventTypeMouseMoved + || [event type] == NSEventTypeLeftMouseDragged + || [event type] == NSEventTypeRightMouseDragged + || [event type] == NSEventTypeOtherMouseDragged) { mousedata.deltax += [event deltaX]; mousedata.deltay += [event deltaY]; diff --git a/src/qt/qt_gleswidget.cpp b/src/qt/qt_gleswidget.cpp index c30e5cefa..829b484b9 100644 --- a/src/qt/qt_gleswidget.cpp +++ b/src/qt/qt_gleswidget.cpp @@ -1,5 +1,7 @@ #include #include +#include +#include #include "qt_gleswidget.hpp" #ifdef __APPLE__ #include @@ -43,6 +45,10 @@ void GLESWidget::qt_mouse_poll() mouse_z = mousedata.deltaz; mousedata.deltax = mousedata.deltay = mousedata.deltaz = 0; mouse_buttons = mousedata.mousebuttons; +#ifdef WAYLAND + if (wayland) + wl_mouse_poll(); +#endif #endif } @@ -75,11 +81,13 @@ void GLESWidget::mouseReleaseEvent(QMouseEvent *event) if (this->geometry().contains(event->pos()) && event->button() == Qt::LeftButton && !mouse_capture) { plat_mouse_capture(1); + this->setCursor(Qt::BlankCursor); return; } if (mouse_capture && event->button() == Qt::MiddleButton && mouse_get_buttons() < 3) { plat_mouse_capture(0); + this->setCursor(Qt::ArrowCursor); return; } if (mouse_capture) @@ -93,6 +101,7 @@ void GLESWidget::mousePressEvent(QMouseEvent *event) { mousedata.mousebuttons |= event->button(); } + event->accept(); } void GLESWidget::wheelEvent(QWheelEvent *event) { @@ -105,6 +114,11 @@ void GLESWidget::wheelEvent(QWheelEvent *event) int ignoreNextMouseEvent = 0; void GLESWidget::mouseMoveEvent(QMouseEvent *event) { + if (QApplication::platformName().contains("wayland")) + { + event->accept(); + return; + } if (!mouse_capture) { event->ignore(); return; } #ifdef __APPLE__ event->accept(); diff --git a/src/qt/qt_gleswidget.hpp b/src/qt/qt_gleswidget.hpp index 2fa8d8d67..9c7e9a6cd 100644 --- a/src/qt/qt_gleswidget.hpp +++ b/src/qt/qt_gleswidget.hpp @@ -7,6 +7,11 @@ #include #include +#include + +#ifdef WAYLAND +#include "wl_mouse.hpp" +#endif class GLESWidget : public QOpenGLWidget, protected QOpenGLFunctions { @@ -15,6 +20,7 @@ class GLESWidget : public QOpenGLWidget, protected QOpenGLFunctions private: QImage m_image{QSize(2048 + 64, 2048 + 64), QImage::Format_RGB32}; int x, y, w, h, sx, sy, sw, sh; + bool wayland = false; public: void resizeGL(int w, int h) override; void initializeGL() override; @@ -23,6 +29,12 @@ public: : QOpenGLWidget(parent), QOpenGLFunctions() { setMinimumSize(16, 16); +#ifdef WAYLAND + if (QApplication::platformName().contains("wayland")) { + wayland = true; + wl_init(); + } +#endif } ~GLESWidget() { diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index ad3a4df14..8e5b5a450 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -1,5 +1,6 @@ #include "qt_mainwindow.hpp" #include "ui_qt_mainwindow.h" +#include extern "C" { #include <86box/86box.h> @@ -42,7 +43,7 @@ MainWindow::MainWindow(QWidget *parent) : ui->setupUi(this); video_setblit(qt_blit); - ui->glesWidget->setMouseTracking(true); + //ui->glesWidget->setMouseTracking(true); connect(this, &MainWindow::showMessageForNonQtThread, this, &MainWindow::showMessage_, Qt::BlockingQueuedConnection); @@ -54,8 +55,21 @@ MainWindow::MainWindow(QWidget *parent) : connect(this, &MainWindow::setMouseCapture, this, [this](bool state) { mouse_capture = state ? 1 : 0; qt_mouse_capture(mouse_capture); - if (mouse_capture) ui->glesWidget->grabMouse(); - else ui->glesWidget->releaseMouse(); + if (mouse_capture) { + ui->glesWidget->grabMouse(); +#ifdef WAYLAND + if (QGuiApplication::platformName().contains("wayland")) { + wl_mouse_capture(this->windowHandle()); + } +#endif + } else { + ui->glesWidget->releaseMouse(); +#ifdef WAYLAND + if (QGuiApplication::platformName().contains("wayland")) { + wl_mouse_uncapture(); + } +#endif + } }); connect(this, &MainWindow::resizeContents, this, [this](int w, int h) { diff --git a/src/qt/wl_mouse.cpp b/src/qt/wl_mouse.cpp new file mode 100644 index 000000000..b399dafd7 --- /dev/null +++ b/src/qt/wl_mouse.cpp @@ -0,0 +1,89 @@ +#include "wl_mouse.hpp" +#include +#include +#include +#include +#include + +#include +#include +#include + +static zwp_relative_pointer_manager_v1* rel_manager = nullptr; +static zwp_relative_pointer_v1* rel_pointer = nullptr; +static zwp_pointer_constraints_v1* conf_pointer_interface = nullptr; +static zwp_locked_pointer_v1* conf_pointer = nullptr; + +static int rel_mouse_x = 0, rel_mouse_y = 0; + +void rel_mouse_event(void* data, zwp_relative_pointer_v1* zwp_relative_pointer_v1, uint32_t tstmp, uint32_t tstmpl, wl_fixed_t dx, wl_fixed_t dy, wl_fixed_t dx_real, wl_fixed_t dy_real) +{ + rel_mouse_x += wl_fixed_to_int(dx_real); + rel_mouse_y += wl_fixed_to_int(dy_real); +} + +extern "C" +{ + extern int mouse_x, mouse_y; +} + +void wl_mouse_poll() +{ + mouse_x = rel_mouse_x; + mouse_y = rel_mouse_y; + rel_mouse_x = 0; + rel_mouse_y = 0; +} + +static struct zwp_relative_pointer_v1_listener rel_listener = +{ + rel_mouse_event +}; + +static void +display_handle_global(void *data, struct wl_registry *registry, uint32_t id, + const char *interface, uint32_t version) +{ + if (!strcmp(interface, "zwp_relative_pointer_manager_v1")) + { + rel_manager = (zwp_relative_pointer_manager_v1*)wl_registry_bind(registry, id, &zwp_relative_pointer_manager_v1_interface, version); + } + if (!strcmp(interface, "zwp_pointer_constraints_v1")) + { + conf_pointer_interface = (zwp_pointer_constraints_v1*)wl_registry_bind(registry, id, &zwp_pointer_constraints_v1_interface, version); + } +} + +static const struct wl_registry_listener registry_listener = { + display_handle_global, + nullptr +}; + +void wl_init() +{ + wl_display* display = (wl_display*)QGuiApplication::platformNativeInterface()->nativeResourceForIntegration("wl_display"); + if (display) + { + auto registry = wl_display_get_registry(display); + if (registry) + { + wl_registry_add_listener(registry, ®istry_listener, nullptr); + wl_display_roundtrip(display); + } + } +} + +void wl_mouse_capture(QWindow *window) +{ + rel_pointer = zwp_relative_pointer_manager_v1_get_relative_pointer(rel_manager, (wl_pointer*)QGuiApplication::platformNativeInterface()->nativeResourceForIntegration("wl_pointer")); + zwp_relative_pointer_v1_add_listener(rel_pointer, &rel_listener, nullptr); + conf_pointer = zwp_pointer_constraints_v1_lock_pointer(conf_pointer_interface, (wl_surface*)QGuiApplication::platformNativeInterface()->nativeResourceForWindow("surface", window), (wl_pointer*)QGuiApplication::platformNativeInterface()->nativeResourceForIntegration("wl_pointer"), nullptr, ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_PERSISTENT); +} + +void wl_mouse_uncapture() +{ + zwp_locked_pointer_v1_destroy(conf_pointer); + zwp_relative_pointer_v1_destroy(rel_pointer); + rel_pointer = nullptr; + conf_pointer = nullptr; +} \ No newline at end of file diff --git a/src/qt/wl_mouse.hpp b/src/qt/wl_mouse.hpp new file mode 100644 index 000000000..73e81c208 --- /dev/null +++ b/src/qt/wl_mouse.hpp @@ -0,0 +1,5 @@ +class QWindow; +void wl_mouse_capture(QWindow* window); +void wl_mouse_uncapture(); +void wl_mouse_poll(); +void wl_init(); \ No newline at end of file diff --git a/wl_protocols/pointer-constraints-unstable-v1.xml b/wl_protocols/pointer-constraints-unstable-v1.xml new file mode 100644 index 000000000..efd64b660 --- /dev/null +++ b/wl_protocols/pointer-constraints-unstable-v1.xml @@ -0,0 +1,339 @@ + + + + + Copyright © 2014 Jonas Ådahl + Copyright © 2015 Red Hat Inc. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice (including the next + paragraph) shall be included in all copies or substantial portions of the + Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + + + + This protocol specifies a set of interfaces used for adding constraints to + the motion of a pointer. Possible constraints include confining pointer + motions to a given region, or locking it to its current position. + + In order to constrain the pointer, a client must first bind the global + interface "wp_pointer_constraints" which, if a compositor supports pointer + constraints, is exposed by the registry. Using the bound global object, the + client uses the request that corresponds to the type of constraint it wants + to make. See wp_pointer_constraints for more details. + + Warning! The protocol described in this file is experimental and backward + incompatible changes may be made. Backward compatible changes may be added + together with the corresponding interface version bump. Backward + incompatible changes are done by bumping the version number in the protocol + and interface names and resetting the interface version. Once the protocol + is to be declared stable, the 'z' prefix and the version number in the + protocol and interface names are removed and the interface version number is + reset. + + + + + The global interface exposing pointer constraining functionality. It + exposes two requests: lock_pointer for locking the pointer to its + position, and confine_pointer for locking the pointer to a region. + + The lock_pointer and confine_pointer requests create the objects + wp_locked_pointer and wp_confined_pointer respectively, and the client can + use these objects to interact with the lock. + + For any surface, only one lock or confinement may be active across all + wl_pointer objects of the same seat. If a lock or confinement is requested + when another lock or confinement is active or requested on the same surface + and with any of the wl_pointer objects of the same seat, an + 'already_constrained' error will be raised. + + + + + These errors can be emitted in response to wp_pointer_constraints + requests. + + + + + + + These values represent different lifetime semantics. They are passed + as arguments to the factory requests to specify how the constraint + lifetimes should be managed. + + + + A oneshot pointer constraint will never reactivate once it has been + deactivated. See the corresponding deactivation event + (wp_locked_pointer.unlocked and wp_confined_pointer.unconfined) for + details. + + + + + A persistent pointer constraint may again reactivate once it has + been deactivated. See the corresponding deactivation event + (wp_locked_pointer.unlocked and wp_confined_pointer.unconfined) for + details. + + + + + + + Used by the client to notify the server that it will no longer use this + pointer constraints object. + + + + + + The lock_pointer request lets the client request to disable movements of + the virtual pointer (i.e. the cursor), effectively locking the pointer + to a position. This request may not take effect immediately; in the + future, when the compositor deems implementation-specific constraints + are satisfied, the pointer lock will be activated and the compositor + sends a locked event. + + The protocol provides no guarantee that the constraints are ever + satisfied, and does not require the compositor to send an error if the + constraints cannot ever be satisfied. It is thus possible to request a + lock that will never activate. + + There may not be another pointer constraint of any kind requested or + active on the surface for any of the wl_pointer objects of the seat of + the passed pointer when requesting a lock. If there is, an error will be + raised. See general pointer lock documentation for more details. + + The intersection of the region passed with this request and the input + region of the surface is used to determine where the pointer must be + in order for the lock to activate. It is up to the compositor whether to + warp the pointer or require some kind of user interaction for the lock + to activate. If the region is null the surface input region is used. + + A surface may receive pointer focus without the lock being activated. + + The request creates a new object wp_locked_pointer which is used to + interact with the lock as well as receive updates about its state. See + the the description of wp_locked_pointer for further information. + + Note that while a pointer is locked, the wl_pointer objects of the + corresponding seat will not emit any wl_pointer.motion events, but + relative motion events will still be emitted via wp_relative_pointer + objects of the same seat. wl_pointer.axis and wl_pointer.button events + are unaffected. + + + + + + + + + + + The confine_pointer request lets the client request to confine the + pointer cursor to a given region. This request may not take effect + immediately; in the future, when the compositor deems implementation- + specific constraints are satisfied, the pointer confinement will be + activated and the compositor sends a confined event. + + The intersection of the region passed with this request and the input + region of the surface is used to determine where the pointer must be + in order for the confinement to activate. It is up to the compositor + whether to warp the pointer or require some kind of user interaction for + the confinement to activate. If the region is null the surface input + region is used. + + The request will create a new object wp_confined_pointer which is used + to interact with the confinement as well as receive updates about its + state. See the the description of wp_confined_pointer for further + information. + + + + + + + + + + + + The wp_locked_pointer interface represents a locked pointer state. + + While the lock of this object is active, the wl_pointer objects of the + associated seat will not emit any wl_pointer.motion events. + + This object will send the event 'locked' when the lock is activated. + Whenever the lock is activated, it is guaranteed that the locked surface + will already have received pointer focus and that the pointer will be + within the region passed to the request creating this object. + + To unlock the pointer, send the destroy request. This will also destroy + the wp_locked_pointer object. + + If the compositor decides to unlock the pointer the unlocked event is + sent. See wp_locked_pointer.unlock for details. + + When unlocking, the compositor may warp the cursor position to the set + cursor position hint. If it does, it will not result in any relative + motion events emitted via wp_relative_pointer. + + If the surface the lock was requested on is destroyed and the lock is not + yet activated, the wp_locked_pointer object is now defunct and must be + destroyed. + + + + + Destroy the locked pointer object. If applicable, the compositor will + unlock the pointer. + + + + + + Set the cursor position hint relative to the top left corner of the + surface. + + If the client is drawing its own cursor, it should update the position + hint to the position of its own cursor. A compositor may use this + information to warp the pointer upon unlock in order to avoid pointer + jumps. + + The cursor position hint is double buffered. The new hint will only take + effect when the associated surface gets it pending state applied. See + wl_surface.commit for details. + + + + + + + + Set a new region used to lock the pointer. + + The new lock region is double-buffered. The new lock region will + only take effect when the associated surface gets its pending state + applied. See wl_surface.commit for details. + + For details about the lock region, see wp_locked_pointer. + + + + + + + Notification that the pointer lock of the seat's pointer is activated. + + + + + + Notification that the pointer lock of the seat's pointer is no longer + active. If this is a oneshot pointer lock (see + wp_pointer_constraints.lifetime) this object is now defunct and should + be destroyed. If this is a persistent pointer lock (see + wp_pointer_constraints.lifetime) this pointer lock may again + reactivate in the future. + + + + + + + The wp_confined_pointer interface represents a confined pointer state. + + This object will send the event 'confined' when the confinement is + activated. Whenever the confinement is activated, it is guaranteed that + the surface the pointer is confined to will already have received pointer + focus and that the pointer will be within the region passed to the request + creating this object. It is up to the compositor to decide whether this + requires some user interaction and if the pointer will warp to within the + passed region if outside. + + To unconfine the pointer, send the destroy request. This will also destroy + the wp_confined_pointer object. + + If the compositor decides to unconfine the pointer the unconfined event is + sent. The wp_confined_pointer object is at this point defunct and should + be destroyed. + + + + + Destroy the confined pointer object. If applicable, the compositor will + unconfine the pointer. + + + + + + Set a new region used to confine the pointer. + + The new confine region is double-buffered. The new confine region will + only take effect when the associated surface gets its pending state + applied. See wl_surface.commit for details. + + If the confinement is active when the new confinement region is applied + and the pointer ends up outside of newly applied region, the pointer may + warped to a position within the new confinement region. If warped, a + wl_pointer.motion event will be emitted, but no + wp_relative_pointer.relative_motion event. + + The compositor may also, instead of using the new region, unconfine the + pointer. + + For details about the confine region, see wp_confined_pointer. + + + + + + + Notification that the pointer confinement of the seat's pointer is + activated. + + + + + + Notification that the pointer confinement of the seat's pointer is no + longer active. If this is a oneshot pointer confinement (see + wp_pointer_constraints.lifetime) this object is now defunct and should + be destroyed. If this is a persistent pointer confinement (see + wp_pointer_constraints.lifetime) this pointer confinement may again + reactivate in the future. + + + + + diff --git a/wl_protocols/relative-pointer-unstable-v1.xml b/wl_protocols/relative-pointer-unstable-v1.xml new file mode 100644 index 000000000..ca6f81d12 --- /dev/null +++ b/wl_protocols/relative-pointer-unstable-v1.xml @@ -0,0 +1,136 @@ + + + + + Copyright © 2014 Jonas Ådahl + Copyright © 2015 Red Hat Inc. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice (including the next + paragraph) shall be included in all copies or substantial portions of the + Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + + + + This protocol specifies a set of interfaces used for making clients able to + receive relative pointer events not obstructed by barriers (such as the + monitor edge or other pointer barriers). + + To start receiving relative pointer events, a client must first bind the + global interface "wp_relative_pointer_manager" which, if a compositor + supports relative pointer motion events, is exposed by the registry. After + having created the relative pointer manager proxy object, the client uses + it to create the actual relative pointer object using the + "get_relative_pointer" request given a wl_pointer. The relative pointer + motion events will then, when applicable, be transmitted via the proxy of + the newly created relative pointer object. See the documentation of the + relative pointer interface for more details. + + Warning! The protocol described in this file is experimental and backward + incompatible changes may be made. Backward compatible changes may be added + together with the corresponding interface version bump. Backward + incompatible changes are done by bumping the version number in the protocol + and interface names and resetting the interface version. Once the protocol + is to be declared stable, the 'z' prefix and the version number in the + protocol and interface names are removed and the interface version number is + reset. + + + + + A global interface used for getting the relative pointer object for a + given pointer. + + + + + Used by the client to notify the server that it will no longer use this + relative pointer manager object. + + + + + + Create a relative pointer interface given a wl_pointer object. See the + wp_relative_pointer interface for more details. + + + + + + + + + A wp_relative_pointer object is an extension to the wl_pointer interface + used for emitting relative pointer events. It shares the same focus as + wl_pointer objects of the same seat and will only emit events when it has + focus. + + + + + + + + + Relative x/y pointer motion from the pointer of the seat associated with + this object. + + A relative motion is in the same dimension as regular wl_pointer motion + events, except they do not represent an absolute position. For example, + moving a pointer from (x, y) to (x', y') would have the equivalent + relative motion (x' - x, y' - y). If a pointer motion caused the + absolute pointer position to be clipped by for example the edge of the + monitor, the relative motion is unaffected by the clipping and will + represent the unclipped motion. + + This event also contains non-accelerated motion deltas. The + non-accelerated delta is, when applicable, the regular pointer motion + delta as it was before having applied motion acceleration and other + transformations such as normalization. + + Note that the non-accelerated delta does not represent 'raw' events as + they were read from some device. Pointer motion acceleration is device- + and configuration-specific and non-accelerated deltas and accelerated + deltas may have the same value on some devices. + + Relative motions are not coupled to wl_pointer.motion events, and can be + sent in combination with such events, but also independently. There may + also be scenarios where wl_pointer.motion is sent, but there is no + relative motion. The order of an absolute and relative motion event + originating from the same physical motion is not guaranteed. + + If the client needs button events or focus state, it can receive them + from a wl_pointer object of the same seat that the wp_relative_pointer + object is associated with. + + + + + + + + + + + From b0a4f70fa9e035b3afd0330ef41aedfd5e6c488f Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Thu, 2 Dec 2021 19:35:08 +0200 Subject: [PATCH 031/278] Tweaks to support QT on Windows --- src/qt/qt_main.cpp | 1 + src/qt/qt_mainwindow.cpp | 4 ++- src/qt/qt_platform.cpp | 66 ++++++++++++++++++++++++++++++++++++++-- src/qt/qt_ui.cpp | 4 +-- 4 files changed, 70 insertions(+), 5 deletions(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index f011fd9f7..536370371 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -11,6 +11,7 @@ #include +#define SDL_MAIN_HANDLED #include "SDL.h" #include "SDL_mutex.h" #include "SDL_timer.h" diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 8e5b5a450..09f2614e2 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -622,7 +622,9 @@ static std::array& selected_keycode = x11_to_xt_base; uint16_t x11_keycode_to_keysym(uint32_t keycode) { -#ifdef __APPLE__ +#if defined(Q_OS_WINDOWS) + return keycode & 0xFFFF; +#elif defined(__APPLE__) return darwin_to_xt[keycode]; #else static Display* x11display = nullptr; diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index 6be563814..357d9e0c3 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -44,6 +44,9 @@ private: }; extern "C" { +#ifdef Q_OS_WINDOWS +#include +#endif #include <86box/86box.h> #include <86box/device.h> #include <86box/gameport.h> @@ -87,7 +90,11 @@ do_stop(void) void plat_get_exe_name(char *s, int size) { - CharPointer(s, size) = QCoreApplication::applicationFilePath().toUtf8(); + QByteArray exepath_temp = QCoreApplication::applicationDirPath().toLocal8Bit(); + + memcpy(s, exepath_temp.data(), std::min(exepath_temp.size(),size)); + + plat_path_slash(s); } uint32_t @@ -140,6 +147,8 @@ plat_fopen(const char *path, const char *mode) return nullptr; } */ + +/* Not sure if any this is necessary, fopen seems to work on Windows -Manaatti #ifdef Q_OS_WINDOWS wchar_t *pathw, *modew; int len; @@ -165,8 +174,9 @@ plat_fopen(const char *path, const char *mode) } #endif #ifdef Q_OS_UNIX +*/ return fopen(path, mode); -#endif +//#endif } FILE * @@ -216,11 +226,23 @@ plat_get_extension(char *s) char * plat_get_filename(char *s) { +#ifdef Q_OS_WINDOWS + int c = strlen(s) - 1; + + while (c > 0) { + if (s[c] == '/' || s[c] == '\\') + return(&s[c+1]); + c--; + } + + return(s); +#else auto idx = QByteArray::fromRawData(s, strlen(s)).lastIndexOf(QDir::separator().toLatin1()); if (idx >= 0) { return s+idx+1; } return s; +#endif } int @@ -292,7 +314,11 @@ plat_mmap(size_t size, uint8_t executable) void plat_munmap(void *ptr, size_t size) { +#if defined Q_OS_WINDOWS + VirtualFree(ptr, 0, MEM_RELEASE); +#else munmap(ptr, size); +#endif } void @@ -391,3 +417,39 @@ void endblit() } } + +#ifdef Q_OS_WINDOWS +size_t mbstoc16s(uint16_t dst[], const char src[], int len) +{ + if (src == NULL) return 0; + if (len < 0) return 0; + + size_t ret = MultiByteToWideChar(CP_UTF8, 0, src, -1, reinterpret_cast(dst), dst == NULL ? 0 : len); + + if (!ret) { + return -1; + } + + return ret; +} + +size_t c16stombs(char dst[], const uint16_t src[], int len) +{ + if (src == NULL) return 0; + if (len < 0) return 0; + + size_t ret = WideCharToMultiByte(CP_UTF8, 0, reinterpret_cast(src), -1, dst, dst == NULL ? 0 : len, NULL, NULL); + + if (!ret) { + return -1; + } + + return ret; +} +#endif + +int +plat_chdir(char *path) +{ + return QDir::setCurrent(QString(path)) ? 0 : -1; +} diff --git a/src/qt/qt_ui.cpp b/src/qt/qt_ui.cpp index c4de70282..9025d95da 100644 --- a/src/qt/qt_ui.cpp +++ b/src/qt/qt_ui.cpp @@ -62,8 +62,8 @@ void plat_mouse_capture(int on) { } int ui_msgbox_header(int flags, void *header, void* message) { - if (header <= (void*)7168) header = plat_get_string(reinterpret_cast(header)); - if (message <= (void*)7168) message = plat_get_string(reinterpret_cast(message)); + if (header <= (void*)7168) header = plat_get_string((uintptr_t)header); + if (message <= (void*)7168) message = plat_get_string((uintptr_t)message); auto hdr = QString::fromWCharArray(reinterpret_cast(header)); auto msg = QString::fromWCharArray(reinterpret_cast(message)); From f347c69dd033d1fc4960253f3e92d764168fd9e0 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 2 Dec 2021 23:53:25 +0600 Subject: [PATCH 032/278] Frameskip when needed Fixes lockups. --- src/qt/qt_gleswidget.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qt/qt_gleswidget.cpp b/src/qt/qt_gleswidget.cpp index 829b484b9..40daa2e0c 100644 --- a/src/qt/qt_gleswidget.cpp +++ b/src/qt/qt_gleswidget.cpp @@ -156,5 +156,6 @@ void GLESWidget::qt_real_blit(int x, int y, int w, int h) video_screenshot((uint32_t *)imagebits, 0, 0, 2048 + 64); } video_blit_complete(); + firstupdate = false; this->reqUpdate(); } From f7aec4cfcf32a7a34f8e02e6244c63205c8b9001 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 3 Dec 2021 01:22:54 +0600 Subject: [PATCH 033/278] Implement MIDI I/O support using RtMidi --- src/qt/CMakeLists.txt | 18 +++++- src/qt/rtmidi_midi.cpp | 143 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 src/qt/rtmidi_midi.cpp diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 9a2be5a7f..45c9d1d77 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -4,9 +4,10 @@ set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) +find_package(PkgConfig) find_package(Threads REQUIRED) -add_library(plat STATIC qt.c qt_main.cpp qt_platform.cpp qt_midi.cpp cpp11_thread.cpp) +add_library(plat STATIC qt.c qt_main.cpp qt_platform.cpp cpp11_thread.cpp) add_library(ui STATIC qt_ui.cpp qt_cdrom.c @@ -101,6 +102,21 @@ if (UNIX AND NOT APPLE) find_package(X11 REQUIRED) target_link_libraries(ui PRIVATE X11::X11) find_package(ECM NO_MODULE) + if (PkgConfig_FOUND) + pkg_check_modules(RTMIDI rtmidi) + if (RTMIDI_FOUND) + target_include_directories(plat PRIVATE ${RTMIDI_INCLUDE_DIRS}) + target_link_directories(plat PRIVATE ${RTMIDI_LIBRARY_DIRS}) + target_link_libraries(plat PRIVATE ${RTMIDI_LIBRARIES}) + target_link_options(plat PRIVATE ${RTMIDI_LDFLAGS}) + target_compile_options(plat PRIVATE ${RTMIDI_CFLAGS}) + target_sources(plat PRIVATE rtmidi_midi.cpp) + else() + target_sources(plat PRIVATE qt_midi.cpp) + endif() + else() + target_sources(plat PRIVATE qt_midi.cpp) + endif() if (ECM_FOUND) list(APPEND CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) find_package(Wayland COMPONENTS Client) diff --git a/src/qt/rtmidi_midi.cpp b/src/qt/rtmidi_midi.cpp new file mode 100644 index 000000000..b8ab2ca30 --- /dev/null +++ b/src/qt/rtmidi_midi.cpp @@ -0,0 +1,143 @@ + +#include +#include +#include +extern "C" +{ +#include <86box/86box.h> +#include <86box/midi.h> +#include <86box/plat_midi.h> +#include <86box/config.h> +} + +extern "C" { + +static RtMidiOut* midiout = nullptr; +static RtMidiIn* midiin = nullptr; +static int midi_out_id = 0, midi_in_id = 0; +static const int midi_lengths[8] = {3, 3, 3, 3, 2, 2, 3, 1}; + +int plat_midi_write(uint8_t val) +{ return 0; } + +void plat_midi_init() +{ + try + { + midiout = new RtMidiOut; + } + catch (RtMidiError& error) + { + pclog("Failed to initialize MIDI output: %s\n", error.getMessage().c_str()); + return; + } + midi_out_id = config_get_int((char*)SYSTEM_MIDI_NAME, (char*)"midi", 0); + try + { + midiout->openPort(midi_out_id); + } + catch (RtMidiError& error) + { + pclog("Fallback to default MIDI output port: %s\n", error.getMessage().c_str()); + try + { + midiout->openPort(0); + } + catch (RtMidiError& error) + { + pclog("Failed to initialize MIDI output: %s\n", error.getMessage().c_str()); + delete midiout; + midiout = nullptr; + return; + } + } +} + +void plat_midi_close() +{ + if (!midiout) return; + midiout->closePort(); + delete midiout; + midiout = nullptr; +} + +int plat_midi_get_num_devs() +{ + return midiout ? midiout->getPortCount() : 0; +} + +void plat_midi_play_msg(uint8_t *msg) +{ + if (midiout) midiout->sendMessage(msg, midi_lengths[(msg[0] >> 4) & 7]); +} + +void plat_midi_get_dev_name(int num, char *s) +{ + strcpy(s, midiout->getPortName(num).c_str()); +} + +void plat_midi_play_sysex(uint8_t *sysex, unsigned int len) +{ + if (midiout) midiout->sendMessage(sysex, len); +} + +static void plat_midi_callback(double timeStamp, std::vector *message, void *userData) +{ + if (message->size() <= 3) midi_in_msg(message->data()); + else midi_in_sysex(message->data(), message->size()); +} + +void plat_midi_input_init(void) +{ + try + { + midiin = new RtMidiIn; + } + catch (RtMidiError& error) + { + pclog("Failed to initialize MIDI input: %s\n", error.getMessage().c_str()); + return; + } + midi_in_id = config_get_int((char*)SYSTEM_MIDI_NAME, (char*)"midi_input", 0); + try + { + midiin->openPort(midi_in_id); + } + catch (RtMidiError& error) + { + pclog("Fallback to default MIDI input port: %s\n", error.getMessage().c_str()); + try + { + midiin->openPort(0); + } + catch (RtMidiError& error) + { + pclog("Failed to initialize MIDI input: %s\n", error.getMessage().c_str()); + delete midiin; + midiin = nullptr; + return; + } + } + midiin->setCallback(plat_midi_callback); +} + +void plat_midi_input_close(void) +{ + midiin->cancelCallback(); + midiin->closePort(); + delete midiin; + midiin = nullptr; + return; +} + +int plat_midi_in_get_num_devs(void) +{ + return midiin ? midiin->getPortCount() : 0; +} + +void plat_midi_in_get_dev_name(int num, char *s) +{ + strcpy(s, midiin->getPortName(num).c_str()); +} + +} From e021b3460a83e464785c10829af732db185b4a0d Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 3 Dec 2021 02:12:35 +0600 Subject: [PATCH 034/278] Make external MIDI options actually appear in Settings --- src/qt/qt_deviceconfig.cpp | 50 +++++++++++++++++++++++++++++++------- src/qt/qt_midi.cpp | 12 +++++++++ src/qt/rtmidi_midi.cpp | 26 ++++++++++++++++++-- 3 files changed, 77 insertions(+), 11 deletions(-) diff --git a/src/qt/qt_deviceconfig.cpp b/src/qt/qt_deviceconfig.cpp index a0d62c1c9..a99e1ab26 100644 --- a/src/qt/qt_deviceconfig.cpp +++ b/src/qt/qt_deviceconfig.cpp @@ -11,6 +11,7 @@ extern "C" { #include <86box/86box.h> #include <86box/config.h> #include <86box/device.h> +#include <86box/plat_midi.h> } #include "qt_filefield.hpp" @@ -58,19 +59,50 @@ void DeviceConfig::ConfigureDevice(const _device_* device) { int currentIndex = -1; int selected = config_get_int(device_context.name, const_cast(config->name), config->default_int); - for (auto* sel = config->selection; (sel->description != nullptr) && (strlen(sel->description) > 0); ++sel) { - int rows = model->rowCount(); - model->insertRow(rows); - auto idx = model->index(rows, 0); + if (config->type == CONFIG_MIDI) { + for (int i = 0; i < plat_midi_get_num_devs(); i++) { + char midiName[512] = { 0 }; + plat_midi_get_dev_name(i, midiName); - model->setData(idx, sel->description, Qt::DisplayRole); - model->setData(idx, sel->value, Qt::UserRole); + int rows = model->rowCount(); + model->insertRow(rows); + auto idx = model->index(rows, 0); - if (selected == sel->value) { - currentIndex = idx.row(); + model->setData(idx, midiName, Qt::DisplayRole); + model->setData(idx, i, Qt::UserRole); + if (selected == i) { + currentIndex = idx.row(); + } + } + } else if (config->type == CONFIG_MIDI_IN) { + for (int i = 0; i < plat_midi_in_get_num_devs(); i++) { + char midiName[512] = { 0 }; + plat_midi_in_get_dev_name(i, midiName); + + int rows = model->rowCount(); + model->insertRow(rows); + auto idx = model->index(rows, 0); + + model->setData(idx, midiName, Qt::DisplayRole); + model->setData(idx, i, Qt::UserRole); + if (selected == i) { + currentIndex = idx.row(); + } + } + } else { + for (auto* sel = config->selection; (sel->description != nullptr) && (strlen(sel->description) > 0); ++sel) { + int rows = model->rowCount(); + model->insertRow(rows); + auto idx = model->index(rows, 0); + + model->setData(idx, sel->description, Qt::DisplayRole); + model->setData(idx, sel->value, Qt::UserRole); + + if (selected == sel->value) { + currentIndex = idx.row(); + } } } - dc.ui->formLayout->addRow(config->description, cbox); cbox->setCurrentIndex(currentIndex); break; diff --git a/src/qt/qt_midi.cpp b/src/qt/qt_midi.cpp index 0027e5b5a..a9b741c9e 100644 --- a/src/qt/qt_midi.cpp +++ b/src/qt/qt_midi.cpp @@ -29,4 +29,16 @@ int plat_midi_get_num_devs() int plat_midi_in_get_num_devs(void) { return 0; } +void plat_midi_get_dev_name(int num, char *s) +{ + s[0] = ' '; + s[1] = 0; +} + +void plat_midi_in_get_dev_name(int num, char *s) +{ + s[0] = ' '; + s[1] = 0; +} + } diff --git a/src/qt/rtmidi_midi.cpp b/src/qt/rtmidi_midi.cpp index b8ab2ca30..fd4ccbbaf 100644 --- a/src/qt/rtmidi_midi.cpp +++ b/src/qt/rtmidi_midi.cpp @@ -24,7 +24,7 @@ void plat_midi_init() { try { - midiout = new RtMidiOut; + if (!midiout) midiout = new RtMidiOut; } catch (RtMidiError& error) { @@ -63,6 +63,17 @@ void plat_midi_close() int plat_midi_get_num_devs() { + if (!midiout) + { + try + { + midiout = new RtMidiOut; + } + catch (RtMidiError& error) + { + pclog("Failed to initialize MIDI output: %s\n", error.getMessage().c_str()); + } + } return midiout ? midiout->getPortCount() : 0; } @@ -91,7 +102,7 @@ void plat_midi_input_init(void) { try { - midiin = new RtMidiIn; + if (!midiin) midiin = new RtMidiIn; } catch (RtMidiError& error) { @@ -132,6 +143,17 @@ void plat_midi_input_close(void) int plat_midi_in_get_num_devs(void) { + if (!midiin) + { + try + { + midiin = new RtMidiIn; + } + catch (RtMidiError& error) + { + pclog("Failed to initialize MIDI input: %s\n", error.getMessage().c_str()); + } + } return midiin ? midiin->getPortCount() : 0; } From 363f582a810793d38fd77218ddb75e6650ccb238 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Fri, 3 Dec 2021 11:38:00 +0100 Subject: [PATCH 035/278] code dump - mostly done implementing media menus --- src/qt/CMakeLists.txt | 6 +- src/qt/qt_cdrom.c | 209 ----------- src/qt/qt_filefield.cpp | 4 +- src/qt/qt_filefield.hpp | 5 + src/qt/qt_harddiskdialog.cpp | 2 +- src/qt/qt_machinestatus.cpp | 189 ++++++---- src/qt/qt_machinestatus.hpp | 9 + src/qt/qt_mainwindow.cpp | 17 +- src/qt/qt_mainwindow.hpp | 7 + src/qt/qt_mainwindow.ui | 6 + src/qt/qt_mediamenu.cpp | 533 ++++++++++++++++++++++++++++ src/qt/qt_mediamenu.hpp | 76 ++++ src/qt/qt_newfloppydialog.cpp | 648 ++++++++++++++++++++++++++++++++++ src/qt/qt_newfloppydialog.hpp | 50 +++ src/qt/qt_newfloppydialog.ui | 115 ++++++ src/qt/qt_ui.cpp | 2 +- 16 files changed, 1588 insertions(+), 290 deletions(-) create mode 100644 src/qt/qt_mediamenu.cpp create mode 100644 src/qt/qt_mediamenu.hpp create mode 100644 src/qt/qt_newfloppydialog.cpp create mode 100644 src/qt/qt_newfloppydialog.hpp create mode 100644 src/qt/qt_newfloppydialog.ui diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 45c9d1d77..0e1193a69 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -18,7 +18,8 @@ add_library(ui STATIC qt_mainwindow.ui qt_machinestatus.cpp qt_machinestatus.hpp - #qt_machinestatus.ui + qt_mediamenu.cpp + qt_mediamenu.hpp qt_gleswidget.cpp qt_gleswidget.hpp @@ -67,6 +68,9 @@ add_library(ui STATIC qt_filefield.cpp qt_filefield.hpp qt_filefield.ui + qt_newfloppydialog.cpp + qt_newfloppydialog.hpp + qt_newfloppydialog.ui qt_harddiskdialog.cpp qt_harddiskdialog.hpp qt_harddiskdialog.ui diff --git a/src/qt/qt_cdrom.c b/src/qt/qt_cdrom.c index 9eb3d962a..a15e9c600 100644 --- a/src/qt/qt_cdrom.c +++ b/src/qt/qt_cdrom.c @@ -39,83 +39,6 @@ #include <86box/plat.h> #include <86box/ui.h> - - -void -cassette_mount(char *fn, uint8_t wp) -{ - pc_cas_set_fname(cassette, NULL); - memset(cassette_fname, 0, sizeof(cassette_fname)); - cassette_ui_writeprot = wp; - pc_cas_set_fname(cassette, fn); - if (fn != NULL) - memcpy(cassette_fname, fn, MIN(511, strlen(fn))); - ui_sb_update_icon_state(SB_CASSETTE, (fn == NULL) ? 1 : 0); - //media_menu_update_cassette(); - ui_sb_update_tip(SB_CASSETTE); - config_save(); -} - - -void -cassette_eject(void) -{ - pc_cas_set_fname(cassette, NULL); - memset(cassette_fname, 0x00, sizeof(cassette_fname)); - ui_sb_update_icon_state(SB_CASSETTE, 1); - //media_menu_update_cassette(); - ui_sb_update_tip(SB_CASSETTE); - config_save(); -} - - -void -cartridge_mount(uint8_t id, char *fn, uint8_t wp) -{ - cart_close(id); - cart_load(id, fn); - ui_sb_update_icon_state(SB_CARTRIDGE | id, strlen(cart_fns[id]) ? 0 : 1); - //media_menu_update_cartridge(id); - ui_sb_update_tip(SB_CARTRIDGE | id); - config_save(); -} - - -void -cartridge_eject(uint8_t id) -{ - cart_close(id); - ui_sb_update_icon_state(SB_CARTRIDGE | id, 1); - //media_menu_update_cartridge(id); - ui_sb_update_tip(SB_CARTRIDGE | id); - config_save(); -} - - -void -floppy_mount(uint8_t id, char *fn, uint8_t wp) -{ - fdd_close(id); - ui_writeprot[id] = wp; - fdd_load(id, fn); - ui_sb_update_icon_state(SB_FLOPPY | id, strlen(floppyfns[id]) ? 0 : 1); - //media_menu_update_floppy(id); - ui_sb_update_tip(SB_FLOPPY | id); - config_save(); -} - - -void -floppy_eject(uint8_t id) -{ - fdd_close(id); - ui_sb_update_icon_state(SB_FLOPPY | id, 1); - //media_menu_update_floppy(id); - ui_sb_update_tip(SB_FLOPPY | id); - config_save(); -} - - void plat_cdrom_ui_update(uint8_t id, uint8_t reload) { @@ -130,135 +53,3 @@ plat_cdrom_ui_update(uint8_t id, uint8_t reload) //media_menu_update_cdrom(id); ui_sb_update_tip(SB_CDROM|id); } - -void -cdrom_mount(uint8_t id, char *fn) -{ - cdrom[id].prev_host_drive = cdrom[id].host_drive; - strcpy(cdrom[id].prev_image_path, cdrom[id].image_path); - if (cdrom[id].ops && cdrom[id].ops->exit) - cdrom[id].ops->exit(&(cdrom[id])); - cdrom[id].ops = NULL; - memset(cdrom[id].image_path, 0, sizeof(cdrom[id].image_path)); - cdrom_image_open(&(cdrom[id]), fn); - /* Signal media change to the emulated machine. */ - if (cdrom[id].insert) - cdrom[id].insert(cdrom[id].priv); - cdrom[id].host_drive = (strlen(cdrom[id].image_path) == 0) ? 0 : 200; - if (cdrom[id].host_drive == 200) { - ui_sb_update_icon_state(SB_CDROM | id, 0); - } else { - ui_sb_update_icon_state(SB_CDROM | id, 1); - } - //media_menu_update_cdrom(id); - ui_sb_update_tip(SB_CDROM | id); - config_save(); -} - -void -mo_eject(uint8_t id) -{ - mo_t *dev = (mo_t *) mo_drives[id].priv; - - mo_disk_close(dev); - if (mo_drives[id].bus_type) { - /* Signal disk change to the emulated machine. */ - mo_insert(dev); - } - - ui_sb_update_icon_state(SB_MO | id, 1); - //media_menu_update_mo(id); - ui_sb_update_tip(SB_MO | id); - config_save(); -} - - -void -mo_mount(uint8_t id, char *fn, uint8_t wp) -{ - mo_t *dev = (mo_t *) mo_drives[id].priv; - - mo_disk_close(dev); - mo_drives[id].read_only = wp; - mo_load(dev, fn); - mo_insert(dev); - - ui_sb_update_icon_state(SB_MO | id, strlen(mo_drives[id].image_path) ? 0 : 1); - //media_menu_update_mo(id); - ui_sb_update_tip(SB_MO | id); - - config_save(); -} - - -void -mo_reload(uint8_t id) -{ - mo_t *dev = (mo_t *) mo_drives[id].priv; - - mo_disk_reload(dev); - if (strlen(mo_drives[id].image_path) == 0) { - ui_sb_update_icon_state(SB_MO|id, 1); - } else { - ui_sb_update_icon_state(SB_MO|id, 0); - } - - //media_menu_update_mo(id); - ui_sb_update_tip(SB_MO|id); - - config_save(); -} - -void -zip_eject(uint8_t id) -{ - zip_t *dev = (zip_t *) zip_drives[id].priv; - - zip_disk_close(dev); - if (zip_drives[id].bus_type) { - /* Signal disk change to the emulated machine. */ - zip_insert(dev); - } - - ui_sb_update_icon_state(SB_ZIP | id, 1); - //media_menu_update_zip(id); - ui_sb_update_tip(SB_ZIP | id); - config_save(); -} - - -void -zip_mount(uint8_t id, char *fn, uint8_t wp) -{ - zip_t *dev = (zip_t *) zip_drives[id].priv; - - zip_disk_close(dev); - zip_drives[id].read_only = wp; - zip_load(dev, fn); - zip_insert(dev); - - ui_sb_update_icon_state(SB_ZIP | id, strlen(zip_drives[id].image_path) ? 0 : 1); - //media_menu_update_zip(id); - ui_sb_update_tip(SB_ZIP | id); - - config_save(); -} - - -void -zip_reload(uint8_t id) -{ - zip_t *dev = (zip_t *) zip_drives[id].priv; - - zip_disk_reload(dev); - if (strlen(zip_drives[id].image_path) == 0) { - ui_sb_update_icon_state(SB_ZIP|id, 1); - } else { - ui_sb_update_icon_state(SB_ZIP|id, 0); - } - - //media_menu_update_zip(id); - ui_sb_update_tip(SB_ZIP|id); - - config_save(); -} diff --git a/src/qt/qt_filefield.cpp b/src/qt/qt_filefield.cpp index 39387fb05..bbc581182 100644 --- a/src/qt/qt_filefield.cpp +++ b/src/qt/qt_filefield.cpp @@ -23,9 +23,9 @@ void FileField::setFileName(const QString &fileName) { void FileField::on_pushButton_clicked() { QString fileName; if (createFile_) { - fileName = QFileDialog::getSaveFileName(this, "Create..."); + fileName = QFileDialog::getSaveFileName(this, "Create...", QString(), filter_, &selectedFilter_); } else { - fileName = QFileDialog::getOpenFileName(this, "Open..."); + fileName = QFileDialog::getOpenFileName(this, "Open...", QString(), filter_, &selectedFilter_); } fileName_ = fileName; diff --git a/src/qt/qt_filefield.hpp b/src/qt/qt_filefield.hpp index 24e3870a3..df68c1e02 100644 --- a/src/qt/qt_filefield.hpp +++ b/src/qt/qt_filefield.hpp @@ -18,6 +18,9 @@ public: QString fileName() const { return fileName_; } void setFileName(const QString& fileName); + void setFilter(const QString& filter) { filter_ = filter; } + QString selectedFilter() const { return selectedFilter_; } + void setCreateFile(bool createFile) { createFile_ = createFile; } signals: @@ -29,6 +32,8 @@ private slots: private: Ui::FileField *ui; QString fileName_; + QString selectedFilter_; + QString filter_; bool createFile_ = false; }; diff --git a/src/qt/qt_harddiskdialog.cpp b/src/qt/qt_harddiskdialog.cpp index 659c27ea4..8a9cb7c3b 100644 --- a/src/qt/qt_harddiskdialog.cpp +++ b/src/qt/qt_harddiskdialog.cpp @@ -337,7 +337,7 @@ void HarddiskDialog::onCreateNewFile() { _86box_geometry = create_drive_vhd_dynamic(fileName, cylinders_, heads_, sectors_, block_size); break; case 5: - QString vhdParent = QFileDialog::getOpenFileName(this, "Select the parent VHD", QString(), "VHD files (*.vhd);;All files (*.*)"); + QString vhdParent = QFileDialog::getOpenFileName(this, "Select the parent VHD", QString(), "VHD files (*.vhd);;All files (*)"); if (vhdParent.isEmpty()) { return; } diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index b2c8d0ad1..a3aad56a4 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -196,6 +196,7 @@ struct MachineStatus::States { std::array hdds; StateActive net; std::unique_ptr sound; + std::unique_ptr text; }; MachineStatus::MachineStatus(QObject *parent) : @@ -206,6 +207,81 @@ MachineStatus::MachineStatus(QObject *parent) : MachineStatus::~MachineStatus() = default; +bool MachineStatus::hasCassette() { + return cassette_enable > 0 ? true : false; +} + +bool MachineStatus::hasCartridge() { + return machines[machine].flags & MACHINE_CARTRIDGE; +} + +bool MachineStatus::hasIDE() { + return machines[machine].flags & MACHINE_IDE_QUAD; +} + +bool MachineStatus::hasSCSI() { + return machines[machine].flags & MACHINE_SCSI_DUAL; +} + +void MachineStatus::iterateFDD(const std::function &cb) { + for (int i = 0; i < FDD_NUM; ++i) { + if (fdd_get_type(i) != 0) { + cb(i); + } + } +} + +void MachineStatus::iterateCDROM(const std::function &cb) { + auto hdc_name = QString(hdc_get_internal_name(hdc_current)); + for (size_t i = 0; i < CDROM_NUM; i++) { + /* Could be Internal or External IDE.. */ + if ((cdrom[i].bus_type == CDROM_BUS_ATAPI) && + !hasIDE() && hdc_name != QStringLiteral("ide")) + continue; + if ((cdrom[i].bus_type == CDROM_BUS_SCSI) && !hasSCSI() && + (scsi_card_current[0] == 0) && (scsi_card_current[1] == 0) && + (scsi_card_current[2] == 0) && (scsi_card_current[3] == 0)) + continue; + if (cdrom[i].bus_type != 0) { + cb(i); + } + } +} + +void MachineStatus::iterateZIP(const std::function &cb) { + auto hdc_name = QString(hdc_get_internal_name(hdc_current)); + for (size_t i = 0; i < ZIP_NUM; i++) { + /* Could be Internal or External IDE.. */ + if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && + !hasIDE() && hdc_name != QStringLiteral("ide")) + continue; + if ((zip_drives[i].bus_type == ZIP_BUS_SCSI) && !hasSCSI() && + (scsi_card_current[0] == 0) && (scsi_card_current[1] == 0) && + (scsi_card_current[2] == 0) && (scsi_card_current[3] == 0)) + continue; + if (zip_drives[i].bus_type != 0) { + cb(i); + } + } +} + +void MachineStatus::iterateMO(const std::function &cb) { + auto hdc_name = QString(hdc_get_internal_name(hdc_current)); + for (size_t i = 0; i < MO_NUM; i++) { + /* Could be Internal or External IDE.. */ + if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && + !hasIDE() && hdc_name != QStringLiteral("ide")) + continue; + if ((mo_drives[i].bus_type == MO_BUS_SCSI) && !hasSCSI() && + (scsi_card_current[0] == 0) && (scsi_card_current[1] == 0) && + (scsi_card_current[2] == 0) && (scsi_card_current[3] == 0)) + continue; + if (mo_drives[i].bus_type != 0) { + cb(i); + } + } +} + static int hdd_count(int bus) { int c = 0; int i; @@ -220,12 +296,9 @@ static int hdd_count(int bus) { } void MachineStatus::refresh(QStatusBar* sbar) { - bool has_cart = machines[machine].flags & MACHINE_CARTRIDGE; bool has_mfm = machines[machine].flags & MACHINE_MFM; bool has_xta = machines[machine].flags & MACHINE_XTA; bool has_esdi = machines[machine].flags & MACHINE_ESDI; - bool has_ide = machines[machine].flags & MACHINE_IDE_QUAD; - bool has_scsi = machines[machine].flags & MACHINE_SCSI_DUAL; int c_mfm = hdd_count(HDD_BUS_MFM); int c_esdi = hdd_count(HDD_BUS_ESDI); @@ -262,7 +335,7 @@ void MachineStatus::refresh(QStatusBar* sbar) { sbar->addWidget(d->cassette.label.get()); } - if (has_cart) { + if (hasCartridge()) { for (int i = 0; i < 2; ++i) { d->cartridge[i].label = std::make_unique(); d->cartridge[i].setEmpty(QString(cart_fns[i]).isEmpty()); @@ -270,73 +343,43 @@ void MachineStatus::refresh(QStatusBar* sbar) { } } - for (size_t i = 0; i < FDD_NUM; ++i) { - if (fdd_get_type(i) != 0) { - d->fdd[i].label = std::make_unique(); - int t = fdd_get_type(i); - if (t == 0) { - d->fdd[i].pixmaps = &d->pixmaps.floppy_disabled; - } else if (t >= 1 && t <= 6) { - d->fdd[i].pixmaps = &d->pixmaps.floppy_525; - } else { - d->fdd[i].pixmaps = &d->pixmaps.floppy_35; - } - d->fdd[i].setEmpty(QString(floppyfns[i]).isEmpty()); - d->fdd[i].setActive(false); - sbar->addWidget(d->fdd[i].label.get()); + iterateFDD([this, sbar](int i) { + int t = fdd_get_type(i); + if (t == 0) { + d->fdd[i].pixmaps = &d->pixmaps.floppy_disabled; + } else if (t >= 1 && t <= 6) { + d->fdd[i].pixmaps = &d->pixmaps.floppy_525; + } else { + d->fdd[i].pixmaps = &d->pixmaps.floppy_35; } - } + d->fdd[i].label = std::make_unique(); + d->fdd[i].setEmpty(QString(floppyfns[i]).isEmpty()); + d->fdd[i].setActive(false); + sbar->addWidget(d->fdd[i].label.get()); + }); + + iterateCDROM([this, sbar](int i) { + d->cdrom[i].label = std::make_unique(); + d->cdrom[i].setEmpty(cdrom[i].host_drive != 200 || QString(cdrom[i].image_path).isEmpty()); + d->cdrom[i].setActive(false); + sbar->addWidget(d->cdrom[i].label.get()); + }); + + iterateZIP([this, sbar](int i) { + d->zip[i].label = std::make_unique(); + d->zip[i].setEmpty(QString(zip_drives[i].image_path).isEmpty()); + d->zip[i].setActive(false); + sbar->addWidget(d->zip[i].label.get()); + }); + + iterateMO([this, sbar](int i) { + d->mo[i].label = std::make_unique(); + d->mo[i].setEmpty(QString(mo_drives[i].image_path).isEmpty()); + d->mo[i].setActive(false); + sbar->addWidget(d->mo[i].label.get()); + }); auto hdc_name = QString(hdc_get_internal_name(hdc_current)); - for (size_t i = 0; i < CDROM_NUM; i++) { - /* Could be Internal or External IDE.. */ - if ((cdrom[i].bus_type == CDROM_BUS_ATAPI) && - !has_ide && hdc_name != QStringLiteral("ide")) - continue; - if ((cdrom[i].bus_type == CDROM_BUS_SCSI) && !has_scsi && - (scsi_card_current[0] == 0) && (scsi_card_current[1] == 0) && - (scsi_card_current[2] == 0) && (scsi_card_current[3] == 0)) - continue; - if (cdrom[i].bus_type != 0) { - d->cdrom[i].label = std::make_unique(); - d->cdrom[i].setEmpty(cdrom[i].host_drive != 200 || QString(cdrom[i].image_path).isEmpty()); - d->cdrom[i].setActive(false); - sbar->addWidget(d->cdrom[i].label.get()); - } - } - for (size_t i = 0; i < ZIP_NUM; i++) { - /* Could be Internal or External IDE.. */ - if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && - !has_ide && hdc_name != QStringLiteral("ide")) - continue; - if ((zip_drives[i].bus_type == ZIP_BUS_SCSI) && !has_scsi && - (scsi_card_current[0] == 0) && (scsi_card_current[1] == 0) && - (scsi_card_current[2] == 0) && (scsi_card_current[3] == 0)) - continue; - if (zip_drives[i].bus_type != 0) { - d->zip[i].label = std::make_unique(); - d->zip[i].setEmpty(QString(zip_drives[i].image_path).isEmpty()); - d->zip[i].setActive(false); - sbar->addWidget(d->zip[i].label.get()); - } - } - for (size_t i = 0; i < MO_NUM; i++) { - /* Could be Internal or External IDE.. */ - if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && - !has_ide && hdc_name != QStringLiteral("ide")) - continue; - if ((mo_drives[i].bus_type == MO_BUS_SCSI) && !has_scsi && - (scsi_card_current[0] == 0) && (scsi_card_current[1] == 0) && - (scsi_card_current[2] == 0) && (scsi_card_current[3] == 0)) - continue; - if (mo_drives[i].bus_type != 0) { - d->mo[i].label = std::make_unique(); - d->mo[i].setEmpty(QString(mo_drives[i].image_path).isEmpty()); - d->mo[i].setActive(false); - sbar->addWidget(d->mo[i].label.get()); - } - } - if ((has_mfm || hdc_name == QStringLiteral("st506")) && c_mfm > 0) { d->hdds[HDD_BUS_MFM].label = std::make_unique(); d->hdds[HDD_BUS_MFM].setActive(false); @@ -352,12 +395,12 @@ void MachineStatus::refresh(QStatusBar* sbar) { d->hdds[HDD_BUS_XTA].setActive(false); sbar->addWidget(d->hdds[HDD_BUS_XTA].label.get()); } - if ((has_ide || hdc_name == QStringLiteral("xtide") || hdc_name == QStringLiteral("ide")) && c_ide > 0) { + if ((hasIDE() || hdc_name == QStringLiteral("xtide") || hdc_name == QStringLiteral("ide")) && c_ide > 0) { d->hdds[HDD_BUS_IDE].label = std::make_unique(); d->hdds[HDD_BUS_IDE].setActive(false); sbar->addWidget(d->hdds[HDD_BUS_IDE].label.get()); } - if ((has_scsi || (scsi_card_current[0] != 0) || (scsi_card_current[1] != 0) || + if ((hasSCSI() || (scsi_card_current[0] != 0) || (scsi_card_current[1] != 0) || (scsi_card_current[2] != 0) || (scsi_card_current[3] != 0)) && c_scsi > 0) { d->hdds[HDD_BUS_SCSI].label = std::make_unique(); d->hdds[HDD_BUS_SCSI].setActive(false); @@ -372,6 +415,8 @@ void MachineStatus::refresh(QStatusBar* sbar) { d->sound = std::make_unique(); d->sound->setPixmap(d->pixmaps.sound); sbar->addWidget(d->sound.get()); + d->text = std::make_unique(); + sbar->addWidget(d->text.get()); } void MachineStatus::setActivity(int tag, bool active) { @@ -440,3 +485,7 @@ void MachineStatus::setEmpty(int tag, bool empty) { } } +void MachineStatus::message(const QString &msg) { + d->text->setText(msg); +} + diff --git a/src/qt/qt_machinestatus.hpp b/src/qt/qt_machinestatus.hpp index 7ca07255c..ea48178ed 100644 --- a/src/qt/qt_machinestatus.hpp +++ b/src/qt/qt_machinestatus.hpp @@ -13,10 +13,19 @@ public: explicit MachineStatus(QObject *parent = nullptr); ~MachineStatus(); + static bool hasCassette(); + static bool hasCartridge(); + static bool hasIDE(); + static bool hasSCSI(); + static void iterateFDD(const std::function& cb); + static void iterateCDROM(const std::function& cb); + static void iterateZIP(const std::function& cb); + static void iterateMO(const std::function& cb); public slots: void refresh(QStatusBar* sbar); void setActivity(int tag, bool active); void setEmpty(int tag, bool active); + void message(const QString& msg); private: struct States; diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 8e5b5a450..f8a80d5fc 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -24,6 +24,7 @@ extern "C" { #include "qt_settings.hpp" #include "qt_gleswidget.hpp" #include "qt_machinestatus.hpp" +#include "qt_mediamenu.hpp" #ifdef __unix__ #include @@ -40,6 +41,8 @@ MainWindow::MainWindow(QWidget *parent) : { Q_INIT_RESOURCE(qt_resources); status = std::make_unique(this); + mm = std::make_shared(this); + MediaMenu::ptr = mm; ui->setupUi(this); video_setblit(qt_blit); @@ -84,12 +87,10 @@ MainWindow::MainWindow(QWidget *parent) : connect(this, &MainWindow::updateStatusBarPanes, this, [this] { status->refresh(ui->statusbar); }); - connect(this, &MainWindow::updateStatusBarActivity, this, [this](int i, bool b) { - status->setActivity(i, b); - }); - connect(this, &MainWindow::updateStatusBarEmpty, this, [this](int i, bool b) { - status->setEmpty(i, b); - }); + connect(this, &MainWindow::updateStatusBarPanes, this, &MainWindow::refreshMediaMenu); + connect(this, &MainWindow::updateStatusBarActivity, status.get(), &MachineStatus::setActivity); + connect(this, &MainWindow::updateStatusBarEmpty, status.get(), &MachineStatus::setEmpty); + connect(this, &MainWindow::statusBarMessage, status.get(), &MachineStatus::message); ui->actionKeyboard_requires_capture->setChecked(kbd_req_capture); ui->actionRight_CTRL_is_left_ALT->setChecked(rctrl_is_lalt); @@ -684,6 +685,10 @@ void MainWindow::getTitle(wchar_t *title) } } +void MainWindow::refreshMediaMenu() { + mm->refresh(ui->menuMedia); +} + void MainWindow::showMessage(const QString& header, const QString& message) { if (QThread::currentThread() == this->thread()) { showMessage_(header, message); diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 3c5055027..816f7f568 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -5,6 +5,10 @@ #include #include +#include + +class MediaMenu; + namespace Ui { class MainWindow; } @@ -27,6 +31,7 @@ signals: void paint(const QImage& image); void resizeContents(int w, int h); void pollMouse(); + void statusBarMessage(const QString& msg); void updateStatusBarPanes(); void updateStatusBarActivity(int tag, bool active); void updateStatusBarEmpty(int tag, bool empty); @@ -48,6 +53,7 @@ private slots: void on_actionRight_CTRL_is_left_ALT_triggered(); void on_actionKeyboard_requires_capture_triggered(); + void refreshMediaMenu(); void showMessage_(const QString& header, const QString& message); void setTitle_(const wchar_t* title); void getTitle_(wchar_t* title); @@ -57,6 +63,7 @@ protected: private: Ui::MainWindow *ui; std::unique_ptr status; + std::shared_ptr mm; }; #endif // QT_MAINWINDOW_HPP diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 9c055ef62..50fc3fa49 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -78,8 +78,14 @@ + + + Media + + + diff --git a/src/qt/qt_mediamenu.cpp b/src/qt/qt_mediamenu.cpp new file mode 100644 index 000000000..6a4406b47 --- /dev/null +++ b/src/qt/qt_mediamenu.cpp @@ -0,0 +1,533 @@ +#include "qt_mediamenu.hpp" + +#include "qt_machinestatus.hpp" + +#include +#include +#include + +extern "C" { +#include <86box/config.h> +#include <86box/device.h> +#include <86box/timer.h> +#include <86box/plat.h> +#include <86box/cassette.h> +#include <86box/cartridge.h> +#include <86box/fdd.h> +#include <86box/fdd_86f.h> +#include <86box/cdrom.h> +#include <86box/scsi_device.h> +#include <86box/zip.h> +#include <86box/mo.h> +#include <86box/sound.h> +#include <86box/ui.h> +}; + +#include "qt_newfloppydialog.hpp" + +std::shared_ptr MediaMenu::ptr; + +MediaMenu::MediaMenu(QWidget* parent) : QObject(parent) { + parentWidget = parent; +} + +void MediaMenu::refresh(QMenu *parentMenu) { + parentMenu->clear(); + + if(MachineStatus::hasCassette()) { + cassetteMenu = parentMenu->addMenu(""); + cassetteMenu->addAction("New Image", [this]() { cassetteNewImage(); }); + cassetteMenu->addSeparator(); + cassetteMenu->addAction("Existing Image", [this]() { cassetteSelectImage(false); }); + cassetteMenu->addAction("Existing Image (Write Protected)", [this]() { cassetteSelectImage(true); }); + cassetteMenu->addSeparator(); + cassetteMenu->addAction("Record")->setCheckable(true); + cassetteMenu->addAction("Play")->setCheckable(true); + cassetteMenu->addAction("Rewing"); + cassetteMenu->addAction("Fast Forward"); + cassetteMenu->addSeparator(); + cassetteMenu->addAction("Eject", [this]() { cassetteEject(); }); + cassetteUpdateMenu(); + } + + cartridgeMenus.clear(); + if (MachineStatus::hasCartridge()) { + for(int i = 0; i < 2; i++) { + auto* menu = parentMenu->addMenu(""); + menu->addAction("Image", [this, i]() { cartridgeSelectImage(i); }); + menu->addSeparator(); + menu->addAction("Eject", [this, i]() { cartridgeEject(i); }); + cartridgeMenus.append(menu); + cartridgeUpdateMenu(i); + } + } + + floppyMenus.clear(); + MachineStatus::iterateFDD([this, parentMenu](int i) { + auto* menu = parentMenu->addMenu(""); + menu->addAction("New Image", [this, i]() { floppyNewImage(i); }); + menu->addSeparator(); + menu->addAction("Existing Image", [this, i]() { floppySelectImage(i, false); }); + menu->addAction("Existing Image (Write Protected)", [this, i]() { floppySelectImage(i, true); }); + menu->addSeparator(); + menu->addAction("Export to 86F", [this, i]() { floppyExportTo86f(i); }); + menu->addSeparator(); + menu->addAction("Eject", [this, i]() { floppyEject(i); }); + floppyMenus.append(menu); + floppyUpdateMenu(i); + }); + + cdromMenus.clear(); + MachineStatus::iterateCDROM([this, parentMenu](int i) { + auto* menu = parentMenu->addMenu(""); + cdromMutePos = menu->children().count(); + menu->addAction("Mute", [this, i]() { cdromMute(i); })->setCheckable(true); + menu->addSeparator(); + cdromEmptyPos = menu->children().count(); + menu->addAction("Empty", [this, i]() { cdromEject(i); })->setCheckable(true); + cdromReloadPos = menu->children().count(); + menu->addAction("Reload previous image", [this, i]() { cdromReload(i); }); + menu->addSeparator(); + cdromImagePos = menu->children().count(); + menu->addAction("Image", [this, i]() { cdromMount(i); })->setCheckable(true); + cdromMenus.append(menu); + cdromUpdateMenu(i); + }); + + zipMenus.clear(); + MachineStatus::iterateZIP([this, parentMenu](int i) { + auto* menu = parentMenu->addMenu(""); + menu->addAction("New Image", [this, i]() { zipNewImage(i); }); + menu->addSeparator(); + menu->addAction("Existing Image", [this, i]() { zipSelectImage(i, false); }); + menu->addAction("Existing Image (Write Protected)", [this, i]() { zipSelectImage(i, true); }); + menu->addSeparator(); + zipEjectPos = menu->children().count(); + menu->addAction("Eject", [this, i]() { zipEject(i); }); + zipReloadPos = menu->children().count(); + menu->addAction("Reload previous image", [this, i]() { zipReload(i); }); + zipMenus.append(menu); + zipUpdateMenu(i); + }); + + moMenus.clear(); + MachineStatus::iterateMO([this, parentMenu](int i) { + auto* menu = parentMenu->addMenu(""); + menu->addAction("New Image", [this, i]() { moNewImage(i); }); + menu->addSeparator(); + menu->addAction("Existing Image", [this, i]() { moSelectImage(i, false); }); + menu->addAction("Existing Image (Write Protected)", [this, i]() { moSelectImage(i, true); }); + menu->addSeparator(); + moEjectPos = menu->children().count(); + menu->addAction("Eject", [this, i]() { moEject(i); }); + moReloadPos = menu->children().count(); + menu->addAction("Reload previous image", [this, i]() { moReload(i); }); + moMenus.append(menu); + moUpdateMenu(i); + }); +} + +void MediaMenu::cassetteNewImage() { + auto filename = QFileDialog::getSaveFileName(parentWidget, "Create..."); + QFileInfo fileinfo(filename); + if (fileinfo.suffix().isEmpty()) { + filename.append(".cas"); + } + cassetteMount(filename, false); +} + +void MediaMenu::cassetteSelectImage(bool wp) { + auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "Cassette images (*.pcm;*.raw;*.wav;*.cas);;All files (*)"); + cassetteMount(filename, wp); +} + +void MediaMenu::cassetteMount(const QString& filename, bool wp) { + pc_cas_set_fname(cassette, nullptr); + memset(cassette_fname, 0, sizeof(cassette_fname)); + cassette_ui_writeprot = wp ? 1 : 0; + + if (! filename.isEmpty()) { + QByteArray filenameBytes = filename.toUtf8(); + strncpy(cassette_fname, filenameBytes.data(), sizeof(cassette_fname)); + pc_cas_set_fname(cassette, cassette_fname); + } + + ui_sb_update_icon_state(SB_CASSETTE, filename.isEmpty() ? 1 : 0); + ui_sb_update_tip(SB_CASSETTE); + cassetteUpdateMenu(); + config_save(); +} + +void MediaMenu::cassetteEject() { + pc_cas_set_fname(cassette, nullptr); + memset(cassette_fname, 0, sizeof(cassette_fname)); + ui_sb_update_icon_state(SB_CASSETTE, 1); + ui_sb_update_tip(SB_CASSETTE); + cassetteUpdateMenu(); + config_save(); +} + +void MediaMenu::cassetteUpdateMenu() { + QString name = cassette_fname; + cassetteMenu->setTitle(QString("Cassette: %1").arg(name.isEmpty() ? "(empty)" : name)); +} + +void MediaMenu::cartridgeSelectImage(int i) { + auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "Cartridge images (*.a;*.b;*.jrc);;All files (*)"); + if (filename.isEmpty()) { + return; + } + cart_close(i); + QByteArray filenameBytes = filename.toUtf8(); + cart_load(i, filenameBytes.data()); + + ui_sb_update_icon_state(SB_CARTRIDGE | i, filename.isEmpty() ? 1 : 0); + ui_sb_update_tip(SB_CARTRIDGE | i); + cartridgeUpdateMenu(i); + config_save(); +} + +void MediaMenu::cartridgeEject(int i) { + cart_close(i); + ui_sb_update_icon_state(SB_CARTRIDGE | i, 1); + ui_sb_update_tip(SB_CARTRIDGE | i); + cartridgeUpdateMenu(i); + config_save(); +} + +void MediaMenu::cartridgeUpdateMenu(int i) { + QString name = cart_fns[i]; + cartridgeMenus[i]->setTitle(QString("Cartridge %1: %2").arg(QString::number(i+1), name.isEmpty() ? "(empty)" : name)); +} + +void MediaMenu::floppyNewImage(int i) { + NewFloppyDialog dialog(NewFloppyDialog::MediaType::Floppy, parentWidget); + switch (dialog.exec()) { + case QDialog::Accepted: + QByteArray filename = dialog.fileName().toUtf8(); + floppyMount(i, filename, false); + break; + } +} + +void MediaMenu::floppySelectImage(int i, bool wp) { + auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "All images (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF);;Advanced sector images (*.IMD;*.JSON;*.TD0);;Basic sector images (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?);;Flux images (*.FDI);;Surface images (*.86F;*.MFM);;All files (*)"); + floppyMount(i, filename, wp); +} + +void MediaMenu::floppyMount(int i, const QString &filename, bool wp) { + fdd_close(i); + ui_writeprot[i] = wp ? 1 : 0; + if (! filename.isEmpty()) { + QByteArray filenameBytes = filename.toUtf8(); + fdd_load(i, filenameBytes.data()); + } + ui_sb_update_icon_state(SB_FLOPPY | i, filename.isEmpty() ? 1 : 0); + ui_sb_update_tip(SB_FLOPPY | i); + floppyUpdateMenu(i); + config_save(); +} + +void MediaMenu::floppyEject(int i) { + fdd_close(i); + ui_sb_update_icon_state(SB_FLOPPY | i, 1); + ui_sb_update_tip(SB_FLOPPY | i); + floppyUpdateMenu(i); + config_save(); +} + +void MediaMenu::floppyExportTo86f(int i) { + auto filename = QFileDialog::getSaveFileName(parentWidget, "Save as 86f", QString(), "Surface images (*.86f)"); + if (! filename.isEmpty()) { + QByteArray filenameBytes = filename.toUtf8(); + plat_pause(1); + if (d86f_export(i, filenameBytes.data()) == 0) { + QMessageBox::critical(parentWidget, "Unable to write file", "Make sure the file is being saved to a writable directory"); + } + plat_pause(0); + } +} + +void MediaMenu::floppyUpdateMenu(int i) { + QString name = floppyfns[i]; + int type = fdd_get_type(i); + floppyMenus[i]->setTitle(QString("Floppy %1 (%2): %3").arg(QString::number(i+1), fdd_getname(type), name.isEmpty() ? "(empty)" : name)); +} + +void MediaMenu::cdromMute(int i) { + cdrom[i].sound_on ^= 1; + config_save(); + cdromUpdateMenu(i); + sound_cd_thread_reset(); +} + +void MediaMenu::cdromMount(int i) { + QString dir; + QFileInfo fi(cdrom[i].image_path); + + auto filename = QFileDialog::getOpenFileName(parentWidget, "CD-ROM images (*.ISO;*.CUE)\0*.ISO;*.CUE\0All files (*.*)\0*.*\0", fi.canonicalPath()); + if (filename.isEmpty()) { + auto* imageMenu = dynamic_cast(cdromMenus[i]->children()[cdromImagePos]); + imageMenu->setChecked(false); + return; + } + QByteArray fn = filename.toUtf8().data(); + + cdrom[i].prev_host_drive = cdrom[i].host_drive; + strcpy(cdrom[i].prev_image_path, cdrom[i].image_path); + if (cdrom[i].ops && cdrom[i].ops->exit) + cdrom[i].ops->exit(&(cdrom[i])); + + cdrom[i].ops = nullptr; + memset(cdrom[i].image_path, 0, sizeof(cdrom[i].image_path)); + cdrom_image_open(&(cdrom[i]), fn.data()); + /* Signal media change to the emulated machine. */ + if (cdrom[i].insert) + cdrom[i].insert(cdrom[i].priv); + cdrom[i].host_drive = (strlen(cdrom[i].image_path) == 0) ? 0 : 200; + if (cdrom[i].host_drive == 200) { + ui_sb_update_icon_state(SB_CDROM | i, 0); + } else { + ui_sb_update_icon_state(SB_CDROM | i, 1); + } + ui_sb_update_tip(SB_CDROM | i); + cdromUpdateMenu(i); + config_save(); +} + +void MediaMenu::cdromEject(int i) { + cdrom_eject(i); + cdromUpdateMenu(i); +} + +void MediaMenu::cdromReload(int i) { + cdrom_reload(i); + cdromUpdateMenu(i); +} + +void MediaMenu::cdromUpdateMenu(int i) { + QString name = cdrom[i].image_path; + auto* menu = cdromMenus[i]; + auto childs = menu->children(); + + auto* muteMenu = dynamic_cast(childs[cdromMutePos]); + muteMenu->setChecked(cdrom[i].sound_on == 0); + + auto* imageMenu = dynamic_cast(childs[cdromImagePos]); + auto* emptyMenu = dynamic_cast(childs[cdromEmptyPos]); + imageMenu->setChecked(cdrom[i].host_drive == 200); + emptyMenu->setChecked(cdrom[i].host_drive != 200); + + auto* prevMenu = dynamic_cast(childs[cdromReloadPos]); + prevMenu->setEnabled(cdrom[i].prev_host_drive != 0); + + QString busName = "Unknown Bus"; + switch (cdrom[i].bus_type) { + case CDROM_BUS_ATAPI: + busName = "ATAPI"; + break; + case CDROM_BUS_SCSI: + busName = "SCSI"; + break; + } + + menu->setTitle(QString("CD-ROM %1 (%2): %3").arg(QString::number(i+1), busName, name.isEmpty() ? "(empty)" : name)); +} + +void MediaMenu::zipNewImage(int i) { + NewFloppyDialog dialog(NewFloppyDialog::MediaType::Zip, parentWidget); + switch (dialog.exec()) { + case QDialog::Accepted: + QByteArray filename = dialog.fileName().toUtf8(); + zipMount(i, filename, false); + break; + } +} + +void MediaMenu::zipSelectImage(int i, bool wp) { + auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "ZIP images (*.im?;*.zdi);;All files (*)"); + zipMount(i, filename, wp); +} + +void MediaMenu::zipMount(int i, const QString &filename, bool wp) { + zip_t *dev = (zip_t *) zip_drives[i].priv; + + zip_disk_close(dev); + zip_drives[i].read_only = wp; + if (! filename.isEmpty()) { + QByteArray filenameBytes = filename.toUtf8(); + zip_load(dev, filenameBytes.data()); + zip_insert(dev); + } + + ui_sb_update_icon_state(SB_ZIP | i, filename.isEmpty() ? 1 : 0); + ui_sb_update_tip(SB_ZIP | i); + zipUpdateMenu(i); + + config_save(); +} + +void MediaMenu::zipEject(int i) { + zip_t *dev = (zip_t *) zip_drives[i].priv; + + zip_disk_close(dev); + if (zip_drives[i].bus_type) { + /* Signal disk change to the emulated machine. */ + zip_insert(dev); + } + + ui_sb_update_icon_state(SB_ZIP | i, 1); + ui_sb_update_tip(SB_ZIP | i); + zipUpdateMenu(i); + config_save(); +} + +void MediaMenu::zipReload(int i) { + zip_t *dev = (zip_t *) zip_drives[i].priv; + + zip_disk_reload(dev); + if (strlen(zip_drives[i].image_path) == 0) { + ui_sb_update_icon_state(SB_ZIP|i, 1); + } else { + ui_sb_update_icon_state(SB_ZIP|i, 0); + } + + ui_sb_update_tip(SB_ZIP|i); + zipUpdateMenu(i); + + config_save(); +} + +void MediaMenu::zipUpdateMenu(int i) { + QString name = zip_drives[i].image_path; + QString prev_name = zip_drives[i].prev_image_path; + auto* menu = zipMenus[i]; + auto childs = menu->children(); + + auto* ejectMenu = dynamic_cast(childs[zipEjectPos]); + auto* reloadMenu = dynamic_cast(childs[zipReloadPos]); + ejectMenu->setEnabled(!name.isEmpty()); + reloadMenu->setEnabled(!prev_name.isEmpty()); + + QString busName = "Unknown Bus"; + switch (zip_drives[i].bus_type) { + case ZIP_BUS_ATAPI: + busName = "ATAPI"; + break; + case ZIP_BUS_SCSI: + busName = "SCSI"; + break; + } + + menu->setTitle(QString("ZIP %1 %2 (%3): %4").arg((zip_drives[i].is_250 > 0) ? "250" : "100", QString::number(i+1), busName, name.isEmpty() ? "(empty)" : name)); +} + +void MediaMenu::moNewImage(int i) { + NewFloppyDialog dialog(NewFloppyDialog::MediaType::Mo, parentWidget); + switch (dialog.exec()) { + case QDialog::Accepted: + QByteArray filename = dialog.fileName().toUtf8(); + moMount(i, filename, false); + break; + } +} + +void MediaMenu::moSelectImage(int i, bool wp) { + auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "MO images (*.im?;*.mdi);;All files (*)"); + moMount(i, filename, wp); +} + +void MediaMenu::moMount(int i, const QString &filename, bool wp) { + mo_t *dev = (mo_t *) mo_drives[i].priv; + + mo_disk_close(dev); + mo_drives[i].read_only = wp; + if (! filename.isEmpty()) { + QByteArray filenameBytes = filename.toUtf8(); + mo_load(dev, filenameBytes.data()); + mo_insert(dev); + } + + ui_sb_update_icon_state(SB_MO | i, filename.isEmpty() ? 1 : 0); + ui_sb_update_tip(SB_MO | i); + moUpdateMenu(i); + + config_save(); +} + +void MediaMenu::moEject(int i) { + mo_t *dev = (mo_t *) mo_drives[i].priv; + + mo_disk_close(dev); + if (mo_drives[i].bus_type) { + /* Signal disk change to the emulated machine. */ + mo_insert(dev); + } + + ui_sb_update_icon_state(SB_MO | i, 1); + ui_sb_update_tip(SB_MO | i); + moUpdateMenu(i); + config_save(); +} + +void MediaMenu::moReload(int i) { + mo_t *dev = (mo_t *) mo_drives[i].priv; + + mo_disk_reload(dev); + if (strlen(mo_drives[i].image_path) == 0) { + ui_sb_update_icon_state(SB_MO|i, 1); + } else { + ui_sb_update_icon_state(SB_MO|i, 0); + } + + ui_sb_update_tip(SB_MO|i); + moUpdateMenu(i); + + config_save(); +} + +void MediaMenu::moUpdateMenu(int i) { + QString name = mo_drives[i].image_path; + QString prev_name = mo_drives[i].prev_image_path; + auto* menu = moMenus[i]; + auto childs = menu->children(); + + auto* ejectMenu = dynamic_cast(childs[moEjectPos]); + auto* reloadMenu = dynamic_cast(childs[moReloadPos]); + ejectMenu->setEnabled(!name.isEmpty()); + reloadMenu->setEnabled(!prev_name.isEmpty()); + + QString busName = "Unknown Bus"; + switch (mo_drives[i].bus_type) { + case MO_BUS_ATAPI: + busName = "ATAPI"; + break; + case MO_BUS_SCSI: + busName = "SCSI"; + break; + } + + menu->setTitle(QString("MO %1 (%2): %3").arg(QString::number(i+1), busName, name.isEmpty() ? "(empty)" : name)); +} + + +// callbacks from 86box C code +extern "C" { + +void zip_eject(uint8_t id) { + MediaMenu::ptr->zipEject(id); +} + +void zip_reload(uint8_t id) { + MediaMenu::ptr->zipReload(id); +} + +void mo_eject(uint8_t id) { + MediaMenu::ptr->moEject(id); +} + +void mo_reload(uint8_t id) { + MediaMenu::ptr->moReload(id); +} + +} diff --git a/src/qt/qt_mediamenu.hpp b/src/qt/qt_mediamenu.hpp new file mode 100644 index 000000000..7a21f288c --- /dev/null +++ b/src/qt/qt_mediamenu.hpp @@ -0,0 +1,76 @@ +#pragma once + +#include +#include + +class QMenu; + +class MediaMenu : QObject +{ + Q_OBJECT +public: + MediaMenu(QWidget* parent); + + void refresh(QMenu* parentMenu); + + // because some 86box C-only code needs to call zip and + // mo eject directly + static std::shared_ptr ptr; + + void cassetteNewImage(); + void cassetteSelectImage(bool wp); + void cassetteMount(const QString& filename, bool wp); + void cassetteEject(); + void cassetteUpdateMenu(); + + void cartridgeSelectImage(int i); + void cartridgeEject(int i); + void cartridgeUpdateMenu(int i); + + void floppyNewImage(int i); + void floppySelectImage(int i, bool wp); + void floppyMount(int i, const QString& filename, bool wp); + void floppyEject(int i); + void floppyExportTo86f(int i); + void floppyUpdateMenu(int i); + + void cdromMute(int i); + void cdromMount(int i); + void cdromEject(int i); + void cdromReload(int i); + void cdromUpdateMenu(int i); + + void zipNewImage(int i); + void zipSelectImage(int i, bool wp); + void zipMount(int i, const QString& filename, bool wp); + void zipEject(int i); + void zipReload(int i); + void zipUpdateMenu(int i); + + void moNewImage(int i); + void moSelectImage(int i, bool wp); + void moMount(int i, const QString& filename, bool wp); + void moEject(int i); + void moReload(int i); + void moUpdateMenu(int i); +private: + QWidget* parentWidget = nullptr; + + QMenu* cassetteMenu = nullptr; + QList cartridgeMenus; + QList floppyMenus; + QList cdromMenus; + QList zipMenus; + QList moMenus; + + int cdromMutePos; + int cdromEmptyPos; + int cdromReloadPos; + int cdromImagePos; + + int zipEjectPos; + int zipReloadPos; + + int moEjectPos; + int moReloadPos; +}; diff --git a/src/qt/qt_newfloppydialog.cpp b/src/qt/qt_newfloppydialog.cpp new file mode 100644 index 000000000..2ffd95950 --- /dev/null +++ b/src/qt/qt_newfloppydialog.cpp @@ -0,0 +1,648 @@ +#include "qt_newfloppydialog.hpp" +#include "ui_qt_newfloppydialog.h" + +#include "qt_models_common.hpp" + +extern "C" { +#include <86box/random.h> +#include <86box/scsi_device.h> +#include <86box/zip.h> +#include <86box/mo.h> +} + +#include +#include +#include +#include +#include + +struct disk_size_t { + int hole; + int sides; + int data_rate; + int encoding; + int rpm; + int tracks; + int sectors; /* For IMG and Japanese FDI only. */ + int sector_len; /* For IMG and Japanese FDI only. */ + int media_desc; + int spc; + int num_fats; + int spfat; + int root_dir_entries; +}; + +static const disk_size_t disk_sizes[14] = { { 0, 1, 2, 1, 0, 40, 8, 2, 0xfe, 2, 2, 1, 64 }, /* 160k */ + { 0, 1, 2, 1, 0, 40, 9, 2, 0xfc, 2, 2, 1, 64 }, /* 180k */ + { 0, 2, 2, 1, 0, 40, 8, 2, 0xff, 2, 2, 1, 112 }, /* 320k */ + { 0, 2, 2, 1, 0, 40, 9, 2, 0xfd, 2, 2, 2, 112 }, /* 360k */ + { 0, 2, 2, 1, 0, 80, 8, 2, 0xfb, 2, 2, 2, 112 }, /* 640k */ + { 0, 2, 2, 1, 0, 80, 9, 2, 0xf9, 2, 2, 3, 112 }, /* 720k */ + { 1, 2, 0, 1, 1, 80, 15, 2, 0xf9, 1, 2, 7, 224 }, /* 1.2M */ + { 1, 2, 0, 1, 1, 77, 8, 3, 0xfe, 1, 2, 2, 192 }, /* 1.25M */ + { 1, 2, 0, 1, 0, 80, 18, 2, 0xf0, 1, 2, 9, 224 }, /* 1.44M */ + { 1, 2, 0, 1, 0, 80, 21, 2, 0xf0, 2, 2, 5, 16 }, /* DMF cluster 1024 */ + { 1, 2, 0, 1, 0, 80, 21, 2, 0xf0, 4, 2, 3, 16 }, /* DMF cluster 2048 */ + { 2, 2, 3, 1, 0, 80, 36, 2, 0xf0, 2, 2, 9, 240 }, /* 2.88M */ + { 0, 64, 0, 0, 0, 96, 32, 2, 0, 0, 0, 0, 0 }, /* ZIP 100 */ + { 0, 64, 0, 0, 0, 239, 32, 2, 0, 0, 0, 0, 0 } }; /* ZIP 250 */ + +static const QStringList rpmModes = { + "Perfect RPM", + "1%% below perfect RPM", + "1.5%% below perfect RPM", + "2%% below perfect RPM", +}; + +static const QStringList floppyTypes = { + "160 kB", + "180 kB", + "320 kB", + "360 kB", + "640 kB", + "720 kB", + "1.2 MB", + "1.25 MB", + "1.44 MB", + "DMF (cluster 1024)", + "DMF (cluster 2048)", + "2.88 MB", +}; + +static const QStringList zipTypes = { + "ZIP 100", + "ZIP 250", +}; + +static const QStringList moTypes = { + "3.5\" 128Mb M.O. (ISO 10090)", + "3.5\" 230Mb M.O. (ISO 13963)", + "3.5\" 540Mb M.O. (ISO 15498)", + "3.5\" 640Mb M.O. (ISO 15498)", + "3.5\" 1.3Gb M.O. (GigaMO)", + "3.5\" 2.3Gb M.O. (GigaMO 2)", + "5.25\" 600Mb M.O.", + "5.25\" 650Mb M.O.", + "5.25\" 1Gb M.O.", + "5.25\" 1.3Gb M.O.", +}; + +NewFloppyDialog::NewFloppyDialog(MediaType type, QWidget *parent) : + QDialog(parent), + ui(new Ui::NewFloppyDialog), + mediaType_(type) +{ + ui->setupUi(this); + ui->fileField->setCreateFile(true); + + auto* model = ui->comboBoxSize->model(); + switch (type) { + case MediaType::Floppy: + for (int i = 0; i < floppyTypes.size(); ++i) { + Models::AddEntry(model, floppyTypes[i], i); + } + break; + case MediaType::Zip: + for (int i = 0; i < zipTypes.size(); ++i) { + Models::AddEntry(model, zipTypes[i], i); + } + break; + case MediaType::Mo: + for (int i = 0; i < moTypes.size(); ++i) { + Models::AddEntry(model, moTypes[i], i); + } + break; + } + + model = ui->comboBoxRpm->model(); + for (int i = 0; i < rpmModes.size(); ++i) { + Models::AddEntry(model, rpmModes[i], i); + } + + connect(ui->fileField, &FileField::fileSelected, this, [this](const QString& filename) { + bool hide = true; + if (mediaType_ == MediaType::Floppy) { + if (QFileInfo(filename).suffix().toLower() == QStringLiteral("86f")) { + hide = false; + } + } + + ui->labelRpm->setHidden(hide); + ui->comboBoxRpm->setHidden(hide); + }); + connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &NewFloppyDialog::onCreate); + + ui->labelRpm->setHidden(true); + ui->comboBoxRpm->setHidden(true); +} + +NewFloppyDialog::~NewFloppyDialog() { + delete ui; +} + +QString NewFloppyDialog::fileName() const{ + return ui->fileField->fileName(); +} + +void NewFloppyDialog::onCreate() { + auto filename = ui->fileField->fileName(); + QFileInfo fi(filename); + FileType fileType; + + QProgressDialog progress("Creating floppy image", QString(), 0, 100, this); + connect(this, &NewFloppyDialog::fileProgress, &progress, &QProgressDialog::setValue); + switch (mediaType_) { + case MediaType::Floppy: + if (fi.suffix().toLower() == QStringLiteral("86f")) { + if (create86f(filename, disk_sizes[ui->comboBoxSize->currentIndex()], ui->comboBoxRpm->currentIndex())) { + return; + } + } else { + fileType = fi.suffix().toLower() == QStringLiteral("zdi") ? FileType::Fdi : FileType::Img; + if (createSectorImage(filename, disk_sizes[ui->comboBoxSize->currentIndex()], fileType)) { + return; + } + } + break; + case MediaType::Zip: + { + fileType = fi.suffix().toLower() == QStringLiteral("zdi") ? FileType::Zdi: FileType::Img; + + std::atomic_bool res; + std::thread t([this, &res, filename, fileType, &progress] { + res = createZipSectorImage(filename, disk_sizes[ui->comboBoxSize->currentIndex() + 12], fileType, progress); + }); + progress.exec(); + t.join(); + + if (res) { + return; + } + } + break; + case MediaType::Mo: + { + fileType = fi.suffix().toLower() == QStringLiteral("mdi") ? FileType::Mdi: FileType::Img; + + std::atomic_bool res; + std::thread t([this, &res, filename, fileType, &progress] { + res = createMoSectorImage(filename, ui->comboBoxSize->currentIndex(), fileType, progress); + }); + progress.exec(); + t.join(); + + if (res) { + return; + } + } + break; + } + + QMessageBox::critical(this, "Unable to write file", "Make sure the file is being saved to a writable directory"); + reject(); +} + +bool NewFloppyDialog::create86f(const QString& filename, const disk_size_t& disk_size, uint8_t rpm_mode) +{ + uint32_t magic = 0x46423638; + uint16_t version = 0x020C; + uint16_t dflags = 0; + uint16_t tflags = 0; + uint32_t index_hole_pos = 0; + uint32_t tarray[512]; + uint32_t array_size; + uint32_t track_base, track_size; + int i; + uint32_t shift = 0; + + dflags = 0; /* Has surface data? - Assume no for now. */ + dflags |= (disk_size.hole << 1); /* Hole */ + dflags |= ((disk_size.sides - 1) << 3); /* Sides. */ + dflags |= (0 << 4); /* Write protect? - Assume no for now. */ + dflags |= (rpm_mode << 5); /* RPM mode. */ + dflags |= (0 << 7); /* Has extra bit cells? - Assume no for now. */ + + tflags = disk_size.data_rate; /* Data rate. */ + tflags |= (disk_size.encoding << 3); /* Encoding. */ + tflags |= (disk_size.rpm << 5); /* RPM. */ + + switch (disk_size.hole) { + case 0: + case 1: + default: + switch(rpm_mode) { + case 1: + array_size = 25250; + break; + case 2: + array_size = 25374; + break; + case 3: + array_size = 25750; + break; + default: + array_size = 25000; + break; + } + break; + case 2: + switch(rpm_mode) { + case 1: + array_size = 50500; + break; + case 2: + array_size = 50750; + break; + case 3: + array_size = 51000; + break; + default: + array_size = 50000; + break; + } + break; + } + + QByteArray bytes(array_size, 0); + memset(tarray, 0, 2048); + + QFile file(filename); + if (! file.open(QIODevice::WriteOnly)) { + return false; + } + QDataStream stream(&file); + + stream << magic; + stream << version; + stream << dflags; + + track_size = array_size + 6; + track_base = 8 + ((disk_size.sides == 2) ? 2048 : 1024); + + if (disk_size.tracks <= 43) + shift = 1; + + for (i = 0; i < (disk_size.tracks * disk_size.sides) << shift; i++) + tarray[i] = track_base + (i * track_size); + + stream.writeRawData(reinterpret_cast(tarray), (disk_size.sides == 2) ? 2048 : 1024); + + int max = i < (disk_size.tracks * disk_size.sides) << shift; + for (i = 0; i < max; i++) { + stream << tflags; + stream << index_hole_pos; + stream.writeRawData(bytes, bytes.size()); + } + + return true; +} + +bool NewFloppyDialog::createSectorImage(const QString &filename, const disk_size_t& disk_size, FileType type) +{ + uint32_t total_size = 0; + uint32_t total_sectors = 0; + uint32_t sector_bytes = 0; + uint32_t root_dir_bytes = 0; + uint32_t fat_size = 0; + uint32_t fat1_offs = 0; + uint32_t fat2_offs = 0; + uint32_t zero_bytes = 0; + uint16_t base = 0x1000; + + QFile file(filename); + if (! file.open(QIODevice::WriteOnly)) { + return false; + } + QDataStream stream(&file); + + sector_bytes = (128 << disk_size.sector_len); + total_sectors = disk_size.sides * disk_size.tracks * disk_size.sectors; + if (total_sectors > ZIP_SECTORS) + total_sectors = ZIP_250_SECTORS; + total_size = total_sectors * sector_bytes; + root_dir_bytes = (disk_size.root_dir_entries << 5); + fat_size = (disk_size.spfat * sector_bytes); + fat1_offs = sector_bytes; + fat2_offs = fat1_offs + fat_size; + zero_bytes = fat2_offs + fat_size + root_dir_bytes; + + if (type == FileType::Fdi) { + QByteArray bytes(base, 0); + auto empty = bytes.data(); + *(uint32_t *) &(empty[0x08]) = (uint32_t) base; + *(uint32_t *) &(empty[0x0C]) = total_size; + *(uint16_t *) &(empty[0x10]) = (uint16_t) sector_bytes; + *(uint8_t *) &(empty[0x14]) = (uint8_t) disk_size.sectors; + *(uint8_t *) &(empty[0x18]) = (uint8_t) disk_size.sides; + *(uint8_t *) &(empty[0x1C]) = (uint8_t) disk_size.tracks; + stream.writeRawData(empty, base); + } + + QByteArray bytes(total_size, 0); + auto empty = bytes.data(); + + memset(empty + zero_bytes, 0xF6, total_size - zero_bytes); + + empty[0x00] = 0xEB; /* Jump to make MS-DOS happy. */ + empty[0x01] = 0x58; + empty[0x02] = 0x90; + + empty[0x03] = 0x38; /* '86BOX5.0' OEM ID. */ + empty[0x04] = 0x36; + empty[0x05] = 0x42; + empty[0x06] = 0x4F; + empty[0x07] = 0x58; + empty[0x08] = 0x35; + empty[0x09] = 0x2E; + empty[0x0A] = 0x30; + + *(uint16_t *) &(empty[0x0B]) = (uint16_t) sector_bytes; + *(uint8_t *) &(empty[0x0D]) = (uint8_t) disk_size.spc; + *(uint16_t *) &(empty[0x0E]) = (uint16_t) 1; + *(uint8_t *) &(empty[0x10]) = (uint8_t) disk_size.num_fats; + *(uint16_t *) &(empty[0x11]) = (uint16_t) disk_size.root_dir_entries; + *(uint16_t *) &(empty[0x13]) = (uint16_t) total_sectors; + *(uint8_t *) &(empty[0x15]) = (uint8_t) disk_size.media_desc; + *(uint16_t *) &(empty[0x16]) = (uint16_t) disk_size.spfat; + *(uint8_t *) &(empty[0x18]) = (uint8_t) disk_size.sectors; + *(uint8_t *) &(empty[0x1A]) = (uint8_t) disk_size.sides; + + empty[0x26] = 0x29; /* ')' followed by randomly-generated volume serial number. */ + empty[0x27] = random_generate(); + empty[0x28] = random_generate(); + empty[0x29] = random_generate(); + empty[0x2A] = random_generate(); + + memset(&(empty[0x2B]), 0x20, 11); + + empty[0x36] = 'F'; + empty[0x37] = 'A'; + empty[0x38] = 'T'; + empty[0x39] = '1'; + empty[0x3A] = '2'; + memset(&(empty[0x3B]), 0x20, 0x0003); + + empty[0x1FE] = 0x55; + empty[0x1FF] = 0xAA; + + empty[fat1_offs + 0x00] = empty[fat2_offs + 0x00] = empty[0x15]; + empty[fat1_offs + 0x01] = empty[fat2_offs + 0x01] = 0xFF; + empty[fat1_offs + 0x02] = empty[fat2_offs + 0x02] = 0xFF; + + stream.writeRawData(empty, total_size); + return true; +} + +bool NewFloppyDialog::createZipSectorImage(const QString &filename, const disk_size_t& disk_size, FileType type, QProgressDialog& pbar) +{ + uint32_t total_size = 0; + uint32_t total_sectors = 0; + uint32_t sector_bytes = 0; + uint32_t root_dir_bytes = 0; + uint32_t fat_size = 0; + uint32_t fat1_offs = 0; + uint32_t fat2_offs = 0; + uint32_t zero_bytes = 0; + uint16_t base = 0x1000; + uint32_t pbar_max = 0; + + QFile file(filename); + if (! file.open(QIODevice::WriteOnly)) { + return false; + } + QDataStream stream(&file); + + sector_bytes = (128 << disk_size.sector_len); + total_sectors = disk_size.sides * disk_size.tracks * disk_size.sectors; + if (total_sectors > ZIP_SECTORS) + total_sectors = ZIP_250_SECTORS; + total_size = total_sectors * sector_bytes; + root_dir_bytes = (disk_size.root_dir_entries << 5); + fat_size = (disk_size.spfat * sector_bytes); + fat1_offs = sector_bytes; + fat2_offs = fat1_offs + fat_size; + zero_bytes = fat2_offs + fat_size + root_dir_bytes; + + pbar_max = total_size; + if (type == FileType::Zdi) { + pbar_max += base; + } + pbar_max >>= 11; + + if (type == FileType::Zdi) { + QByteArray data(base, 0); + auto empty = data.data(); + + *(uint32_t *) &(empty[0x08]) = (uint32_t) base; + *(uint32_t *) &(empty[0x0C]) = total_size; + *(uint16_t *) &(empty[0x10]) = (uint16_t) sector_bytes; + *(uint8_t *) &(empty[0x14]) = (uint8_t) disk_size.sectors; + *(uint8_t *) &(empty[0x18]) = (uint8_t) disk_size.sides; + *(uint8_t *) &(empty[0x1C]) = (uint8_t) disk_size.tracks; + + stream.writeRawData(empty, base); + pbar_max -= 2; + } + + QByteArray bytes(total_size, 0); + auto empty = bytes.data(); + + if (total_sectors == ZIP_SECTORS) { + /* ZIP 100 */ + /* MBR */ + *(uint64_t *) &(empty[0x0000]) = 0x2054524150492EEBLL; + *(uint64_t *) &(empty[0x0008]) = 0x3930302065646F63LL; + *(uint64_t *) &(empty[0x0010]) = 0x67656D6F49202D20LL; + *(uint64_t *) &(empty[0x0018]) = 0x726F70726F432061LL; + *(uint64_t *) &(empty[0x0020]) = 0x202D206E6F697461LL; + *(uint64_t *) &(empty[0x0028]) = 0x30392F33322F3131LL; + + *(uint64_t *) &(empty[0x01AE]) = 0x0116010100E90644LL; + *(uint64_t *) &(empty[0x01B6]) = 0xED08BBE5014E0135LL; + *(uint64_t *) &(empty[0x01BE]) = 0xFFFFFE06FFFFFE80LL; + *(uint64_t *) &(empty[0x01C6]) = 0x0002FFE000000020LL; + + *(uint16_t *) &(empty[0x01FE]) = 0xAA55; + + /* 31 sectors filled with 0x48 */ + memset(&(empty[0x0200]), 0x48, 0x3E00); + + /* Boot sector */ + *(uint64_t *) &(empty[0x4000]) = 0x584F4236389058EBLL; + *(uint64_t *) &(empty[0x4008]) = 0x0008040200302E35LL; + *(uint64_t *) &(empty[0x4010]) = 0x00C0F80000020002LL; + *(uint64_t *) &(empty[0x4018]) = 0x0000002000FF003FLL; + *(uint32_t *) &(empty[0x4020]) = 0x0002FFE0; + *(uint16_t *) &(empty[0x4024]) = 0x0080; + + empty[0x4026] = 0x29; /* ')' followed by randomly-generated volume serial number. */ + empty[0x4027] = random_generate(); + empty[0x4028] = random_generate(); + empty[0x4029] = random_generate(); + empty[0x402A] = random_generate(); + + memset(&(empty[0x402B]), 0x00, 0x000B); + memset(&(empty[0x4036]), 0x20, 0x0008); + + empty[0x4036] = 'F'; + empty[0x4037] = 'A'; + empty[0x4038] = 'T'; + empty[0x4039] = '1'; + empty[0x403A] = '6'; + memset(&(empty[0x403B]), 0x20, 0x0003); + + empty[0x41FE] = 0x55; + empty[0x41FF] = 0xAA; + + empty[0x5000] = empty[0x1D000] = empty[0x4015]; + empty[0x5001] = empty[0x1D001] = 0xFF; + empty[0x5002] = empty[0x1D002] = 0xFF; + empty[0x5003] = empty[0x1D003] = 0xFF; + + /* Root directory = 0x35000 + Data = 0x39000 */ + } else { + /* ZIP 250 */ + /* MBR */ + *(uint64_t *) &(empty[0x0000]) = 0x2054524150492EEBLL; + *(uint64_t *) &(empty[0x0008]) = 0x3930302065646F63LL; + *(uint64_t *) &(empty[0x0010]) = 0x67656D6F49202D20LL; + *(uint64_t *) &(empty[0x0018]) = 0x726F70726F432061LL; + *(uint64_t *) &(empty[0x0020]) = 0x202D206E6F697461LL; + *(uint64_t *) &(empty[0x0028]) = 0x30392F33322F3131LL; + + *(uint64_t *) &(empty[0x01AE]) = 0x0116010100E900E9LL; + *(uint64_t *) &(empty[0x01B6]) = 0x2E32A7AC014E0135LL; + + *(uint64_t *) &(empty[0x01EE]) = 0xEE203F0600010180LL; + *(uint64_t *) &(empty[0x01F6]) = 0x000777E000000020LL; + *(uint16_t *) &(empty[0x01FE]) = 0xAA55; + + /* 31 sectors filled with 0x48 */ + memset(&(empty[0x0200]), 0x48, 0x3E00); + + /* The second sector begins with some strange data + in my reference image. */ + *(uint64_t *) &(empty[0x0200]) = 0x3831393230334409LL; + *(uint64_t *) &(empty[0x0208]) = 0x6A57766964483130LL; + *(uint64_t *) &(empty[0x0210]) = 0x3C3A34676063653FLL; + *(uint64_t *) &(empty[0x0218]) = 0x586A56A8502C4161LL; + *(uint64_t *) &(empty[0x0220]) = 0x6F2D702535673D6CLL; + *(uint64_t *) &(empty[0x0228]) = 0x255421B8602D3456LL; + *(uint64_t *) &(empty[0x0230]) = 0x577B22447B52603ELL; + *(uint64_t *) &(empty[0x0238]) = 0x46412CC871396170LL; + *(uint64_t *) &(empty[0x0240]) = 0x704F55237C5E2626LL; + *(uint64_t *) &(empty[0x0248]) = 0x6C7932C87D5C3C20LL; + *(uint64_t *) &(empty[0x0250]) = 0x2C50503E47543D6ELL; + *(uint64_t *) &(empty[0x0258]) = 0x46394E807721536ALL; + *(uint64_t *) &(empty[0x0260]) = 0x505823223F245325LL; + *(uint64_t *) &(empty[0x0268]) = 0x365C79B0393B5B6ELL; + + /* Boot sector */ + *(uint64_t *) &(empty[0x4000]) = 0x584F4236389058EBLL; + *(uint64_t *) &(empty[0x4008]) = 0x0001080200302E35LL; + *(uint64_t *) &(empty[0x4010]) = 0x00EFF80000020002LL; + *(uint64_t *) &(empty[0x4018]) = 0x0000002000400020LL; + *(uint32_t *) &(empty[0x4020]) = 0x000777E0; + *(uint16_t *) &(empty[0x4024]) = 0x0080; + + empty[0x4026] = 0x29; /* ')' followed by randomly-generated volume serial number. */ + empty[0x4027] = random_generate(); + empty[0x4028] = random_generate(); + empty[0x4029] = random_generate(); + empty[0x402A] = random_generate(); + + memset(&(empty[0x402B]), 0x00, 0x000B); + memset(&(empty[0x4036]), 0x20, 0x0008); + + empty[0x4036] = 'F'; + empty[0x4037] = 'A'; + empty[0x4038] = 'T'; + empty[0x4039] = '1'; + empty[0x403A] = '6'; + memset(&(empty[0x403B]), 0x20, 0x0003); + + empty[0x41FE] = 0x55; + empty[0x41FF] = 0xAA; + + empty[0x4200] = empty[0x22000] = empty[0x4015]; + empty[0x4201] = empty[0x22001] = 0xFF; + empty[0x4202] = empty[0x22002] = 0xFF; + empty[0x4203] = empty[0x22003] = 0xFF; + + /* Root directory = 0x3FE00 + Data = 0x38200 */ + } + + pbar.setMaximum(pbar_max); + for (uint32_t i = 0; i < pbar_max; i++) { + stream.writeRawData(&empty[i << 11], 2048); + fileProgress(i); + } + fileProgress(pbar_max); + + return true; +} + + +bool NewFloppyDialog::createMoSectorImage(const QString& filename, int8_t disk_size, FileType type, QProgressDialog& pbar) +{ + const mo_type_t *dp = &mo_types[disk_size]; + uint32_t total_size = 0, total_size2; + uint32_t total_sectors = 0; + uint32_t sector_bytes = 0; + uint16_t base = 0x1000; + uint32_t pbar_max = 0, blocks_num; + + QFile file(filename); + if (! file.open(QIODevice::WriteOnly)) { + return false; + } + QDataStream stream(&file); + + sector_bytes = dp->bytes_per_sector; + total_sectors = dp->sectors; + total_size = total_sectors * sector_bytes; + + total_size2 = (total_size >> 20) << 20; + total_size2 = total_size - total_size2; + + pbar_max = total_size; + pbar_max >>= 20; + blocks_num = pbar_max; + if (type == FileType::Mdi) + pbar_max++; + if (total_size2 == 0) + pbar_max++; + + if (type == FileType::Mdi) { + QByteArray bytes(base, 0); + auto empty = bytes.data(); + + *(uint32_t *) &(empty[0x08]) = (uint32_t) base; + *(uint32_t *) &(empty[0x0C]) = total_size; + *(uint16_t *) &(empty[0x10]) = (uint16_t) sector_bytes; + *(uint8_t *) &(empty[0x14]) = (uint8_t) 25; + *(uint8_t *) &(empty[0x18]) = (uint8_t) 64; + *(uint8_t *) &(empty[0x1C]) = (uint8_t) (dp->sectors / 64) / 25; + + stream.writeRawData(empty, base); + } + + QByteArray bytes(1048576, 0); + auto empty = bytes.data(); + + pbar.setMaximum(blocks_num); + for (uint32_t i = 0; i < blocks_num; i++) { + stream.writeRawData(empty, bytes.size()); + fileProgress(i); + } + + if (total_size2 > 0) { + QByteArray extra_bytes(total_size2, 0); + stream.writeRawData(extra_bytes.data(), total_size2); + } + fileProgress(blocks_num); + + return true; +} diff --git a/src/qt/qt_newfloppydialog.hpp b/src/qt/qt_newfloppydialog.hpp new file mode 100644 index 000000000..12e761cdf --- /dev/null +++ b/src/qt/qt_newfloppydialog.hpp @@ -0,0 +1,50 @@ +#ifndef QT_NEWFLOPPYDIALOG_HPP +#define QT_NEWFLOPPYDIALOG_HPP + +#include + +namespace Ui { +class NewFloppyDialog; +} + +struct disk_size_t; +class QProgressDialog; + +class NewFloppyDialog : public QDialog +{ + Q_OBJECT + +public: + enum class MediaType { + Floppy, + Zip, + Mo, + }; + enum class FileType { + Img, + Fdi, + Zdi, + Mdi, + }; + explicit NewFloppyDialog(MediaType type, QWidget *parent = nullptr); + ~NewFloppyDialog(); + + QString fileName() const; + +signals: + void fileProgress(int i); + +private slots: + void onCreate(); + +private: + Ui::NewFloppyDialog *ui; + MediaType mediaType_; + + bool create86f(const QString& filename, const disk_size_t& disk_size, uint8_t rpm_mode); + bool createSectorImage(const QString& filename, const disk_size_t& disk_size, FileType type); + bool createZipSectorImage(const QString& filename, const disk_size_t& disk_size, FileType type, QProgressDialog& pbar); + bool createMoSectorImage(const QString& filename, int8_t disk_size, FileType type, QProgressDialog& pbar); +}; + +#endif // QT_NEWFLOPPYDIALOG_HPP diff --git a/src/qt/qt_newfloppydialog.ui b/src/qt/qt_newfloppydialog.ui new file mode 100644 index 000000000..5e39e8848 --- /dev/null +++ b/src/qt/qt_newfloppydialog.ui @@ -0,0 +1,115 @@ + + + NewFloppyDialog + + + + 0 + 0 + 287 + 140 + + + + New Image + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + File Name + + + + + + + Disk Size + + + + + + + + + + RPM Mode + + + + + + + + + + + FileField + QWidget +
qt_filefield.hpp
+ 1 +
+
+ + + + buttonBox + accepted() + NewFloppyDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + NewFloppyDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + +
diff --git a/src/qt/qt_ui.cpp b/src/qt/qt_ui.cpp index c4de70282..cb9646660 100644 --- a/src/qt/qt_ui.cpp +++ b/src/qt/qt_ui.cpp @@ -91,7 +91,7 @@ ui_sb_update_panes() { } void ui_sb_bugui(char *str) { - main_window->statusBar()->showMessage(str); + main_window->statusBarMessage(str); } void ui_sb_set_ready(int ready) { From 9a6c67f367f20114719f928e9ae8c68b417b9b03 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 3 Dec 2021 16:42:31 +0600 Subject: [PATCH 036/278] Fix linker errors on macOS --- src/qt/CMakeLists.txt | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 0e1193a69..df00381ed 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -102,25 +102,27 @@ target_link_libraries( Threads::Threads ) -if (UNIX AND NOT APPLE) - find_package(X11 REQUIRED) - target_link_libraries(ui PRIVATE X11::X11) - find_package(ECM NO_MODULE) - if (PkgConfig_FOUND) - pkg_check_modules(RTMIDI rtmidi) - if (RTMIDI_FOUND) - target_include_directories(plat PRIVATE ${RTMIDI_INCLUDE_DIRS}) - target_link_directories(plat PRIVATE ${RTMIDI_LIBRARY_DIRS}) - target_link_libraries(plat PRIVATE ${RTMIDI_LIBRARIES}) - target_link_options(plat PRIVATE ${RTMIDI_LDFLAGS}) - target_compile_options(plat PRIVATE ${RTMIDI_CFLAGS}) - target_sources(plat PRIVATE rtmidi_midi.cpp) - else() - target_sources(plat PRIVATE qt_midi.cpp) - endif() +if (PkgConfig_FOUND) + pkg_check_modules(RTMIDI rtmidi) + if (RTMIDI_FOUND) + target_include_directories(plat PRIVATE ${RTMIDI_INCLUDE_DIRS}) + target_link_directories(plat PRIVATE ${RTMIDI_LIBRARY_DIRS}) + target_link_libraries(plat PRIVATE ${RTMIDI_LIBRARIES}) + target_link_options(plat PRIVATE ${RTMIDI_LDFLAGS}) + target_compile_options(plat PRIVATE ${RTMIDI_CFLAGS}) + target_sources(plat PRIVATE rtmidi_midi.cpp) else() target_sources(plat PRIVATE qt_midi.cpp) endif() +else() + target_sources(plat PRIVATE qt_midi.cpp) +endif() + +if (UNIX AND NOT APPLE) + find_package(X11 REQUIRED) + target_link_libraries(ui PRIVATE X11::X11) + + find_package(ECM NO_MODULE) if (ECM_FOUND) list(APPEND CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) find_package(Wayland COMPONENTS Client) From 4c98de9bcd9754965877e0c45714979f45aad4b7 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Fri, 3 Dec 2021 12:57:56 +0100 Subject: [PATCH 037/278] don't need the reqUpdate_() slot, update is already a slot. lock the image data with a mutex --- src/qt/qt_gleswidget.cpp | 50 ++++++++++++++++++---------------------- src/qt/qt_gleswidget.hpp | 6 ++--- 2 files changed, 26 insertions(+), 30 deletions(-) diff --git a/src/qt/qt_gleswidget.cpp b/src/qt/qt_gleswidget.cpp index 40daa2e0c..5bab0910d 100644 --- a/src/qt/qt_gleswidget.cpp +++ b/src/qt/qt_gleswidget.cpp @@ -60,20 +60,14 @@ void GLESWidget::resizeGL(int w, int h) void GLESWidget::initializeGL() { initializeOpenGLFunctions(); - connect(this, &GLESWidget::reqUpdate, this, &GLESWidget::reqUpdate_); + connect(this, &GLESWidget::reqUpdate, this, static_cast(&GLESWidget::update)); } void GLESWidget::paintGL() { + std::scoped_lock lock(image_mx); QPainter painter(this); painter.drawImage(QRect(0, 0, width(), height()), m_image.convertToFormat(QImage::Format_RGBX8888), QRect(sx, sy, sw, sh)); - painter.end(); - firstupdate = true; -} - -void GLESWidget::reqUpdate_() -{ - update(); } void GLESWidget::mouseReleaseEvent(QMouseEvent *event) @@ -136,26 +130,28 @@ void GLESWidget::mouseMoveEvent(QMouseEvent *event) void GLESWidget::qt_real_blit(int x, int y, int w, int h) { - if ((w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL) || !firstupdate) { + std::scoped_lock lock(image_mx); + if ((w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL)) + { + video_blit_complete(); + return; + } + sx = x; + sy = y; + sw = this->w = w; + sh = this->h = h; + static auto imagebits = m_image.bits(); + for (int y1 = y; y1 < (y + h - 1); y1++) + { + auto scanline = imagebits + (y1 * (2048 + 64) * 4); + video_copy(scanline + (x * 4), &(buffer32->line[y1][x]), w * 4); + } + if (screenshots) + { + video_screenshot((uint32_t *)imagebits, 0, 0, 2048 + 64); + } video_blit_complete(); - return; } - sx = x; - sy = y; - sw = this->w = w; - sh = this->h = h; - static auto imagebits = m_image.bits(); - for (int y1 = y; y1 < (y + h - 1); y1++) - { - auto scanline = imagebits + (y1 * (2048 + 64) * 4); - video_copy(scanline + (x * 4), &(buffer32->line[y1][x]), w * 4); - } - if (screenshots) - { - video_screenshot((uint32_t *)imagebits, 0, 0, 2048 + 64); - } - video_blit_complete(); - firstupdate = false; - this->reqUpdate(); + reqUpdate(); } diff --git a/src/qt/qt_gleswidget.hpp b/src/qt/qt_gleswidget.hpp index 9c7e9a6cd..c5f4087b0 100644 --- a/src/qt/qt_gleswidget.hpp +++ b/src/qt/qt_gleswidget.hpp @@ -7,7 +7,8 @@ #include #include -#include +#include +#include #ifdef WAYLAND #include "wl_mouse.hpp" @@ -19,6 +20,7 @@ class GLESWidget : public QOpenGLWidget, protected QOpenGLFunctions private: QImage m_image{QSize(2048 + 64, 2048 + 64), QImage::Format_RGB32}; + std::mutex image_mx; int x, y, w, h, sx, sy, sw, sh; bool wayland = false; public: @@ -58,7 +60,6 @@ signals: public slots: void qt_real_blit(int x, int y, int w, int h); void qt_mouse_poll(); - void reqUpdate_(); private: struct mouseinputdata { @@ -66,5 +67,4 @@ private: int mousebuttons; }; mouseinputdata mousedata; - std::atomic firstupdate{false}; }; From e31a0349c56a916f210b580ca9182169d312bd3c Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Fri, 3 Dec 2021 12:58:30 +0100 Subject: [PATCH 038/278] reenable mouse tracking, no mouse movement in x11 without --- src/qt/qt_mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index f8a80d5fc..13f2bfed1 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -46,7 +46,7 @@ MainWindow::MainWindow(QWidget *parent) : ui->setupUi(this); video_setblit(qt_blit); - //ui->glesWidget->setMouseTracking(true); + ui->glesWidget->setMouseTracking(true); connect(this, &MainWindow::showMessageForNonQtThread, this, &MainWindow::showMessage_, Qt::BlockingQueuedConnection); From 22be61c09ac20f51905535309bb9fbd047db09f7 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 3 Dec 2021 18:28:05 +0600 Subject: [PATCH 039/278] Avoid setting RtMidi flags --- src/qt/CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index df00381ed..d18841b57 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -108,8 +108,6 @@ if (PkgConfig_FOUND) target_include_directories(plat PRIVATE ${RTMIDI_INCLUDE_DIRS}) target_link_directories(plat PRIVATE ${RTMIDI_LIBRARY_DIRS}) target_link_libraries(plat PRIVATE ${RTMIDI_LIBRARIES}) - target_link_options(plat PRIVATE ${RTMIDI_LDFLAGS}) - target_compile_options(plat PRIVATE ${RTMIDI_CFLAGS}) target_sources(plat PRIVATE rtmidi_midi.cpp) else() target_sources(plat PRIVATE qt_midi.cpp) From 0a10cd10d6cd8a0b74d604d232f038ef0ed75f96 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 3 Dec 2021 19:43:10 +0600 Subject: [PATCH 040/278] Fix linking for real --- src/qt/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index d18841b57..4dd075e34 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -106,7 +106,7 @@ if (PkgConfig_FOUND) pkg_check_modules(RTMIDI rtmidi) if (RTMIDI_FOUND) target_include_directories(plat PRIVATE ${RTMIDI_INCLUDE_DIRS}) - target_link_directories(plat PRIVATE ${RTMIDI_LIBRARY_DIRS}) + target_link_directories(plat INTERFACE ${RTMIDI_LIBRARY_DIRS}) target_link_libraries(plat PRIVATE ${RTMIDI_LIBRARIES}) target_sources(plat PRIVATE rtmidi_midi.cpp) else() From 62440f2f154d688467ac18d9360d5fa3a6d7bdbe Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Fri, 3 Dec 2021 16:01:32 +0200 Subject: [PATCH 041/278] Fix RtMidi linking errors --- src/qt/CMakeLists.txt | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 0e1193a69..032386152 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -102,25 +102,24 @@ target_link_libraries( Threads::Threads ) +if (PkgConfig_FOUND) + pkg_check_modules(RTMIDI rtmidi) + if (RTMIDI_FOUND) + target_include_directories(plat PRIVATE ${RTMIDI_INCLUDE_DIRS}) + target_link_directories(plat INTERFACE ${RTMIDI_LIBRARY_DIRS}) + target_link_libraries(plat PRIVATE ${RTMIDI_LIBRARIES}) + target_sources(plat PRIVATE rtmidi_midi.cpp) + else() + target_sources(plat PRIVATE qt_midi.cpp) + endif() +else() + target_sources(plat PRIVATE qt_midi.cpp) +endif() + if (UNIX AND NOT APPLE) find_package(X11 REQUIRED) target_link_libraries(ui PRIVATE X11::X11) find_package(ECM NO_MODULE) - if (PkgConfig_FOUND) - pkg_check_modules(RTMIDI rtmidi) - if (RTMIDI_FOUND) - target_include_directories(plat PRIVATE ${RTMIDI_INCLUDE_DIRS}) - target_link_directories(plat PRIVATE ${RTMIDI_LIBRARY_DIRS}) - target_link_libraries(plat PRIVATE ${RTMIDI_LIBRARIES}) - target_link_options(plat PRIVATE ${RTMIDI_LDFLAGS}) - target_compile_options(plat PRIVATE ${RTMIDI_CFLAGS}) - target_sources(plat PRIVATE rtmidi_midi.cpp) - else() - target_sources(plat PRIVATE qt_midi.cpp) - endif() - else() - target_sources(plat PRIVATE qt_midi.cpp) - endif() if (ECM_FOUND) list(APPEND CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) find_package(Wayland COMPONENTS Client) From d4e9686cd9c84a6f371697d40a1bb5cc72c6a655 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Fri, 3 Dec 2021 15:12:23 +0100 Subject: [PATCH 042/278] couple of simplifications * in paint: we can draw the m_image directly, no need to convert it * in blit: static auto imagebits = m_image.bits(); should not be static * in blit: we can bulk copy the entire image, no need to iterate horizontal lines --- src/qt/qt_gleswidget.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/qt/qt_gleswidget.cpp b/src/qt/qt_gleswidget.cpp index 5bab0910d..2348dc27e 100644 --- a/src/qt/qt_gleswidget.cpp +++ b/src/qt/qt_gleswidget.cpp @@ -67,7 +67,7 @@ void GLESWidget::paintGL() { std::scoped_lock lock(image_mx); QPainter painter(this); - painter.drawImage(QRect(0, 0, width(), height()), m_image.convertToFormat(QImage::Format_RGBX8888), QRect(sx, sy, sw, sh)); + painter.drawImage(QRect(0, 0, width(), height()), m_image, QRect(sx, sy, sw, sh)); } void GLESWidget::mouseReleaseEvent(QMouseEvent *event) @@ -141,12 +141,9 @@ void GLESWidget::qt_real_blit(int x, int y, int w, int h) sy = y; sw = this->w = w; sh = this->h = h; - static auto imagebits = m_image.bits(); - for (int y1 = y; y1 < (y + h - 1); y1++) - { - auto scanline = imagebits + (y1 * (2048 + 64) * 4); - video_copy(scanline + (x * 4), &(buffer32->line[y1][x]), w * 4); - } + auto imagebits = m_image.bits(); + video_copy(imagebits + y * ((2048 + 64) * 4) + x * 4, &(buffer32->line[y][x]), h * (2048 + 64) * sizeof(uint32_t)); + if (screenshots) { video_screenshot((uint32_t *)imagebits, 0, 0, 2048 + 64); From b34737a7e750759a41355df3a7e289a72f5b2c1e Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Fri, 3 Dec 2021 15:50:41 +0100 Subject: [PATCH 043/278] removed atomic_bool for events => use standard mutex around the event state --- src/qt/cpp11_thread.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/qt/cpp11_thread.cpp b/src/qt/cpp11_thread.cpp index 270832f10..96eb4a2e1 100644 --- a/src/qt/cpp11_thread.cpp +++ b/src/qt/cpp11_thread.cpp @@ -1,5 +1,4 @@ #include -#include #include #include @@ -9,7 +8,7 @@ struct event_cpp11_t { std::condition_variable cond; std::mutex mutex; - std::atomic_bool state = false; + bool state = false; }; extern "C" { @@ -89,7 +88,7 @@ thread_wait_event(event_t *handle, int timeout) auto lock = std::unique_lock(event->mutex); if (timeout < 0) { - event->cond.wait(lock, [=] { return event->state.load(); }); + event->cond.wait(lock, [event] { return event->state; }); } else { auto to = std::chrono::system_clock::now() + std::chrono::milliseconds(timeout); std::cv_status status; @@ -109,7 +108,10 @@ void thread_set_event(event_t *handle) { auto event = reinterpret_cast(handle); - event->state = true; + { + auto lock = std::unique_lock(event->mutex); + event->state = true; + } event->cond.notify_all(); } @@ -117,6 +119,7 @@ void thread_reset_event(event_t *handle) { auto event = reinterpret_cast(handle); + auto lock = std::unique_lock(event->mutex); event->state = false; } From 5c2682ff8cfbe821f4931969e392292a74c9e348 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 4 Dec 2021 02:14:06 +0600 Subject: [PATCH 044/278] Fix transparency/whiteness glitches on Wayland/macOS --- src/qt/qt_gleswidget.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qt/qt_gleswidget.hpp b/src/qt/qt_gleswidget.hpp index c5f4087b0..467546c2c 100644 --- a/src/qt/qt_gleswidget.hpp +++ b/src/qt/qt_gleswidget.hpp @@ -31,6 +31,7 @@ public: : QOpenGLWidget(parent), QOpenGLFunctions() { setMinimumSize(16, 16); + setTextureFormat(GL_RGB); #ifdef WAYLAND if (QApplication::platformName().contains("wayland")) { wayland = true; From a74afc3f1ee17c2e61df0b1705823a5ca6620609 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Sat, 4 Dec 2021 21:33:04 +0100 Subject: [PATCH 045/278] added software renderer. split common functions prev. in gleswidget to renderstack (a QStackWidget), which in turn calls an actual renderer. added ability to target GLES directly, but this is maybe uneeded. --- src/qt/CMakeLists.txt | 9 +- src/qt/qt_gleswidget.hpp | 71 ------------ src/qt/qt_hardwarerenderer.cpp | 44 ++++++++ src/qt/qt_hardwarerenderer.hpp | 55 +++++++++ src/qt/qt_mainwindow.cpp | 34 ++++-- src/qt/qt_mainwindow.hpp | 4 + src/qt/qt_mainwindow.ui | 43 +++++++- ...qt_gleswidget.cpp => qt_rendererstack.cpp} | 104 ++++++++++-------- src/qt/qt_rendererstack.hpp | 60 ++++++++++ src/qt/qt_rendererstack.ui | 19 ++++ src/qt/qt_softwarerenderer.cpp | 22 ++++ src/qt/qt_softwarerenderer.hpp | 22 ++++ 12 files changed, 352 insertions(+), 135 deletions(-) delete mode 100644 src/qt/qt_gleswidget.hpp create mode 100644 src/qt/qt_hardwarerenderer.cpp create mode 100644 src/qt/qt_hardwarerenderer.hpp rename src/qt/{qt_gleswidget.cpp => qt_rendererstack.cpp} (55%) create mode 100644 src/qt/qt_rendererstack.hpp create mode 100644 src/qt/qt_rendererstack.ui create mode 100644 src/qt/qt_softwarerenderer.cpp create mode 100644 src/qt/qt_softwarerenderer.hpp diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 4dd075e34..96d3ba6d4 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -20,8 +20,13 @@ add_library(ui STATIC qt_machinestatus.hpp qt_mediamenu.cpp qt_mediamenu.hpp - qt_gleswidget.cpp - qt_gleswidget.hpp + qt_rendererstack.cpp + qt_rendererstack.hpp + qt_rendererstack.ui + qt_softwarerenderer.cpp + qt_softwarerenderer.hpp + qt_hardwarerenderer.cpp + qt_hardwarerenderer.hpp qt_settings.cpp qt_settings.hpp diff --git a/src/qt/qt_gleswidget.hpp b/src/qt/qt_gleswidget.hpp deleted file mode 100644 index 467546c2c..000000000 --- a/src/qt/qt_gleswidget.hpp +++ /dev/null @@ -1,71 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include - -#include -#include -#include - -#ifdef WAYLAND -#include "wl_mouse.hpp" -#endif - -class GLESWidget : public QOpenGLWidget, protected QOpenGLFunctions -{ - Q_OBJECT - -private: - QImage m_image{QSize(2048 + 64, 2048 + 64), QImage::Format_RGB32}; - std::mutex image_mx; - int x, y, w, h, sx, sy, sw, sh; - bool wayland = false; -public: - void resizeGL(int w, int h) override; - void initializeGL() override; - void paintGL() override; - GLESWidget(QWidget* parent = nullptr) - : QOpenGLWidget(parent), QOpenGLFunctions() - { - setMinimumSize(16, 16); - setTextureFormat(GL_RGB); -#ifdef WAYLAND - if (QApplication::platformName().contains("wayland")) { - wayland = true; - wl_init(); - } -#endif - } - ~GLESWidget() - { - makeCurrent(); - } - void mousePressEvent(QMouseEvent* event) override; - void mouseReleaseEvent(QMouseEvent* event) override; - void mouseMoveEvent(QMouseEvent* event) override; - void wheelEvent(QWheelEvent *event) override; - void keyPressEvent(QKeyEvent* event) override - { - event->ignore(); - } - void keyReleaseEvent(QKeyEvent* event) override - { - event->ignore(); - } -signals: - void reqUpdate(); - -public slots: - void qt_real_blit(int x, int y, int w, int h); - void qt_mouse_poll(); - -private: - struct mouseinputdata { - int deltax, deltay, deltaz; - int mousebuttons; - }; - mouseinputdata mousedata; -}; diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp new file mode 100644 index 000000000..db868ec7e --- /dev/null +++ b/src/qt/qt_hardwarerenderer.cpp @@ -0,0 +1,44 @@ +#include "qt_hardwarerenderer.hpp" + +void HardwareRenderer::resizeGL(int w, int h) +{ + glViewport(0, 0, w, h); +} + +void HardwareRenderer::initializeGL() +{ + initializeOpenGLFunctions(); +} + +void HardwareRenderer::paintGL() +{ + QPainter painter(this); + painter.drawImage(QRect(0, 0, width(), height()), image, QRect(sx, sy, sw, sh)); + // "release" image, reducing it's refcount, so renderstack::blit() + // won't have to reallocate + image = QImage(); +} + +void HardwareRenderer::setRenderType(RenderType type) { + QSurfaceFormat format; + switch (type) { + case RenderType::OpenGL: + setTextureFormat(GL_RGB); + format.setRenderableType(QSurfaceFormat::OpenGL); + break; + case RenderType::OpenGLES: + setTextureFormat(GL_RGBA); + format.setRenderableType(QSurfaceFormat::OpenGLES); + break; + } + setFormat(format); +} + +void HardwareRenderer::onBlit(const QImage& img, int x, int y, int w, int h) { + image = img; + sx = x; + sy = y; + sw = w; + sh = h; + update(); +} diff --git a/src/qt/qt_hardwarerenderer.hpp b/src/qt/qt_hardwarerenderer.hpp new file mode 100644 index 000000000..4d7f68a08 --- /dev/null +++ b/src/qt/qt_hardwarerenderer.hpp @@ -0,0 +1,55 @@ +#pragma once + +#include +#include +#include +#include +#include + +#include +#include +#include + +#ifdef WAYLAND +#include "wl_mouse.hpp" +#endif + +class HardwareRenderer : public QOpenGLWidget, protected QOpenGLFunctions +{ + Q_OBJECT + +private: + bool wayland = false; +public: + void resizeGL(int w, int h) override; + void initializeGL() override; + void paintGL() override; + HardwareRenderer(QWidget* parent = nullptr) + : QOpenGLWidget(parent), QOpenGLFunctions() + { + setMinimumSize(16, 16); +#ifdef WAYLAND + if (QApplication::platformName().contains("wayland")) { + wayland = true; + wl_init(); + } +#endif + } + ~HardwareRenderer() + { + makeCurrent(); + } + + enum class RenderType { + OpenGL, + OpenGLES, + }; + void setRenderType(RenderType type); + +public slots: + void onBlit(const QImage& img, int, int, int, int); + +private: + QImage image; + int sx, sy, sw, sh; +}; diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 13f2bfed1..6bc350908 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -22,7 +22,6 @@ extern "C" { #include #include "qt_settings.hpp" -#include "qt_gleswidget.hpp" #include "qt_machinestatus.hpp" #include "qt_mediamenu.hpp" @@ -31,7 +30,6 @@ extern "C" { #include #endif -extern void qt_mouse_poll(); extern void qt_mouse_capture(int); extern "C" void qt_blit(int x, int y, int w, int h); @@ -45,28 +43,29 @@ MainWindow::MainWindow(QWidget *parent) : MediaMenu::ptr = mm; ui->setupUi(this); - video_setblit(qt_blit); - ui->glesWidget->setMouseTracking(true); + ui->stackedWidget->setMouseTracking(true); + ui->ogl->setRenderType(HardwareRenderer::RenderType::OpenGL); + ui->gles->setRenderType(HardwareRenderer::RenderType::OpenGLES); connect(this, &MainWindow::showMessageForNonQtThread, this, &MainWindow::showMessage_, Qt::BlockingQueuedConnection); connect(this, &MainWindow::setTitleForNonQtThread, this, &MainWindow::setTitle_, Qt::BlockingQueuedConnection); connect(this, &MainWindow::getTitleForNonQtThread, this, &MainWindow::getTitle_, Qt::BlockingQueuedConnection); - connect(this, &MainWindow::pollMouse, ui->glesWidget, &GLESWidget::qt_mouse_poll); + connect(this, &MainWindow::pollMouse, ui->stackedWidget, &RendererStack::mousePoll); connect(this, &MainWindow::setMouseCapture, this, [this](bool state) { mouse_capture = state ? 1 : 0; qt_mouse_capture(mouse_capture); if (mouse_capture) { - ui->glesWidget->grabMouse(); + ui->stackedWidget->grabMouse(); #ifdef WAYLAND if (QGuiApplication::platformName().contains("wayland")) { wl_mouse_capture(this->windowHandle()); } #endif } else { - ui->glesWidget->releaseMouse(); + ui->stackedWidget->releaseMouse(); #ifdef WAYLAND if (QGuiApplication::platformName().contains("wayland")) { wl_mouse_uncapture(); @@ -76,7 +75,7 @@ MainWindow::MainWindow(QWidget *parent) : }); connect(this, &MainWindow::resizeContents, this, [this](int w, int h) { - ui->glesWidget->resize(w, h); + ui->stackedWidget->resize(w, h); resize(w, h + menuBar()->height() + statusBar()->height()); }); @@ -94,12 +93,11 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionKeyboard_requires_capture->setChecked(kbd_req_capture); ui->actionRight_CTRL_is_left_ALT->setChecked(rctrl_is_lalt); + + video_setblit(qt_blit); } MainWindow::~MainWindow() { - //sdl_close(); - startblit(); - //delete hw_widget; delete ui; } @@ -721,7 +719,7 @@ void MainWindow::keyPressEvent(QKeyEvent* event) void MainWindow::blitToWidget(int x, int y, int w, int h) { - ui->glesWidget->qt_real_blit(x, y, w, h); + ui->stackedWidget->blit(x, y, w, h); } void MainWindow::keyReleaseEvent(QKeyEvent* event) @@ -732,3 +730,15 @@ void MainWindow::keyReleaseEvent(QKeyEvent* event) keyboard_input(0, x11_keycode_to_keysym(event->nativeScanCode())); #endif } + +void MainWindow::on_actionSoftware_Renderer_triggered() { + ui->stackedWidget->setCurrentIndex(0); +} + +void MainWindow::on_actionHardware_Renderer_OpenGL_triggered() { + ui->stackedWidget->setCurrentIndex(1); +} + +void MainWindow::on_actionHardware_Renderer_OpenGL_ES_triggered() { + ui->stackedWidget->setCurrentIndex(2); +} diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 816f7f568..d59931cbd 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -52,6 +52,9 @@ private slots: void on_actionHard_Reset_triggered(); void on_actionRight_CTRL_is_left_ALT_triggered(); void on_actionKeyboard_requires_capture_triggered(); + void on_actionHardware_Renderer_OpenGL_ES_triggered(); + void on_actionHardware_Renderer_OpenGL_triggered(); + void on_actionSoftware_Renderer_triggered(); void refreshMediaMenu(); void showMessage_(const QString& header, const QString& message); @@ -60,6 +63,7 @@ private slots: protected: void keyPressEvent(QKeyEvent* event) override; void keyReleaseEvent(QKeyEvent* event) override; + private: Ui::MainWindow *ui; std::unique_ptr status; diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 50fc3fa49..3541a5736 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -37,7 +37,14 @@ 0 - + + + 0 + + + + +
@@ -77,6 +84,9 @@ View + + + @@ -146,12 +156,39 @@ Ctrl+Alt+PgUp + + + Software Renderer + + + + + Hardware Renderer (OpenGL) + + + + + Hardware Renderer (OpenGL ES) + + - GLESWidget + HardwareRenderer QOpenGLWidget -
qt_gleswidget.hpp
+
qt_hardwarerenderer.hpp
+
+ + SoftwareRenderer + QWidget +
qt_softwarerenderer.hpp
+ 1 +
+ + RendererStack + QStackedWidget +
qt_rendererstack.hpp
+ 1
diff --git a/src/qt/qt_gleswidget.cpp b/src/qt/qt_rendererstack.cpp similarity index 55% rename from src/qt/qt_gleswidget.cpp rename to src/qt/qt_rendererstack.cpp index 2348dc27e..1205632ad 100644 --- a/src/qt/qt_gleswidget.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -1,8 +1,9 @@ -#include -#include -#include -#include -#include "qt_gleswidget.hpp" +#include "qt_rendererstack.hpp" +#include "ui_qt_rendererstack.h" + +#include "qt_softwarerenderer.hpp" +#include "qt_hardwarerenderer.hpp" + #ifdef __APPLE__ #include #endif @@ -14,6 +15,21 @@ extern "C" #include <86box/video.h> } +RendererStack::RendererStack(QWidget *parent) : + QStackedWidget(parent), + ui(new Ui::RendererStack) +{ + ui->setupUi(this); + imagebufs = QVector(2); + imagebufs[0] = QImage{QSize(2048 + 64, 2048 + 64), QImage::Format_RGB32}; + imagebufs[1] = QImage{QSize(2048 + 64, 2048 + 64), QImage::Format_RGB32}; +} + +RendererStack::~RendererStack() +{ + delete ui; +} + extern "C" void macos_poll_mouse(); void qt_mouse_capture(int on) @@ -35,7 +51,7 @@ qt_mouse_capture(int on) return; } -void GLESWidget::qt_mouse_poll() +void RendererStack::mousePoll() { #ifdef __APPLE__ return macos_poll_mouse(); @@ -52,25 +68,7 @@ void GLESWidget::qt_mouse_poll() #endif } -void GLESWidget::resizeGL(int w, int h) -{ - glViewport(0, 0, w, h); -} - -void GLESWidget::initializeGL() -{ - initializeOpenGLFunctions(); - connect(this, &GLESWidget::reqUpdate, this, static_cast(&GLESWidget::update)); -} - -void GLESWidget::paintGL() -{ - std::scoped_lock lock(image_mx); - QPainter painter(this); - painter.drawImage(QRect(0, 0, width(), height()), m_image, QRect(sx, sy, sw, sh)); -} - -void GLESWidget::mouseReleaseEvent(QMouseEvent *event) +void RendererStack::mouseReleaseEvent(QMouseEvent *event) { if (this->geometry().contains(event->pos()) && event->button() == Qt::LeftButton && !mouse_capture) { @@ -89,7 +87,7 @@ void GLESWidget::mouseReleaseEvent(QMouseEvent *event) mousedata.mousebuttons &= ~event->button(); } } -void GLESWidget::mousePressEvent(QMouseEvent *event) +void RendererStack::mousePressEvent(QMouseEvent *event) { if (mouse_capture) { @@ -97,7 +95,7 @@ void GLESWidget::mousePressEvent(QMouseEvent *event) } event->accept(); } -void GLESWidget::wheelEvent(QWheelEvent *event) +void RendererStack::wheelEvent(QWheelEvent *event) { if (mouse_capture) { @@ -106,7 +104,7 @@ void GLESWidget::wheelEvent(QWheelEvent *event) } int ignoreNextMouseEvent = 0; -void GLESWidget::mouseMoveEvent(QMouseEvent *event) +void RendererStack::mouseMoveEvent(QMouseEvent *event) { if (QApplication::platformName().contains("wayland")) { @@ -128,27 +126,39 @@ void GLESWidget::mouseMoveEvent(QMouseEvent *event) #endif } -void GLESWidget::qt_real_blit(int x, int y, int w, int h) +// called from blitter thread +void RendererStack::blit(int x, int y, int w, int h) { + if ((w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL)) { - std::scoped_lock lock(image_mx); - if ((w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL)) - { - video_blit_complete(); - return; - } - sx = x; - sy = y; - sw = this->w = w; - sh = this->h = h; - auto imagebits = m_image.bits(); - video_copy(imagebits + y * ((2048 + 64) * 4) + x * 4, &(buffer32->line[y][x]), h * (2048 + 64) * sizeof(uint32_t)); - - if (screenshots) - { - video_screenshot((uint32_t *)imagebits, 0, 0, 2048 + 64); - } video_blit_complete(); + return; + } + sx = x; + sy = y; + sw = this->w = w; + sh = this->h = h; + auto imagebits = imagebufs[currentBuf].bits(); + video_copy(imagebits + y * ((2048 + 64) * 4) + x * 4, &(buffer32->line[y][x]), h * (2048 + 64) * sizeof(uint32_t)); + + if (screenshots) + { + video_screenshot((uint32_t *)imagebits, 0, 0, 2048 + 64); + } + video_blit_complete(); + blitToRenderer(imagebufs[currentBuf], sx, sy, sw, sh); + currentBuf = (currentBuf + 1) % 2; +} + +void RendererStack::on_RendererStack_currentChanged(int arg1) { + disconnect(this, &RendererStack::blitToRenderer, nullptr, nullptr); + switch (arg1) { + case 0: + connect(this, &RendererStack::blitToRenderer, dynamic_cast(currentWidget()), &SoftwareRenderer::onBlit); + break; + case 1: + case 2: + connect(this, &RendererStack::blitToRenderer, dynamic_cast(currentWidget()), &HardwareRenderer::onBlit); + break; } - reqUpdate(); } diff --git a/src/qt/qt_rendererstack.hpp b/src/qt/qt_rendererstack.hpp new file mode 100644 index 000000000..05dd5db5c --- /dev/null +++ b/src/qt/qt_rendererstack.hpp @@ -0,0 +1,60 @@ +#ifndef QT_RENDERERCONTAINER_HPP +#define QT_RENDERERCONTAINER_HPP + +#include +#include + +namespace Ui { +class RendererStack; +} + +class RendererStack : public QStackedWidget +{ + Q_OBJECT + +public: + explicit RendererStack(QWidget *parent = nullptr); + ~RendererStack(); + + void mousePressEvent(QMouseEvent* event) override; + void mouseReleaseEvent(QMouseEvent* event) override; + void mouseMoveEvent(QMouseEvent* event) override; + void wheelEvent(QWheelEvent *event) override; + void keyPressEvent(QKeyEvent* event) override + { + event->ignore(); + } + void keyReleaseEvent(QKeyEvent* event) override + { + event->ignore(); + } + +signals: + void blitToRenderer(const QImage& img, int, int, int, int); + +public slots: + void blit(int x, int y, int w, int h); + void mousePoll(); + +private slots: + void on_RendererStack_currentChanged(int arg1); + +private: + Ui::RendererStack *ui; + + struct mouseinputdata { + int deltax, deltay, deltaz; + int mousebuttons; + }; + mouseinputdata mousedata; + + int x, y, w, h, sx, sy, sw, sh; + + // always have a qimage available for writing, which is _probably_ unused + // worst case - it will just get reallocated because it's refcounter is > 1 + // when calling bits(); + int currentBuf = 0; + QVector imagebufs; +}; + +#endif // QT_RENDERERCONTAINER_HPP diff --git a/src/qt/qt_rendererstack.ui b/src/qt/qt_rendererstack.ui new file mode 100644 index 000000000..634784714 --- /dev/null +++ b/src/qt/qt_rendererstack.ui @@ -0,0 +1,19 @@ + + + RendererStack + + + + 0 + 0 + 400 + 300 + + + + StackedWidget + + + + + diff --git a/src/qt/qt_softwarerenderer.cpp b/src/qt/qt_softwarerenderer.cpp new file mode 100644 index 000000000..9ecf6208f --- /dev/null +++ b/src/qt/qt_softwarerenderer.cpp @@ -0,0 +1,22 @@ +#include "qt_softwarerenderer.hpp" + +#include + +SoftwareRenderer::SoftwareRenderer(QWidget *parent) : QWidget(parent) {} + +void SoftwareRenderer::paintEvent(QPaintEvent *event) { + (void) event; + + QPainter painter(this); + painter.drawImage(QRect(0, 0, width(), height()), image, QRect(sx, sy, sw, sh)); + image = QImage(); +} + +void SoftwareRenderer::onBlit(const QImage& img, int x, int y, int w, int h) { + image = img; + sx = x; + sy = y; + sw = w; + sh = h; + update(); +} diff --git a/src/qt/qt_softwarerenderer.hpp b/src/qt/qt_softwarerenderer.hpp new file mode 100644 index 000000000..2a1075023 --- /dev/null +++ b/src/qt/qt_softwarerenderer.hpp @@ -0,0 +1,22 @@ +#ifndef SOFTWARERENDERER_HPP +#define SOFTWARERENDERER_HPP + +#include + +class SoftwareRenderer : public QWidget +{ + Q_OBJECT +public: + explicit SoftwareRenderer(QWidget *parent = nullptr); + + void paintEvent(QPaintEvent *event) override; + +public slots: + void onBlit(const QImage& img, int, int, int, int); + +private: + QImage image; + int sx, sy, sw, sh; +}; + +#endif // SOFTWARERENDERER_HPP From f2e6d79de4173eab77bc4137ddd9ed2fbd4740e1 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 5 Dec 2021 12:02:57 +0600 Subject: [PATCH 046/278] Fix building with Wayland --- src/qt/qt_rendererstack.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 1205632ad..cbc0b5e44 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -62,7 +62,7 @@ void RendererStack::mousePoll() mousedata.deltax = mousedata.deltay = mousedata.deltaz = 0; mouse_buttons = mousedata.mousebuttons; #ifdef WAYLAND - if (wayland) + if (QApplication::platformName().contains("wayland")) wl_mouse_poll(); #endif #endif From 3a52d62283dfb57cea638280ba7d3ffc2cd63a5c Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 5 Dec 2021 15:57:46 +0600 Subject: [PATCH 047/278] Make Escape key work --- src/qt/qt_main.cpp | 8 ++++++++ src/qt/qt_mainwindow.cpp | 42 +++++++++++++++++++++++++++++++++++++++- src/qt/qt_mainwindow.hpp | 4 ++++ 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index f011fd9f7..40d8680eb 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -94,6 +94,14 @@ int main(int argc, char* argv[]) { main_window = new MainWindow(); main_window->show(); + main_window->setFocus(); + app.installEventFilter(main_window); + auto widgetList = app.allWidgets(); + for (auto curWidget : widgetList) + { + curWidget->setFocusPolicy(Qt::NoFocus); + } + main_window->setFocusPolicy(Qt::StrongFocus); pc_init(argc, argv); if (! pc_init_modules()) { diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 6bc350908..3b1957c64 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -13,11 +13,11 @@ extern "C" { }; #include -#include #include #include #include #include +#include #include @@ -28,6 +28,8 @@ extern "C" { #ifdef __unix__ #include #include +#undef KeyPress +#undef KeyRelease #endif extern void qt_mouse_capture(int); @@ -94,6 +96,16 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionKeyboard_requires_capture->setChecked(kbd_req_capture); ui->actionRight_CTRL_is_left_ALT->setChecked(rctrl_is_lalt); + setFocusPolicy(Qt::StrongFocus); + ui->gles->setFocusPolicy(Qt::NoFocus); + ui->sw->setFocusPolicy(Qt::NoFocus); + ui->ogl->setFocusPolicy(Qt::NoFocus); + ui->stackedWidget->setFocusPolicy(Qt::NoFocus); + ui->centralwidget->setFocusPolicy(Qt::NoFocus); + menuBar()->setFocusPolicy(Qt::NoFocus); + menuWidget()->setFocusPolicy(Qt::NoFocus); + statusBar()->setFocusPolicy(Qt::NoFocus); + video_setblit(qt_blit); } @@ -683,6 +695,23 @@ void MainWindow::getTitle(wchar_t *title) } } +bool MainWindow::eventFilter(QObject* receiver, QEvent* event) +{ + if (this->keyboardGrabber() == this) { + if (event->type() == QEvent::KeyPress) { + event->accept(); + this->keyPressEvent((QKeyEvent*)event); + return true; + } + if (event->type() == QEvent::KeyRelease) { + event->accept(); + this->keyReleaseEvent((QKeyEvent*)event); + return true; + } + } + return QMainWindow::eventFilter(receiver, event); +} + void MainWindow::refreshMediaMenu() { mm->refresh(ui->menuMedia); } @@ -715,6 +744,7 @@ void MainWindow::keyPressEvent(QKeyEvent* event) if (keyboard_ismsexit()) { plat_mouse_capture(0); } + event->accept(); } void MainWindow::blitToWidget(int x, int y, int w, int h) @@ -742,3 +772,13 @@ void MainWindow::on_actionHardware_Renderer_OpenGL_triggered() { void MainWindow::on_actionHardware_Renderer_OpenGL_ES_triggered() { ui->stackedWidget->setCurrentIndex(2); } + +void MainWindow::focusInEvent(QFocusEvent* event) +{ + this->grabKeyboard(); +} + +void MainWindow::focusOutEvent(QFocusEvent* event) +{ + this->releaseKeyboard(); +} \ No newline at end of file diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index d59931cbd..6c56cfd6a 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -4,6 +4,7 @@ #include #include #include +#include #include @@ -63,6 +64,9 @@ private slots: protected: void keyPressEvent(QKeyEvent* event) override; void keyReleaseEvent(QKeyEvent* event) override; + void focusInEvent(QFocusEvent* event) override; + void focusOutEvent(QFocusEvent* event) override; + bool eventFilter(QObject* receiver, QEvent* event) override; private: Ui::MainWindow *ui; From b9714a0914370b0ef9011d998a423b2628c93196 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Sun, 5 Dec 2021 20:51:59 +0100 Subject: [PATCH 048/278] PR #13 merged manually (EGLFS support by @Cacodemon345) --- src/qt/qt_mainwindow.cpp | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 3b1957c64..773be7cce 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -77,8 +77,10 @@ MainWindow::MainWindow(QWidget *parent) : }); connect(this, &MainWindow::resizeContents, this, [this](int w, int h) { - ui->stackedWidget->resize(w, h); - resize(w, h + menuBar()->height() + statusBar()->height()); + if (!QApplication::platformName().contains("eglfs")) { + ui->stackedWidget->resize(w, h); + resize(w, h + menuBar()->height() + statusBar()->height()); + } }); connect(ui->menubar, &QMenuBar::triggered, this, [] { @@ -629,6 +631,26 @@ std::array darwin_to_xt 0, }; +static std::unordered_map evdev_to_xt = + { + {96, 0x11C}, + {97, 0x11D}, + {98, 0x135}, + {99, 0x71}, + {100, 0x138}, + {101, 0x1C}, + {102, 0x147}, + {103, 0x148}, + {104, 0x149}, + {105, 0x14B}, + {106, 0x14D}, + {107, 0x14F}, + {108, 0x150}, + {109, 0x151}, + {110, 0x152}, + {111, 0x153} +}; + static std::array& selected_keycode = x11_to_xt_base; uint16_t x11_keycode_to_keysym(uint32_t keycode) @@ -641,6 +663,12 @@ uint16_t x11_keycode_to_keysym(uint32_t keycode) { selected_keycode = x11_to_xt_2; } + else if (QApplication::platformName().contains("eglfs")) + { + keycode -= 8; + if (keycode <= 88) return keycode; + else return evdev_to_xt[keycode]; + } else if (!x11display) { x11display = XOpenDisplay(nullptr); @@ -781,4 +809,4 @@ void MainWindow::focusInEvent(QFocusEvent* event) void MainWindow::focusOutEvent(QFocusEvent* event) { this->releaseKeyboard(); -} \ No newline at end of file +} From af512c98ccf2897bf2b000a6c47f39af631b93da Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Sun, 5 Dec 2021 20:56:07 +0100 Subject: [PATCH 049/278] PR #12 merged manually (Take video_filter_method into account when rendering, by @Cacodemon345) --- src/qt/qt_hardwarerenderer.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index db868ec7e..c18064d07 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -1,5 +1,9 @@ #include "qt_hardwarerenderer.hpp" +extern "C" { +#include <86box/86box.h> +} + void HardwareRenderer::resizeGL(int w, int h) { glViewport(0, 0, w, h); @@ -13,6 +17,7 @@ void HardwareRenderer::initializeGL() void HardwareRenderer::paintGL() { QPainter painter(this); + painter.setRenderHint(QPainter::SmoothPixmapTransform, video_filter_method); painter.drawImage(QRect(0, 0, width(), height()), image, QRect(sx, sy, sw, sh)); // "release" image, reducing it's refcount, so renderstack::blit() // won't have to reallocate From 637f81998b6b709cc1ff2b122b3fd7941ff189c6 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Sun, 5 Dec 2021 21:22:32 +0100 Subject: [PATCH 050/278] fixed disabled/enabled for cassette, cartridge and floppy submenus --- src/qt/qt_mediamenu.cpp | 49 ++++++++++++++++++++++++++++++++++++----- src/qt/qt_mediamenu.hpp | 11 +++++++++ 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/src/qt/qt_mediamenu.cpp b/src/qt/qt_mediamenu.cpp index 6a4406b47..898f79c01 100644 --- a/src/qt/qt_mediamenu.cpp +++ b/src/qt/qt_mediamenu.cpp @@ -41,11 +41,16 @@ void MediaMenu::refresh(QMenu *parentMenu) { cassetteMenu->addAction("Existing Image", [this]() { cassetteSelectImage(false); }); cassetteMenu->addAction("Existing Image (Write Protected)", [this]() { cassetteSelectImage(true); }); cassetteMenu->addSeparator(); - cassetteMenu->addAction("Record")->setCheckable(true); - cassetteMenu->addAction("Play")->setCheckable(true); - cassetteMenu->addAction("Rewing"); - cassetteMenu->addAction("Fast Forward"); + cassetteRecordPos = cassetteMenu->children().count(); + cassetteMenu->addAction("Record", [this] { pc_cas_set_mode(cassette, 1); cassetteUpdateMenu(); })->setCheckable(true); + cassettePlayPos = cassetteMenu->children().count(); + cassetteMenu->addAction("Play", [this] { pc_cas_set_mode(cassette, 0); cassetteUpdateMenu(); })->setCheckable(true); + cassetteRewindPos = cassetteMenu->children().count(); + cassetteMenu->addAction("Rewind", [] { pc_cas_rewind(cassette); }); + cassetteFastFwdPos = cassetteMenu->children().count(); + cassetteMenu->addAction("Fast Forward", [] { pc_cas_append(cassette); }); cassetteMenu->addSeparator(); + cassetteEjectPos = cassetteMenu->children().count(); cassetteMenu->addAction("Eject", [this]() { cassetteEject(); }); cassetteUpdateMenu(); } @@ -56,6 +61,7 @@ void MediaMenu::refresh(QMenu *parentMenu) { auto* menu = parentMenu->addMenu(""); menu->addAction("Image", [this, i]() { cartridgeSelectImage(i); }); menu->addSeparator(); + cartridgeEjectPos = menu->children().count(); menu->addAction("Eject", [this, i]() { cartridgeEject(i); }); cartridgeMenus.append(menu); cartridgeUpdateMenu(i); @@ -70,8 +76,10 @@ void MediaMenu::refresh(QMenu *parentMenu) { menu->addAction("Existing Image", [this, i]() { floppySelectImage(i, false); }); menu->addAction("Existing Image (Write Protected)", [this, i]() { floppySelectImage(i, true); }); menu->addSeparator(); + floppyExportPos = menu->children().count(); menu->addAction("Export to 86F", [this, i]() { floppyExportTo86f(i); }); menu->addSeparator(); + floppyEjectPos = menu->children().count(); menu->addAction("Eject", [this, i]() { floppyEject(i); }); floppyMenus.append(menu); floppyUpdateMenu(i); @@ -169,6 +177,24 @@ void MediaMenu::cassetteEject() { void MediaMenu::cassetteUpdateMenu() { QString name = cassette_fname; + QString mode = cassette_mode; + auto childs = cassetteMenu->children(); + auto* recordMenu = dynamic_cast(childs[cassetteRecordPos]); + auto* playMenu = dynamic_cast(childs[cassettePlayPos]); + auto* rewindMenu = dynamic_cast(childs[cassetteRewindPos]); + auto* fastFwdMenu = dynamic_cast(childs[cassetteFastFwdPos]); + auto* ejectMenu = dynamic_cast(childs[cassetteEjectPos]); + + recordMenu->setEnabled(!name.isEmpty()); + playMenu->setEnabled(!name.isEmpty()); + rewindMenu->setEnabled(!name.isEmpty()); + fastFwdMenu->setEnabled(!name.isEmpty()); + ejectMenu->setEnabled(!name.isEmpty()); + + bool isSaving = mode == QStringLiteral("save"); + recordMenu->setChecked(isSaving); + playMenu->setChecked(! isSaving); + cassetteMenu->setTitle(QString("Cassette: %1").arg(name.isEmpty() ? "(empty)" : name)); } @@ -197,7 +223,11 @@ void MediaMenu::cartridgeEject(int i) { void MediaMenu::cartridgeUpdateMenu(int i) { QString name = cart_fns[i]; - cartridgeMenus[i]->setTitle(QString("Cartridge %1: %2").arg(QString::number(i+1), name.isEmpty() ? "(empty)" : name)); + auto* menu = cartridgeMenus[i]; + auto childs = menu->children(); + auto* ejectMenu = dynamic_cast(childs[cartridgeEjectPos]); + ejectMenu->setEnabled(!name.isEmpty()); + menu->setTitle(QString("Cartridge %1: %2").arg(QString::number(i+1), name.isEmpty() ? "(empty)" : name)); } void MediaMenu::floppyNewImage(int i) { @@ -250,6 +280,15 @@ void MediaMenu::floppyExportTo86f(int i) { void MediaMenu::floppyUpdateMenu(int i) { QString name = floppyfns[i]; + + auto* menu = floppyMenus[i]; + auto childs = menu->children(); + + auto* ejectMenu = dynamic_cast(childs[floppyEjectPos]); + auto* exportMenu = dynamic_cast(childs[floppyExportPos]); + ejectMenu->setEnabled(!name.isEmpty()); + exportMenu->setEnabled(!name.isEmpty()); + int type = fdd_get_type(i); floppyMenus[i]->setTitle(QString("Floppy %1 (%2): %3").arg(QString::number(i+1), fdd_getname(type), name.isEmpty() ? "(empty)" : name)); } diff --git a/src/qt/qt_mediamenu.hpp b/src/qt/qt_mediamenu.hpp index 7a21f288c..2908e8ae9 100644 --- a/src/qt/qt_mediamenu.hpp +++ b/src/qt/qt_mediamenu.hpp @@ -63,6 +63,17 @@ private: QList zipMenus; QList moMenus; + int cassetteRecordPos; + int cassettePlayPos; + int cassetteRewindPos; + int cassetteFastFwdPos; + int cassetteEjectPos; + + int cartridgeEjectPos; + + int floppyExportPos; + int floppyEjectPos; + int cdromMutePos; int cdromEmptyPos; int cdromReloadPos; From c5b6ccb9480cc83b173c7651698d655727b7ff55 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Sun, 5 Dec 2021 21:23:09 +0100 Subject: [PATCH 051/278] continued PR#12 into software renderer as well --- src/qt/qt_hardwarerenderer.cpp | 2 +- src/qt/qt_softwarerenderer.cpp | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index c18064d07..d9a206238 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -17,7 +17,7 @@ void HardwareRenderer::initializeGL() void HardwareRenderer::paintGL() { QPainter painter(this); - painter.setRenderHint(QPainter::SmoothPixmapTransform, video_filter_method); + painter.setRenderHint(QPainter::SmoothPixmapTransform, video_filter_method > 0 ? true : false); painter.drawImage(QRect(0, 0, width(), height()), image, QRect(sx, sy, sw, sh)); // "release" image, reducing it's refcount, so renderstack::blit() // won't have to reallocate diff --git a/src/qt/qt_softwarerenderer.cpp b/src/qt/qt_softwarerenderer.cpp index 9ecf6208f..cf69ca2fb 100644 --- a/src/qt/qt_softwarerenderer.cpp +++ b/src/qt/qt_softwarerenderer.cpp @@ -1,5 +1,8 @@ #include "qt_softwarerenderer.hpp" +extern "C" { +#include <86box/86box.h> +} #include SoftwareRenderer::SoftwareRenderer(QWidget *parent) : QWidget(parent) {} @@ -8,6 +11,7 @@ void SoftwareRenderer::paintEvent(QPaintEvent *event) { (void) event; QPainter painter(this); + painter.setRenderHint(QPainter::SmoothPixmapTransform, video_filter_method > 0 ? true : false); painter.drawImage(QRect(0, 0, width(), height()), image, QRect(sx, sy, sw, sh)); image = QImage(); } From 07c9da30de732c9dddb065d2fd0db1b523d04fba Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Mon, 6 Dec 2021 10:29:53 +0100 Subject: [PATCH 052/278] configuration fixes * moved CONFIG_MIDI and CONFIG_MIDI_IN to own blocks when constructing comboboxes in deviceconfig * use Models::AddEntry in deviceconfig * sub-handling of CONFIG_HEX16 and CONFIG_HEX20 in CONFIG_SELECTION block when constructing, and use corresponding config_setter * make sure SCSI controller- and ISAMEM-deviceconfig calls up deviceconfig with an instance number * midi input and midi output was mixed when constructing soundsettings when loading prev. settings --- src/qt/qt_deviceconfig.cpp | 120 ++++++++++++++--------- src/qt/qt_deviceconfig.hpp | 2 +- src/qt/qt_settingsotherperipherals.cpp | 8 +- src/qt/qt_settingsotherperipherals.hpp | 18 ---- src/qt/qt_settingssound.cpp | 4 +- src/qt/qt_settingsstoragecontrollers.cpp | 8 +- src/qt/qt_settingsstoragecontrollers.hpp | 30 ------ 7 files changed, 82 insertions(+), 108 deletions(-) diff --git a/src/qt/qt_deviceconfig.cpp b/src/qt/qt_deviceconfig.cpp index a99e1ab26..0cfe14a73 100644 --- a/src/qt/qt_deviceconfig.cpp +++ b/src/qt/qt_deviceconfig.cpp @@ -15,6 +15,7 @@ extern "C" { } #include "qt_filefield.hpp" +#include "qt_models_common.hpp" DeviceConfig::DeviceConfig(QWidget *parent) : QDialog(parent), @@ -28,12 +29,12 @@ DeviceConfig::~DeviceConfig() delete ui; } -void DeviceConfig::ConfigureDevice(const _device_* device) { +void DeviceConfig::ConfigureDevice(const _device_* device, int instance) { DeviceConfig dc; dc.setWindowTitle(QString("%1 Device Configuration").arg(device->name)); device_context_t device_context; - device_set_context(&device_context, device, 0); + device_set_context(&device_context, device, instance); const auto* config = device->config; while (config->type != -1) { @@ -47,9 +48,47 @@ void DeviceConfig::ConfigureDevice(const _device_* device) { dc.ui->formLayout->addRow(config->description, cbox); break; } - case CONFIG_SELECTION: case CONFIG_MIDI: + { + auto* cbox = new QComboBox(); + cbox->setObjectName(config->name); + auto* model = cbox->model(); + int currentIndex = -1; + int selected = config_get_int(device_context.name, const_cast(config->name), config->default_int); + for (int i = 0; i < plat_midi_get_num_devs(); i++) { + char midiName[512] = { 0 }; + plat_midi_get_dev_name(i, midiName); + + Models::AddEntry(model, midiName, i); + if (selected == i) { + currentIndex = i; + } + } + dc.ui->formLayout->addRow(config->description, cbox); + cbox->setCurrentIndex(currentIndex); + break; + } case CONFIG_MIDI_IN: + { + auto* cbox = new QComboBox(); + cbox->setObjectName(config->name); + auto* model = cbox->model(); + int currentIndex = -1; + int selected = config_get_int(device_context.name, const_cast(config->name), config->default_int); + for (int i = 0; i < plat_midi_in_get_num_devs(); i++) { + char midiName[512] = { 0 }; + plat_midi_in_get_dev_name(i, midiName); + + Models::AddEntry(model, midiName, i); + if (selected == i) { + currentIndex = i; + } + } + dc.ui->formLayout->addRow(config->description, cbox); + cbox->setCurrentIndex(currentIndex); + break; + } + case CONFIG_SELECTION: case CONFIG_HEX16: case CONFIG_HEX20: { @@ -57,50 +96,23 @@ void DeviceConfig::ConfigureDevice(const _device_* device) { cbox->setObjectName(config->name); auto* model = cbox->model(); int currentIndex = -1; - int selected = config_get_int(device_context.name, const_cast(config->name), config->default_int); + int selected; + switch (config->type) { + case CONFIG_SELECTION: + selected = config_get_int(device_context.name, const_cast(config->name), config->default_int); + break; + case CONFIG_HEX16: + selected = config_get_hex16(device_context.name, const_cast(config->name), config->default_int); + break; + case CONFIG_HEX20: + selected = config_get_hex20(device_context.name, const_cast(config->name), config->default_int); + break; + } - if (config->type == CONFIG_MIDI) { - for (int i = 0; i < plat_midi_get_num_devs(); i++) { - char midiName[512] = { 0 }; - plat_midi_get_dev_name(i, midiName); - - int rows = model->rowCount(); - model->insertRow(rows); - auto idx = model->index(rows, 0); - - model->setData(idx, midiName, Qt::DisplayRole); - model->setData(idx, i, Qt::UserRole); - if (selected == i) { - currentIndex = idx.row(); - } - } - } else if (config->type == CONFIG_MIDI_IN) { - for (int i = 0; i < plat_midi_in_get_num_devs(); i++) { - char midiName[512] = { 0 }; - plat_midi_in_get_dev_name(i, midiName); - - int rows = model->rowCount(); - model->insertRow(rows); - auto idx = model->index(rows, 0); - - model->setData(idx, midiName, Qt::DisplayRole); - model->setData(idx, i, Qt::UserRole); - if (selected == i) { - currentIndex = idx.row(); - } - } - } else { - for (auto* sel = config->selection; (sel->description != nullptr) && (strlen(sel->description) > 0); ++sel) { - int rows = model->rowCount(); - model->insertRow(rows); - auto idx = model->index(rows, 0); - - model->setData(idx, sel->description, Qt::DisplayRole); - model->setData(idx, sel->value, Qt::UserRole); - - if (selected == sel->value) { - currentIndex = idx.row(); - } + for (auto* sel = config->selection; (sel->description != nullptr) && (strlen(sel->description) > 0); ++sel) { + int row = Models::AddEntry(model, sel->description, sel->value); + if (selected == sel->value) { + currentIndex = row; } } dc.ui->formLayout->addRow(config->description, cbox); @@ -145,16 +157,26 @@ void DeviceConfig::ConfigureDevice(const _device_* device) { config_set_int(device_context.name, const_cast(config->name), cbox->isChecked() ? 1 : 0); break; } - case CONFIG_SELECTION: case CONFIG_MIDI: case CONFIG_MIDI_IN: - case CONFIG_HEX16: - case CONFIG_HEX20: + case CONFIG_SELECTION: { auto* cbox = dc.findChild(config->name); config_set_int(device_context.name, const_cast(config->name), cbox->currentData().toInt()); break; } + case CONFIG_HEX16: + { + auto* cbox = dc.findChild(config->name); + config_set_hex16(device_context.name, const_cast(config->name), cbox->currentData().toInt()); + break; + } + case CONFIG_HEX20: + { + auto* cbox = dc.findChild(config->name); + config_set_hex20(device_context.name, const_cast(config->name), cbox->currentData().toInt()); + break; + } case CONFIG_FNAME: { auto* fbox = dc.findChild(config->name); diff --git a/src/qt/qt_deviceconfig.hpp b/src/qt/qt_deviceconfig.hpp index 3090c96a7..8062c1851 100644 --- a/src/qt/qt_deviceconfig.hpp +++ b/src/qt/qt_deviceconfig.hpp @@ -19,7 +19,7 @@ public: explicit DeviceConfig(QWidget *parent = nullptr); ~DeviceConfig(); - static void ConfigureDevice(const _device_* device); + static void ConfigureDevice(const _device_* device, int instance = 0); static QString DeviceName(const _device_* device, const char* internalName, int bus); private: Ui::DeviceConfig *ui; diff --git a/src/qt/qt_settingsotherperipherals.cpp b/src/qt/qt_settingsotherperipherals.cpp index e52c3ead1..729ebe62e 100644 --- a/src/qt/qt_settingsotherperipherals.cpp +++ b/src/qt/qt_settingsotherperipherals.cpp @@ -96,7 +96,7 @@ void SettingsOtherPeripherals::on_comboBoxCard1_currentIndexChanged(int index) { } void SettingsOtherPeripherals::on_pushButtonConfigureCard1_clicked() { - DeviceConfig::ConfigureDevice(isamem_get_device(ui->comboBoxCard1->currentData().toInt())); + DeviceConfig::ConfigureDevice(isamem_get_device(ui->comboBoxCard1->currentData().toInt()), 1); } void SettingsOtherPeripherals::on_comboBoxCard2_currentIndexChanged(int index) { @@ -107,7 +107,7 @@ void SettingsOtherPeripherals::on_comboBoxCard2_currentIndexChanged(int index) { } void SettingsOtherPeripherals::on_pushButtonConfigureCard2_clicked() { - DeviceConfig::ConfigureDevice(isamem_get_device(ui->comboBoxCard2->currentData().toInt())); + DeviceConfig::ConfigureDevice(isamem_get_device(ui->comboBoxCard2->currentData().toInt()), 2); } void SettingsOtherPeripherals::on_comboBoxCard3_currentIndexChanged(int index) { @@ -118,7 +118,7 @@ void SettingsOtherPeripherals::on_comboBoxCard3_currentIndexChanged(int index) { } void SettingsOtherPeripherals::on_pushButtonConfigureCard3_clicked() { - DeviceConfig::ConfigureDevice(isamem_get_device(ui->comboBoxCard3->currentData().toInt())); + DeviceConfig::ConfigureDevice(isamem_get_device(ui->comboBoxCard3->currentData().toInt()), 3); } void SettingsOtherPeripherals::on_comboBoxCard4_currentIndexChanged(int index) { @@ -129,5 +129,5 @@ void SettingsOtherPeripherals::on_comboBoxCard4_currentIndexChanged(int index) { } void SettingsOtherPeripherals::on_pushButtonConfigureCard4_clicked() { - DeviceConfig::ConfigureDevice(isamem_get_device(ui->comboBoxCard4->currentData().toInt())); + DeviceConfig::ConfigureDevice(isamem_get_device(ui->comboBoxCard4->currentData().toInt()), 4); } diff --git a/src/qt/qt_settingsotherperipherals.hpp b/src/qt/qt_settingsotherperipherals.hpp index 605b629ba..e32704f1b 100644 --- a/src/qt/qt_settingsotherperipherals.hpp +++ b/src/qt/qt_settingsotherperipherals.hpp @@ -18,32 +18,14 @@ public: void save(); private slots: void on_pushButtonConfigureCard4_clicked(); - -private slots: void on_comboBoxCard4_currentIndexChanged(int index); - -private slots: void on_pushButtonConfigureCard3_clicked(); - -private slots: void on_comboBoxCard3_currentIndexChanged(int index); - -private slots: void on_pushButtonConfigureCard2_clicked(); - -private slots: void on_comboBoxCard2_currentIndexChanged(int index); - -private slots: void on_pushButtonConfigureCard1_clicked(); - -private slots: void on_comboBoxCard1_currentIndexChanged(int index); - -private slots: void on_pushButtonConfigureRTC_clicked(); - -private slots: void on_comboBoxRTC_currentIndexChanged(int index); private: diff --git a/src/qt/qt_settingssound.cpp b/src/qt/qt_settingssound.cpp index 7dd3fc51a..8e686f870 100644 --- a/src/qt/qt_settingssound.cpp +++ b/src/qt/qt_settingssound.cpp @@ -87,7 +87,7 @@ void SettingsSound::onCurrentMachineChanged(int machineId) { if (midi_device_available(c)) { int row = Models::AddEntry(model, name, c); - if (c == midi_input_device_current) { + if (c == midi_device_current) { selectedRow = row - removeRows; } } @@ -110,7 +110,7 @@ void SettingsSound::onCurrentMachineChanged(int machineId) { if (midi_in_device_available(c)) { int row = Models::AddEntry(model, name, c); - if (c == midi_device_current) { + if (c == midi_input_device_current) { selectedRow = row - removeRows; } } diff --git a/src/qt/qt_settingsstoragecontrollers.cpp b/src/qt/qt_settingsstoragecontrollers.cpp index 64bb0e488..fb5dd47cc 100644 --- a/src/qt/qt_settingsstoragecontrollers.cpp +++ b/src/qt/qt_settingsstoragecontrollers.cpp @@ -217,17 +217,17 @@ void SettingsStorageControllers::on_comboBoxSCSI4_currentIndexChanged(int index) void SettingsStorageControllers::on_pushButtonSCSI1_clicked() { - DeviceConfig::ConfigureDevice(scsi_card_getdevice(ui->comboBoxSCSI1->currentData().toInt())); + DeviceConfig::ConfigureDevice(scsi_card_getdevice(ui->comboBoxSCSI1->currentData().toInt()), 1); } void SettingsStorageControllers::on_pushButtonSCSI2_clicked() { - DeviceConfig::ConfigureDevice(scsi_card_getdevice(ui->comboBoxSCSI2->currentData().toInt())); + DeviceConfig::ConfigureDevice(scsi_card_getdevice(ui->comboBoxSCSI2->currentData().toInt()), 2); } void SettingsStorageControllers::on_pushButtonSCSI3_clicked() { - DeviceConfig::ConfigureDevice(scsi_card_getdevice(ui->comboBoxSCSI3->currentData().toInt())); + DeviceConfig::ConfigureDevice(scsi_card_getdevice(ui->comboBoxSCSI3->currentData().toInt()), 3); } void SettingsStorageControllers::on_pushButtonSCSI4_clicked() { - DeviceConfig::ConfigureDevice(scsi_card_getdevice(ui->comboBoxSCSI4->currentData().toInt())); + DeviceConfig::ConfigureDevice(scsi_card_getdevice(ui->comboBoxSCSI4->currentData().toInt()), 4); } diff --git a/src/qt/qt_settingsstoragecontrollers.hpp b/src/qt/qt_settingsstoragecontrollers.hpp index de2e36646..e4596b567 100644 --- a/src/qt/qt_settingsstoragecontrollers.hpp +++ b/src/qt/qt_settingsstoragecontrollers.hpp @@ -22,50 +22,20 @@ public slots: private slots: void on_pushButtonSCSI4_clicked(); - -private slots: void on_pushButtonSCSI3_clicked(); - -private slots: void on_pushButtonSCSI2_clicked(); - -private slots: void on_pushButtonSCSI1_clicked(); - -private slots: void on_comboBoxSCSI4_currentIndexChanged(int index); - -private slots: void on_comboBoxSCSI3_currentIndexChanged(int index); - -private slots: void on_comboBoxSCSI2_currentIndexChanged(int index); - -private slots: void on_comboBoxSCSI1_currentIndexChanged(int index); - -private slots: void on_pushButtonQuaternaryIDE_clicked(); - -private slots: void on_pushButtonTertiaryIDE_clicked(); - -private slots: void on_pushButtonFD_clicked(); - -private slots: void on_pushButtonHD_clicked(); - -private slots: void on_checkBoxQuaternaryIDE_stateChanged(int arg1); - -private slots: void on_checkBoxTertiaryIDE_stateChanged(int arg1); - -private slots: void on_comboBoxFD_currentIndexChanged(int index); - -private slots: void on_comboBoxHD_currentIndexChanged(int index); private: From 37e29de342d927e67fc959361d14b59656324795 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Mon, 6 Dec 2021 10:41:14 +0100 Subject: [PATCH 053/278] include unordered_map --- src/qt/qt_mainwindow.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 773be7cce..becfd8f9e 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -1,6 +1,5 @@ #include "qt_mainwindow.hpp" #include "ui_qt_mainwindow.h" -#include extern "C" { #include <86box/86box.h> @@ -12,6 +11,7 @@ extern "C" { #include "qt_sdl.h" }; +#include #include #include #include @@ -20,6 +20,7 @@ extern "C" { #include #include +#include #include "qt_settings.hpp" #include "qt_machinestatus.hpp" From 28d1a43af77a29df117bd508c43c2188dc639f50 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Mon, 6 Dec 2021 10:50:58 +0100 Subject: [PATCH 054/278] fixed up qdatastream usage. use writeRawData() when creating hdd images. specify littleendian when creating floppy images --- src/qt/qt_harddiskdialog.cpp | 4 ++-- src/qt/qt_newfloppydialog.cpp | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_harddiskdialog.cpp b/src/qt/qt_harddiskdialog.cpp index 8a9cb7c3b..7a85c754a 100644 --- a/src/qt/qt_harddiskdialog.cpp +++ b/src/qt/qt_harddiskdialog.cpp @@ -371,12 +371,12 @@ void HarddiskDialog::onCreateNewFile() { uint64_t restBlock = size & 0xfffff; if (restBlock) { - stream << QByteArray::fromRawData(buf.data(), restBlock); + stream.writeRawData(buf.data(), restBlock); } if (mibBlocks) { for (uint64_t i = 0; i < mibBlocks; ++i) { - stream << buf; + stream.writeRawData(buf.data(), buf.size()); emit fileProgress(static_cast((i * 100) / mibBlocks)); } } diff --git a/src/qt/qt_newfloppydialog.cpp b/src/qt/qt_newfloppydialog.cpp index 2ffd95950..3be74c64e 100644 --- a/src/qt/qt_newfloppydialog.cpp +++ b/src/qt/qt_newfloppydialog.cpp @@ -271,6 +271,7 @@ bool NewFloppyDialog::create86f(const QString& filename, const disk_size_t& disk return false; } QDataStream stream(&file); + stream.setByteOrder(QDataStream::LittleEndian); stream << magic; stream << version; @@ -314,6 +315,7 @@ bool NewFloppyDialog::createSectorImage(const QString &filename, const disk_size return false; } QDataStream stream(&file); + stream.setByteOrder(QDataStream::LittleEndian); sector_bytes = (128 << disk_size.sector_len); total_sectors = disk_size.sides * disk_size.tracks * disk_size.sectors; @@ -411,6 +413,7 @@ bool NewFloppyDialog::createZipSectorImage(const QString &filename, const disk_s return false; } QDataStream stream(&file); + stream.setByteOrder(QDataStream::LittleEndian); sector_bytes = (128 << disk_size.sector_len); total_sectors = disk_size.sides * disk_size.tracks * disk_size.sectors; @@ -599,6 +602,7 @@ bool NewFloppyDialog::createMoSectorImage(const QString& filename, int8_t disk_s return false; } QDataStream stream(&file); + stream.setByteOrder(QDataStream::LittleEndian); sector_bytes = dp->bytes_per_sector; total_sectors = dp->sectors; From 350246606e2cdae7a381bbd656bbc985d02afea2 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Mon, 6 Dec 2021 15:52:19 +0600 Subject: [PATCH 055/278] Remove redundant RtMidi checking --- src/qt/CMakeLists.txt | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 96d3ba6d4..a07887e80 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -4,7 +4,6 @@ set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) -find_package(PkgConfig) find_package(Threads REQUIRED) add_library(plat STATIC qt.c qt_main.cpp qt_platform.cpp cpp11_thread.cpp) @@ -107,20 +106,6 @@ target_link_libraries( Threads::Threads ) -if (PkgConfig_FOUND) - pkg_check_modules(RTMIDI rtmidi) - if (RTMIDI_FOUND) - target_include_directories(plat PRIVATE ${RTMIDI_INCLUDE_DIRS}) - target_link_directories(plat INTERFACE ${RTMIDI_LIBRARY_DIRS}) - target_link_libraries(plat PRIVATE ${RTMIDI_LIBRARIES}) - target_sources(plat PRIVATE rtmidi_midi.cpp) - else() - target_sources(plat PRIVATE qt_midi.cpp) - endif() -else() - target_sources(plat PRIVATE qt_midi.cpp) -endif() - if (UNIX AND NOT APPLE) find_package(X11 REQUIRED) target_link_libraries(ui PRIVATE X11::X11) From c376cca71ee4e680bb9543d10b3890e34a32e324 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Mon, 6 Dec 2021 16:33:25 +0600 Subject: [PATCH 056/278] Fix mouse wheel scrolling --- src/qt/qt_rendererstack.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index cbc0b5e44..3df8c8ab2 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -99,7 +99,7 @@ void RendererStack::wheelEvent(QWheelEvent *event) { if (mouse_capture) { - mousedata.deltay += event->pixelDelta().y(); + mousedata.deltaz += event->pixelDelta().y(); } } From 44873ba9b95f79468a5b1cbe3f3208032cf46b1e Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Mon, 6 Dec 2021 17:31:25 +0200 Subject: [PATCH 057/278] Make compatible with qt5-static build --- src/CMakeLists.txt | 6 ++++++ src/qt/CMakeLists.txt | 7 +++++++ src/qt/qt_main.cpp | 10 ++++++++++ 3 files changed, 23 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a9f0a9a80..c32c94ac9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -133,6 +133,12 @@ if(QT) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) + + # if we want to use qt5-static to eliminate need for bundling qt dlls (windows) + #set(QT_STATIC ON) + # needed to build with qt5-static if both qt5 and qt5-static are installed + #set(CMAKE_PREFIX_PATH "path/to/qt5-static") + find_package(Qt5 COMPONENTS Core Widgets REQUIRED) endif() diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 96d3ba6d4..65ae7c643 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -107,6 +107,13 @@ target_link_libraries( Threads::Threads ) +# needed for static builds +if (WIN32) + qt_import_plugins(plat INCLUDE Qt5::QWindowsIntegrationPlugin Qt5::QICOPlugin QWindowsVistaStylePlugin) +else() + qt_import_plugins(plat INCLUDE Qt5::QICOPlugin) +endif() + if (PkgConfig_FOUND) pkg_check_modules(RTMIDI rtmidi) if (RTMIDI_FOUND) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 8aa878e3e..48ca388ac 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -4,6 +4,16 @@ #include #include +#ifdef QT_STATIC +/* Static builds need plugin imports */ +#include +Q_IMPORT_PLUGIN(QICOPlugin) +#ifdef Q_OS_WINDOWS +Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin) +Q_IMPORT_PLUGIN(QWindowsVistaStylePlugin) +#endif +#endif + #include <86box/86box.h> #include <86box/plat.h> #include <86box/ui.h> From ae477a7c2a0f09c11ebab162d5e12e6d7cc64e2c Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Mon, 6 Dec 2021 21:24:22 +0100 Subject: [PATCH 058/278] implement plat_vidapi_name and plat_vidapi so 86box knows about the qt renderers --- src/qt/qt.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/qt/qt.c b/src/qt/qt.c index 2ebab6f69..40f25135c 100644 --- a/src/qt/qt.c +++ b/src/qt/qt.c @@ -3,6 +3,7 @@ * implemented in Qt */ +#include #include #include @@ -62,9 +63,36 @@ wchar_t* plat_get_string(int i) int plat_vidapi(char* api) { + if (!strcasecmp(api, "default") || !strcasecmp(api, "system")) { + return 0; + } else if (!strcasecmp(api, "qt_software")) { + return 0; + } else if (!strcasecmp(api, "qt_opengl")) { + return 1; + } else if (!strcasecmp(api, "qt_opengles")) { + return 2; + } + return 0; } char* plat_vidapi_name(int api) { - return "default"; + char* name = "default"; + + switch (api) { + case 0: + name = "qt_software"; + break; + case 1: + name = "qt_opengl"; + break; + case 2: + name = "qt_opengles"; + break; + default: + fatal("Unknown renderer: %i\n", api); + break; + } + + return name; } From 021dbf7efaabca8c93925e6de1a1736b5e4e83eb Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Mon, 6 Dec 2021 21:24:53 +0100 Subject: [PATCH 059/278] run init before mainwindow is constructed, so 86box internals are loaded and ready --- src/qt/qt_main.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 40d8680eb..fcd317e54 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -92,6 +92,12 @@ int main(int argc, char* argv[]) { elapsed_timer.start(); SDL_Init(SDL_INIT_TIMER); + pc_init(argc, argv); + if (! pc_init_modules()) { + ui_msgbox_header(MBX_FATAL, VC(L"No ROMs found."), VC(L"86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory.")); + return 6; + } + main_window = new MainWindow(); main_window->show(); main_window->setFocus(); @@ -103,11 +109,6 @@ int main(int argc, char* argv[]) { } main_window->setFocusPolicy(Qt::StrongFocus); - pc_init(argc, argv); - if (! pc_init_modules()) { - ui_msgbox_header(MBX_FATAL, VC(L"No ROMs found."), VC(L"86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory.")); - return 6; - } pc_reset_hard_init(); /* Set the PAUSE mode depending on the renderer. */ From 230c257922103dd7ec650f36dbe58aef5b14d00c Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Mon, 6 Dec 2021 21:26:17 +0100 Subject: [PATCH 060/278] implemented action resizable window --- src/qt/qt_mainwindow.cpp | 20 +++++++++++++++++++- src/qt/qt_mainwindow.hpp | 1 + src/qt/qt_ui.cpp | 8 -------- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index becfd8f9e..fb426ec8d 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -79,8 +79,13 @@ MainWindow::MainWindow(QWidget *parent) : connect(this, &MainWindow::resizeContents, this, [this](int w, int h) { if (!QApplication::platformName().contains("eglfs")) { + int modifiedHeight = h + menuBar()->height() + statusBar()->height(); ui->stackedWidget->resize(w, h); - resize(w, h + menuBar()->height() + statusBar()->height()); + if (vid_resize == 0) { + setFixedSize(w, modifiedHeight); + } else { + resize(w, modifiedHeight); + } } }); @@ -98,6 +103,7 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionKeyboard_requires_capture->setChecked(kbd_req_capture); ui->actionRight_CTRL_is_left_ALT->setChecked(rctrl_is_lalt); + ui->actionResizable_window->setChecked(vid_resize > 0); setFocusPolicy(Qt::StrongFocus); ui->gles->setFocusPolicy(Qt::NoFocus); @@ -738,6 +744,7 @@ bool MainWindow::eventFilter(QObject* receiver, QEvent* event) return true; } } + return QMainWindow::eventFilter(receiver, event); } @@ -811,3 +818,14 @@ void MainWindow::focusOutEvent(QFocusEvent* event) { this->releaseKeyboard(); } + +void MainWindow::on_actionResizable_window_triggered(bool checked) { + if (checked) { + vid_resize = 1; + setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); + } else { + vid_resize = 0; + } + emit resizeContents(scrnsz_x, scrnsz_y); +} + diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 6c56cfd6a..dde4e0fb7 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -56,6 +56,7 @@ private slots: void on_actionHardware_Renderer_OpenGL_ES_triggered(); void on_actionHardware_Renderer_OpenGL_triggered(); void on_actionSoftware_Renderer_triggered(); + void on_actionResizable_window_triggered(bool checked); void refreshMediaMenu(); void showMessage_(const QString& header, const QString& message); diff --git a/src/qt/qt_ui.cpp b/src/qt/qt_ui.cpp index cb9646660..4af7423cc 100644 --- a/src/qt/qt_ui.cpp +++ b/src/qt/qt_ui.cpp @@ -7,10 +7,6 @@ #include "qt_mainwindow.hpp" -std::atomic_int resize_pending = 0; -std::atomic_int resize_w = 0; -std::atomic_int resize_h = 0; - MainWindow* main_window = nullptr; extern "C" { @@ -46,10 +42,6 @@ void mouse_poll() { } void plat_resize(int w, int h) { - resize_w = w; - resize_h = h; - resize_pending = 1; - main_window->resizeContents(w, h); } From b03e6b1aee0787b3c3698301bdcfbb8d787dda11 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Mon, 6 Dec 2021 21:26:44 +0100 Subject: [PATCH 061/278] typed in the view menu, most stuff in here is unimplemented as of now! --- src/qt/qt_mainwindow.ui | 285 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 281 insertions(+), 4 deletions(-) diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 3541a5736..b85e14b4d 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -54,7 +54,7 @@ 0 0 724 - 20 + 19 @@ -83,10 +83,83 @@ View + + + Renderer + + + + + + + + Window scale factor + + + + + + + + + Filter method + + + + + + + Fullscreen stretch mode + + + + + + + + + EGA/(S)VGA settings + + + + VGA screen type + + + + + + + + + + Grayscale conversion type + + + + + + + + + + + + + + + + + + + + + - - - + + + + + @@ -157,20 +230,224 @@ + + true + Software Renderer + + true + Hardware Renderer (OpenGL) + + true + Hardware Renderer (OpenGL ES) + + + true + + + Hide status bar + + + + + true + + + Resizable window + + + + + true + + + Remember size and position + + + + + Specify dimensions... + + + + + true + + + Force 4:3 display ratio + + + + + true + + + HiDPI scaling + + + + + true + + + CGA/PCjr/Tandy/EGA/(S)VGA overscan + + + + + true + + + Change contrast for monochrome display + + + + + 0.5x + + + + + 1x + + + + + 1.5x + + + + + 2x + + + + + Nearest + + + + + Linear + + + + + true + + + Full screen stretch + + + + + true + + + 4:3 + + + + + true + + + Square pixels (Keep ratio) + + + + + true + + + Integer scale + + + + + true + + + Inverted VGA monitor + + + + + true + + + RGB Color + + + + + true + + + RGB Grayscale + + + + + true + + + Amber monitor + + + + + true + + + Green monitor + + + + + true + + + White monitor + + + + + true + + + BT601 (NTSC/PAL) + + + + + true + + + BT709 (HDTV) + + + + + true + + + Average + + From db0c90a835ebdfae465885d2666c27192c2c1982 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Mon, 6 Dec 2021 21:33:25 +0100 Subject: [PATCH 062/278] replaced sdl_timer with a qtimer, resulting in a binary which does not link sdl --- src/qt/CMakeLists.txt | 1 - src/qt/qt.c | 2 -- src/qt/qt_main.cpp | 17 +++++------------ src/qt/qt_mainwindow.cpp | 2 -- 4 files changed, 5 insertions(+), 17 deletions(-) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index a07887e80..a577bcddc 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -10,7 +10,6 @@ add_library(plat STATIC qt.c qt_main.cpp qt_platform.cpp cpp11_thread.cpp) add_library(ui STATIC qt_ui.cpp qt_cdrom.c - qt_sdl.c qt_mainwindow.cpp qt_mainwindow.hpp diff --git a/src/qt/qt.c b/src/qt/qt.c index 40f25135c..5aca045dc 100644 --- a/src/qt/qt.c +++ b/src/qt/qt.c @@ -13,8 +13,6 @@ #include <86box/timer.h> #include <86box/nvr.h> -#include "qt_sdl.h" - int qt_nvr_save(void) { return nvr_save(); } diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index fcd317e54..1f0d3ea72 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -11,11 +11,7 @@ #include -#include "SDL.h" -#include "SDL_mutex.h" -#include "SDL_timer.h" #include "qt_mainwindow.hpp" -#include "qt_sdl.h" #include "cocoa_mouse.hpp" @@ -77,12 +73,6 @@ main_thread_fn() is_quit = 1; } -uint32_t timer_onesec(uint32_t interval, void* param) -{ - pc_onesec(); - return interval; -} - int main(int argc, char* argv[]) { QApplication app(argc, argv); #ifdef __APPLE__ @@ -90,7 +80,6 @@ int main(int argc, char* argv[]) { app.installNativeEventFilter(&cocoafilter); #endif elapsed_timer.start(); - SDL_Init(SDL_INIT_TIMER); pc_init(argc, argv); if (! pc_init_modules()) { @@ -113,7 +102,11 @@ int main(int argc, char* argv[]) { /* Set the PAUSE mode depending on the renderer. */ // plat_pause(0); - SDL_AddTimer(1000, timer_onesec, nullptr); + QTimer onesec; + QObject::connect(&onesec, &QTimer::timeout, &app, [] { + pc_onesec(); + }); + onesec.start(1000); /* Initialize the rendering window, or fullscreen. */ QTimer::singleShot(50, []() { plat_resize(640, 480); } ); diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index fb426ec8d..e0a19a49b 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -7,8 +7,6 @@ extern "C" { #include <86box/keyboard.h> #include <86box/plat.h> #include <86box/video.h> - -#include "qt_sdl.h" }; #include From 431f75ce4ca930248e1862cbcdbe6e4688b82a39 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Mon, 6 Dec 2021 21:39:39 +0100 Subject: [PATCH 063/278] connected vid_api and menubar actions --- src/qt/qt_mainwindow.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index e0a19a49b..8829f1f91 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -102,6 +102,20 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionKeyboard_requires_capture->setChecked(kbd_req_capture); ui->actionRight_CTRL_is_left_ALT->setChecked(rctrl_is_lalt); ui->actionResizable_window->setChecked(vid_resize > 0); + switch (vid_api) { + case 0: + ui->stackedWidget->setCurrentIndex(0); + ui->actionSoftware_Renderer->setChecked(true); + break; + case 1: + ui->stackedWidget->setCurrentIndex(1); + ui->actionHardware_Renderer_OpenGL->setChecked(true); + break; + case 2: + ui->stackedWidget->setCurrentIndex(2); + ui->actionHardware_Renderer_OpenGL_ES->setChecked(true); + break; + } setFocusPolicy(Qt::StrongFocus); ui->gles->setFocusPolicy(Qt::NoFocus); @@ -797,14 +811,23 @@ void MainWindow::keyReleaseEvent(QKeyEvent* event) void MainWindow::on_actionSoftware_Renderer_triggered() { ui->stackedWidget->setCurrentIndex(0); + ui->actionHardware_Renderer_OpenGL->setChecked(false); + ui->actionHardware_Renderer_OpenGL_ES->setChecked(false); + vid_api = 0; } void MainWindow::on_actionHardware_Renderer_OpenGL_triggered() { ui->stackedWidget->setCurrentIndex(1); + ui->actionSoftware_Renderer->setChecked(false); + ui->actionHardware_Renderer_OpenGL_ES->setChecked(false); + vid_api = 1; } void MainWindow::on_actionHardware_Renderer_OpenGL_ES_triggered() { ui->stackedWidget->setCurrentIndex(2); + ui->actionSoftware_Renderer->setChecked(false); + ui->actionHardware_Renderer_OpenGL->setChecked(false); + vid_api = 2; } void MainWindow::focusInEvent(QFocusEvent* event) From 71dd799936d477525e58537d2c2dbc37e63103a2 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Mon, 6 Dec 2021 21:45:40 +0100 Subject: [PATCH 064/278] inverted monitor --- src/qt/qt_mainwindow.cpp | 15 +++++++++++++++ src/qt/qt_mainwindow.hpp | 1 + 2 files changed, 16 insertions(+) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 8829f1f91..d113b9296 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -850,3 +850,18 @@ void MainWindow::on_actionResizable_window_triggered(bool checked) { emit resizeContents(scrnsz_x, scrnsz_y); } +static void +video_toggle_option(QAction* action, int *val) +{ + startblit(); + *val ^= 1; + action->setChecked(*val > 0 ? true : false); + endblit(); + config_save(); + device_force_redraw(); +} + +void MainWindow::on_actionInverted_VGA_monitor_triggered() { + video_toggle_option(ui->actionInverted_VGA_monitor, &invert_display); + video_copy = (video_grayscale || invert_display) ? video_transform_copy : memcpy; +} diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index dde4e0fb7..acab69f95 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -57,6 +57,7 @@ private slots: void on_actionHardware_Renderer_OpenGL_triggered(); void on_actionSoftware_Renderer_triggered(); void on_actionResizable_window_triggered(bool checked); + void on_actionInverted_VGA_monitor_triggered(); void refreshMediaMenu(); void showMessage_(const QString& header, const QString& message); From 78de384cc4eb1870569ec51c911031d47bf4fdd8 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Mon, 6 Dec 2021 21:58:41 +0100 Subject: [PATCH 065/278] scaling actions --- src/qt/qt_mainwindow.cpp | 50 ++++++++++++++++++++++++++++++++++++++++ src/qt/qt_mainwindow.hpp | 4 ++++ src/qt/qt_mainwindow.ui | 12 ++++++++++ 3 files changed, 66 insertions(+) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index d113b9296..e64316f5f 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -102,6 +102,7 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionKeyboard_requires_capture->setChecked(kbd_req_capture); ui->actionRight_CTRL_is_left_ALT->setChecked(rctrl_is_lalt); ui->actionResizable_window->setChecked(vid_resize > 0); + ui->menuWindow_scale_factor->setEnabled(vid_resize == 0); switch (vid_api) { case 0: ui->stackedWidget->setCurrentIndex(0); @@ -116,6 +117,20 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionHardware_Renderer_OpenGL_ES->setChecked(true); break; } + switch (scale) { + case 0: + ui->action0_5x->setChecked(true); + break; + case 1: + ui->action1x->setChecked(true); + break; + case 2: + ui->action1_5x->setChecked(true); + break; + case 3: + ui->action2x->setChecked(true); + break; + } setFocusPolicy(Qt::StrongFocus); ui->gles->setFocusPolicy(Qt::NoFocus); @@ -847,6 +862,7 @@ void MainWindow::on_actionResizable_window_triggered(bool checked) { } else { vid_resize = 0; } + ui->menuWindow_scale_factor->setEnabled(! checked); emit resizeContents(scrnsz_x, scrnsz_y); } @@ -865,3 +881,37 @@ void MainWindow::on_actionInverted_VGA_monitor_triggered() { video_toggle_option(ui->actionInverted_VGA_monitor, &invert_display); video_copy = (video_grayscale || invert_display) ? video_transform_copy : memcpy; } + +static void update_scaled_checkboxes(Ui::MainWindow* ui, QAction* selected) { + ui->action0_5x->setChecked(ui->action0_5x == selected); + ui->action1x->setChecked(ui->action1x == selected); + ui->action1_5x->setChecked(ui->action1_5x == selected); + ui->action2x->setChecked(ui->action2x == selected); + + reset_screen_size(); + device_force_redraw(); + video_force_resize_set(1); + doresize = 1; + config_save(); +} + +void MainWindow::on_action0_5x_triggered() { + scale = 0; + update_scaled_checkboxes(ui, ui->action0_5x); +} + +void MainWindow::on_action1x_triggered() { + scale = 1; + update_scaled_checkboxes(ui, ui->action1x); +} + +void MainWindow::on_action1_5x_triggered() { + scale = 2; + update_scaled_checkboxes(ui, ui->action1_5x); +} + +void MainWindow::on_action2x_triggered() { + scale = 3; + update_scaled_checkboxes(ui, ui->action2x); +} + diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index acab69f95..97ac840d6 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -58,6 +58,10 @@ private slots: void on_actionSoftware_Renderer_triggered(); void on_actionResizable_window_triggered(bool checked); void on_actionInverted_VGA_monitor_triggered(); + void on_action0_5x_triggered(); + void on_action1x_triggered(); + void on_action1_5x_triggered(); + void on_action2x_triggered(); void refreshMediaMenu(); void showMessage_(const QString& header, const QString& message); diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index b85e14b4d..47a52eed5 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -315,21 +315,33 @@ + + true + 0.5x + + true + 1x + + true + 1.5x + + true + 2x From 2d9020070fd9b04c96636d31eb900a7715cc7bcb Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Mon, 6 Dec 2021 22:02:18 +0100 Subject: [PATCH 066/278] filter actions --- src/qt/qt_mainwindow.cpp | 17 +++++++++++++++++ src/qt/qt_mainwindow.hpp | 2 ++ src/qt/qt_mainwindow.ui | 6 ++++++ 3 files changed, 25 insertions(+) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index e64316f5f..3667a2b59 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -131,6 +131,14 @@ MainWindow::MainWindow(QWidget *parent) : ui->action2x->setChecked(true); break; } + switch (video_filter_method) { + case 0: + ui->actionNearest->setChecked(true); + break; + case 1: + ui->actionLinear->setChecked(true); + break; + } setFocusPolicy(Qt::StrongFocus); ui->gles->setFocusPolicy(Qt::NoFocus); @@ -915,3 +923,12 @@ void MainWindow::on_action2x_triggered() { update_scaled_checkboxes(ui, ui->action2x); } +void MainWindow::on_actionNearest_triggered() { + video_filter_method = 0; + ui->actionLinear->setChecked(false); +} + +void MainWindow::on_actionLinear_triggered() { + video_filter_method = 1; + ui->actionNearest->setChecked(false); +} diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 97ac840d6..e3a80b15d 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -62,6 +62,8 @@ private slots: void on_action1x_triggered(); void on_action1_5x_triggered(); void on_action2x_triggered(); + void on_actionLinear_triggered(); + void on_actionNearest_triggered(); void refreshMediaMenu(); void showMessage_(const QString& header, const QString& message); diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 47a52eed5..fb53af568 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -347,11 +347,17 @@ + + true + Nearest + + true + Linear From 61a2cf986b03f08ad79c4f713c4bf0ee91fcabe0 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Tue, 7 Dec 2021 13:47:42 +0100 Subject: [PATCH 067/278] implemented fullscreen stretch modes --- src/qt/CMakeLists.txt | 2 + src/qt/qt_hardwarerenderer.cpp | 20 +++----- src/qt/qt_hardwarerenderer.hpp | 9 ++-- src/qt/qt_mainwindow.cpp | 55 +++++++++++++++++++++ src/qt/qt_mainwindow.hpp | 4 ++ src/qt/qt_mainwindow.ui | 16 +++--- src/qt/qt_renderercomon.cpp | 89 ++++++++++++++++++++++++++++++++++ src/qt/qt_renderercomon.hpp | 19 ++++++++ src/qt/qt_softwarerenderer.cpp | 21 +++----- src/qt/qt_softwarerenderer.hpp | 9 ++-- 10 files changed, 201 insertions(+), 43 deletions(-) create mode 100644 src/qt/qt_renderercomon.cpp create mode 100644 src/qt/qt_renderercomon.hpp diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index a577bcddc..7936e3a42 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -21,6 +21,8 @@ add_library(ui STATIC qt_rendererstack.cpp qt_rendererstack.hpp qt_rendererstack.ui + qt_renderercomon.cpp + qt_renderercomon.hpp qt_softwarerenderer.cpp qt_softwarerenderer.hpp qt_hardwarerenderer.cpp diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index d9a206238..6efa4809c 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -14,14 +14,8 @@ void HardwareRenderer::initializeGL() initializeOpenGLFunctions(); } -void HardwareRenderer::paintGL() -{ - QPainter painter(this); - painter.setRenderHint(QPainter::SmoothPixmapTransform, video_filter_method > 0 ? true : false); - painter.drawImage(QRect(0, 0, width(), height()), image, QRect(sx, sy, sw, sh)); - // "release" image, reducing it's refcount, so renderstack::blit() - // won't have to reallocate - image = QImage(); +void HardwareRenderer::paintGL() { + onPaint(this); } void HardwareRenderer::setRenderType(RenderType type) { @@ -41,9 +35,11 @@ void HardwareRenderer::setRenderType(RenderType type) { void HardwareRenderer::onBlit(const QImage& img, int x, int y, int w, int h) { image = img; - sx = x; - sy = y; - sw = w; - sh = h; + source.setRect(x, y, w, h); update(); } + +void HardwareRenderer::resizeEvent(QResizeEvent *event) { + onResize(width(), height()); + QOpenGLWidget::resizeEvent(event); +} diff --git a/src/qt/qt_hardwarerenderer.hpp b/src/qt/qt_hardwarerenderer.hpp index 4d7f68a08..3a47c6284 100644 --- a/src/qt/qt_hardwarerenderer.hpp +++ b/src/qt/qt_hardwarerenderer.hpp @@ -10,11 +10,13 @@ #include #include +#include "qt_renderercomon.hpp" + #ifdef WAYLAND #include "wl_mouse.hpp" #endif -class HardwareRenderer : public QOpenGLWidget, protected QOpenGLFunctions +class HardwareRenderer : public QOpenGLWidget, protected QOpenGLFunctions, public RendererCommon { Q_OBJECT @@ -49,7 +51,6 @@ public: public slots: void onBlit(const QImage& img, int, int, int, int); -private: - QImage image; - int sx, sy, sw, sh; +protected: + void resizeEvent(QResizeEvent *event) override; }; diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 3667a2b59..e56967892 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -139,6 +139,20 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionLinear->setChecked(true); break; } + switch (video_fullscreen_scale) { + case FULLSCR_SCALE_FULL: + ui->actionFullScreen_stretch->setChecked(true); + break; + case FULLSCR_SCALE_43: + ui->actionFullScreen_43->setChecked(true); + break; + case FULLSCR_SCALE_KEEPRATIO: + ui->actionFullScreen_keepRatio->setChecked(true); + break; + case FULLSCR_SCALE_INT: + ui->actionFullScreen_int->setChecked(true); + break; + } setFocusPolicy(Qt::StrongFocus); ui->gles->setFocusPolicy(Qt::NoFocus); @@ -735,6 +749,10 @@ void MainWindow::on_actionFullscreen_triggered() { showFullScreen(); video_fullscreen = 1; } + + auto widget = ui->stackedWidget->currentWidget(); + auto rc = dynamic_cast(widget); + rc->onResize(widget->width(), widget->height()); } void MainWindow::setTitle_(const wchar_t *title) @@ -932,3 +950,40 @@ void MainWindow::on_actionLinear_triggered() { video_filter_method = 1; ui->actionNearest->setChecked(false); } + +static void update_fullscreen_scale_checkboxes(Ui::MainWindow* ui, QAction* selected) { + ui->actionFullScreen_stretch->setChecked(ui->actionFullScreen_stretch == selected); + ui->actionFullScreen_43->setChecked(ui->actionFullScreen_43 == selected); + ui->actionFullScreen_keepRatio->setChecked(ui->actionFullScreen_keepRatio == selected); + ui->actionFullScreen_int->setChecked(ui->actionFullScreen_int == selected); + + if (video_fullscreen > 0) { + auto widget = ui->stackedWidget->currentWidget(); + auto rc = dynamic_cast(widget); + rc->onResize(widget->width(), widget->height()); + } + + device_force_redraw(); + config_save(); +} + +void MainWindow::on_actionFullScreen_stretch_triggered() { + video_fullscreen_scale = FULLSCR_SCALE_FULL; + update_fullscreen_scale_checkboxes(ui, ui->actionFullScreen_stretch); +} + +void MainWindow::on_actionFullScreen_43_triggered() { + video_fullscreen_scale = FULLSCR_SCALE_43; + update_fullscreen_scale_checkboxes(ui, ui->actionFullScreen_43); +} + +void MainWindow::on_actionFullScreen_keepRatio_triggered() { + video_fullscreen_scale = FULLSCR_SCALE_KEEPRATIO; + update_fullscreen_scale_checkboxes(ui, ui->actionFullScreen_keepRatio); +} + +void MainWindow::on_actionFullScreen_int_triggered() { + video_fullscreen_scale = FULLSCR_SCALE_INT; + update_fullscreen_scale_checkboxes(ui, ui->actionFullScreen_int); +} + diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index e3a80b15d..406d9a26a 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -64,6 +64,10 @@ private slots: void on_action2x_triggered(); void on_actionLinear_triggered(); void on_actionNearest_triggered(); + void on_actionFullScreen_int_triggered(); + void on_actionFullScreen_keepRatio_triggered(); + void on_actionFullScreen_43_triggered(); + void on_actionFullScreen_stretch_triggered(); void refreshMediaMenu(); void showMessage_(const QString& header, const QString& message); diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index fb53af568..af8a8a2bd 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -111,10 +111,10 @@ Fullscreen stretch mode - - - - + + + + @@ -362,7 +362,7 @@ Linear - + true @@ -370,7 +370,7 @@ Full screen stretch - + true @@ -378,7 +378,7 @@ 4:3 - + true @@ -386,7 +386,7 @@ Square pixels (Keep ratio) - + true diff --git a/src/qt/qt_renderercomon.cpp b/src/qt/qt_renderercomon.cpp new file mode 100644 index 000000000..173ae1abe --- /dev/null +++ b/src/qt/qt_renderercomon.cpp @@ -0,0 +1,89 @@ +#include "qt_renderercomon.hpp" + +#include +#include + +#include + +extern "C" { +#include <86box/86box.h> +#include <86box/video.h> +} + +RendererCommon::RendererCommon() = default; + +void RendererCommon::onPaint(QPaintDevice* device) { + QPainter painter(device); + painter.setRenderHint(QPainter::SmoothPixmapTransform, video_filter_method > 0 ? true : false); + painter.drawImage(destination, image, source); + // "release" image, reducing it's refcount, so renderstack::blit() + // won't have to reallocate + image = QImage(); +} + +static void integer_scale(double *d, double *g) { + double ratio; + + if (*d > *g) { + ratio = std::floor(*d / *g); + *d = *g * ratio; + } else { + ratio = std::ceil(*d / *g); + *d = *g / ratio; + } +} + +void RendererCommon::onResize(int width, int height) { + if (video_fullscreen == 0) { + destination.setRect(0, 0, width, height); + return; + } + double dx, dy, dw, dh, gsr; + + double hw = width; + double hh = height; + double gw = source.width(); + double gh = source.height(); + double hsr = hw / hh; + + switch (video_fullscreen_scale) { + case FULLSCR_SCALE_INT: + gsr = gw / gh; + if (gsr <= hsr) { + dw = hh * gsr; + dh = hh; + } else { + dw = hw; + dh = hw / gsr; + } + integer_scale(&dw, &gw); + integer_scale(&dh, &gh); + dx = (hw - dw) / 2.0; + dy = (hh - dh) / 2.0; + destination.setRect(dx, dy, dw, dh); + break; + case FULLSCR_SCALE_43: + case FULLSCR_SCALE_KEEPRATIO: + if (video_fullscreen_scale == FULLSCR_SCALE_43) { + gsr = 4.0 / 3.0; + } else { + gsr = gw / gh; + } + + if (gsr <= hsr) { + dw = hh * gsr; + dh = hh; + } else { + dw = hw; + dh = hw / gsr; + } + dx = (hw - dw) / 2.0; + dy = (hh - dh) / 2.0; + destination.setRect(dx, dy, dw, dh); + break; + case FULLSCR_SCALE_FULL: + default: + destination.setRect(0, 0, hw, hh); + break; + } +} diff --git a/src/qt/qt_renderercomon.hpp b/src/qt/qt_renderercomon.hpp new file mode 100644 index 000000000..6eed9c9b2 --- /dev/null +++ b/src/qt/qt_renderercomon.hpp @@ -0,0 +1,19 @@ +#pragma once + +#include +#include + +class QWidget; + +class RendererCommon +{ +public: + RendererCommon(); + + void onResize(int width, int height); +protected: + void onPaint(QPaintDevice* device); + + QImage image; + QRect source, destination; +}; diff --git a/src/qt/qt_softwarerenderer.cpp b/src/qt/qt_softwarerenderer.cpp index cf69ca2fb..0565d2d6c 100644 --- a/src/qt/qt_softwarerenderer.cpp +++ b/src/qt/qt_softwarerenderer.cpp @@ -1,26 +1,19 @@ #include "qt_softwarerenderer.hpp" -extern "C" { -#include <86box/86box.h> -} -#include - SoftwareRenderer::SoftwareRenderer(QWidget *parent) : QWidget(parent) {} void SoftwareRenderer::paintEvent(QPaintEvent *event) { (void) event; - - QPainter painter(this); - painter.setRenderHint(QPainter::SmoothPixmapTransform, video_filter_method > 0 ? true : false); - painter.drawImage(QRect(0, 0, width(), height()), image, QRect(sx, sy, sw, sh)); - image = QImage(); + onPaint(this); } void SoftwareRenderer::onBlit(const QImage& img, int x, int y, int w, int h) { image = img; - sx = x; - sy = y; - sw = w; - sh = h; + source.setRect(x, y, w, h); update(); } + +void SoftwareRenderer::resizeEvent(QResizeEvent *event) { + onResize(width(), height()); + QWidget::resizeEvent(event); +} diff --git a/src/qt/qt_softwarerenderer.hpp b/src/qt/qt_softwarerenderer.hpp index 2a1075023..873e9f732 100644 --- a/src/qt/qt_softwarerenderer.hpp +++ b/src/qt/qt_softwarerenderer.hpp @@ -2,21 +2,20 @@ #define SOFTWARERENDERER_HPP #include +#include "qt_renderercomon.hpp" -class SoftwareRenderer : public QWidget +class SoftwareRenderer : public QWidget, public RendererCommon { Q_OBJECT public: explicit SoftwareRenderer(QWidget *parent = nullptr); void paintEvent(QPaintEvent *event) override; - public slots: void onBlit(const QImage& img, int, int, int, int); -private: - QImage image; - int sx, sy, sw, sh; +protected: + void resizeEvent(QResizeEvent *event) override; }; #endif // SOFTWARERENDERER_HPP From d69e21a3e9deb574e8e7ebd1c399a9f35c4eaa6b Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Wed, 8 Dec 2021 11:05:52 +0100 Subject: [PATCH 068/278] startblit() and endblit(): watch for mutex contention. the mutex is unfair on linux, so sleep if there's contention --- src/qt/qt_mainwindow.cpp | 2 ++ src/qt/qt_platform.cpp | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index e56967892..e417aa304 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -905,7 +905,9 @@ video_toggle_option(QAction* action, int *val) void MainWindow::on_actionInverted_VGA_monitor_triggered() { video_toggle_option(ui->actionInverted_VGA_monitor, &invert_display); + startblit(); video_copy = (video_grayscale || invert_display) ? video_transform_copy : memcpy; + endblit(); } static void update_scaled_checkboxes(Ui::MainWindow* ui, QAction* selected) { diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index 6be563814..e2a227472 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -1,6 +1,7 @@ #include #include +#include #include #include @@ -21,6 +22,8 @@ // static QByteArray buf; extern QElapsedTimer elapsed_timer; QElapsedTimer elapsed_timer; + +static std::atomic_int blitmx_contention = 0; static std::mutex blitmx; class CharPointer { @@ -382,12 +385,24 @@ void joystick_close(void) {} void joystick_process(void) {} void startblit() { + blitmx_contention++; + if (blitmx.try_lock()) { + return; + } + blitmx.lock(); } void endblit() { + blitmx_contention--; blitmx.unlock(); + if (blitmx_contention > 0) { + // a deadlock has been observed on linux when toggling via video_toggle_option + // because the mutex is typically unfair on linux + // => sleep if there's contention + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } } } From b7fee7745b84335a0e1b5375286f77377142c4a9 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 8 Dec 2021 16:27:58 +0600 Subject: [PATCH 069/278] Mouse event improvements * Only center the cursor when it leaves the emulator screen * Ignore the very first mouse event that appears after it is captured for the first time after starting --- src/qt/qt_rendererstack.cpp | 17 ++++++++++++++--- src/qt/qt_rendererstack.hpp | 2 ++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 3df8c8ab2..8796d7415 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -103,7 +103,7 @@ void RendererStack::wheelEvent(QWheelEvent *event) } } -int ignoreNextMouseEvent = 0; +int ignoreNextMouseEvent = 1; void RendererStack::mouseMoveEvent(QMouseEvent *event) { if (QApplication::platformName().contains("wayland")) @@ -120,12 +120,23 @@ void RendererStack::mouseMoveEvent(QMouseEvent *event) if (ignoreNextMouseEvent) { oldPos = event->pos(); ignoreNextMouseEvent--; event->accept(); return; } mousedata.deltax += event->pos().x() - oldPos.x(); mousedata.deltay += event->pos().y() - oldPos.y(); - QCursor::setPos(mapToGlobal(QPoint(width() / 2, height() / 2))); oldPos = event->pos(); - ignoreNextMouseEvent = 1; #endif } +void RendererStack::leaveEvent(QEvent* event) +{ + if (QApplication::platformName().contains("wayland")) + { + event->accept(); + return; + } + if (!mouse_capture) return; + QCursor::setPos(mapToGlobal(QPoint(width() / 2, height() / 2))); + ignoreNextMouseEvent = 2; + event->accept(); +} + // called from blitter thread void RendererStack::blit(int x, int y, int w, int h) { diff --git a/src/qt/qt_rendererstack.hpp b/src/qt/qt_rendererstack.hpp index 05dd5db5c..239bd5bef 100644 --- a/src/qt/qt_rendererstack.hpp +++ b/src/qt/qt_rendererstack.hpp @@ -3,6 +3,7 @@ #include #include +#include namespace Ui { class RendererStack; @@ -20,6 +21,7 @@ public: void mouseReleaseEvent(QMouseEvent* event) override; void mouseMoveEvent(QMouseEvent* event) override; void wheelEvent(QWheelEvent *event) override; + void leaveEvent(QEvent *event) override; void keyPressEvent(QKeyEvent* event) override { event->ignore(); From fa83778c0433b59fbd8ce2ca6b56411d22ebe1ce Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 8 Dec 2021 16:36:55 +0600 Subject: [PATCH 070/278] Avoid transparency/whiteness effects on Wayland and macOS --- src/qt/qt_hardwarerenderer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index 6efa4809c..0659e41a5 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -1,4 +1,5 @@ #include "qt_hardwarerenderer.hpp" +#include extern "C" { #include <86box/86box.h> @@ -26,7 +27,7 @@ void HardwareRenderer::setRenderType(RenderType type) { format.setRenderableType(QSurfaceFormat::OpenGL); break; case RenderType::OpenGLES: - setTextureFormat(GL_RGBA); + setTextureFormat((QApplication::platformName().contains("wayland") || QApplication::platformName() == "cocoa") ? GL_RGB : GL_RGBA); format.setRenderableType(QSurfaceFormat::OpenGLES); break; } From a0789005466c300ac694b3b7522536b9454300c5 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 8 Dec 2021 17:02:28 +0600 Subject: [PATCH 071/278] Fix for fullscreen --- src/qt/qt_rendererstack.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 8796d7415..120e150c7 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -4,6 +4,8 @@ #include "qt_softwarerenderer.hpp" #include "qt_hardwarerenderer.hpp" +#include + #ifdef __APPLE__ #include #endif @@ -120,6 +122,8 @@ void RendererStack::mouseMoveEvent(QMouseEvent *event) if (ignoreNextMouseEvent) { oldPos = event->pos(); ignoreNextMouseEvent--; event->accept(); return; } mousedata.deltax += event->pos().x() - oldPos.x(); mousedata.deltay += event->pos().y() - oldPos.y(); + if (event->pos().x() == 0 || event->pos().y() == 0) leaveEvent((QEvent*)event); + if (event->pos().x() == screen()->geometry().width() || event->pos().y() == screen()->geometry().height()) leaveEvent((QEvent*)event); oldPos = event->pos(); #endif } From a6bddd03279ad1735ba2580379de445bb2462ce1 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 8 Dec 2021 17:04:30 +0600 Subject: [PATCH 072/278] Use globalPos for fullscreen --- src/qt/qt_rendererstack.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 120e150c7..e69647f00 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -122,8 +122,8 @@ void RendererStack::mouseMoveEvent(QMouseEvent *event) if (ignoreNextMouseEvent) { oldPos = event->pos(); ignoreNextMouseEvent--; event->accept(); return; } mousedata.deltax += event->pos().x() - oldPos.x(); mousedata.deltay += event->pos().y() - oldPos.y(); - if (event->pos().x() == 0 || event->pos().y() == 0) leaveEvent((QEvent*)event); - if (event->pos().x() == screen()->geometry().width() || event->pos().y() == screen()->geometry().height()) leaveEvent((QEvent*)event); + if (event->globalPos().x() == 0 || event->globalPos().y() == 0) leaveEvent((QEvent*)event); + if (event->globalPos().x() == screen()->geometry().width() || event->globalPos().y() == screen()->geometry().height()) leaveEvent((QEvent*)event); oldPos = event->pos(); #endif } From fe67c40e3360e595924076a008a3f7573c7f530a Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 8 Dec 2021 17:09:55 +0600 Subject: [PATCH 073/278] Take into account max cursor position --- src/qt/qt_rendererstack.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index e69647f00..bb80944de 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -123,7 +123,7 @@ void RendererStack::mouseMoveEvent(QMouseEvent *event) mousedata.deltax += event->pos().x() - oldPos.x(); mousedata.deltay += event->pos().y() - oldPos.y(); if (event->globalPos().x() == 0 || event->globalPos().y() == 0) leaveEvent((QEvent*)event); - if (event->globalPos().x() == screen()->geometry().width() || event->globalPos().y() == screen()->geometry().height()) leaveEvent((QEvent*)event); + if (event->globalPos().x() == (screen()->geometry().width() - 1) || event->globalPos().y() == (screen()->geometry().height() - 1)) leaveEvent((QEvent*)event); oldPos = event->pos(); #endif } From 5bc00b220f1228391c765febaa9e62aec43e240f Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Wed, 8 Dec 2021 14:47:09 +0100 Subject: [PATCH 074/278] handle early ui_msgbox_header() calls before main_window has been created --- src/qt/qt_ui.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_ui.cpp b/src/qt/qt_ui.cpp index 4af7423cc..a62a37de9 100644 --- a/src/qt/qt_ui.cpp +++ b/src/qt/qt_ui.cpp @@ -2,6 +2,7 @@ #include #include +#include #include @@ -60,7 +61,13 @@ int ui_msgbox_header(int flags, void *header, void* message) { auto hdr = QString::fromWCharArray(reinterpret_cast(header)); auto msg = QString::fromWCharArray(reinterpret_cast(message)); - main_window->showMessage(hdr, msg); + // any error in early init + if (main_window == nullptr) { + QMessageBox::critical(nullptr, hdr, msg); + } else { + // else scope it to main_window + main_window->showMessage(hdr, msg); + } return 0; } From ededff3ae1bcb664d2303066930674c392ccf2ea Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Wed, 8 Dec 2021 15:12:21 +0100 Subject: [PATCH 075/278] action checkboxes for greyscale conversion --- src/qt/qt_mainwindow.cpp | 55 +++++++++++++++++++++++++++++++++++++--- src/qt/qt_mainwindow.hpp | 5 ++++ 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index e417aa304..ce114a179 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -153,6 +153,23 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionFullScreen_int->setChecked(true); break; } + switch (video_grayscale) { + case 0: + ui->actionRGB_Color->setChecked(true); + break; + case 1: + ui->actionRGB_Grayscale->setChecked(true); + break; + case 2: + ui->actionAmber_monitor->setChecked(true); + break; + case 3: + ui->actionGreen_monitor->setChecked(true); + break; + case 4: + ui->actionWhite_monitor->setChecked(true); + break; + } setFocusPolicy(Qt::StrongFocus); ui->gles->setFocusPolicy(Qt::NoFocus); @@ -897,6 +914,7 @@ video_toggle_option(QAction* action, int *val) { startblit(); *val ^= 1; + video_copy = (video_grayscale || invert_display) ? video_transform_copy : memcpy; action->setChecked(*val > 0 ? true : false); endblit(); config_save(); @@ -905,9 +923,6 @@ video_toggle_option(QAction* action, int *val) void MainWindow::on_actionInverted_VGA_monitor_triggered() { video_toggle_option(ui->actionInverted_VGA_monitor, &invert_display); - startblit(); - video_copy = (video_grayscale || invert_display) ? video_transform_copy : memcpy; - endblit(); } static void update_scaled_checkboxes(Ui::MainWindow* ui, QAction* selected) { @@ -989,3 +1004,37 @@ void MainWindow::on_actionFullScreen_int_triggered() { update_fullscreen_scale_checkboxes(ui, ui->actionFullScreen_int); } +static void update_greyscale_checkboxes(Ui::MainWindow* ui, QAction* selected, int value) { + ui->actionRGB_Color->setChecked(ui->actionRGB_Color == selected); + ui->actionRGB_Grayscale->setChecked(ui->actionRGB_Grayscale == selected); + ui->actionAmber_monitor->setChecked(ui->actionAmber_monitor == selected); + ui->actionGreen_monitor->setChecked(ui->actionGreen_monitor == selected); + ui->actionWhite_monitor->setChecked(ui->actionWhite_monitor == selected); + + startblit(); + video_grayscale = value; + video_copy = (video_grayscale || invert_display) ? video_transform_copy : memcpy; + endblit(); + device_force_redraw(); + config_save(); +} + +void MainWindow::on_actionRGB_Color_triggered() { + update_greyscale_checkboxes(ui, ui->actionRGB_Color, 0); +} + +void MainWindow::on_actionRGB_Grayscale_triggered() { + update_greyscale_checkboxes(ui, ui->actionRGB_Grayscale, 1); +} + +void MainWindow::on_actionAmber_monitor_triggered() { + update_greyscale_checkboxes(ui, ui->actionAmber_monitor, 2); +} + +void MainWindow::on_actionGreen_monitor_triggered() { + update_greyscale_checkboxes(ui, ui->actionGreen_monitor, 3); +} + +void MainWindow::on_actionWhite_monitor_triggered() { + update_greyscale_checkboxes(ui, ui->actionWhite_monitor, 4); +} diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 406d9a26a..ac1fd9da5 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -68,6 +68,11 @@ private slots: void on_actionFullScreen_keepRatio_triggered(); void on_actionFullScreen_43_triggered(); void on_actionFullScreen_stretch_triggered(); + void on_actionWhite_monitor_triggered(); + void on_actionGreen_monitor_triggered(); + void on_actionAmber_monitor_triggered(); + void on_actionRGB_Grayscale_triggered(); + void on_actionRGB_Color_triggered(); void refreshMediaMenu(); void showMessage_(const QString& header, const QString& message); From 5f5828a58d3d738d82510f898a2acdbf0b2efa99 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Wed, 8 Dec 2021 15:17:33 +0100 Subject: [PATCH 076/278] action checkboxes for greyscale conversion type --- src/qt/qt_mainwindow.cpp | 33 +++++++++++++++++++++++++++++++++ src/qt/qt_mainwindow.hpp | 3 +++ 2 files changed, 36 insertions(+) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index ce114a179..8d6a6b671 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -170,6 +170,17 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionWhite_monitor->setChecked(true); break; } + switch (video_graytype) { + case 0: + ui->actionBT601_NTSC_PAL->setChecked(true); + break; + case 1: + ui->actionBT709_HDTV->setChecked(true); + break; + case 2: + ui->actionAverage->setChecked(true); + break; + } setFocusPolicy(Qt::StrongFocus); ui->gles->setFocusPolicy(Qt::NoFocus); @@ -1038,3 +1049,25 @@ void MainWindow::on_actionGreen_monitor_triggered() { void MainWindow::on_actionWhite_monitor_triggered() { update_greyscale_checkboxes(ui, ui->actionWhite_monitor, 4); } + +static void update_greyscale_type_checkboxes(Ui::MainWindow* ui, QAction* selected, int value) { + ui->actionBT601_NTSC_PAL->setChecked(ui->actionBT601_NTSC_PAL == selected); + ui->actionBT709_HDTV->setChecked(ui->actionBT709_HDTV == selected); + ui->actionAverage->setChecked(ui->actionAverage == selected); + + video_graytype = value; + device_force_redraw(); + config_save(); +} + +void MainWindow::on_actionBT601_NTSC_PAL_triggered() { + update_greyscale_type_checkboxes(ui, ui->actionBT601_NTSC_PAL, 0); +} + +void MainWindow::on_actionBT709_HDTV_triggered() { + update_greyscale_type_checkboxes(ui, ui->actionBT709_HDTV, 1); +} + +void MainWindow::on_actionAverage_triggered() { + update_greyscale_type_checkboxes(ui, ui->actionAverage, 2); +} diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index ac1fd9da5..972b2a161 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -73,6 +73,9 @@ private slots: void on_actionAmber_monitor_triggered(); void on_actionRGB_Grayscale_triggered(); void on_actionRGB_Color_triggered(); + void on_actionAverage_triggered(); + void on_actionBT709_HDTV_triggered(); + void on_actionBT601_NTSC_PAL_triggered(); void refreshMediaMenu(); void showMessage_(const QString& header, const QString& message); From 03096ca9f4bddb6e8b04cd73837e7c7c6342c14c Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 9 Dec 2021 00:01:22 +0600 Subject: [PATCH 077/278] Fix mouse support on EGLFS --- src/qt/qt_rendererstack.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index bb80944de..b1c1bde5f 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -70,12 +70,14 @@ void RendererStack::mousePoll() #endif } +int ignoreNextMouseEvent = 1; void RendererStack::mouseReleaseEvent(QMouseEvent *event) { if (this->geometry().contains(event->pos()) && event->button() == Qt::LeftButton && !mouse_capture) { plat_mouse_capture(1); this->setCursor(Qt::BlankCursor); + if (!ignoreNextMouseEvent) ignoreNextMouseEvent++; // Avoid jumping cursor when moved. return; } if (mouse_capture && event->button() == Qt::MiddleButton && mouse_get_buttons() < 3) @@ -105,7 +107,6 @@ void RendererStack::wheelEvent(QWheelEvent *event) } } -int ignoreNextMouseEvent = 1; void RendererStack::mouseMoveEvent(QMouseEvent *event) { if (QApplication::platformName().contains("wayland")) @@ -122,8 +123,13 @@ void RendererStack::mouseMoveEvent(QMouseEvent *event) if (ignoreNextMouseEvent) { oldPos = event->pos(); ignoreNextMouseEvent--; event->accept(); return; } mousedata.deltax += event->pos().x() - oldPos.x(); mousedata.deltay += event->pos().y() - oldPos.y(); - if (event->globalPos().x() == 0 || event->globalPos().y() == 0) leaveEvent((QEvent*)event); - if (event->globalPos().x() == (screen()->geometry().width() - 1) || event->globalPos().y() == (screen()->geometry().height() - 1)) leaveEvent((QEvent*)event); + if (QApplication::platformName() == "eglfs") + { + leaveEvent((QEvent*)event); + ignoreNextMouseEvent--; + } + else if (event->globalPos().x() == 0 || event->globalPos().y() == 0) leaveEvent((QEvent*)event); + else if (event->globalPos().x() == (screen()->geometry().width() - 1) || event->globalPos().y() == (screen()->geometry().height() - 1)) leaveEvent((QEvent*)event); oldPos = event->pos(); #endif } From 55be576cb99fae803b9bf01edb4e288bd587d5e3 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 9 Dec 2021 16:27:53 +0600 Subject: [PATCH 078/278] Implement Help menu items --- src/qt/qt_mainwindow.cpp | 39 +++++++++++++++++++++++++++++++++++++++ src/qt/qt_mainwindow.hpp | 3 +++ src/qt/qt_mainwindow.ui | 30 ++++++++++++++++++++++++++++++ src/qt_resources.qrc | 4 ++++ 4 files changed, 76 insertions(+) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 8d6a6b671..3ca336ad4 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -16,6 +16,10 @@ extern "C" { #include #include #include +#include +#include +#include +#include #include #include @@ -48,6 +52,8 @@ MainWindow::MainWindow(QWidget *parent) : ui->ogl->setRenderType(HardwareRenderer::RenderType::OpenGL); ui->gles->setRenderType(HardwareRenderer::RenderType::OpenGLES); + this->setWindowIcon(QIcon(":/settings/win/icons/86Box-yellow.ico")); + connect(this, &MainWindow::showMessageForNonQtThread, this, &MainWindow::showMessage_, Qt::BlockingQueuedConnection); connect(this, &MainWindow::setTitleForNonQtThread, this, &MainWindow::setTitle_, Qt::BlockingQueuedConnection); @@ -1071,3 +1077,36 @@ void MainWindow::on_actionBT709_HDTV_triggered() { void MainWindow::on_actionAverage_triggered() { update_greyscale_type_checkboxes(ui, ui->actionAverage, 2); } + +void MainWindow::on_actionAbout_Qt_triggered() +{ + QApplication::aboutQt(); +} + +void MainWindow::on_actionAbout_86Box_triggered() +{ + QMessageBox msgBox; + msgBox.setTextFormat(Qt::RichText); + msgBox.setText("About 86Box"); + msgBox.setInformativeText(R"( +An emulator of old computers + +Authors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others. + +Released under the GNU General Public License version 2 or later. See LICENSE for more information. +)"); + msgBox.setWindowTitle("About 86Box"); + msgBox.addButton("OK", QMessageBox::ButtonRole::AcceptRole); + auto webSiteButton = msgBox.addButton("86box.net", QMessageBox::ButtonRole::HelpRole); + webSiteButton->connect(webSiteButton, &QPushButton::released, []() + { + QDesktopServices::openUrl(QUrl("https://86box.net/")); + }); + msgBox.setIconPixmap(QIcon(":/settings/win/icons/86Box-yellow.ico").pixmap(32, 32)); + msgBox.exec(); +} + +void MainWindow::on_actionDocumentation_triggered() +{ + QDesktopServices::openUrl(QUrl("https://86box.readthedocs.io")); +} diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 972b2a161..c84f65484 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -76,6 +76,9 @@ private slots: void on_actionAverage_triggered(); void on_actionBT709_HDTV_triggered(); void on_actionBT601_NTSC_PAL_triggered(); + void on_actionDocumentation_triggered(); + void on_actionAbout_86Box_triggered(); + void on_actionAbout_Qt_triggered(); void refreshMediaMenu(); void showMessage_(const QString& header, const QString& message); diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index af8a8a2bd..fafb6b3f2 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -166,10 +166,19 @@ Media + + + Help + + + + + + @@ -466,6 +475,27 @@ Average + + + About Qt... + + + QAction::AboutQtRole + + + + + About 86Box... + + + QAction::AboutRole + + + + + Documentation... + + diff --git a/src/qt_resources.qrc b/src/qt_resources.qrc index 8c66e5ca2..0db4552e9 100644 --- a/src/qt_resources.qrc +++ b/src/qt_resources.qrc @@ -43,5 +43,9 @@ win/icons/zip_disabled.ico win/icons/zip_empty.ico win/icons/zip_empty_active.ico + win/icons/86Box-gray.ico + win/icons/86Box-green.ico + win/icons/86Box-red.ico + win/icons/86Box-yellow.ico From 13b18c9d8d2f8254447772ec4a12a6908d95633b Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Thu, 9 Dec 2021 11:55:28 +0100 Subject: [PATCH 079/278] added handler for force 4:3, monochrome contrast and overscan --- src/qt/qt_mainwindow.cpp | 27 +++++++++++++++++++++++++++ src/qt/qt_mainwindow.hpp | 3 +++ 2 files changed, 30 insertions(+) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 8d6a6b671..b86127997 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -7,6 +7,7 @@ extern "C" { #include <86box/keyboard.h> #include <86box/plat.h> #include <86box/video.h> +#include <86box/vid_ega.h> }; #include @@ -181,6 +182,15 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionAverage->setChecked(true); break; } + if (force_43 > 0) { + ui->actionForce_4_3_display_ratio->setChecked(true); + } + if (enable_overscan > 0) { + ui->actionCGA_PCjr_Tandy_EGA_S_VGA_overscan->setChecked(true); + } + if (vid_cga_contrast > 0) { + ui->actionChange_contrast_for_monochrome_display->setChecked(true); + } setFocusPolicy(Qt::StrongFocus); ui->gles->setFocusPolicy(Qt::NoFocus); @@ -1071,3 +1081,20 @@ void MainWindow::on_actionBT709_HDTV_triggered() { void MainWindow::on_actionAverage_triggered() { update_greyscale_type_checkboxes(ui, ui->actionAverage, 2); } + +void MainWindow::on_actionCGA_PCjr_Tandy_EGA_S_VGA_overscan_triggered() { + update_overscan = 1; + video_toggle_option(ui->actionCGA_PCjr_Tandy_EGA_S_VGA_overscan, &enable_overscan); +} + +void MainWindow::on_actionChange_contrast_for_monochrome_display_triggered() { + vid_cga_contrast ^= 1; + cgapal_rebuild(); + config_save(); +} + +void MainWindow::on_actionForce_4_3_display_ratio_triggered() { + video_toggle_option(ui->actionForce_4_3_display_ratio, &force_43); + video_force_resize_set(1); +} + diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 972b2a161..148de615b 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -76,6 +76,9 @@ private slots: void on_actionAverage_triggered(); void on_actionBT709_HDTV_triggered(); void on_actionBT601_NTSC_PAL_triggered(); + void on_actionForce_4_3_display_ratio_triggered(); + void on_actionChange_contrast_for_monochrome_display_triggered(); + void on_actionCGA_PCjr_Tandy_EGA_S_VGA_overscan_triggered(); void refreshMediaMenu(); void showMessage_(const QString& header, const QString& message); From 05943477a6a923b36415a3ded2e93af7f0b567a1 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Thu, 9 Dec 2021 19:48:56 +0100 Subject: [PATCH 080/278] hide statusbar and menubar when fullscreen. prevent exit-fullscreen from triggering 'enter fullscreen' --- src/qt/qt_mainwindow.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 148d59fdf..5844e7765 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -787,9 +787,13 @@ uint16_t x11_keycode_to_keysym(uint32_t keycode) void MainWindow::on_actionFullscreen_triggered() { if (video_fullscreen > 0) { + ui->menubar->show(); + ui->statusbar->show(); showNormal(); video_fullscreen = 0; } else { + ui->menubar->hide(); + ui->statusbar->hide(); showFullScreen(); video_fullscreen = 1; } @@ -870,7 +874,7 @@ void MainWindow::keyPressEvent(QKeyEvent* event) keyboard_input(1, x11_keycode_to_keysym(event->nativeScanCode())); #endif - if (keyboard_isfsexit()) { + if ((video_fullscreen > 0) && keyboard_isfsexit()) { ui->actionFullscreen->trigger(); } From 67de5124ca6374b9fef6f71143e6c39f7d1a332f Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Thu, 9 Dec 2021 20:59:50 +0200 Subject: [PATCH 081/278] Add windows raw input via qt native event filter --- src/qt/CMakeLists.txt | 4 + src/qt/qt_main.cpp | 16 ++ src/qt/qt_mainwindow.cpp | 15 +- src/qt/qt_mainwindow.hpp | 4 + src/qt/qt_winrawinputfilter.cpp | 395 ++++++++++++++++++++++++++++++++ src/qt/qt_winrawinputfilter.hpp | 72 ++++++ 6 files changed, 504 insertions(+), 2 deletions(-) create mode 100644 src/qt/qt_winrawinputfilter.cpp create mode 100644 src/qt/qt_winrawinputfilter.hpp diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 65a4a0cbf..ae0a3d86f 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -91,6 +91,10 @@ if (APPLE) target_sources(ui PRIVATE macos_event_filter.mm) endif() +if (WIN32) + target_sources(ui PRIVATE qt_winrawinputfilter.hpp qt_winrawinputfilter.cpp) +endif() + target_link_libraries( plat PRIVATE diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 431da1fd6..c3a9e13c8 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -14,6 +14,10 @@ Q_IMPORT_PLUGIN(QWindowsVistaStylePlugin) #endif #endif +#ifdef Q_OS_WINDOWS +#include "qt_winrawinputfilter.hpp" +#endif + #include <86box/86box.h> #include <86box/plat.h> #include <86box/ui.h> @@ -101,6 +105,18 @@ int main(int argc, char* argv[]) { main_window->show(); main_window->setFocus(); app.installEventFilter(main_window); + +#ifdef Q_OS_WINDOWS + auto rawInputFilter = WindowsRawInputFilter::Register(); + if (rawInputFilter) + { + app.installNativeEventFilter(rawInputFilter.get()); + QObject::disconnect(main_window, &MainWindow::pollMouse, 0, 0); + QObject::connect(main_window, &MainWindow::pollMouse, (WindowsRawInputFilter*)rawInputFilter.get(), &WindowsRawInputFilter::mousePoll); + main_window->setSendKeyboardInput(false); + } +#endif + auto widgetList = app.allWidgets(); for (auto curWidget : widgetList) { diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 54c29645b..c7f3b83c5 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -850,11 +850,14 @@ void MainWindow::showMessage_(const QString &header, const QString &message) { void MainWindow::keyPressEvent(QKeyEvent* event) { + if (send_keyboard_input) + { #ifdef __APPLE__ - keyboard_input(1, x11_keycode_to_keysym(event->nativeVirtualKey())); + keyboard_input(1, x11_keycode_to_keysym(event->nativeVirtualKey())); #else - keyboard_input(1, x11_keycode_to_keysym(event->nativeScanCode())); + keyboard_input(1, x11_keycode_to_keysym(event->nativeScanCode())); #endif + } if (keyboard_isfsexit()) { ui->actionFullscreen->trigger(); @@ -873,6 +876,9 @@ void MainWindow::blitToWidget(int x, int y, int w, int h) void MainWindow::keyReleaseEvent(QKeyEvent* event) { + if (!send_keyboard_input) + return; + #ifdef __APPLE__ keyboard_input(0, x11_keycode_to_keysym(event->nativeVirtualKey())); #else @@ -1073,3 +1079,8 @@ void MainWindow::on_actionBT709_HDTV_triggered() { void MainWindow::on_actionAverage_triggered() { update_greyscale_type_checkboxes(ui, ui->actionAverage, 2); } + +void MainWindow::setSendKeyboardInput(bool enabled) +{ + send_keyboard_input = enabled; +} \ No newline at end of file diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 972b2a161..f1916db65 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -28,6 +28,7 @@ public: void setTitle(const wchar_t* title); void getTitle(wchar_t* title); void blitToWidget(int x, int y, int w, int h); + void setSendKeyboardInput(bool enabled); signals: void paint(const QImage& image); void resizeContents(int w, int h); @@ -92,6 +93,9 @@ private: Ui::MainWindow *ui; std::unique_ptr status; std::shared_ptr mm; + + /* If main window should send keyboard input */ + bool send_keyboard_input = true; }; #endif // QT_MAINWINDOW_HPP diff --git a/src/qt/qt_winrawinputfilter.cpp b/src/qt/qt_winrawinputfilter.cpp new file mode 100644 index 000000000..5bca84149 --- /dev/null +++ b/src/qt/qt_winrawinputfilter.cpp @@ -0,0 +1,395 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Windows raw input native filter for QT + * + * Authors: + * Teemu Korhonen + * Miran Grca, + * + * Copyright 2021 Teemu Korhonen + * Copyright 2016-2018 Miran Grca. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "qt_winrawinputfilter.hpp" + +#include + +#include <86box/keyboard.h> +#include <86box/mouse.h> +#include <86box/plat.h> +#include <86box/86box.h> + +#include +#include + +std::unique_ptr WindowsRawInputFilter::Register() +{ + RAWINPUTDEVICE rid[2] = + { + { + .usUsagePage = 0x01, + .usUsage = 0x06, + .dwFlags = RIDEV_NOHOTKEYS, + .hwndTarget = NULL + }, + { + .usUsagePage = 0x01, + .usUsage = 0x02, + .dwFlags = 0, + .hwndTarget = NULL + } + }; + + if (RegisterRawInputDevices(rid, 2, sizeof(rid[0])) == FALSE) + return std::unique_ptr(nullptr); + + std::unique_ptr inputfilter(new WindowsRawInputFilter()); + + return inputfilter; +} + +WindowsRawInputFilter::WindowsRawInputFilter() +{ + for (size_t i = 0; i < sizeof(scancode_map) / sizeof(scancode_map[0]); i++) + scancode_map[i] = i; + + keyboard_getkeymap(); +} + +WindowsRawInputFilter::~WindowsRawInputFilter() +{ + RAWINPUTDEVICE rid[2] = + { + { + .usUsagePage = 0x01, + .usUsage = 0x06, + .dwFlags = RIDEV_REMOVE, + .hwndTarget = NULL + }, + { + .usUsagePage = 0x01, + .usUsage = 0x02, + .dwFlags = RIDEV_REMOVE, + .hwndTarget = NULL + } + }; + + RegisterRawInputDevices(rid, 2, sizeof(rid[0])); +} + +bool WindowsRawInputFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *result) +{ + if (eventType == "windows_generic_MSG") + { + MSG *msg = static_cast(message); + + if (msg->message == WM_INPUT) + { + //if (infocus) /* TODO: Need way to tell if in menu or settings dialog */ + handle_input((HRAWINPUT)msg->lParam); + + return true; + } + } + + return false; +} + +void WindowsRawInputFilter::handle_input(HRAWINPUT input) +{ + UINT size = 0; + + GetRawInputData(input, RID_INPUT, NULL, &size, sizeof(RAWINPUTHEADER)); + + std::vector buf(size); + + if (GetRawInputData(input, RID_INPUT, buf.data(), &size, sizeof(RAWINPUTHEADER)) == size) + { + PRAWINPUT raw = (PRAWINPUT)buf.data(); + + switch(raw->header.dwType) + { + case RIM_TYPEKEYBOARD: + keyboard_handle(raw); + break; + case RIM_TYPEMOUSE: + if (mouse_capture) + mouse_handle(raw); + break; + } + } +} + +/* The following is more or less a direct copy of the old WIN32 implementation */ + +void WindowsRawInputFilter::keyboard_handle(PRAWINPUT raw) +{ + USHORT scancode; + static int recv_lalt = 0, recv_ralt = 0, recv_tab = 0; + + RAWKEYBOARD rawKB = raw->data.keyboard; + scancode = rawKB.MakeCode; + + if (kbd_req_capture && !mouse_capture && !video_fullscreen) + return; + + /* If it's not a scan code that starts with 0xE1 */ + if (!(rawKB.Flags & RI_KEY_E1)) + { + if (rawKB.Flags & RI_KEY_E0) + scancode |= 0x100; + + /* Translate the scan code to 9-bit */ + scancode = convert_scan_code(scancode); + + /* Remap it according to the list from the Registry */ + if (scancode != scancode_map[scancode]) + pclog("Scan code remap: %03X -> %03X\n", scancode, scancode); + scancode = scancode_map[scancode]; + + /* If it's not 0xFFFF, send it to the emulated + keyboard. + We use scan code 0xFFFF to mean a mapping that + has a prefix other than E0 and that is not E1 1D, + which is, for our purposes, invalid. */ + if ((scancode == 0x00F) && + !(rawKB.Flags & RI_KEY_BREAK) && + (recv_lalt || recv_ralt) && + !mouse_capture) + { + /* We received a TAB while ALT was pressed, while the mouse + is not captured, suppress the TAB and send an ALT key up. */ + if (recv_lalt) + { + keyboard_input(0, 0x038); + /* Extra key press and release so the guest is not stuck in the + menu bar. */ + keyboard_input(1, 0x038); + keyboard_input(0, 0x038); + recv_lalt = 0; + } + if (recv_ralt) + { + keyboard_input(0, 0x138); + /* Extra key press and release so the guest is not stuck in the + menu bar. */ + keyboard_input(1, 0x138); + keyboard_input(0, 0x138); + recv_ralt = 0; + } + } + else if (((scancode == 0x038) || (scancode == 0x138)) && + !(rawKB.Flags & RI_KEY_BREAK) && + recv_tab && + !mouse_capture) + { + /* We received an ALT while TAB was pressed, while the mouse + is not captured, suppress the ALT and send a TAB key up. */ + keyboard_input(0, 0x00F); + recv_tab = 0; + } + else + { + switch (scancode) + { + case 0x00F: + recv_tab = !(rawKB.Flags & RI_KEY_BREAK); + break; + case 0x038: + recv_lalt = !(rawKB.Flags & RI_KEY_BREAK); + break; + case 0x138: + recv_ralt = !(rawKB.Flags & RI_KEY_BREAK); + break; + } + + /* Translate right CTRL to left ALT if the user has so + chosen. */ + if ((scancode == 0x11D) && rctrl_is_lalt) + scancode = 0x038; + + /* Normal scan code pass through, pass it through as is if + it's not an invalid scan code. */ + if (scancode != 0xFFFF) + keyboard_input(!(rawKB.Flags & RI_KEY_BREAK), scancode); + } + } + else + { + if (rawKB.MakeCode == 0x1D) + { + scancode = scancode_map[0x100]; /* Translate E1 1D to 0x100 (which would + otherwise be E0 00 but that is invalid + anyway). + Also, take a potential mapping into + account. */ + } + else + scancode = 0xFFFF; + if (scancode != 0xFFFF) + keyboard_input(!(rawKB.Flags & RI_KEY_BREAK), scancode); + } +} + +/* This is so we can disambiguate scan codes that would otherwise conflict and get + passed on incorrectly. */ +UINT16 WindowsRawInputFilter::convert_scan_code(UINT16 scan_code) +{ + if ((scan_code & 0xff00) == 0xe000) + scan_code = (scan_code & 0xff) | 0x0100; + + if (scan_code == 0xE11D) + scan_code = 0x0100; + /* E0 00 is sent by some USB keyboards for their special keys, as it is an + invalid scan code (it has no untranslated set 2 equivalent), we mark it + appropriately so it does not get passed through. */ + else if ((scan_code > 0x01FF) || (scan_code == 0x0100)) + scan_code = 0xFFFF; + + return scan_code; +} + +void WindowsRawInputFilter::keyboard_getkeymap() +{ + const LPCSTR keyName = "SYSTEM\\CurrentControlSet\\Control\\Keyboard Layout"; + const LPCSTR valueName = "Scancode Map"; + unsigned char buf[32768]; + DWORD bufSize; + HKEY hKey; + int j; + UINT32 *bufEx2; + int scMapCount; + UINT16 *bufEx; + int scancode_unmapped; + int scancode_mapped; + + /* First, prepare the default scan code map list which is 1:1. + * Remappings will be inserted directly into it. + * 512 bytes so this takes less memory, bit 9 set means E0 + * prefix. + */ + for (j = 0; j < 512; j++) + scancode_map[j] = j; + + /* Get the scan code remappings from: + HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout */ + bufSize = 32768; + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, keyName, 0, 1, &hKey) == ERROR_SUCCESS) + { + if (RegQueryValueEx(hKey, valueName, NULL, NULL, buf, &bufSize) == ERROR_SUCCESS) + { + bufEx2 = (UINT32 *)buf; + scMapCount = bufEx2[2]; + if ((bufSize != 0) && (scMapCount != 0)) + { + bufEx = (UINT16 *)(buf + 12); + for (j = 0; j < scMapCount * 2; j += 2) + { + /* Each scan code is 32-bit: 16 bits of remapped scan code, + and 16 bits of original scan code. */ + scancode_unmapped = bufEx[j + 1]; + scancode_mapped = bufEx[j]; + + scancode_unmapped = convert_scan_code(scancode_unmapped); + scancode_mapped = convert_scan_code(scancode_mapped); + + /* Ignore source scan codes with prefixes other than E1 + that are not E1 1D. */ + if (scancode_unmapped != 0xFFFF) + scancode_map[scancode_unmapped] = scancode_mapped; + } + } + } + RegCloseKey(hKey); + } +} + +void WindowsRawInputFilter::mouse_handle(PRAWINPUT raw) +{ + RAWMOUSE state = raw->data.mouse; + static int x, y; + + /* read mouse buttons and wheel */ + if (state.usButtonFlags & RI_MOUSE_LEFT_BUTTON_DOWN) + buttons |= 1; + else if (state.usButtonFlags & RI_MOUSE_LEFT_BUTTON_UP) + buttons &= ~1; + + if (state.usButtonFlags & RI_MOUSE_MIDDLE_BUTTON_DOWN) + buttons |= 4; + else if (state.usButtonFlags & RI_MOUSE_MIDDLE_BUTTON_UP) + buttons &= ~4; + + if (state.usButtonFlags & RI_MOUSE_RIGHT_BUTTON_DOWN) + buttons |= 2; + else if (state.usButtonFlags & RI_MOUSE_RIGHT_BUTTON_UP) + buttons &= ~2; + + if (state.usButtonFlags & RI_MOUSE_WHEEL) + { + dwheel += (SHORT)state.usButtonData / 120; + } + + if (state.usFlags & MOUSE_MOVE_ABSOLUTE) + { + /* absolute mouse, i.e. RDP or VNC + * seems to work fine for RDP on Windows 10 + * Not sure about other environments. + */ + dx += (state.lLastX - x) / 25; + dy += (state.lLastY - y) / 25; + x = state.lLastX; + y = state.lLastY; + } + else + { + /* relative mouse, i.e. regular mouse */ + dx += state.lLastX; + dy += state.lLastY; + } +} + +void WindowsRawInputFilter::mousePoll() +{ + if (mouse_capture || video_fullscreen) + { + static int b = 0; + + if (dx != 0 || dy != 0 || dwheel != 0) + { + mouse_x += dx; + mouse_y += dy; + mouse_z = dwheel; + + dx = 0; + dy = 0; + dwheel = 0; + } + + if (b != buttons) + { + mouse_buttons = buttons; + b = buttons; + } + } +} \ No newline at end of file diff --git a/src/qt/qt_winrawinputfilter.hpp b/src/qt/qt_winrawinputfilter.hpp new file mode 100644 index 000000000..cce981d69 --- /dev/null +++ b/src/qt/qt_winrawinputfilter.hpp @@ -0,0 +1,72 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Header file for windows raw input native filter for QT + * + * Authors: + * Teemu Korhonen + * + * Copyright 2021 Teemu Korhonen + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef QT_WINDOWSRAWINPUTFILTER_HPP +#define QT_WINDOWSRAWINPUTFILTER_HPP + +#include +#include +#include + +#include + +#include + +class WindowsRawInputFilter : public QObject, public QAbstractNativeEventFilter +{ + Q_OBJECT + +public: + static std::unique_ptr Register(); + + bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) override; + + ~WindowsRawInputFilter(); + +public slots: + void mousePoll(); + +private: + uint16_t scancode_map[768]; + int buttons = 0; + int dx = 0; + int dy = 0; + int dwheel = 0; + + WindowsRawInputFilter(); + + void handle_input(HRAWINPUT input); + void keyboard_handle(PRAWINPUT raw); + void mouse_handle(PRAWINPUT raw); + static UINT16 convert_scan_code(UINT16 scan_code); + void keyboard_getkeymap(); +}; + +#endif \ No newline at end of file From d72d92ca6467ac6b25f8fb276a8185dbad1107b8 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Thu, 9 Dec 2021 20:10:23 +0100 Subject: [PATCH 082/278] print the 86box version in about box, add githash if available --- src/qt/qt_mainwindow.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 5844e7765..5d51dc340 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -8,6 +8,7 @@ extern "C" { #include <86box/plat.h> #include <86box/video.h> #include <86box/vid_ega.h> +#include <86box/version.h> }; #include @@ -1101,7 +1102,11 @@ void MainWindow::on_actionAbout_86Box_triggered() { QMessageBox msgBox; msgBox.setTextFormat(Qt::RichText); - msgBox.setText("About 86Box"); + QString githash; +#ifdef EMU_GIT_HASH + githash = QString(" [%1]").arg(EMU_GIT_HASH); +#endif + msgBox.setText(QString("86Box %1%2").arg(EMU_VERSION_FULL, githash)); msgBox.setInformativeText(R"( An emulator of old computers From 7934d90039029dbc2190fbc76b0f04a396aa9481 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 10 Dec 2021 01:03:20 +0600 Subject: [PATCH 083/278] libevdev mouse support --- src/qt/CMakeLists.txt | 7 +++ src/qt/evdev_mouse.cpp | 102 +++++++++++++++++++++++++++++++++ src/qt/evdev_mouse.hpp | 4 ++ src/qt/qt_hardwarerenderer.hpp | 6 -- src/qt/qt_rendererstack.cpp | 15 +++++ 5 files changed, 128 insertions(+), 6 deletions(-) create mode 100644 src/qt/evdev_mouse.cpp create mode 100644 src/qt/evdev_mouse.hpp diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 7936e3a42..cb25cc4d4 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -110,6 +110,13 @@ target_link_libraries( if (UNIX AND NOT APPLE) find_package(X11 REQUIRED) target_link_libraries(ui PRIVATE X11::X11) + find_package(PkgConfig REQUIRED) + pkg_check_modules(LIBEVDEV IMPORTED_TARGET libevdev) + if (LIBEVDEV_FOUND) + target_compile_definitions(ui PRIVATE EVDEV_INPUT) + target_link_libraries(ui PUBLIC PkgConfig::LIBEVDEV) + target_sources(ui PRIVATE evdev_mouse.cpp) + endif() find_package(ECM NO_MODULE) if (ECM_FOUND) diff --git a/src/qt/evdev_mouse.cpp b/src/qt/evdev_mouse.cpp new file mode 100644 index 000000000..cb4cd4ffe --- /dev/null +++ b/src/qt/evdev_mouse.cpp @@ -0,0 +1,102 @@ +#include "evdev_mouse.hpp" +#include +#include +#include + +#include +#include +#include +#include + +#include + +extern "C" +{ +#include <86box/86box.h> +#include <86box/plat.h> +#include <86box/mouse.h> +} + +static std::vector> evdev_mice; +static std::atomic stopped = false; +static QThread* evdev_thread; + +static std::atomic evdev_mouse_rel_x = 0, evdev_mouse_rel_y = 0; + +void evdev_mouse_poll() +{ + if (!evdev_mice.size() || !mouse_capture) + { + evdev_mouse_rel_x = 0; + evdev_mouse_rel_y = 0; + return; + } + mouse_x = evdev_mouse_rel_x; + mouse_y = evdev_mouse_rel_y; + evdev_mouse_rel_x = evdev_mouse_rel_y = 0; +} + +void evdev_thread_func() +{ + while (!stopped) + { + for (int i = 0; i < evdev_mice.size(); i++) + { + struct input_event ev; + int rc = libevdev_next_event(evdev_mice[i].second, LIBEVDEV_READ_FLAG_NORMAL, &ev); + if (rc == 0 && ev.type == EV_REL && mouse_capture) + { + if (ev.code == REL_X) evdev_mouse_rel_x += ev.value; + if (ev.code == REL_Y) evdev_mouse_rel_y += ev.value; + } + } + } + for (int i = 0; i < evdev_mice.size(); i++) + { + libevdev_free(evdev_mice[i].second); + close(evdev_mice[i].first); + } + evdev_mice.clear(); +} + +void evdev_stop() +{ + stopped = true; + evdev_thread->wait(); +} + +void evdev_init() +{ + for (int i = 0; i < 256; i++) + { + std::string evdev_device_path = "/dev/input/event" + std::to_string(i); + int fd = open(evdev_device_path.c_str(), O_NONBLOCK | O_RDONLY); + if (fd != -1) + { + libevdev* input_struct = nullptr; + int rc = libevdev_new_from_fd(fd, &input_struct); + if (rc <= -1) + { + close(fd); + continue; + } + else + { + if (!libevdev_has_event_type(input_struct, EV_REL) || !libevdev_has_event_code(input_struct, EV_KEY, BTN_LEFT)) + { + libevdev_free(input_struct); + close(fd); + continue; + } + evdev_mice.push_back(std::make_pair(fd, input_struct)); + } + } + else if (errno == ENOENT) break; + } + if (evdev_mice.size() != 0) + { + evdev_thread = QThread::create(evdev_thread_func); + evdev_thread->start(); + atexit(evdev_stop); + } +} diff --git a/src/qt/evdev_mouse.hpp b/src/qt/evdev_mouse.hpp new file mode 100644 index 000000000..7681771c6 --- /dev/null +++ b/src/qt/evdev_mouse.hpp @@ -0,0 +1,4 @@ +#ifdef EVDEV_INPUT +void evdev_init(); +void evdev_mouse_poll(); +#endif diff --git a/src/qt/qt_hardwarerenderer.hpp b/src/qt/qt_hardwarerenderer.hpp index 3a47c6284..916e52141 100644 --- a/src/qt/qt_hardwarerenderer.hpp +++ b/src/qt/qt_hardwarerenderer.hpp @@ -30,12 +30,6 @@ public: : QOpenGLWidget(parent), QOpenGLFunctions() { setMinimumSize(16, 16); -#ifdef WAYLAND - if (QApplication::platformName().contains("wayland")) { - wayland = true; - wl_init(); - } -#endif } ~HardwareRenderer() { diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index b1c1bde5f..fed414d12 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -4,6 +4,8 @@ #include "qt_softwarerenderer.hpp" #include "qt_hardwarerenderer.hpp" +#include "evdev_mouse.hpp" + #include #ifdef __APPLE__ @@ -25,6 +27,16 @@ RendererStack::RendererStack(QWidget *parent) : imagebufs = QVector(2); imagebufs[0] = QImage{QSize(2048 + 64, 2048 + 64), QImage::Format_RGB32}; imagebufs[1] = QImage{QSize(2048 + 64, 2048 + 64), QImage::Format_RGB32}; +#ifdef WAYLAND + if (QApplication::platformName().contains("wayland")) { + wl_init(); + } +#endif +#ifdef EVDEV_INPUT + if (QApplication::platformName() == "xcb" || QApplication::platformName() == "eglfs") { + evdev_init(); + } +#endif } RendererStack::~RendererStack() @@ -67,6 +79,9 @@ void RendererStack::mousePoll() if (QApplication::platformName().contains("wayland")) wl_mouse_poll(); #endif +#ifdef EVDEV_INPUT + evdev_mouse_poll(); +#endif #endif } From 7d6e46d90af4115a1ec18edf75687b4adbd2c763 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 10 Dec 2021 15:36:55 +0600 Subject: [PATCH 084/278] Make "No ROMs found" message identical to Win32 --- src/qt/qt_main.cpp | 2 +- src/qt/qt_mainwindow.cpp | 1 + src/qt/qt_ui.cpp | 4 +++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 1f0d3ea72..dbf752cc0 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -83,7 +83,7 @@ int main(int argc, char* argv[]) { pc_init(argc, argv); if (! pc_init_modules()) { - ui_msgbox_header(MBX_FATAL, VC(L"No ROMs found."), VC(L"86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory.")); + ui_msgbox_header(MBX_FATAL, VC(L"No ROMs found."), VC(L"86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory.")); return 6; } diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 5d51dc340..49578a594 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -864,6 +864,7 @@ void MainWindow::showMessage(const QString& header, const QString& message) { void MainWindow::showMessage_(const QString &header, const QString &message) { QMessageBox box(QMessageBox::Warning, header, message, QMessageBox::NoButton, this); + box.setTextFormat(Qt::TextFormat::RichText); box.exec(); } diff --git a/src/qt/qt_ui.cpp b/src/qt/qt_ui.cpp index a62a37de9..f53b80bad 100644 --- a/src/qt/qt_ui.cpp +++ b/src/qt/qt_ui.cpp @@ -63,7 +63,9 @@ int ui_msgbox_header(int flags, void *header, void* message) { // any error in early init if (main_window == nullptr) { - QMessageBox::critical(nullptr, hdr, msg); + QMessageBox msgBox(QMessageBox::Icon::Critical, hdr, msg); + msgBox.setTextFormat(Qt::TextFormat::RichText); + msgBox.exec(); } else { // else scope it to main_window main_window->showMessage(hdr, msg); From 457751d108eb35ad4c95a778a71d2ea54e7c9d3c Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 12 Dec 2021 01:16:27 +0600 Subject: [PATCH 085/278] Finish the Qt main menu --- src/qt/CMakeLists.txt | 4 + src/qt/qt_main.cpp | 1 - src/qt/qt_mainwindow.cpp | 134 +++++++++++++++++++++++++++++++- src/qt/qt_mainwindow.hpp | 12 +++ src/qt/qt_mainwindow.ui | 16 ++++ src/qt/qt_specifydimensions.cpp | 60 ++++++++++++++ src/qt/qt_specifydimensions.h | 25 ++++++ src/qt/qt_specifydimensions.ui | 127 ++++++++++++++++++++++++++++++ src/qt/qt_ui.cpp | 1 + 9 files changed, 375 insertions(+), 5 deletions(-) create mode 100644 src/qt/qt_specifydimensions.cpp create mode 100644 src/qt/qt_specifydimensions.h create mode 100644 src/qt/qt_specifydimensions.ui diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index cb25cc4d4..67c3f6795 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -85,6 +85,10 @@ add_library(ui STATIC qt_models_common.cpp qt_models_common.hpp + qt_specifydimensions.h + qt_specifydimensions.cpp + qt_specifydimensions.ui + ../qt_resources.qrc ) if (APPLE) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index dbf752cc0..5872b1131 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -109,7 +109,6 @@ int main(int argc, char* argv[]) { onesec.start(1000); /* Initialize the rendering window, or fullscreen. */ - QTimer::singleShot(50, []() { plat_resize(640, 480); } ); auto main_thread = std::thread([] { main_thread_fn(); }); diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 49578a594..49eb3a951 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -1,6 +1,8 @@ #include "qt_mainwindow.hpp" #include "ui_qt_mainwindow.h" +#include "qt_specifydimensions.h" + extern "C" { #include <86box/86box.h> #include <86box/config.h> @@ -22,6 +24,7 @@ extern "C" { #include #include #include +#include #include #include @@ -53,6 +56,7 @@ MainWindow::MainWindow(QWidget *parent) : ui->stackedWidget->setMouseTracking(true); ui->ogl->setRenderType(HardwareRenderer::RenderType::OpenGL); ui->gles->setRenderType(HardwareRenderer::RenderType::OpenGLES); + statusBar()->setVisible(!hide_status_bar); this->setWindowIcon(QIcon(":/settings/win/icons/86Box-yellow.ico")); @@ -61,6 +65,18 @@ MainWindow::MainWindow(QWidget *parent) : connect(this, &MainWindow::setTitleForNonQtThread, this, &MainWindow::setTitle_, Qt::BlockingQueuedConnection); connect(this, &MainWindow::getTitleForNonQtThread, this, &MainWindow::getTitle_, Qt::BlockingQueuedConnection); + connect(this, &MainWindow::updateMenuResizeOptions, [this]() { + ui->actionResizable_window->setEnabled(vid_resize != 2); + ui->actionResizable_window->setChecked(vid_resize == 1); + ui->menuWindow_scale_factor->setEnabled(vid_resize == 0); + }); + + connect(this, &MainWindow::updateWindowRememberOption, [this]() { + ui->actionRemember_size_and_position->setChecked(window_remember); + }); + + emit updateMenuResizeOptions(); + connect(this, &MainWindow::pollMouse, ui->stackedWidget, &RendererStack::mousePoll); connect(this, &MainWindow::setMouseCapture, this, [this](bool state) { @@ -84,8 +100,9 @@ MainWindow::MainWindow(QWidget *parent) : }); connect(this, &MainWindow::resizeContents, this, [this](int w, int h) { - if (!QApplication::platformName().contains("eglfs")) { - int modifiedHeight = h + menuBar()->height() + statusBar()->height(); + if (!QApplication::platformName().contains("eglfs") && vid_resize == 0) { + w = w / (!dpi_scale ? devicePixelRatio() : 1); + int modifiedHeight = (h / (!dpi_scale ? devicePixelRatio() : 1)) + menuBar()->height() + (statusBar()->height() * !hide_status_bar); ui->stackedWidget->resize(w, h); if (vid_resize == 0) { setFixedSize(w, modifiedHeight); @@ -109,8 +126,12 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionKeyboard_requires_capture->setChecked(kbd_req_capture); ui->actionRight_CTRL_is_left_ALT->setChecked(rctrl_is_lalt); - ui->actionResizable_window->setChecked(vid_resize > 0); + ui->actionResizable_window->setChecked(vid_resize == 1); + ui->actionRemember_size_and_position->setChecked(window_remember); ui->menuWindow_scale_factor->setEnabled(vid_resize == 0); + ui->actionHiDPI_scaling->setChecked(dpi_scale); + ui->actionHide_status_bar->setChecked(hide_status_bar); + ui->actionUpdate_status_bar_icons->setChecked(update_icons); switch (vid_api) { case 0: ui->stackedWidget->setCurrentIndex(0); @@ -212,10 +233,56 @@ MainWindow::MainWindow(QWidget *parent) : video_setblit(qt_blit); } +void MainWindow::closeEvent(QCloseEvent *event) { + if (confirm_exit) + { + QMessageBox questionbox(QMessageBox::Icon::Question, "86Box", "Are you sure you want to exit 86Box?", QMessageBox::Yes | QMessageBox::No, this); + QCheckBox *chkbox = new QCheckBox("Do not ask me again"); + questionbox.setCheckBox(chkbox); + chkbox->setChecked(!confirm_exit); + bool confirm_exit_temp = false; + QObject::connect(chkbox, &QCheckBox::stateChanged, [](int state) { + confirm_exit = (state == Qt::CheckState::Unchecked); + }); + questionbox.exec(); + if (questionbox.result() == QMessageBox::No) { + confirm_exit = true; + event->ignore(); + return; + } + config_save(); + } + if (window_remember) { + window_w = ui->stackedWidget->width(); + window_h = ui->stackedWidget->height(); + if (!QApplication::platformName().contains("wayland")) { + window_x = this->geometry().x(); + window_y = this->geometry().y(); + } + } + event->accept(); +} + MainWindow::~MainWindow() { delete ui; } +void MainWindow::showEvent(QShowEvent *event) { + if (window_remember && !QApplication::platformName().contains("wayland")) { + setGeometry(window_x, window_y, window_w, window_h); + } + if (vid_resize == 2) { + setFixedSize(fixed_size_x, fixed_size_y + this->menuBar()->height() + this->statusBar()->height()); + scrnsz_x = fixed_size_x; + scrnsz_y = fixed_size_y; + } + else if (window_remember) { + emit resizeContents(window_w, window_h); + scrnsz_x = window_w; + scrnsz_y = window_h; + } +} + void MainWindow::on_actionKeyboard_requires_capture_triggered() { kbd_req_capture ^= 1; } @@ -900,6 +967,11 @@ void MainWindow::keyReleaseEvent(QKeyEvent* event) #endif } +QSize MainWindow::getRenderWidgetSize() +{ + return ui->stackedWidget->size(); +} + void MainWindow::on_actionSoftware_Renderer_triggered() { ui->stackedWidget->setCurrentIndex(0); ui->actionHardware_Renderer_OpenGL->setChecked(false); @@ -1107,7 +1179,7 @@ void MainWindow::on_actionAbout_86Box_triggered() #ifdef EMU_GIT_HASH githash = QString(" [%1]").arg(EMU_GIT_HASH); #endif - msgBox.setText(QString("86Box %1%2").arg(EMU_VERSION_FULL, githash)); + msgBox.setText(QString("86Box v%1%2").arg(EMU_VERSION_FULL, githash)); msgBox.setInformativeText(R"( An emulator of old computers @@ -1146,3 +1218,57 @@ void MainWindow::on_actionForce_4_3_display_ratio_triggered() { video_toggle_option(ui->actionForce_4_3_display_ratio, &force_43); video_force_resize_set(1); } + +void MainWindow::on_actionRemember_size_and_position_triggered() +{ + window_remember ^= 1; + window_w = ui->stackedWidget->width(); + window_h = ui->stackedWidget->height(); + if (!QApplication::platformName().contains("wayland")) { + window_x = geometry().x(); + window_y = geometry().y(); + } + ui->actionRemember_size_and_position->setChecked(window_remember); +} + +void MainWindow::on_actionSpecify_dimensions_triggered() +{ + SpecifyDimensions dialog(this); + dialog.setWindowModality(Qt::WindowModal); + dialog.exec(); +} + +void MainWindow::on_actionHiDPI_scaling_triggered() +{ + dpi_scale ^= 1; + ui->actionHiDPI_scaling->setChecked(dpi_scale); + emit resizeContents(scrnsz_x, scrnsz_y); +} + +void MainWindow::on_actionHide_status_bar_triggered() +{ + hide_status_bar ^= 1; + ui->actionHide_status_bar->setChecked(hide_status_bar); + statusBar()->setVisible(!hide_status_bar); + if (vid_resize >= 2) setFixedSize(fixed_size_x, fixed_size_y + menuBar()->height() + (hide_status_bar ? 0 : statusBar()->height())); + else { + int vid_resize_orig = vid_resize; + vid_resize = 0; + emit resizeContents(scrnsz_x, scrnsz_y); + vid_resize = vid_resize_orig; + } +} + +void MainWindow::on_actionUpdate_status_bar_icons_triggered() +{ + update_icons ^= 1; + ui->actionUpdate_status_bar_icons->setChecked(update_icons); +} + +void MainWindow::on_actionTake_screenshot_triggered() +{ + startblit(); + screenshots++; + endblit(); + device_force_redraw(); +} diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index e46fffd87..b71704831 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -28,6 +28,7 @@ public: void setTitle(const wchar_t* title); void getTitle(wchar_t* title); void blitToWidget(int x, int y, int w, int h); + QSize getRenderWidgetSize(); signals: void paint(const QImage& image); void resizeContents(int w, int h); @@ -36,6 +37,8 @@ signals: void updateStatusBarPanes(); void updateStatusBarActivity(int tag, bool active); void updateStatusBarEmpty(int tag, bool empty); + void updateMenuResizeOptions(); + void updateWindowRememberOption(); void setFullscreen(bool state); void setMouseCapture(bool state); @@ -82,17 +85,26 @@ private slots: void on_actionForce_4_3_display_ratio_triggered(); void on_actionChange_contrast_for_monochrome_display_triggered(); void on_actionCGA_PCjr_Tandy_EGA_S_VGA_overscan_triggered(); + void on_actionRemember_size_and_position_triggered(); + void on_actionSpecify_dimensions_triggered(); + void on_actionHiDPI_scaling_triggered(); + void on_actionHide_status_bar_triggered(); + void on_actionUpdate_status_bar_icons_triggered(); void refreshMediaMenu(); void showMessage_(const QString& header, const QString& message); void setTitle_(const wchar_t* title); void getTitle_(wchar_t* title); + void on_actionTake_screenshot_triggered(); + protected: void keyPressEvent(QKeyEvent* event) override; void keyReleaseEvent(QKeyEvent* event) override; void focusInEvent(QFocusEvent* event) override; void focusOutEvent(QFocusEvent* event) override; bool eventFilter(QObject* receiver, QEvent* event) override; + void showEvent(QShowEvent* event) override; + void closeEvent(QCloseEvent* event) override; private: Ui::MainWindow *ui; diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index fafb6b3f2..f44841b4f 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -78,6 +78,9 @@ Tools + + + @@ -496,6 +499,19 @@ Documentation... + + + true + + + Update status bar icons + + + + + Take screenshot... + + diff --git a/src/qt/qt_specifydimensions.cpp b/src/qt/qt_specifydimensions.cpp new file mode 100644 index 000000000..58c2ae1a6 --- /dev/null +++ b/src/qt/qt_specifydimensions.cpp @@ -0,0 +1,60 @@ +#include "qt_specifydimensions.h" +#include "ui_qt_specifydimensions.h" + +#include "qt_mainwindow.hpp" + +#include +#include + +extern "C" +{ +#include <86box/86box.h> +#include <86box/plat.h> +#include <86box/ui.h> +#include <86box/video.h> +} + +extern MainWindow* main_window; + +SpecifyDimensions::SpecifyDimensions(QWidget *parent) : + QDialog(parent), + ui(new Ui::SpecifyDimensions) +{ + ui->setupUi(this); + ui->checkBox->setChecked(vid_resize == 2); + ui->spinBoxWidth->setRange(16, 2048 + 64); + ui->spinBoxWidth->setValue(main_window->getRenderWidgetSize().width()); + ui->spinBoxHeight->setRange(16, 2048 + 64); + ui->spinBoxHeight->setValue(main_window->getRenderWidgetSize().height()); +} + +SpecifyDimensions::~SpecifyDimensions() +{ + delete ui; +} + +void SpecifyDimensions::on_SpecifyDimensions_accepted() +{ + if (ui->checkBox->isChecked()) + { + vid_resize = 2; + window_remember = 0; + fixed_size_x = ui->spinBoxWidth->value(); + fixed_size_y = ui->spinBoxHeight->value(); + main_window->setFixedSize(ui->spinBoxWidth->value(), ui->spinBoxHeight->value() + (hide_status_bar ? main_window->statusBar()->height() : 0) + main_window->menuBar()->height()); + emit main_window->updateMenuResizeOptions(); + } + else + { + vid_resize = 0; + window_remember = 1; + window_w = ui->spinBoxWidth->value(); + window_h = ui->spinBoxHeight->value(); + main_window->setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); + emit main_window->resizeContents(ui->spinBoxWidth->value(), ui->spinBoxHeight->value()); + vid_resize = 1; + emit main_window->updateMenuResizeOptions(); + } + emit main_window->updateWindowRememberOption(); +} + diff --git a/src/qt/qt_specifydimensions.h b/src/qt/qt_specifydimensions.h new file mode 100644 index 000000000..2aa820455 --- /dev/null +++ b/src/qt/qt_specifydimensions.h @@ -0,0 +1,25 @@ +#ifndef QT_SPECIFYDIMENSIONS_H +#define QT_SPECIFYDIMENSIONS_H + +#include + +namespace Ui { +class SpecifyDimensions; +} + +class SpecifyDimensions : public QDialog +{ + Q_OBJECT + +public: + explicit SpecifyDimensions(QWidget *parent = nullptr); + ~SpecifyDimensions(); + +private slots: + void on_SpecifyDimensions_accepted(); + +private: + Ui::SpecifyDimensions *ui; +}; + +#endif // QT_SPECIFYDIMENSIONS_H diff --git a/src/qt/qt_specifydimensions.ui b/src/qt/qt_specifydimensions.ui new file mode 100644 index 000000000..56240a46e --- /dev/null +++ b/src/qt/qt_specifydimensions.ui @@ -0,0 +1,127 @@ + + + SpecifyDimensions + + + + 0 + 0 + 388 + 158 + + + + Dialog + + + + + 20 + 110 + 361 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 70 + 50 + 81 + 21 + + + + + + + 30 + 50 + 41 + 21 + + + + Width: + + + + + + 20 + 90 + 131 + 23 + + + + Lock to this size + + + + + + 200 + 50 + 51 + 21 + + + + Height: + + + + + + 250 + 50 + 81 + 21 + + + + + + + + buttonBox + accepted() + SpecifyDimensions + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + SpecifyDimensions + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/qt/qt_ui.cpp b/src/qt/qt_ui.cpp index f53b80bad..3ff8da064 100644 --- a/src/qt/qt_ui.cpp +++ b/src/qt/qt_ui.cpp @@ -109,6 +109,7 @@ ui_sb_update_icon_state(int tag, int state) { void ui_sb_update_icon(int tag, int active) { + if (!update_icons) return; main_window->updateStatusBarActivity(tag, active > 0 ? true : false); } From cc26aa97f13469e4043079b2dc5d35eedb817038 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 12 Dec 2021 15:56:23 +0600 Subject: [PATCH 086/278] Don't unmount ZIP and MO drives on settings save --- src/qt/qt_settingsotherremovable.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/qt/qt_settingsotherremovable.cpp b/src/qt/qt_settingsotherremovable.cpp index 2e989cda1..f101afd14 100644 --- a/src/qt/qt_settingsotherremovable.cpp +++ b/src/qt/qt_settingsotherremovable.cpp @@ -128,7 +128,6 @@ SettingsOtherRemovable::~SettingsOtherRemovable() void SettingsOtherRemovable::save() { auto* model = ui->tableViewMO->model(); - memset(mo_drives, 0, sizeof(mo_drives)); for (int i = 0; i < MO_NUM; i++) { mo_drives[i].f = NULL; mo_drives[i].priv = NULL; @@ -138,7 +137,6 @@ void SettingsOtherRemovable::save() { } model = ui->tableViewZIP->model(); - memset(zip_drives, 0, sizeof(zip_drives)); for (int i = 0; i < ZIP_NUM; i++) { zip_drives[i].f = NULL; zip_drives[i].priv = NULL; From ba4db8de60e3edc69cf297938b95768ce7f9b35a Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 12 Dec 2021 15:58:06 +0600 Subject: [PATCH 087/278] Don't umount CD drives on settings exit --- src/qt/qt_settingsfloppycdrom.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_settingsfloppycdrom.cpp b/src/qt/qt_settingsfloppycdrom.cpp index 5a578ca61..f6f0fb94c 100644 --- a/src/qt/qt_settingsfloppycdrom.cpp +++ b/src/qt/qt_settingsfloppycdrom.cpp @@ -131,8 +131,15 @@ void SettingsFloppyCDROM::save() { /* Removable devices category */ model = ui->tableViewCDROM->model(); - memset(cdrom, 0, sizeof(cdrom)); for (int i = 0; i < CDROM_NUM; i++) { + cdrom[i].img_fp = NULL; + cdrom[i].priv = NULL; + cdrom[i].ops = NULL; + cdrom[i].image = NULL; + cdrom[i].insert = NULL; + cdrom[i].close = NULL; + cdrom[i].get_volume = NULL; + cdrom[i].get_channel = NULL; cdrom[i].bus_type = model->index(i, 0).data(Qt::UserRole).toUInt(); cdrom[i].res = model->index(i, 0).data(Qt::UserRole + 1).toUInt(); cdrom[i].speed = model->index(i, 1).data(Qt::UserRole).toUInt(); From 080bc8682fc0785260457031f8245a35c6abd1df Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 12 Dec 2021 16:22:35 +0600 Subject: [PATCH 088/278] Sound gain dialog --- src/qt/CMakeLists.txt | 3 + src/qt/qt_mainwindow.cpp | 7 +++ src/qt/qt_mainwindow.hpp | 2 + src/qt/qt_mainwindow.ui | 6 ++ src/qt/qt_soundgain.cpp | 35 +++++++++++ src/qt/qt_soundgain.hpp | 28 +++++++++ src/qt/qt_soundgain.ui | 109 +++++++++++++++++++++++++++++++++ src/qt/qt_specifydimensions.ui | 2 +- 8 files changed, 191 insertions(+), 1 deletion(-) create mode 100644 src/qt/qt_soundgain.cpp create mode 100644 src/qt/qt_soundgain.hpp create mode 100644 src/qt/qt_soundgain.ui diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 67c3f6795..e265de612 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -88,6 +88,9 @@ add_library(ui STATIC qt_specifydimensions.h qt_specifydimensions.cpp qt_specifydimensions.ui + qt_soundgain.hpp + qt_soundgain.cpp + qt_soundgain.ui ../qt_resources.qrc ) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 49eb3a951..ad7fa7497 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -2,6 +2,7 @@ #include "ui_qt_mainwindow.h" #include "qt_specifydimensions.h" +#include "qt_soundgain.hpp" extern "C" { #include <86box/86box.h> @@ -1272,3 +1273,9 @@ void MainWindow::on_actionTake_screenshot_triggered() endblit(); device_force_redraw(); } + +void MainWindow::on_actionSound_gain_triggered() +{ + SoundGain gain(this); + gain.exec(); +} diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index b71704831..5a4582442 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -97,6 +97,8 @@ private slots: void getTitle_(wchar_t* title); void on_actionTake_screenshot_triggered(); + void on_actionSound_gain_triggered(); + protected: void keyPressEvent(QKeyEvent* event) override; void keyReleaseEvent(QKeyEvent* event) override; diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index f44841b4f..49f3e7e43 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -81,6 +81,7 @@ + @@ -512,6 +513,11 @@ Take screenshot... + + + Sound gain... + + diff --git a/src/qt/qt_soundgain.cpp b/src/qt/qt_soundgain.cpp new file mode 100644 index 000000000..9f02608e7 --- /dev/null +++ b/src/qt/qt_soundgain.cpp @@ -0,0 +1,35 @@ +#include "qt_soundgain.hpp" +#include "ui_qt_soundgain.h" + +extern "C" +{ +#include <86box/86box.h> +#include <86box/plat.h> +#include <86box/sound.h> +} + +SoundGain::SoundGain(QWidget *parent) : + QDialog(parent), + ui(new Ui::SoundGain) +{ + ui->setupUi(this); + ui->verticalSlider->setValue(sound_gain); + sound_gain_orig = sound_gain; +} + +SoundGain::~SoundGain() +{ + delete ui; +} + +void SoundGain::on_verticalSlider_valueChanged(int value) +{ + sound_gain = value; +} + + +void SoundGain::on_SoundGain_rejected() +{ + sound_gain = sound_gain_orig; +} + diff --git a/src/qt/qt_soundgain.hpp b/src/qt/qt_soundgain.hpp new file mode 100644 index 000000000..0e19bab53 --- /dev/null +++ b/src/qt/qt_soundgain.hpp @@ -0,0 +1,28 @@ +#ifndef QT_SOUNDGAIN_HPP +#define QT_SOUNDGAIN_HPP + +#include + +namespace Ui { +class SoundGain; +} + +class SoundGain : public QDialog +{ + Q_OBJECT + +public: + explicit SoundGain(QWidget *parent = nullptr); + ~SoundGain(); + +private slots: + void on_verticalSlider_valueChanged(int value); + + void on_SoundGain_rejected(); + +private: + Ui::SoundGain *ui; + int sound_gain_orig; +}; + +#endif // QT_SOUNDGAIN_HPP diff --git a/src/qt/qt_soundgain.ui b/src/qt/qt_soundgain.ui new file mode 100644 index 000000000..b15ce911e --- /dev/null +++ b/src/qt/qt_soundgain.ui @@ -0,0 +1,109 @@ + + + SoundGain + + + + 0 + 0 + 262 + 279 + + + + Sound Gain + + + + + 150 + 20 + 81 + 241 + + + + Qt::Vertical + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 30 + 30 + 31 + 231 + + + + 18 + + + 2 + + + 4 + + + Qt::Vertical + + + false + + + QSlider::TicksBothSides + + + + + + 30 + 10 + 54 + 17 + + + + Gain: + + + + + + + buttonBox + accepted() + SoundGain + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + SoundGain + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/qt/qt_specifydimensions.ui b/src/qt/qt_specifydimensions.ui index 56240a46e..855b9f3b7 100644 --- a/src/qt/qt_specifydimensions.ui +++ b/src/qt/qt_specifydimensions.ui @@ -11,7 +11,7 @@ - Dialog + Specify Main Window Dimensions From cc909078c1f50cbaf72f2e08980d06328962b319 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sun, 12 Dec 2021 17:52:43 +0200 Subject: [PATCH 089/278] qt(windows): don't process raw input events when in menu or other window --- src/qt/qt_main.cpp | 2 +- src/qt/qt_winrawinputfilter.cpp | 24 ++++++++++++++++++------ src/qt/qt_winrawinputfilter.hpp | 7 +++++-- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 2bf0add71..630fa1bac 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -107,7 +107,7 @@ int main(int argc, char* argv[]) { app.installEventFilter(main_window); #ifdef Q_OS_WINDOWS - auto rawInputFilter = WindowsRawInputFilter::Register(); + auto rawInputFilter = WindowsRawInputFilter::Register(main_window); if (rawInputFilter) { app.installNativeEventFilter(rawInputFilter.get()); diff --git a/src/qt/qt_winrawinputfilter.cpp b/src/qt/qt_winrawinputfilter.cpp index 5bca84149..b5653e7fb 100644 --- a/src/qt/qt_winrawinputfilter.cpp +++ b/src/qt/qt_winrawinputfilter.cpp @@ -32,6 +32,8 @@ #include "qt_winrawinputfilter.hpp" +#include + #include #include <86box/keyboard.h> @@ -42,34 +44,44 @@ #include #include -std::unique_ptr WindowsRawInputFilter::Register() +std::unique_ptr WindowsRawInputFilter::Register(QMainWindow *window) { + HWND wnd = (HWND)window->winId(); + RAWINPUTDEVICE rid[2] = { { .usUsagePage = 0x01, .usUsage = 0x06, .dwFlags = RIDEV_NOHOTKEYS, - .hwndTarget = NULL + .hwndTarget = wnd }, { .usUsagePage = 0x01, .usUsage = 0x02, .dwFlags = 0, - .hwndTarget = NULL + .hwndTarget = wnd } }; if (RegisterRawInputDevices(rid, 2, sizeof(rid[0])) == FALSE) return std::unique_ptr(nullptr); - std::unique_ptr inputfilter(new WindowsRawInputFilter()); + std::unique_ptr inputfilter(new WindowsRawInputFilter(window)); return inputfilter; } -WindowsRawInputFilter::WindowsRawInputFilter() +WindowsRawInputFilter::WindowsRawInputFilter(QMainWindow *window) { + this->window = window; + + for (auto menu : window->findChildren()) + { + connect(menu, &QMenu::aboutToShow, this, [=]() { menus_open++; }); + connect(menu, &QMenu::aboutToHide, this, [=]() { menus_open--; }); + } + for (size_t i = 0; i < sizeof(scancode_map) / sizeof(scancode_map[0]); i++) scancode_map[i] = i; @@ -105,7 +117,7 @@ bool WindowsRawInputFilter::nativeEventFilter(const QByteArray &eventType, void if (msg->message == WM_INPUT) { - //if (infocus) /* TODO: Need way to tell if in menu or settings dialog */ + if (window->isActiveWindow() && menus_open == 0) handle_input((HRAWINPUT)msg->lParam); return true; diff --git a/src/qt/qt_winrawinputfilter.hpp b/src/qt/qt_winrawinputfilter.hpp index cce981d69..167b14912 100644 --- a/src/qt/qt_winrawinputfilter.hpp +++ b/src/qt/qt_winrawinputfilter.hpp @@ -32,6 +32,7 @@ #define QT_WINDOWSRAWINPUTFILTER_HPP #include +#include #include #include @@ -44,7 +45,7 @@ class WindowsRawInputFilter : public QObject, public QAbstractNativeEventFilter Q_OBJECT public: - static std::unique_ptr Register(); + static std::unique_ptr Register(QMainWindow *window); bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) override; @@ -54,13 +55,15 @@ public slots: void mousePoll(); private: + QMainWindow *window; uint16_t scancode_map[768]; int buttons = 0; int dx = 0; int dy = 0; int dwheel = 0; + int menus_open = 0; - WindowsRawInputFilter(); + WindowsRawInputFilter(QMainWindow *window); void handle_input(HRAWINPUT input); void keyboard_handle(PRAWINPUT raw); From 03c077dfa77226fb463a3e0fc209e7c93d0e58ea Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sun, 12 Dec 2021 18:19:44 +0200 Subject: [PATCH 090/278] qt: Disable alt key menu navigation with style override --- src/qt/CMakeLists.txt | 3 +++ src/qt/qt_main.cpp | 3 ++- src/qt/qt_styleoverride.cpp | 14 ++++++++++++++ src/qt/qt_styleoverride.hpp | 16 ++++++++++++++++ 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 src/qt/qt_styleoverride.cpp create mode 100644 src/qt/qt_styleoverride.hpp diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 76a9cc8bd..c1a32d9f1 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -92,6 +92,9 @@ add_library(ui STATIC qt_soundgain.cpp qt_soundgain.ui + qt_styleoverride.cpp + qt_styleoverride.hpp + ../qt_resources.qrc ) if (APPLE) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 630fa1bac..698800fd3 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -27,7 +27,7 @@ Q_IMPORT_PLUGIN(QWindowsVistaStylePlugin) #include "qt_mainwindow.hpp" #include "cocoa_mouse.hpp" - +#include "qt_styleoverride.hpp" // Void Cast #define VC(x) const_cast(x) @@ -89,6 +89,7 @@ main_thread_fn() int main(int argc, char* argv[]) { QApplication app(argc, argv); + app.setStyle(new StyleOverride()); #ifdef __APPLE__ CocoaEventFilter cocoafilter; app.installNativeEventFilter(&cocoafilter); diff --git a/src/qt/qt_styleoverride.cpp b/src/qt/qt_styleoverride.cpp new file mode 100644 index 000000000..85727b9ac --- /dev/null +++ b/src/qt/qt_styleoverride.cpp @@ -0,0 +1,14 @@ +#include "qt_styleoverride.hpp" + +int StyleOverride::styleHint( + StyleHint hint, + const QStyleOption *option, + const QWidget *widget, + QStyleHintReturn *returnData) const +{ + /* Disable using menu with alt key */ + if (hint == QStyle::SH_MenuBar_AltKeyNavigation) + return 0; + + return QProxyStyle::styleHint(hint, option, widget, returnData); +} \ No newline at end of file diff --git a/src/qt/qt_styleoverride.hpp b/src/qt/qt_styleoverride.hpp new file mode 100644 index 000000000..46a73fa4e --- /dev/null +++ b/src/qt/qt_styleoverride.hpp @@ -0,0 +1,16 @@ +#ifndef QT_STYLEOVERRIDE_HPP +#define QT_STYLEOVERRIDE_HPP + +#include + +class StyleOverride : public QProxyStyle +{ +public: + int styleHint( + StyleHint hint, + const QStyleOption *option = nullptr, + const QWidget *widget = nullptr, + QStyleHintReturn *returnData = nullptr) const override; +}; + +#endif \ No newline at end of file From c5261da4f3295d1f23e1df393e809e1999f6d221 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sun, 12 Dec 2021 18:48:11 +0200 Subject: [PATCH 091/278] qt(windows): use direct connect for mousepoll --- src/qt/qt_main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 698800fd3..7791029ce 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -113,7 +113,7 @@ int main(int argc, char* argv[]) { { app.installNativeEventFilter(rawInputFilter.get()); QObject::disconnect(main_window, &MainWindow::pollMouse, 0, 0); - QObject::connect(main_window, &MainWindow::pollMouse, (WindowsRawInputFilter*)rawInputFilter.get(), &WindowsRawInputFilter::mousePoll); + QObject::connect(main_window, &MainWindow::pollMouse, (WindowsRawInputFilter*)rawInputFilter.get(), &WindowsRawInputFilter::mousePoll, Qt::DirectConnection); main_window->setSendKeyboardInput(false); } #endif From 777441ef0f064dfa38a10919d3f384907adab06b Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Mon, 13 Dec 2021 15:19:38 +0100 Subject: [PATCH 092/278] when sleeping main emu. thread, take drawits into account like in win.c --- src/qt/qt_main.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 5872b1131..2bb158f9b 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -57,8 +57,13 @@ main_thread_fn() nvr_dosave = 0; frames = 0; } - } else /* Just so we dont overload the host OS. */ - std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } else { + /* Just so we dont overload the host OS. */ + if (drawits < -1) + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + else + std::this_thread::yield(); + } /* If needed, handle a screen resize. */ if (doresize && !video_fullscreen && !is_quit) { From f2d79eee595a984bf6e5573a558b0735b0553b34 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Mon, 13 Dec 2021 18:02:22 +0200 Subject: [PATCH 093/278] Add thread yielding to qt main_thread that was omited. --- src/qt/qt_main.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 7791029ce..5246dd3c5 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -71,8 +71,13 @@ main_thread_fn() nvr_dosave = 0; frames = 0; } - } else /* Just so we dont overload the host OS. */ - std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } else { + /* Just so we dont overload the host OS. */ + if (drawits < -1) + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + else + std::this_thread::yield(); + } /* If needed, handle a screen resize. */ if (doresize && !video_fullscreen && !is_quit) { From 5f282e31c01b1882650831ef97f27039f656928c Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Mon, 13 Dec 2021 18:04:35 +0200 Subject: [PATCH 094/278] Disable OpenGLES renderer menu option on windows As the OpenGLES doesn't (yet) work on Windows, disable the option. --- src/qt/qt_mainwindow.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 8fd0e20dd..ab89c8650 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -221,6 +221,11 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionChange_contrast_for_monochrome_display->setChecked(true); } +#ifdef Q_OS_WINDOWS + /* qt opengles doesn't work (yet?) so hide the menu option */ + ui->actionHardware_Renderer_OpenGL_ES->setVisible(false); +#endif + setFocusPolicy(Qt::StrongFocus); ui->gles->setFocusPolicy(Qt::NoFocus); ui->sw->setFocusPolicy(Qt::NoFocus); From 80bff48c2b4b3876b97528558ee97419848e581f Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 14 Dec 2021 00:31:55 +0600 Subject: [PATCH 095/278] Status bar improvements * Fix crashes on non-continuous floppy/CD-ROM/ZIP/MO media lists * Status bar icons should now display tooltips and trigger loading menus --- src/qt/qt_machinestatus.cpp | 90 ++++++++++++++++++++++++++++++++++--- src/qt/qt_machinestatus.hpp | 19 ++++++++ src/qt/qt_mainwindow.cpp | 6 ++- src/qt/qt_mainwindow.hpp | 1 + src/qt/qt_mediamenu.cpp | 38 ++++++++-------- src/qt/qt_mediamenu.hpp | 13 +++--- src/qt/qt_ui.cpp | 2 +- 7 files changed, 136 insertions(+), 33 deletions(-) diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index a3aad56a4..377eb3517 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -28,9 +28,16 @@ extern uint64_t tsc; #include #include #include +#include + +#include "qt_mediamenu.hpp" +#include "qt_mainwindow.hpp" +#include "qt_soundgain.hpp" #include +extern MainWindow* main_window; + namespace { struct PixmapSetActive { QPixmap normal; @@ -195,7 +202,7 @@ struct MachineStatus::States { std::array mo; std::array hdds; StateActive net; - std::unique_ptr sound; + std::unique_ptr sound; std::unique_ptr text; }; @@ -330,8 +337,12 @@ void MachineStatus::refresh(QStatusBar* sbar) { sbar->removeWidget(d->sound.get()); if (cassette_enable) { - d->cassette.label = std::make_unique(); + d->cassette.label = std::make_unique(); d->cassette.setEmpty(QString(cassette_fname).isEmpty()); + connect((ClickableLabel*)d->cassette.label.get(), &ClickableLabel::clicked, [this](QPoint pos) { + MediaMenu::ptr->cassetteMenu->popup(pos); + }); + d->cassette.label->setToolTip(MediaMenu::ptr->cassetteMenu->title()); sbar->addWidget(d->cassette.label.get()); } @@ -339,6 +350,10 @@ void MachineStatus::refresh(QStatusBar* sbar) { for (int i = 0; i < 2; ++i) { d->cartridge[i].label = std::make_unique(); d->cartridge[i].setEmpty(QString(cart_fns[i]).isEmpty()); + connect((ClickableLabel*)d->cartridge[i].label.get(), &ClickableLabel::clicked, [this, i](QPoint pos) { + MediaMenu::ptr->cartridgeMenus[i]->popup(pos); + }); + d->cartridge[i].label->setToolTip(MediaMenu::ptr->cartridgeMenus[i]->title()); sbar->addWidget(d->cartridge[i].label.get()); } } @@ -352,30 +367,46 @@ void MachineStatus::refresh(QStatusBar* sbar) { } else { d->fdd[i].pixmaps = &d->pixmaps.floppy_35; } - d->fdd[i].label = std::make_unique(); + d->fdd[i].label = std::make_unique(); d->fdd[i].setEmpty(QString(floppyfns[i]).isEmpty()); d->fdd[i].setActive(false); + connect((ClickableLabel*)d->fdd[i].label.get(), &ClickableLabel::clicked, [this, i](QPoint pos) { + MediaMenu::ptr->floppyMenus[i]->popup(pos); + }); + d->fdd[i].label->setToolTip(MediaMenu::ptr->floppyMenus[i]->title()); sbar->addWidget(d->fdd[i].label.get()); }); iterateCDROM([this, sbar](int i) { - d->cdrom[i].label = std::make_unique(); + d->cdrom[i].label = std::make_unique(); d->cdrom[i].setEmpty(cdrom[i].host_drive != 200 || QString(cdrom[i].image_path).isEmpty()); d->cdrom[i].setActive(false); + connect((ClickableLabel*)d->cdrom[i].label.get(), &ClickableLabel::clicked, [this, i](QPoint pos) { + MediaMenu::ptr->cdromMenus[i]->popup(pos); + }); + d->cdrom[i].label->setToolTip(MediaMenu::ptr->cdromMenus[i]->title()); sbar->addWidget(d->cdrom[i].label.get()); }); iterateZIP([this, sbar](int i) { - d->zip[i].label = std::make_unique(); + d->zip[i].label = std::make_unique(); d->zip[i].setEmpty(QString(zip_drives[i].image_path).isEmpty()); d->zip[i].setActive(false); + connect((ClickableLabel*)d->zip[i].label.get(), &ClickableLabel::clicked, [this, i](QPoint pos) { + MediaMenu::ptr->zipMenus[i]->popup(pos); + }); + d->zip[i].label->setToolTip(MediaMenu::ptr->zipMenus[i]->title()); sbar->addWidget(d->zip[i].label.get()); }); iterateMO([this, sbar](int i) { - d->mo[i].label = std::make_unique(); + d->mo[i].label = std::make_unique(); d->mo[i].setEmpty(QString(mo_drives[i].image_path).isEmpty()); d->mo[i].setActive(false); + connect((ClickableLabel*)d->mo[i].label.get(), &ClickableLabel::clicked, [this, i](QPoint pos) { + MediaMenu::ptr->moMenus[i]->popup(pos); + }); + d->mo[i].label->setToolTip(MediaMenu::ptr->moMenus[i]->title()); sbar->addWidget(d->mo[i].label.get()); }); @@ -383,37 +414,49 @@ void MachineStatus::refresh(QStatusBar* sbar) { if ((has_mfm || hdc_name == QStringLiteral("st506")) && c_mfm > 0) { d->hdds[HDD_BUS_MFM].label = std::make_unique(); d->hdds[HDD_BUS_MFM].setActive(false); + d->hdds[HDD_BUS_MFM].label->setToolTip(QStringLiteral("Hard Disk (%1)").arg("MFM/RLL")); sbar->addWidget(d->hdds[HDD_BUS_MFM].label.get()); } if ((has_esdi || hdc_name == QStringLiteral("esdi")) && c_esdi > 0) { d->hdds[HDD_BUS_ESDI].label = std::make_unique(); d->hdds[HDD_BUS_ESDI].setActive(false); + d->hdds[HDD_BUS_ESDI].label->setToolTip(QStringLiteral("Hard Disk (%1)").arg("ESDI")); sbar->addWidget(d->hdds[HDD_BUS_ESDI].label.get()); } if ((has_xta || hdc_name == QStringLiteral("xta")) && c_xta > 0) { d->hdds[HDD_BUS_XTA].label = std::make_unique(); d->hdds[HDD_BUS_XTA].setActive(false); + d->hdds[HDD_BUS_XTA].label->setToolTip(QStringLiteral("Hard Disk (%1)").arg("XTA")); sbar->addWidget(d->hdds[HDD_BUS_XTA].label.get()); } if ((hasIDE() || hdc_name == QStringLiteral("xtide") || hdc_name == QStringLiteral("ide")) && c_ide > 0) { d->hdds[HDD_BUS_IDE].label = std::make_unique(); d->hdds[HDD_BUS_IDE].setActive(false); + d->hdds[HDD_BUS_IDE].label->setToolTip(QStringLiteral("Hard Disk (%1)").arg("IDE")); sbar->addWidget(d->hdds[HDD_BUS_IDE].label.get()); } if ((hasSCSI() || (scsi_card_current[0] != 0) || (scsi_card_current[1] != 0) || (scsi_card_current[2] != 0) || (scsi_card_current[3] != 0)) && c_scsi > 0) { d->hdds[HDD_BUS_SCSI].label = std::make_unique(); d->hdds[HDD_BUS_SCSI].setActive(false); + d->hdds[HDD_BUS_SCSI].label->setToolTip(QStringLiteral("Hard Disk (%1)").arg("SCSI")); sbar->addWidget(d->hdds[HDD_BUS_SCSI].label.get()); } if (do_net) { d->net.label = std::make_unique(); d->net.setActive(false); + d->net.label->setToolTip("Network"); sbar->addWidget(d->net.label.get()); } - d->sound = std::make_unique(); + d->sound = std::make_unique(); d->sound->setPixmap(d->pixmaps.sound); + // Triggering on click makes the mouse move the window when the button is releases. Do it on button release instead. + connect(d->sound.get(), &ClickableLabel::clickedRelease, d->sound.get(), [this](QPoint pos) { + SoundGain gain(main_window); + gain.exec(); + }); + d->sound->setToolTip("Sound"); sbar->addWidget(d->sound.get()); d->text = std::make_unique(); sbar->addWidget(d->text.get()); @@ -489,3 +532,36 @@ void MachineStatus::message(const QString &msg) { d->text->setText(msg); } +void MachineStatus::updateTip(int tag) +{ + int category = tag & 0xfffffff0; + int item = tag & 0xf; + switch (category) { + case SB_CASSETTE: + d->cassette.label->setToolTip(MediaMenu::ptr->cassetteMenu->title()); + break; + case SB_CARTRIDGE: + d->cartridge[item].label->setToolTip(MediaMenu::ptr->cartridgeMenus[item]->title()); + break; + case SB_FLOPPY: + d->fdd[item].label->setToolTip(MediaMenu::ptr->floppyMenus[item]->title()); + break; + case SB_CDROM: + d->cdrom[item].label->setToolTip(MediaMenu::ptr->cdromMenus[item]->title()); + break; + case SB_ZIP: + d->zip[item].label->setToolTip(MediaMenu::ptr->zipMenus[item]->title()); + break; + case SB_MO: + d->mo[item].label->setToolTip(MediaMenu::ptr->moMenus[item]->title()); + break; + case SB_HDD: + break; + case SB_NETWORK: + break; + case SB_SOUND: + break; + case SB_TEXT: + break; + } +} diff --git a/src/qt/qt_machinestatus.hpp b/src/qt/qt_machinestatus.hpp index ea48178ed..6bbbe0416 100644 --- a/src/qt/qt_machinestatus.hpp +++ b/src/qt/qt_machinestatus.hpp @@ -2,9 +2,27 @@ #define QT_MACHINESTATUS_HPP #include +#include +#include class QStatusBar; +class ClickableLabel : public QLabel { + Q_OBJECT; + public: + explicit ClickableLabel(QWidget* parent = nullptr) + : QLabel(parent) {} + ~ClickableLabel() {}; + + signals: + void clicked(QPoint); + void clickedRelease(QPoint); + + protected: + void mousePressedEvent(QMouseEvent* event) { emit clicked(event->globalPos()); } + void mouseReleasedEvent(QMouseEvent* event) { emit clickedRelease(event->globalPos()); } +}; + class MachineStatus : public QObject { Q_OBJECT @@ -26,6 +44,7 @@ public slots: void setActivity(int tag, bool active); void setEmpty(int tag, bool active); void message(const QString& msg); + void updateTip(int tag); private: struct States; diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index ad7fa7497..8a8df2491 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -49,9 +49,9 @@ MainWindow::MainWindow(QWidget *parent) : ui(new Ui::MainWindow) { Q_INIT_RESOURCE(qt_resources); - status = std::make_unique(this); mm = std::make_shared(this); MediaMenu::ptr = mm; + status = std::make_unique(this); ui->setupUi(this); ui->stackedWidget->setMouseTracking(true); @@ -118,9 +118,10 @@ MainWindow::MainWindow(QWidget *parent) : }); connect(this, &MainWindow::updateStatusBarPanes, this, [this] { - status->refresh(ui->statusbar); + refreshMediaMenu(); }); connect(this, &MainWindow::updateStatusBarPanes, this, &MainWindow::refreshMediaMenu); + connect(this, &MainWindow::updateStatusBarTip, status.get(), &MachineStatus::updateTip); connect(this, &MainWindow::updateStatusBarActivity, status.get(), &MachineStatus::setActivity); connect(this, &MainWindow::updateStatusBarEmpty, status.get(), &MachineStatus::setEmpty); connect(this, &MainWindow::statusBarMessage, status.get(), &MachineStatus::message); @@ -920,6 +921,7 @@ bool MainWindow::eventFilter(QObject* receiver, QEvent* event) void MainWindow::refreshMediaMenu() { mm->refresh(ui->menuMedia); + status->refresh(ui->statusbar); } void MainWindow::showMessage(const QString& header, const QString& message) { diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 5a4582442..01586df3e 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -37,6 +37,7 @@ signals: void updateStatusBarPanes(); void updateStatusBarActivity(int tag, bool active); void updateStatusBarEmpty(int tag, bool empty); + void updateStatusBarTip(int tag); void updateMenuResizeOptions(); void updateWindowRememberOption(); diff --git a/src/qt/qt_mediamenu.cpp b/src/qt/qt_mediamenu.cpp index 898f79c01..2b7faef0f 100644 --- a/src/qt/qt_mediamenu.cpp +++ b/src/qt/qt_mediamenu.cpp @@ -63,7 +63,7 @@ void MediaMenu::refresh(QMenu *parentMenu) { menu->addSeparator(); cartridgeEjectPos = menu->children().count(); menu->addAction("Eject", [this, i]() { cartridgeEject(i); }); - cartridgeMenus.append(menu); + cartridgeMenus[i] = menu; cartridgeUpdateMenu(i); } } @@ -81,7 +81,7 @@ void MediaMenu::refresh(QMenu *parentMenu) { menu->addSeparator(); floppyEjectPos = menu->children().count(); menu->addAction("Eject", [this, i]() { floppyEject(i); }); - floppyMenus.append(menu); + floppyMenus[i] = menu; floppyUpdateMenu(i); }); @@ -98,7 +98,7 @@ void MediaMenu::refresh(QMenu *parentMenu) { menu->addSeparator(); cdromImagePos = menu->children().count(); menu->addAction("Image", [this, i]() { cdromMount(i); })->setCheckable(true); - cdromMenus.append(menu); + cdromMenus[i] = menu; cdromUpdateMenu(i); }); @@ -114,7 +114,7 @@ void MediaMenu::refresh(QMenu *parentMenu) { menu->addAction("Eject", [this, i]() { zipEject(i); }); zipReloadPos = menu->children().count(); menu->addAction("Reload previous image", [this, i]() { zipReload(i); }); - zipMenus.append(menu); + zipMenus[i] = menu; zipUpdateMenu(i); }); @@ -130,7 +130,7 @@ void MediaMenu::refresh(QMenu *parentMenu) { menu->addAction("Eject", [this, i]() { moEject(i); }); moReloadPos = menu->children().count(); menu->addAction("Reload previous image", [this, i]() { moReload(i); }); - moMenus.append(menu); + moMenus[i] = menu; moUpdateMenu(i); }); } @@ -161,8 +161,8 @@ void MediaMenu::cassetteMount(const QString& filename, bool wp) { } ui_sb_update_icon_state(SB_CASSETTE, filename.isEmpty() ? 1 : 0); - ui_sb_update_tip(SB_CASSETTE); cassetteUpdateMenu(); + ui_sb_update_tip(SB_CASSETTE); config_save(); } @@ -170,8 +170,8 @@ void MediaMenu::cassetteEject() { pc_cas_set_fname(cassette, nullptr); memset(cassette_fname, 0, sizeof(cassette_fname)); ui_sb_update_icon_state(SB_CASSETTE, 1); - ui_sb_update_tip(SB_CASSETTE); cassetteUpdateMenu(); + ui_sb_update_tip(SB_CASSETTE); config_save(); } @@ -208,16 +208,16 @@ void MediaMenu::cartridgeSelectImage(int i) { cart_load(i, filenameBytes.data()); ui_sb_update_icon_state(SB_CARTRIDGE | i, filename.isEmpty() ? 1 : 0); - ui_sb_update_tip(SB_CARTRIDGE | i); cartridgeUpdateMenu(i); + ui_sb_update_tip(SB_CARTRIDGE | i); config_save(); } void MediaMenu::cartridgeEject(int i) { cart_close(i); ui_sb_update_icon_state(SB_CARTRIDGE | i, 1); - ui_sb_update_tip(SB_CARTRIDGE | i); cartridgeUpdateMenu(i); + ui_sb_update_tip(SB_CARTRIDGE | i); config_save(); } @@ -253,16 +253,16 @@ void MediaMenu::floppyMount(int i, const QString &filename, bool wp) { fdd_load(i, filenameBytes.data()); } ui_sb_update_icon_state(SB_FLOPPY | i, filename.isEmpty() ? 1 : 0); - ui_sb_update_tip(SB_FLOPPY | i); floppyUpdateMenu(i); + ui_sb_update_tip(SB_FLOPPY | i); config_save(); } void MediaMenu::floppyEject(int i) { fdd_close(i); ui_sb_update_icon_state(SB_FLOPPY | i, 1); - ui_sb_update_tip(SB_FLOPPY | i); floppyUpdateMenu(i); + ui_sb_update_tip(SB_FLOPPY | i); config_save(); } @@ -329,19 +329,21 @@ void MediaMenu::cdromMount(int i) { } else { ui_sb_update_icon_state(SB_CDROM | i, 1); } - ui_sb_update_tip(SB_CDROM | i); cdromUpdateMenu(i); + ui_sb_update_tip(SB_CDROM | i); config_save(); } void MediaMenu::cdromEject(int i) { cdrom_eject(i); cdromUpdateMenu(i); + ui_sb_update_tip(SB_CDROM | i); } void MediaMenu::cdromReload(int i) { cdrom_reload(i); cdromUpdateMenu(i); + ui_sb_update_tip(SB_CDROM | i); } void MediaMenu::cdromUpdateMenu(int i) { @@ -400,8 +402,8 @@ void MediaMenu::zipMount(int i, const QString &filename, bool wp) { } ui_sb_update_icon_state(SB_ZIP | i, filename.isEmpty() ? 1 : 0); - ui_sb_update_tip(SB_ZIP | i); zipUpdateMenu(i); + ui_sb_update_tip(SB_ZIP | i); config_save(); } @@ -416,8 +418,8 @@ void MediaMenu::zipEject(int i) { } ui_sb_update_icon_state(SB_ZIP | i, 1); - ui_sb_update_tip(SB_ZIP | i); zipUpdateMenu(i); + ui_sb_update_tip(SB_ZIP | i); config_save(); } @@ -431,8 +433,8 @@ void MediaMenu::zipReload(int i) { ui_sb_update_icon_state(SB_ZIP|i, 0); } - ui_sb_update_tip(SB_ZIP|i); zipUpdateMenu(i); + ui_sb_update_tip(SB_ZIP|i); config_save(); } @@ -488,8 +490,8 @@ void MediaMenu::moMount(int i, const QString &filename, bool wp) { } ui_sb_update_icon_state(SB_MO | i, filename.isEmpty() ? 1 : 0); - ui_sb_update_tip(SB_MO | i); moUpdateMenu(i); + ui_sb_update_tip(SB_MO | i); config_save(); } @@ -504,8 +506,8 @@ void MediaMenu::moEject(int i) { } ui_sb_update_icon_state(SB_MO | i, 1); - ui_sb_update_tip(SB_MO | i); moUpdateMenu(i); + ui_sb_update_tip(SB_MO | i); config_save(); } @@ -519,8 +521,8 @@ void MediaMenu::moReload(int i) { ui_sb_update_icon_state(SB_MO|i, 0); } - ui_sb_update_tip(SB_MO|i); moUpdateMenu(i); + ui_sb_update_tip(SB_MO|i); config_save(); } diff --git a/src/qt/qt_mediamenu.hpp b/src/qt/qt_mediamenu.hpp index 2908e8ae9..3dc859fe9 100644 --- a/src/qt/qt_mediamenu.hpp +++ b/src/qt/qt_mediamenu.hpp @@ -2,6 +2,7 @@ #include #include +#include class QMenu; @@ -57,11 +58,11 @@ private: QWidget* parentWidget = nullptr; QMenu* cassetteMenu = nullptr; - QList cartridgeMenus; - QList floppyMenus; - QList cdromMenus; - QList zipMenus; - QList moMenus; + QMap cartridgeMenus; + QMap floppyMenus; + QMap cdromMenus; + QMap zipMenus; + QMap moMenus; int cassetteRecordPos; int cassettePlayPos; @@ -84,4 +85,6 @@ private: int moEjectPos; int moReloadPos; + + friend class MachineStatus; }; diff --git a/src/qt/qt_ui.cpp b/src/qt/qt_ui.cpp index 3ff8da064..d00e262e3 100644 --- a/src/qt/qt_ui.cpp +++ b/src/qt/qt_ui.cpp @@ -83,7 +83,7 @@ void ui_sb_set_text_w(wchar_t *wstr) { void ui_sb_update_tip(int arg) { - qDebug() << Q_FUNC_INFO << arg; + main_window->updateStatusBarTip(arg); } void From 4f72c4c9ea2510aff1329cb989ee18d4e404ad73 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 14 Dec 2021 00:54:38 +0600 Subject: [PATCH 096/278] Make sure status bar icons trigger menus --- src/qt/qt_machinestatus.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_machinestatus.hpp b/src/qt/qt_machinestatus.hpp index 6bbbe0416..f57526d05 100644 --- a/src/qt/qt_machinestatus.hpp +++ b/src/qt/qt_machinestatus.hpp @@ -19,8 +19,8 @@ class ClickableLabel : public QLabel { void clickedRelease(QPoint); protected: - void mousePressedEvent(QMouseEvent* event) { emit clicked(event->globalPos()); } - void mouseReleasedEvent(QMouseEvent* event) { emit clickedRelease(event->globalPos()); } + void mousePressEvent(QMouseEvent* event) override { emit clicked(event->globalPos()); } + void mouseReleaseEvent(QMouseEvent* event) override { emit clickedRelease(event->globalPos()); } }; class MachineStatus : public QObject From f3536e8f798fe4ac4acbe69b427a1d333cfe8427 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 14 Dec 2021 01:02:08 +0600 Subject: [PATCH 097/278] Open sound gain dialog on double-click --- src/qt/qt_machinestatus.cpp | 2 +- src/qt/qt_machinestatus.hpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index 377eb3517..fe3c515ae 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -452,7 +452,7 @@ void MachineStatus::refresh(QStatusBar* sbar) { d->sound = std::make_unique(); d->sound->setPixmap(d->pixmaps.sound); // Triggering on click makes the mouse move the window when the button is releases. Do it on button release instead. - connect(d->sound.get(), &ClickableLabel::clickedRelease, d->sound.get(), [this](QPoint pos) { + connect(d->sound.get(), &ClickableLabel::doubleClicked, d->sound.get(), [this](QPoint pos) { SoundGain gain(main_window); gain.exec(); }); diff --git a/src/qt/qt_machinestatus.hpp b/src/qt/qt_machinestatus.hpp index f57526d05..df901ab45 100644 --- a/src/qt/qt_machinestatus.hpp +++ b/src/qt/qt_machinestatus.hpp @@ -16,11 +16,11 @@ class ClickableLabel : public QLabel { signals: void clicked(QPoint); - void clickedRelease(QPoint); + void doubleClicked(QPoint); protected: void mousePressEvent(QMouseEvent* event) override { emit clicked(event->globalPos()); } - void mouseReleaseEvent(QMouseEvent* event) override { emit clickedRelease(event->globalPos()); } + void mouseDoubleClickEvent(QMouseEvent* event) override { emit doubleClicked(event->globalPos()); } }; class MachineStatus : public QObject From 9cd5f8a070c59ff9895863df996d35d9643dfcb6 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 14 Dec 2021 01:56:28 +0600 Subject: [PATCH 098/278] Fix HDDs on certain buses not appearing in status bar --- src/qt/qt_machinestatus.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index fe3c515ae..3c09ccc6c 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -411,25 +411,25 @@ void MachineStatus::refresh(QStatusBar* sbar) { }); auto hdc_name = QString(hdc_get_internal_name(hdc_current)); - if ((has_mfm || hdc_name == QStringLiteral("st506")) && c_mfm > 0) { + if ((has_mfm || hdc_name.left(5) == QStringLiteral("st506")) && c_mfm > 0) { d->hdds[HDD_BUS_MFM].label = std::make_unique(); d->hdds[HDD_BUS_MFM].setActive(false); d->hdds[HDD_BUS_MFM].label->setToolTip(QStringLiteral("Hard Disk (%1)").arg("MFM/RLL")); sbar->addWidget(d->hdds[HDD_BUS_MFM].label.get()); } - if ((has_esdi || hdc_name == QStringLiteral("esdi")) && c_esdi > 0) { + if ((has_esdi || hdc_name.left(4) == QStringLiteral("esdi")) && c_esdi > 0) { d->hdds[HDD_BUS_ESDI].label = std::make_unique(); d->hdds[HDD_BUS_ESDI].setActive(false); d->hdds[HDD_BUS_ESDI].label->setToolTip(QStringLiteral("Hard Disk (%1)").arg("ESDI")); sbar->addWidget(d->hdds[HDD_BUS_ESDI].label.get()); } - if ((has_xta || hdc_name == QStringLiteral("xta")) && c_xta > 0) { + if ((has_xta || hdc_name.left(3) == QStringLiteral("xta")) && c_xta > 0) { d->hdds[HDD_BUS_XTA].label = std::make_unique(); d->hdds[HDD_BUS_XTA].setActive(false); d->hdds[HDD_BUS_XTA].label->setToolTip(QStringLiteral("Hard Disk (%1)").arg("XTA")); sbar->addWidget(d->hdds[HDD_BUS_XTA].label.get()); } - if ((hasIDE() || hdc_name == QStringLiteral("xtide") || hdc_name == QStringLiteral("ide")) && c_ide > 0) { + if ((hasIDE() || hdc_name.left(5) == QStringLiteral("xtide") || hdc_name.left(3) == QStringLiteral("ide")) && c_ide > 0) { d->hdds[HDD_BUS_IDE].label = std::make_unique(); d->hdds[HDD_BUS_IDE].setActive(false); d->hdds[HDD_BUS_IDE].label->setToolTip(QStringLiteral("Hard Disk (%1)").arg("IDE")); From aca31d5d2833269739d8c4ff14c303872a0f3a54 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 14 Dec 2021 01:58:00 +0600 Subject: [PATCH 099/278] Remove misleading comment --- src/qt/qt_machinestatus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index 3c09ccc6c..b0644c0f3 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -451,7 +451,7 @@ void MachineStatus::refresh(QStatusBar* sbar) { } d->sound = std::make_unique(); d->sound->setPixmap(d->pixmaps.sound); - // Triggering on click makes the mouse move the window when the button is releases. Do it on button release instead. + connect(d->sound.get(), &ClickableLabel::doubleClicked, d->sound.get(), [this](QPoint pos) { SoundGain gain(main_window); gain.exec(); From a39307d178861a36c24d2c9212161acfcc3ff63e Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Mon, 13 Dec 2021 22:45:37 +0100 Subject: [PATCH 100/278] ported joystick config to qt. sdl-joystick implementation from pcem --- src/qt/CMakeLists.txt | 11 +- src/qt/qt_joystickconfiguration.cpp | 183 ++++++++++++++++++++++++++++ src/qt/qt_joystickconfiguration.hpp | 32 +++++ src/qt/qt_joystickconfiguration.ui | 87 +++++++++++++ src/qt/qt_platform.cpp | 6 - src/qt/qt_settingsinput.cpp | 87 +++++++++++-- src/qt/qt_settingsinput.hpp | 4 + src/qt/sdl_joystick.cpp | 159 ++++++++++++++++++++++++ 8 files changed, 555 insertions(+), 14 deletions(-) create mode 100644 src/qt/qt_joystickconfiguration.cpp create mode 100644 src/qt/qt_joystickconfiguration.hpp create mode 100644 src/qt/qt_joystickconfiguration.ui create mode 100644 src/qt/sdl_joystick.cpp diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index e265de612..692b290e2 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -6,7 +6,13 @@ set(CMAKE_AUTORCC ON) find_package(Threads REQUIRED) -add_library(plat STATIC qt.c qt_main.cpp qt_platform.cpp cpp11_thread.cpp) +add_library(plat STATIC + qt.c + qt_main.cpp + qt_platform.cpp + sdl_joystick.cpp + cpp11_thread.cpp +) add_library(ui STATIC qt_ui.cpp qt_cdrom.c @@ -69,6 +75,9 @@ add_library(ui STATIC qt_deviceconfig.cpp qt_deviceconfig.hpp qt_deviceconfig.ui + qt_joystickconfiguration.cpp + qt_joystickconfiguration.hpp + qt_joystickconfiguration.ui qt_filefield.cpp qt_filefield.hpp diff --git a/src/qt/qt_joystickconfiguration.cpp b/src/qt/qt_joystickconfiguration.cpp new file mode 100644 index 000000000..f87ea8b3c --- /dev/null +++ b/src/qt/qt_joystickconfiguration.cpp @@ -0,0 +1,183 @@ +#include "qt_joystickconfiguration.hpp" +#include "ui_qt_joystickconfiguration.h" + +extern "C" { +#include <86box/device.h> +#include <86box/gameport.h> +} + + +#include +#include +#include +#include "qt_models_common.hpp" + +JoystickConfiguration::JoystickConfiguration(int type, int joystick_nr, QWidget *parent) : + QDialog(parent), + ui(new Ui::JoystickConfiguration), + type(type), + joystick_nr(joystick_nr) +{ + ui->setupUi(this); + + auto model = ui->comboBoxDevice->model(); + Models::AddEntry(model, "None", 0); + for (int c = 0; c < joysticks_present; c++) { + Models::AddEntry(model, plat_joystick_state[c].name, c+1); + } + + ui->comboBoxDevice->setCurrentIndex(joystick_state[joystick_nr].plat_joystick_nr); +} + +JoystickConfiguration::~JoystickConfiguration() +{ + delete ui; +} + +int JoystickConfiguration::selectedDevice() { + return ui->comboBoxDevice->currentIndex(); +} + +int JoystickConfiguration::selectedAxis(int axis) { + auto* cbox = findChild(QString("cboxAxis%1").arg(QString::number(axis))); + if (cbox == nullptr) { + return 0; + } + return cbox->currentIndex(); +} + +int JoystickConfiguration::selectedButton(int button) { + auto* cbox = findChild(QString("cboxButton%1").arg(QString::number(button))); + if (cbox == nullptr) { + return 0; + } + return cbox->currentIndex(); +} + +int JoystickConfiguration::selectedPov(int pov) { + auto* cbox = findChild(QString("cboxPov%1").arg(QString::number(pov))); + if (cbox == nullptr) { + return 0; + } + return cbox->currentIndex(); +} + +void JoystickConfiguration::on_comboBoxDevice_currentIndexChanged(int index) { + for (auto w : widgets) { + ui->ct->removeWidget(w); + } + + if (index == 0) { + return; + } + + int joystick = index - 1; + int row = 0; + for (int c = 0; c < joystick_get_axis_count(type); c++) { + /*Combo box*/ + auto label = new QLabel(joystick_get_axis_name(type, c), this); + auto cbox = new QComboBox(this); + cbox->setObjectName(QString("cboxAxis%1").arg(QString::number(c))); + auto model = cbox->model(); + + for (int d = 0; d < plat_joystick_state[joystick].nr_axes; d++) { + Models::AddEntry(model, plat_joystick_state[joystick].axis[d].name, 0); + } + + for (int d = 0; d < plat_joystick_state[joystick].nr_povs; d++) { + Models::AddEntry(model, QString("%1 (X axis)").arg(plat_joystick_state[joystick].pov[d].name), 0); + Models::AddEntry(model, QString("%1 (Y axis)").arg(plat_joystick_state[joystick].pov[d].name), 0); + } + + for (int d = 0; d < plat_joystick_state[joystick].nr_sliders; d++) { + Models::AddEntry(model, plat_joystick_state[joystick].slider[d].name, 0); + } + + int nr_axes = plat_joystick_state[joystick].nr_axes; + int nr_povs = plat_joystick_state[joystick].nr_povs; + int mapping = joystick_state[joystick_nr].axis_mapping[c]; + if (mapping & POV_X) + cbox->setCurrentIndex(nr_axes + (mapping & 3) * 2); + else if (mapping & POV_Y) + cbox->setCurrentIndex(nr_axes + (mapping & 3) * 2 + 1); + else if (mapping & SLIDER) + cbox->setCurrentIndex(nr_axes + nr_povs * 2 + (mapping & 3)); + else + cbox->setCurrentIndex(mapping); + + ui->ct->addWidget(label, row, 0); + ui->ct->addWidget(cbox, row, 1); + + widgets.append(label); + widgets.append(cbox); + + ++row; + } + + for (int c = 0; c < joystick_get_button_count(type); c++) { + auto label = new QLabel(joystick_get_button_name(type, c), this); + auto cbox = new QComboBox(this); + cbox->setObjectName(QString("cboxButton%1").arg(QString::number(c))); + auto model = cbox->model(); + + for (int d = 0; d < plat_joystick_state[joystick].nr_buttons; d++) { + Models::AddEntry(model, plat_joystick_state[joystick].button[d].name, 0); + } + + cbox->setCurrentIndex(joystick_state[joystick_nr].button_mapping[c]); + + ui->ct->addWidget(label, row, 0); + ui->ct->addWidget(cbox, row, 1); + + widgets.append(label); + widgets.append(cbox); + + ++row; + } + + for (int c = 0; c < joystick_get_pov_count(type) * 2; c++) { + QLabel* label; + if (c & 1) { + label = new QLabel(QString("%1 (Y axis)").arg(joystick_get_pov_name(type, c/2)), this); + } else { + label = new QLabel(QString("%1 (X axis)").arg(joystick_get_pov_name(type, c/2)), this); + } + auto cbox = new QComboBox(this); + cbox->setObjectName(QString("cboxPov%1").arg(QString::number(c))); + auto model = cbox->model(); + + for (int d = 0; d < plat_joystick_state[joystick].nr_povs; d++) { + Models::AddEntry(model, QString("%1 (X axis)").arg(plat_joystick_state[joystick].pov[d].name), 0); + Models::AddEntry(model, QString("%1 (Y axis)").arg(plat_joystick_state[joystick].pov[d].name), 0); + } + + for (int d = 0; d < plat_joystick_state[joystick].nr_axes; d++) { + Models::AddEntry(model, plat_joystick_state[joystick].axis[d].name, 0); + } + + int mapping = joystick_state[joystick_nr].pov_mapping[c][0]; + int nr_povs = plat_joystick_state[joystick].nr_povs; + if (mapping & POV_X) + cbox->setCurrentIndex((mapping & 3) * 2); + else if (mapping & POV_Y) + cbox->setCurrentIndex((mapping & 3)*2 + 1); + else + cbox->setCurrentIndex(mapping + nr_povs * 2); + + mapping = joystick_state[joystick_nr].pov_mapping[c][1]; + if (mapping & POV_X) + cbox->setCurrentIndex((mapping & 3)*2); + else if (mapping & POV_Y) + cbox->setCurrentIndex((mapping & 3)*2 + 1); + else + cbox->setCurrentIndex(mapping + nr_povs*2); + + ui->ct->addWidget(label, row, 0); + ui->ct->addWidget(cbox, row, 1); + + widgets.append(label); + widgets.append(cbox); + + ++row; + } +} diff --git a/src/qt/qt_joystickconfiguration.hpp b/src/qt/qt_joystickconfiguration.hpp new file mode 100644 index 000000000..b6882c52b --- /dev/null +++ b/src/qt/qt_joystickconfiguration.hpp @@ -0,0 +1,32 @@ +#ifndef QT_JOYSTICKCONFIGURATION_HPP +#define QT_JOYSTICKCONFIGURATION_HPP + +#include + +namespace Ui { +class JoystickConfiguration; +} + +class JoystickConfiguration : public QDialog +{ + Q_OBJECT + +public: + explicit JoystickConfiguration(int type, int joystick_nr, QWidget *parent = nullptr); + ~JoystickConfiguration(); + + int selectedDevice(); + int selectedAxis(int axis); + int selectedButton(int button); + int selectedPov(int pov); +private slots: + void on_comboBoxDevice_currentIndexChanged(int index); + +private: + Ui::JoystickConfiguration *ui; + QList widgets; + int type; + int joystick_nr; +}; + +#endif // QT_JOYSTICKCONFIGURATION_HPP diff --git a/src/qt/qt_joystickconfiguration.ui b/src/qt/qt_joystickconfiguration.ui new file mode 100644 index 000000000..abe17b5cc --- /dev/null +++ b/src/qt/qt_joystickconfiguration.ui @@ -0,0 +1,87 @@ + + + JoystickConfiguration + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + + Device + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + buttonBox + accepted() + JoystickConfiguration + accept() + + + 223 + 278 + + + 199 + 149 + + + + + buttonBox + rejected() + JoystickConfiguration + reject() + + + 223 + 278 + + + 199 + 149 + + + + + diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index e2a227472..548135ec3 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -67,9 +67,6 @@ int kbd_req_capture = 0; int hide_status_bar = 0; uint32_t lang_id = 0x0409, lang_sys = 0x0409; // Multilangual UI variables, for now all set to LCID of en-US -plat_joystick_t plat_joystick_state[MAX_PLAT_JOYSTICKS]; -joystick_t joystick_state[MAX_JOYSTICKS]; - int stricmp(const char* s1, const char* s2) { return QByteArray(s1).compare(s2, Qt::CaseInsensitive); @@ -380,9 +377,6 @@ void dynld_close(void *handle) delete reinterpret_cast(handle); } -void joystick_init(void) {} -void joystick_close(void) {} -void joystick_process(void) {} void startblit() { blitmx_contention++; diff --git a/src/qt/qt_settingsinput.cpp b/src/qt/qt_settingsinput.cpp index 8a8d8e1bf..04c8a8f3d 100644 --- a/src/qt/qt_settingsinput.cpp +++ b/src/qt/qt_settingsinput.cpp @@ -11,7 +11,9 @@ extern "C" { #include <86box/gameport.h> } +#include "qt_models_common.hpp" #include "qt_deviceconfig.hpp" +#include "qt_joystickconfiguration.hpp" SettingsInput::SettingsInput(QWidget *parent) : QWidget(parent), @@ -73,13 +75,7 @@ void SettingsInput::onCurrentMachineChanged(int machineId) { removeRows = joystickModel->rowCount(); selectedRow = 0; while (joyName) { - int row = joystickModel->rowCount(); - joystickModel->insertRow(row); - auto idx = joystickModel->index(row, 0); - - joystickModel->setData(idx, joyName, Qt::DisplayRole); - joystickModel->setData(idx, i, Qt::UserRole); - + int row = Models::AddEntry(joystickModel, joyName, i); if (i == joystick_type) { selectedRow = row - removeRows; } @@ -112,3 +108,80 @@ void SettingsInput::on_pushButtonConfigureMouse_clicked() { int mouseId = ui->comboBoxMouse->currentData().toInt(); DeviceConfig::ConfigureDevice(mouse_get_device(mouseId)); } + +static int get_axis(JoystickConfiguration& jc, int axis, int joystick_nr) { + int axis_sel = jc.selectedAxis(axis); + int nr_axes = plat_joystick_state[joystick_state[joystick_nr].plat_joystick_nr - 1].nr_axes; + int nr_povs = plat_joystick_state[joystick_state[joystick_nr].plat_joystick_nr - 1].nr_povs; + + if (axis_sel < nr_axes) { + return axis_sel; + } + + axis_sel -= nr_axes; + if (axis_sel < nr_povs * 2) { + if (axis_sel & 1) + return POV_Y | (axis_sel >> 1); + else + return POV_X | (axis_sel >> 1); + } + axis_sel -= nr_povs; + + return SLIDER | (axis_sel >> 1); +} + +static int get_pov(JoystickConfiguration& jc, int pov, int joystick_nr) { + int pov_sel = jc.selectedPov(pov); + int nr_povs = plat_joystick_state[joystick_state[joystick_nr].plat_joystick_nr-1].nr_povs*2; + + if (pov_sel < nr_povs) + { + if (pov_sel & 1) + return POV_Y | (pov_sel >> 1); + else + return POV_X | (pov_sel >> 1); + } + + return pov_sel - nr_povs; +} + +static void updateJoystickConfig(int type, int joystick_nr, QWidget* parent) { + JoystickConfiguration jc(type, joystick_nr, parent); + switch (jc.exec()) { + case QDialog::Rejected: + return; + case QDialog::Accepted: + break; + } + + joystick_state[joystick_nr].plat_joystick_nr = jc.selectedDevice(); + if (joystick_state[joystick_nr].plat_joystick_nr) { + for (int c = 0; c < joystick_get_axis_count(type); c++) { + joystick_state[joystick_nr].axis_mapping[c] = get_axis(jc, c, joystick_nr); + } + for (int c = 0; c < joystick_get_button_count(type); c++) { + joystick_state[joystick_nr].button_mapping[c] = jc.selectedButton(c); + } + for (int c = 0; c < joystick_get_button_count(type); c++) { + joystick_state[joystick_nr].pov_mapping[c][0] = get_pov(jc, c, joystick_nr); + joystick_state[joystick_nr].pov_mapping[c][1] = get_pov(jc, c, joystick_nr); + } + } +} + +void SettingsInput::on_pushButtonJoystick1_clicked() { + updateJoystickConfig(ui->comboBoxJoystick->currentData().toInt(), 0, this); +} + +void SettingsInput::on_pushButtonJoystick2_clicked() { + updateJoystickConfig(ui->comboBoxJoystick->currentData().toInt(), 1, this); +} + +void SettingsInput::on_pushButtonJoystick3_clicked() { + updateJoystickConfig(ui->comboBoxJoystick->currentData().toInt(), 2, this); +} + +void SettingsInput::on_pushButtonJoystick4_clicked() { + updateJoystickConfig(ui->comboBoxJoystick->currentData().toInt(), 3, this); +} + diff --git a/src/qt/qt_settingsinput.hpp b/src/qt/qt_settingsinput.hpp index f69453dea..f9e44740d 100644 --- a/src/qt/qt_settingsinput.hpp +++ b/src/qt/qt_settingsinput.hpp @@ -24,6 +24,10 @@ private slots: void on_pushButtonConfigureMouse_clicked(); void on_comboBoxJoystick_currentIndexChanged(int index); void on_comboBoxMouse_currentIndexChanged(int index); + void on_pushButtonJoystick1_clicked(); + void on_pushButtonJoystick2_clicked(); + void on_pushButtonJoystick3_clicked(); + void on_pushButtonJoystick4_clicked(); private: Ui::SettingsInput *ui; diff --git a/src/qt/sdl_joystick.cpp b/src/qt/sdl_joystick.cpp new file mode 100644 index 000000000..13adfba44 --- /dev/null +++ b/src/qt/sdl_joystick.cpp @@ -0,0 +1,159 @@ +// Lifted from wx-sdl2-joystick.c in PCem + +#include + +extern "C" { +#include <86box/device.h> +#include <86box/gameport.h> + +int joysticks_present; +joystick_t joystick_state[MAX_JOYSTICKS]; +plat_joystick_t plat_joystick_state[MAX_PLAT_JOYSTICKS]; +static SDL_Joystick *sdl_joy[MAX_PLAT_JOYSTICKS]; +} + +void joystick_init() { + if (SDL_InitSubSystem(SDL_INIT_JOYSTICK) != 0) { + return; + } + joysticks_present = SDL_NumJoysticks(); + + memset(sdl_joy, 0, sizeof(sdl_joy)); + for (int c = 0; c < joysticks_present; c++) + { + sdl_joy[c] = SDL_JoystickOpen(c); + + if (sdl_joy[c]) + { + int d; + + strncpy(plat_joystick_state[c].name, SDL_JoystickNameForIndex(c), 64); + plat_joystick_state[c].nr_axes = SDL_JoystickNumAxes(sdl_joy[c]); + plat_joystick_state[c].nr_buttons = SDL_JoystickNumButtons(sdl_joy[c]); + plat_joystick_state[c].nr_povs = SDL_JoystickNumHats(sdl_joy[c]); + + for (d = 0; d < std::min(plat_joystick_state[c].nr_axes, 8); d++) + { + sprintf(plat_joystick_state[c].axis[d].name, "Axis %i", d); + plat_joystick_state[c].axis[d].id = d; + } + for (d = 0; d < std::min(plat_joystick_state[c].nr_buttons, 8); d++) + { + sprintf(plat_joystick_state[c].button[d].name, "Button %i", d); + plat_joystick_state[c].button[d].id = d; + } + for (d = 0; d < std::min(plat_joystick_state[c].nr_povs, 4); d++) + { + sprintf(plat_joystick_state[c].pov[d].name, "POV %i", d); + plat_joystick_state[c].pov[d].id = d; + } + } + } +} + +void joystick_close() +{ + int c; + + for (c = 0; c < joysticks_present; c++) + { + if (sdl_joy[c]) + SDL_JoystickClose(sdl_joy[c]); + } +} + +static int joystick_get_axis(int joystick_nr, int mapping) +{ + if (mapping & POV_X) + { + switch (plat_joystick_state[joystick_nr].p[mapping & 3]) + { + case SDL_HAT_LEFTUP: case SDL_HAT_LEFT: case SDL_HAT_LEFTDOWN: + return -32767; + + case SDL_HAT_RIGHTUP: case SDL_HAT_RIGHT: case SDL_HAT_RIGHTDOWN: + return 32767; + + default: + return 0; + } + } + else if (mapping & POV_Y) + { + switch (plat_joystick_state[joystick_nr].p[mapping & 3]) + { + case SDL_HAT_LEFTUP: case SDL_HAT_UP: case SDL_HAT_RIGHTUP: + return -32767; + + case SDL_HAT_LEFTDOWN: case SDL_HAT_DOWN: case SDL_HAT_RIGHTDOWN: + return 32767; + + default: + return 0; + } + } + else + return plat_joystick_state[joystick_nr].a[plat_joystick_state[joystick_nr].axis[mapping].id]; +} +void joystick_process() +{ + int c, d; + + SDL_JoystickUpdate(); + for (c = 0; c < joysticks_present; c++) + { + int b; + + plat_joystick_state[c].a[0] = SDL_JoystickGetAxis(sdl_joy[c], 0); + plat_joystick_state[c].a[1] = SDL_JoystickGetAxis(sdl_joy[c], 1); + plat_joystick_state[c].a[2] = SDL_JoystickGetAxis(sdl_joy[c], 2); + plat_joystick_state[c].a[3] = SDL_JoystickGetAxis(sdl_joy[c], 3); + plat_joystick_state[c].a[4] = SDL_JoystickGetAxis(sdl_joy[c], 4); + plat_joystick_state[c].a[5] = SDL_JoystickGetAxis(sdl_joy[c], 5); + + for (b = 0; b < 16; b++) + plat_joystick_state[c].b[b] = SDL_JoystickGetButton(sdl_joy[c], b); + + for (b = 0; b < 4; b++) + plat_joystick_state[c].p[b] = SDL_JoystickGetHat(sdl_joy[c], b); + // pclog("joystick %i - x=%i y=%i b[0]=%i b[1]=%i %i\n", c, joystick_state[c].x, joystick_state[c].y, joystick_state[c].b[0], joystick_state[c].b[1], joysticks_present); + } + + for (c = 0; c < joystick_get_max_joysticks(joystick_type); c++) + { + if (joystick_state[c].plat_joystick_nr) + { + int joystick_nr = joystick_state[c].plat_joystick_nr - 1; + + for (d = 0; d < joystick_get_axis_count(joystick_type); d++) + joystick_state[c].axis[d] = joystick_get_axis(joystick_nr, joystick_state[c].axis_mapping[d]); + for (d = 0; d < joystick_get_button_count(joystick_type); d++) + joystick_state[c].button[d] = plat_joystick_state[joystick_nr].b[joystick_state[c].button_mapping[d]]; + for (d = 0; d < joystick_get_pov_count(joystick_type); d++) + { + int x, y; + double angle, magnitude; + + x = joystick_get_axis(joystick_nr, joystick_state[c].pov_mapping[d][0]); + y = joystick_get_axis(joystick_nr, joystick_state[c].pov_mapping[d][1]); + + angle = (atan2((double)y, (double)x) * 360.0) / (2*M_PI); + magnitude = sqrt((double)x*(double)x + (double)y*(double)y); + + if (magnitude < 16384) + joystick_state[c].pov[d] = -1; + else + joystick_state[c].pov[d] = ((int)angle + 90 + 360) % 360; + } + } + else + { + for (d = 0; d < joystick_get_axis_count(joystick_type); d++) + joystick_state[c].axis[d] = 0; + for (d = 0; d < joystick_get_button_count(joystick_type); d++) + joystick_state[c].button[d] = 0; + for (d = 0; d < joystick_get_pov_count(joystick_type); d++) + joystick_state[c].pov[d] = -1; + } + } +} From a4905da036f0daa8c9cf02c431b7018509b24c2d Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 14 Dec 2021 16:33:53 +0600 Subject: [PATCH 101/278] Fix compilation on macOS --- src/qt/sdl_joystick.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/qt/sdl_joystick.cpp b/src/qt/sdl_joystick.cpp index 13adfba44..5a8100ee5 100644 --- a/src/qt/sdl_joystick.cpp +++ b/src/qt/sdl_joystick.cpp @@ -12,6 +12,8 @@ plat_joystick_t plat_joystick_state[MAX_PLAT_JOYSTICKS]; static SDL_Joystick *sdl_joy[MAX_PLAT_JOYSTICKS]; } +#include + void joystick_init() { if (SDL_InitSubSystem(SDL_INIT_JOYSTICK) != 0) { return; From 5fcddcbfdd3d95621f6db45c2208eca6d0431cd6 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Tue, 14 Dec 2021 13:18:50 +0100 Subject: [PATCH 102/278] removed old code --- src/qt/qt_settingsmachine.cpp | 81 ----------------------------------- 1 file changed, 81 deletions(-) diff --git a/src/qt/qt_settingsmachine.cpp b/src/qt/qt_settingsmachine.cpp index d42216107..e43494e8f 100644 --- a/src/qt/qt_settingsmachine.cpp +++ b/src/qt/qt_settingsmachine.cpp @@ -24,87 +24,6 @@ extern "C" { #include "qt_deviceconfig.hpp" #include "qt_models_common.hpp" -/* -class MachineModel : public QAbstractListModel { -public: - MachineModel(QObject* parent) : QAbstractListModel(parent) {} - - bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override; - bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override; - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; - int rowCount(const QModelIndex &parent = QModelIndex()) const override; - bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; -private: - struct Entry { - QString name; - int id; - }; - QList entries; -}; - -bool MachineModel::insertRows(int row, int count, const QModelIndex &parent) { - beginInsertRows(parent, row, row + count - 1); - for (int i = 0; i < count; ++i) { - entries.insert(row, Entry{}); - } - endInsertRows(); - - return true; -} - -bool MachineModel::removeRows(int row, int count, const QModelIndex &parent) { - beginRemoveRows(parent, row, row + count - 1); - for (int i = 0; i < count; ++i) { - entries.removeAt(row); - } - endRemoveRows(); - - return true; -} - -QVariant MachineModel::data(const QModelIndex &index, int role) const { - Q_ASSERT(checkIndex(index, QAbstractItemModel::CheckIndexOption::IndexIsValid | QAbstractItemModel::CheckIndexOption::ParentIsInvalid)); - - switch (role) { - case Qt::DisplayRole: - return entries.at(index.row()).name; - case Qt::UserRole: - return entries.at(index.row()).id; - default: - return {}; - } -} - -int MachineModel::rowCount(const QModelIndex &parent) const { - (void) parent; - return entries.size(); -} - -bool MachineModel::setData(const QModelIndex &index, const QVariant &value, int role) { - Entry* entry = nullptr; - if (index.row() < entries.size()) { - entry = &entries[index.row()]; - } else if (index.row() == entries.size()) { - entries.append(Entry{}); - entry = &entries.back(); - } - - bool ret = true; - if (entry != nullptr) { - switch (role) { - case Qt::DisplayRole: - entry->name = value.toString(); - case Qt::UserRole: - entry->id = value.toInt(); - default: - ret = false; - break; - } - } - return ret; -} -*/ - SettingsMachine::SettingsMachine(QWidget *parent) : QWidget(parent), ui(new Ui::SettingsMachine) From 61ab0e60ca3c1ccb27ae13bc74d95770abdb019c Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Tue, 14 Dec 2021 13:53:56 +0100 Subject: [PATCH 103/278] merged in machine flags/bus refactoring started in 6661ff5dcc33bc0cdb199d0b167087e6575e5cee --- src/qt/qt_machinestatus.cpp | 16 ++++----- src/qt/qt_machinestatus.hpp | 1 - src/qt/qt_mediamenu.cpp | 2 +- src/qt/qt_settingsdisplay.cpp | 9 +++--- src/qt/qt_settingsinput.cpp | 4 +-- src/qt/qt_settingsmachine.cpp | 41 +++++++++++++++--------- src/qt/qt_settingsnetwork.cpp | 2 +- src/qt/qt_settingssound.cpp | 18 +++++++---- src/qt/qt_settingsstoragecontrollers.cpp | 8 ++--- 9 files changed, 54 insertions(+), 47 deletions(-) diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index b0644c0f3..a2b44b36e 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -218,16 +218,12 @@ bool MachineStatus::hasCassette() { return cassette_enable > 0 ? true : false; } -bool MachineStatus::hasCartridge() { - return machines[machine].flags & MACHINE_CARTRIDGE; -} - bool MachineStatus::hasIDE() { - return machines[machine].flags & MACHINE_IDE_QUAD; + return machine_has_flags(machine, MACHINE_IDE_QUAD) > 0; } bool MachineStatus::hasSCSI() { - return machines[machine].flags & MACHINE_SCSI_DUAL; + return machine_has_flags(machine, MACHINE_SCSI_DUAL) > 0; } void MachineStatus::iterateFDD(const std::function &cb) { @@ -303,9 +299,9 @@ static int hdd_count(int bus) { } void MachineStatus::refresh(QStatusBar* sbar) { - bool has_mfm = machines[machine].flags & MACHINE_MFM; - bool has_xta = machines[machine].flags & MACHINE_XTA; - bool has_esdi = machines[machine].flags & MACHINE_ESDI; + bool has_mfm = machine_has_flags(machine, MACHINE_MFM) > 0; + bool has_xta = machine_has_flags(machine, MACHINE_XTA) > 0; + bool has_esdi = machine_has_flags(machine, MACHINE_ESDI) > 0; int c_mfm = hdd_count(HDD_BUS_MFM); int c_esdi = hdd_count(HDD_BUS_ESDI); @@ -346,7 +342,7 @@ void MachineStatus::refresh(QStatusBar* sbar) { sbar->addWidget(d->cassette.label.get()); } - if (hasCartridge()) { + if (machine_has_cartridge(machine)) { for (int i = 0; i < 2; ++i) { d->cartridge[i].label = std::make_unique(); d->cartridge[i].setEmpty(QString(cart_fns[i]).isEmpty()); diff --git a/src/qt/qt_machinestatus.hpp b/src/qt/qt_machinestatus.hpp index df901ab45..09ef80fa4 100644 --- a/src/qt/qt_machinestatus.hpp +++ b/src/qt/qt_machinestatus.hpp @@ -32,7 +32,6 @@ public: ~MachineStatus(); static bool hasCassette(); - static bool hasCartridge(); static bool hasIDE(); static bool hasSCSI(); static void iterateFDD(const std::function& cb); diff --git a/src/qt/qt_mediamenu.cpp b/src/qt/qt_mediamenu.cpp index 2b7faef0f..07b073968 100644 --- a/src/qt/qt_mediamenu.cpp +++ b/src/qt/qt_mediamenu.cpp @@ -56,7 +56,7 @@ void MediaMenu::refresh(QMenu *parentMenu) { } cartridgeMenus.clear(); - if (MachineStatus::hasCartridge()) { + if (machine_has_cartridge(machine)) { for(int i = 0; i < 2; i++) { auto* menu = parentMenu->addMenu(""); menu->addAction("Image", [this, i]() { cartridgeSelectImage(i); }); diff --git a/src/qt/qt_settingsdisplay.cpp b/src/qt/qt_settingsdisplay.cpp index 70ec09c89..4cd604305 100644 --- a/src/qt/qt_settingsdisplay.cpp +++ b/src/qt/qt_settingsdisplay.cpp @@ -36,7 +36,6 @@ void SettingsDisplay::onCurrentMachineChanged(int machineId) { // win_settings_video_proc, WM_INITDIALOG this->machineId = machineId; - auto* machine = &machines[machineId]; auto* model = ui->comboBoxVideo->model(); auto removeRows = model->rowCount(); @@ -44,7 +43,7 @@ void SettingsDisplay::onCurrentMachineChanged(int machineId) { int selectedRow = 0; while (true) { /* Skip "internal" if machine doesn't have it. */ - if ((c == 1) && !(machine->flags & MACHINE_VIDEO)) { + if ((c == 1) && (machine_has_flags(machineId, MACHINE_VIDEO) == 0)) { c++; continue; } @@ -56,7 +55,7 @@ void SettingsDisplay::onCurrentMachineChanged(int machineId) { } if (video_card_available(c) && - device_is_valid(video_dev, machine->flags)) { + device_is_valid(video_dev, machineId)) { int row = Models::AddEntry(model, name, c); if (c == gfxcard) { selectedRow = row - removeRows; @@ -67,7 +66,7 @@ void SettingsDisplay::onCurrentMachineChanged(int machineId) { } model->removeRows(0, removeRows); - if (machine->flags & MACHINE_VIDEO_ONLY) { + if (machine_has_flags(machineId, MACHINE_VIDEO_ONLY) > 0) { ui->comboBoxVideo->setEnabled(false); selectedRow = 1; } else { @@ -92,7 +91,7 @@ void SettingsDisplay::on_comboBoxVideo_currentIndexChanged(int index) { int videoCard = ui->comboBoxVideo->currentData().toInt(); ui->pushButtonConfigure->setEnabled(video_card_has_config(videoCard) > 0); - bool machineHasPci = machines[machineId].flags & MACHINE_BUS_PCI; + bool machineHasPci = machine_has_bus(machineId, MACHINE_BUS_PCI) > 0; ui->checkBoxVoodoo->setEnabled(machineHasPci); if (machineHasPci) { ui->checkBoxVoodoo->setChecked(voodoo_enabled); diff --git a/src/qt/qt_settingsinput.cpp b/src/qt/qt_settingsinput.cpp index 04c8a8f3d..b34cb31ca 100644 --- a/src/qt/qt_settingsinput.cpp +++ b/src/qt/qt_settingsinput.cpp @@ -45,11 +45,11 @@ void SettingsInput::onCurrentMachineChanged(int machineId) { int selectedRow = 0; for (int i = 0; i < mouse_get_ndev(); ++i) { const auto* dev = mouse_get_device(i); - if ((i == MOUSE_TYPE_INTERNAL) && !(machines[machineId].flags & MACHINE_MOUSE)) { + if ((i == MOUSE_TYPE_INTERNAL) && (machine_has_flags(machineId, MACHINE_MOUSE) == 0)) { continue; } - if (device_is_valid(dev, machine->flags) == 0) { + if (device_is_valid(dev, machineId) == 0) { continue; } diff --git a/src/qt/qt_settingsmachine.cpp b/src/qt/qt_settingsmachine.cpp index e43494e8f..9b8455f11 100644 --- a/src/qt/qt_settingsmachine.cpp +++ b/src/qt/qt_settingsmachine.cpp @@ -57,8 +57,8 @@ SettingsMachine::SettingsMachine(QWidget *parent) : int selectedMachineType = 0; auto* machineTypesModel = ui->comboBoxMachineType->model(); for (int i = 0; i < MACHINE_TYPE_MAX; ++i) { - Models::AddEntry(machineTypesModel, machine_types[i].name, machine_types[i].id); - if (machine_types[i].id == machines[machine].type) { + Models::AddEntry(machineTypesModel, machine_getname_ex(i), machine_types[i].id); + if (machine_types[i].id == machine_get_type(machine)) { selectedMachineType = i; } } @@ -75,11 +75,21 @@ void SettingsMachine::save() { cpu = ui->comboBoxSpeed->currentData().toInt(); fpu_type = ui->comboBoxFPU->currentData().toInt(); cpu_use_dynarec = ui->checkBoxDynamicRecompiler->isChecked() ? 1 : 0; - if (machines[machine].ram_granularity < 1024) { - mem_size = ui->spinBoxRAM->value(); + int64_t temp_mem_size; + if (machine_get_ram_granularity(machine) < 1024) { + temp_mem_size = ui->spinBoxRAM->value(); } else { - mem_size = ui->spinBoxRAM->value() * 1024; + temp_mem_size = ui->spinBoxRAM->value() * 1024; } + + temp_mem_size &= ~(machine_get_ram_granularity(machine) - 1); + if (temp_mem_size < machine_get_min_ram(machine)) { + temp_mem_size = machine_get_min_ram(machine); + } else if (temp_mem_size > machine_get_max_ram(machine)) { + temp_mem_size = machine_get_max_ram(machine); + } + mem_size = static_cast(temp_mem_size); + if (ui->comboBoxWaitStates->isEnabled()) { cpu_waitstates = ui->comboBoxWaitStates->currentData().toInt(); } else { @@ -101,7 +111,7 @@ void SettingsMachine::on_comboBoxMachineType_currentIndexChanged(int index) { int selectedMachineRow = 0; for (int i = 0; i < machine_count(); ++i) { - if ((machines[i].type == index) && machine_available(i)) { + if ((machine_get_type(i) == index) && machine_available(i)) { int row = Models::AddEntry(model, machines[i].name, i); if (i == machine) { selectedMachineRow = row - removeRows; @@ -148,26 +158,25 @@ void SettingsMachine::on_comboBoxMachine_currentIndexChanged(int index) { auto* machine = &machines[machineId]; if ((machine->ram_granularity < 1024)) { - ui->spinBoxRAM->setMinimum(machine->min_ram); - ui->spinBoxRAM->setMaximum(machine->max_ram); - ui->spinBoxRAM->setSingleStep(machine->ram_granularity); + ui->spinBoxRAM->setMinimum(machine_get_min_ram(machineId)); + ui->spinBoxRAM->setMaximum(machine_get_max_ram(machineId)); + ui->spinBoxRAM->setSingleStep(machine_get_ram_granularity(machineId)); ui->spinBoxRAM->setSuffix(" KiB"); ui->spinBoxRAM->setValue(mem_size); } else { - uint maxram; + int maxram; #if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64)) - maxram = std::min(machine->max_ram, 2097152U); + maxram = std::min(machine->max_ram, 2097152); #else - maxram = std::min(machine->max_ram, 3145728U); + maxram = std::min(machine_get_max_ram(machineId), 3145728); #endif - ui->spinBoxRAM->setMinimum(machine->min_ram / 1024); + ui->spinBoxRAM->setMinimum(machine_get_min_ram(machineId) / 1024); ui->spinBoxRAM->setMaximum(maxram / 1024); - ui->spinBoxRAM->setSingleStep(machine->ram_granularity / 1024); + ui->spinBoxRAM->setSingleStep(machine_get_ram_granularity(machineId) / 1024); ui->spinBoxRAM->setSuffix(" MiB"); ui->spinBoxRAM->setValue(mem_size / 1024); } - ui->spinBoxRAM->setEnabled(machine->min_ram != machine->max_ram); - ui->spinBoxRAM->setEnabled(machine->min_ram != machine->max_ram); + ui->spinBoxRAM->setEnabled(machine_get_min_ram(machineId) != machine_get_max_ram(machineId)); emit currentMachineChanged(machineId); } diff --git a/src/qt/qt_settingsnetwork.cpp b/src/qt/qt_settingsnetwork.cpp index 18d06a520..201a61fea 100644 --- a/src/qt/qt_settingsnetwork.cpp +++ b/src/qt/qt_settingsnetwork.cpp @@ -76,7 +76,7 @@ void SettingsNetwork::onCurrentMachineChanged(int machineId) { break; } - if (network_card_available(c) && device_is_valid(network_card_getdevice(c), machine->flags)) { + if (network_card_available(c) && device_is_valid(network_card_getdevice(c), machineId)) { int row = Models::AddEntry(model, name, c); if (c == network_card) { selectedRow = row - removeRows; diff --git a/src/qt/qt_settingssound.cpp b/src/qt/qt_settingssound.cpp index 8e686f870..35adcf295 100644 --- a/src/qt/qt_settingssound.cpp +++ b/src/qt/qt_settingssound.cpp @@ -40,7 +40,6 @@ void SettingsSound::save() { void SettingsSound::onCurrentMachineChanged(int machineId) { this->machineId = machineId; - auto* machine = &machines[machineId]; auto* model = ui->comboBoxSoundCard->model(); auto removeRows = model->rowCount(); @@ -48,7 +47,7 @@ void SettingsSound::onCurrentMachineChanged(int machineId) { int selectedRow = 0; while (true) { /* Skip "internal" if machine doesn't have it. */ - if ((c == 1) && !(machine->flags & MACHINE_SOUND)) { + if ((c == 1) && (machine_has_flags(machineId, MACHINE_SOUND) == 0)) { c++; continue; } @@ -60,7 +59,7 @@ void SettingsSound::onCurrentMachineChanged(int machineId) { } if (sound_card_available(c)) { - if (device_is_valid(sound_dev, machine->flags)) { + if (device_is_valid(sound_dev, machineId)) { int row = Models::AddEntry(model, name, c); if (c == sound_card_current) { selectedRow = row - removeRows; @@ -128,9 +127,14 @@ void SettingsSound::onCurrentMachineChanged(int machineId) { ui->checkBoxGUS->setChecked(GUS > 0); ui->checkBoxFloat32->setChecked(sound_is_float > 0); - ui->pushButtonConfigureSSI2001->setEnabled((SSI2001 > 0) && (machine->flags & MACHINE_BUS_ISA)); - ui->pushButtonConfigureCMS->setEnabled((GAMEBLASTER > 0) && (machine->flags & MACHINE_BUS_ISA)); - ui->pushButtonConfigureGUS->setEnabled((GUS > 0) && (machine->flags & MACHINE_BUS_ISA16)); + bool hasIsa = machine_has_bus(machineId, MACHINE_BUS_ISA) > 0; + bool hasIsa16 = machine_has_bus(machineId, MACHINE_BUS_ISA) > 0; + ui->checkBoxCMS->setEnabled(hasIsa); + ui->pushButtonConfigureCMS->setEnabled((GAMEBLASTER > 0) && hasIsa); + ui->checkBoxGUS->setEnabled(hasIsa16); + ui->pushButtonConfigureGUS->setEnabled((GUS > 0) && hasIsa16); + ui->checkBoxSSI2001->setEnabled(hasIsa); + ui->pushButtonConfigureSSI2001->setEnabled((SSI2001 > 0) && hasIsa); } static bool allowMpu401(Ui::SettingsSound *ui) { @@ -203,7 +207,7 @@ void SettingsSound::on_checkBoxGUS_stateChanged(int state) { } void SettingsSound::on_pushButtonConfigureMPU401_clicked() { - if (machines[machineId].flags & MACHINE_MCA) { + if (machine_has_bus(machineId, MACHINE_BUS_MCA) > 0) { DeviceConfig::ConfigureDevice(&mpu401_mca_device); } else { DeviceConfig::ConfigureDevice(&mpu401_device); diff --git a/src/qt/qt_settingsstoragecontrollers.cpp b/src/qt/qt_settingsstoragecontrollers.cpp index fb5dd47cc..8432a300a 100644 --- a/src/qt/qt_settingsstoragecontrollers.cpp +++ b/src/qt/qt_settingsstoragecontrollers.cpp @@ -57,7 +57,7 @@ void SettingsStorageControllers::onCurrentMachineChanged(int machineId) { int selectedRow = 0; while (true) { /* Skip "internal" if machine doesn't have it. */ - if ((c == 1) && !(machine->flags & MACHINE_HDC)) { + if ((c == 1) && (machine_has_flags(machineId, MACHINE_HDC) == 0)) { c++; continue; } @@ -70,7 +70,7 @@ void SettingsStorageControllers::onCurrentMachineChanged(int machineId) { if (hdc_available(c)) { auto* hdc_dev = hdc_get_device(c); - if (device_is_valid(hdc_dev, machine->flags)) { + if (device_is_valid(hdc_dev, machineId)) { int row = Models::AddEntry(model, name, c); if (c == hdc_current) { selectedRow = row - removeRows; @@ -98,7 +98,7 @@ void SettingsStorageControllers::onCurrentMachineChanged(int machineId) { if (fdc_card_available(c)) { auto* fdc_dev = fdc_card_getdevice(c); - if (device_is_valid(fdc_dev, machine->flags)) { + if (device_is_valid(fdc_dev, machineId)) { int row = Models::AddEntry(model, name, c); if (c == fdc_type) { selectedRow = row - removeRows; @@ -127,7 +127,7 @@ void SettingsStorageControllers::onCurrentMachineChanged(int machineId) { if (scsi_card_available(c)) { auto* scsi_dev = scsi_card_getdevice(c); - if (device_is_valid(scsi_dev, machine->flags)) { + if (device_is_valid(scsi_dev, machineId)) { int row = Models::AddEntry(model, name, c); if (c == scsi_card_current[i]) { selectedRow = row - removeRows; From dec90c7ae0054d6bc37ac1456db10479fb547b0f Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Tue, 14 Dec 2021 20:30:09 +0100 Subject: [PATCH 104/278] refactored setTitle to just be a normal AutoConnection signal --- src/qt/qt_mainwindow.cpp | 18 +++--------------- src/qt/qt_mainwindow.hpp | 4 +--- src/qt/qt_ui.cpp | 2 +- 3 files changed, 5 insertions(+), 19 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 8a8df2491..ad3e950f6 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -63,7 +63,9 @@ MainWindow::MainWindow(QWidget *parent) : connect(this, &MainWindow::showMessageForNonQtThread, this, &MainWindow::showMessage_, Qt::BlockingQueuedConnection); - connect(this, &MainWindow::setTitleForNonQtThread, this, &MainWindow::setTitle_, Qt::BlockingQueuedConnection); + connect(this, &MainWindow::setTitle, this, [this](const QString& title) { + setWindowTitle(title); + }); connect(this, &MainWindow::getTitleForNonQtThread, this, &MainWindow::getTitle_, Qt::BlockingQueuedConnection); connect(this, &MainWindow::updateMenuResizeOptions, [this]() { @@ -873,20 +875,6 @@ void MainWindow::on_actionFullscreen_triggered() { rc->onResize(widget->width(), widget->height()); } -void MainWindow::setTitle_(const wchar_t *title) -{ - this->setWindowTitle(QString::fromWCharArray(title)); -} - -void MainWindow::setTitle(const wchar_t *title) -{ - if (QThread::currentThread() == this->thread()) { - setTitle_(title); - } else { - emit setTitleForNonQtThread(title); - } -} - void MainWindow::getTitle_(wchar_t *title) { this->windowTitle().toWCharArray(title); diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 01586df3e..a7d423f68 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -25,7 +25,6 @@ public: ~MainWindow(); void showMessage(const QString& header, const QString& message); - void setTitle(const wchar_t* title); void getTitle(wchar_t* title); void blitToWidget(int x, int y, int w, int h); QSize getRenderWidgetSize(); @@ -41,11 +40,11 @@ signals: void updateMenuResizeOptions(); void updateWindowRememberOption(); + void setTitle(const QString& title); void setFullscreen(bool state); void setMouseCapture(bool state); void showMessageForNonQtThread(const QString& header, const QString& message); - void setTitleForNonQtThread(const wchar_t* title); void getTitleForNonQtThread(wchar_t* title); private slots: void on_actionFullscreen_triggered(); @@ -94,7 +93,6 @@ private slots: void refreshMediaMenu(); void showMessage_(const QString& header, const QString& message); - void setTitle_(const wchar_t* title); void getTitle_(wchar_t* title); void on_actionTake_screenshot_triggered(); diff --git a/src/qt/qt_ui.cpp b/src/qt/qt_ui.cpp index d00e262e3..b18a1090b 100644 --- a/src/qt/qt_ui.cpp +++ b/src/qt/qt_ui.cpp @@ -28,7 +28,7 @@ wchar_t* ui_window_title(wchar_t* str) main_window->getTitle(title); str = title; } else { - main_window->setTitle(str); + emit main_window->setTitle(QString::fromWCharArray(str)); } return str; } From 7c2cd359655037e61680320b781b329ca9c9c3ff Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Wed, 15 Dec 2021 00:37:48 +0200 Subject: [PATCH 105/278] qt: Add overload protection to renderers Added atomic_flags for renderer buffers to prevent concurrent usage and overloading the renderer with draw requests when it's busy. --- src/qt/qt_hardwarerenderer.cpp | 4 +++- src/qt/qt_hardwarerenderer.hpp | 2 +- src/qt/qt_rendererstack.cpp | 13 +++++++++---- src/qt/qt_rendererstack.hpp | 7 ++++++- src/qt/qt_softwarerenderer.cpp | 3 ++- src/qt/qt_softwarerenderer.hpp | 3 ++- 6 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index 0659e41a5..4b12fc249 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -1,5 +1,6 @@ #include "qt_hardwarerenderer.hpp" #include +#include extern "C" { #include <86box/86box.h> @@ -34,10 +35,11 @@ void HardwareRenderer::setRenderType(RenderType type) { setFormat(format); } -void HardwareRenderer::onBlit(const QImage& img, int x, int y, int w, int h) { +void HardwareRenderer::onBlit(const QImage& img, int x, int y, int w, int h, std::atomic_flag* in_use) { image = img; source.setRect(x, y, w, h); update(); + in_use->clear(); } void HardwareRenderer::resizeEvent(QResizeEvent *event) { diff --git a/src/qt/qt_hardwarerenderer.hpp b/src/qt/qt_hardwarerenderer.hpp index 916e52141..fa9e7ec31 100644 --- a/src/qt/qt_hardwarerenderer.hpp +++ b/src/qt/qt_hardwarerenderer.hpp @@ -43,7 +43,7 @@ public: void setRenderType(RenderType type); public slots: - void onBlit(const QImage& img, int, int, int, int); + void onBlit(const QImage& img, int, int, int, int, std::atomic_flag* in_use); protected: void resizeEvent(QResizeEvent *event) override; diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index fed414d12..07546ea3a 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -27,6 +27,11 @@ RendererStack::RendererStack(QWidget *parent) : imagebufs = QVector(2); imagebufs[0] = QImage{QSize(2048 + 64, 2048 + 64), QImage::Format_RGB32}; imagebufs[1] = QImage{QSize(2048 + 64, 2048 + 64), QImage::Format_RGB32}; + + buffers_in_use = std::vector(2); + buffers_in_use[0].clear(); + buffers_in_use[1].clear(); + #ifdef WAYLAND if (QApplication::platformName().contains("wayland")) { wl_init(); @@ -165,7 +170,7 @@ void RendererStack::leaveEvent(QEvent* event) // called from blitter thread void RendererStack::blit(int x, int y, int w, int h) { - if ((w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL)) + if ((w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL) || buffers_in_use[currentBuf].test_and_set()) { video_blit_complete(); return; @@ -182,7 +187,7 @@ void RendererStack::blit(int x, int y, int w, int h) video_screenshot((uint32_t *)imagebits, 0, 0, 2048 + 64); } video_blit_complete(); - blitToRenderer(imagebufs[currentBuf], sx, sy, sw, sh); + blitToRenderer(imagebufs[currentBuf], sx, sy, sw, sh, &buffers_in_use[currentBuf]); currentBuf = (currentBuf + 1) % 2; } @@ -190,11 +195,11 @@ void RendererStack::on_RendererStack_currentChanged(int arg1) { disconnect(this, &RendererStack::blitToRenderer, nullptr, nullptr); switch (arg1) { case 0: - connect(this, &RendererStack::blitToRenderer, dynamic_cast(currentWidget()), &SoftwareRenderer::onBlit); + connect(this, &RendererStack::blitToRenderer, dynamic_cast(currentWidget()), &SoftwareRenderer::onBlit, Qt::QueuedConnection); break; case 1: case 2: - connect(this, &RendererStack::blitToRenderer, dynamic_cast(currentWidget()), &HardwareRenderer::onBlit); + connect(this, &RendererStack::blitToRenderer, dynamic_cast(currentWidget()), &HardwareRenderer::onBlit, Qt::QueuedConnection); break; } } diff --git a/src/qt/qt_rendererstack.hpp b/src/qt/qt_rendererstack.hpp index 239bd5bef..b54db0390 100644 --- a/src/qt/qt_rendererstack.hpp +++ b/src/qt/qt_rendererstack.hpp @@ -4,6 +4,8 @@ #include #include #include +#include +#include namespace Ui { class RendererStack; @@ -32,7 +34,7 @@ public: } signals: - void blitToRenderer(const QImage& img, int, int, int, int); + void blitToRenderer(const QImage& img, int, int, int, int, std::atomic_flag* in_use); public slots: void blit(int x, int y, int w, int h); @@ -57,6 +59,9 @@ private: // when calling bits(); int currentBuf = 0; QVector imagebufs; + + /* atomic flag for each buffer to not overload the renderer */ + std::vector buffers_in_use; }; #endif // QT_RENDERERCONTAINER_HPP diff --git a/src/qt/qt_softwarerenderer.cpp b/src/qt/qt_softwarerenderer.cpp index 0565d2d6c..b424c8bad 100644 --- a/src/qt/qt_softwarerenderer.cpp +++ b/src/qt/qt_softwarerenderer.cpp @@ -7,10 +7,11 @@ void SoftwareRenderer::paintEvent(QPaintEvent *event) { onPaint(this); } -void SoftwareRenderer::onBlit(const QImage& img, int x, int y, int w, int h) { +void SoftwareRenderer::onBlit(const QImage& img, int x, int y, int w, int h, std::atomic_flag* in_use) { image = img; source.setRect(x, y, w, h); update(); + in_use->clear(); } void SoftwareRenderer::resizeEvent(QResizeEvent *event) { diff --git a/src/qt/qt_softwarerenderer.hpp b/src/qt/qt_softwarerenderer.hpp index 873e9f732..1e37f65d4 100644 --- a/src/qt/qt_softwarerenderer.hpp +++ b/src/qt/qt_softwarerenderer.hpp @@ -2,6 +2,7 @@ #define SOFTWARERENDERER_HPP #include +#include #include "qt_renderercomon.hpp" class SoftwareRenderer : public QWidget, public RendererCommon @@ -12,7 +13,7 @@ public: void paintEvent(QPaintEvent *event) override; public slots: - void onBlit(const QImage& img, int, int, int, int); + void onBlit(const QImage& img, int, int, int, int, std::atomic_flag* in_use); protected: void resizeEvent(QResizeEvent *event) override; From f3b0a857c455294d4a311b2dbefcf9eaeb0d49e8 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Wed, 15 Dec 2021 00:50:46 +0200 Subject: [PATCH 106/278] Define M_PI on sdl_joystick.cpp if undefined --- src/qt/sdl_joystick.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/qt/sdl_joystick.cpp b/src/qt/sdl_joystick.cpp index 5a8100ee5..e698a121c 100644 --- a/src/qt/sdl_joystick.cpp +++ b/src/qt/sdl_joystick.cpp @@ -14,6 +14,10 @@ static SDL_Joystick *sdl_joy[MAX_PLAT_JOYSTICKS]; #include +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + void joystick_init() { if (SDL_InitSubSystem(SDL_INIT_JOYSTICK) != 0) { return; From 0e4e7959922d18ec509b56b9d225f0fca146d3a4 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Wed, 15 Dec 2021 07:50:31 +0200 Subject: [PATCH 107/278] qt: Add missing include --- src/qt/qt_settingsmachine.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/qt/qt_settingsmachine.cpp b/src/qt/qt_settingsmachine.cpp index 9b8455f11..0dec10e1c 100644 --- a/src/qt/qt_settingsmachine.cpp +++ b/src/qt/qt_settingsmachine.cpp @@ -7,6 +7,8 @@ #include #include +#include + extern "C" { #include "../cpu/cpu.h" From cf79387f356d5296b603f6667a988d9aa9f0b24e Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Wed, 15 Dec 2021 12:13:40 +0100 Subject: [PATCH 108/278] accidentally used machine_getname_ex when populating machine types --- src/qt/qt_settingsmachine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_settingsmachine.cpp b/src/qt/qt_settingsmachine.cpp index 9b8455f11..267ea06ae 100644 --- a/src/qt/qt_settingsmachine.cpp +++ b/src/qt/qt_settingsmachine.cpp @@ -57,7 +57,7 @@ SettingsMachine::SettingsMachine(QWidget *parent) : int selectedMachineType = 0; auto* machineTypesModel = ui->comboBoxMachineType->model(); for (int i = 0; i < MACHINE_TYPE_MAX; ++i) { - Models::AddEntry(machineTypesModel, machine_getname_ex(i), machine_types[i].id); + Models::AddEntry(machineTypesModel, machine_types[i].name, machine_types[i].id); if (machine_types[i].id == machine_get_type(machine)) { selectedMachineType = i; } From d2115bc5e42975aea705b4e27144a80433ae5f7b Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Wed, 15 Dec 2021 19:58:09 +0100 Subject: [PATCH 109/278] init the renderer on demand, instead of always ready --- src/qt/qt_mainwindow.cpp | 17 +++++-------- src/qt/qt_mainwindow.ui | 9 +------ src/qt/qt_rendererstack.cpp | 49 +++++++++++++++++++++++++++---------- src/qt/qt_rendererstack.hpp | 12 ++++++--- 4 files changed, 52 insertions(+), 35 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index ad3e950f6..ac2dcaecc 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -55,8 +55,6 @@ MainWindow::MainWindow(QWidget *parent) : ui->setupUi(this); ui->stackedWidget->setMouseTracking(true); - ui->ogl->setRenderType(HardwareRenderer::RenderType::OpenGL); - ui->gles->setRenderType(HardwareRenderer::RenderType::OpenGLES); statusBar()->setVisible(!hide_status_bar); this->setWindowIcon(QIcon(":/settings/win/icons/86Box-yellow.ico")); @@ -138,15 +136,15 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionUpdate_status_bar_icons->setChecked(update_icons); switch (vid_api) { case 0: - ui->stackedWidget->setCurrentIndex(0); + ui->stackedWidget->switchRenderer(RendererStack::Renderer::Software); ui->actionSoftware_Renderer->setChecked(true); break; case 1: - ui->stackedWidget->setCurrentIndex(1); + ui->stackedWidget->switchRenderer(RendererStack::Renderer::OpenGL); ui->actionHardware_Renderer_OpenGL->setChecked(true); break; case 2: - ui->stackedWidget->setCurrentIndex(2); + ui->stackedWidget->switchRenderer(RendererStack::Renderer::OpenGLES); ui->actionHardware_Renderer_OpenGL_ES->setChecked(true); break; } @@ -225,9 +223,6 @@ MainWindow::MainWindow(QWidget *parent) : } setFocusPolicy(Qt::StrongFocus); - ui->gles->setFocusPolicy(Qt::NoFocus); - ui->sw->setFocusPolicy(Qt::NoFocus); - ui->ogl->setFocusPolicy(Qt::NoFocus); ui->stackedWidget->setFocusPolicy(Qt::NoFocus); ui->centralwidget->setFocusPolicy(Qt::NoFocus); menuBar()->setFocusPolicy(Qt::NoFocus); @@ -964,21 +959,21 @@ QSize MainWindow::getRenderWidgetSize() } void MainWindow::on_actionSoftware_Renderer_triggered() { - ui->stackedWidget->setCurrentIndex(0); + ui->stackedWidget->switchRenderer(RendererStack::Renderer::Software); ui->actionHardware_Renderer_OpenGL->setChecked(false); ui->actionHardware_Renderer_OpenGL_ES->setChecked(false); vid_api = 0; } void MainWindow::on_actionHardware_Renderer_OpenGL_triggered() { - ui->stackedWidget->setCurrentIndex(1); + ui->stackedWidget->switchRenderer(RendererStack::Renderer::OpenGL); ui->actionSoftware_Renderer->setChecked(false); ui->actionHardware_Renderer_OpenGL_ES->setChecked(false); vid_api = 1; } void MainWindow::on_actionHardware_Renderer_OpenGL_ES_triggered() { - ui->stackedWidget->setCurrentIndex(2); + ui->stackedWidget->switchRenderer(RendererStack::Renderer::OpenGLES); ui->actionSoftware_Renderer->setChecked(false); ui->actionHardware_Renderer_OpenGL->setChecked(false); vid_api = 2; diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 49f3e7e43..35471ddc3 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -37,14 +37,7 @@ 0 - - - 0 - - - - - + diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index fed414d12..843e84909 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -162,6 +162,42 @@ void RendererStack::leaveEvent(QEvent* event) event->accept(); } +void RendererStack::switchRenderer(Renderer renderer) { + startblit(); + if (current != nullptr) { + removeWidget(current); + } + + switch (renderer) { + case Renderer::Software: + { + auto sw = new SoftwareRenderer(this); + connect(this, &RendererStack::blitToRenderer, sw, &SoftwareRenderer::onBlit); + current = sw; + } + break; + case Renderer::OpenGL: + { + auto hw = new HardwareRenderer(this); + connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit); + hw->setRenderType(HardwareRenderer::RenderType::OpenGL); + current = hw; + break; + } + case Renderer::OpenGLES: + { + auto hw = new HardwareRenderer(this); + connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit); + hw->setRenderType(HardwareRenderer::RenderType::OpenGLES); + current = hw; + break; + } + } + current->setFocusPolicy(Qt::NoFocus); + addWidget(current); + endblit(); +} + // called from blitter thread void RendererStack::blit(int x, int y, int w, int h) { @@ -185,16 +221,3 @@ void RendererStack::blit(int x, int y, int w, int h) blitToRenderer(imagebufs[currentBuf], sx, sy, sw, sh); currentBuf = (currentBuf + 1) % 2; } - -void RendererStack::on_RendererStack_currentChanged(int arg1) { - disconnect(this, &RendererStack::blitToRenderer, nullptr, nullptr); - switch (arg1) { - case 0: - connect(this, &RendererStack::blitToRenderer, dynamic_cast(currentWidget()), &SoftwareRenderer::onBlit); - break; - case 1: - case 2: - connect(this, &RendererStack::blitToRenderer, dynamic_cast(currentWidget()), &HardwareRenderer::onBlit); - break; - } -} diff --git a/src/qt/qt_rendererstack.hpp b/src/qt/qt_rendererstack.hpp index 239bd5bef..b31f3da5e 100644 --- a/src/qt/qt_rendererstack.hpp +++ b/src/qt/qt_rendererstack.hpp @@ -31,6 +31,13 @@ public: event->ignore(); } + enum class Renderer { + Software, + OpenGL, + OpenGLES, + }; + void switchRenderer(Renderer renderer); + signals: void blitToRenderer(const QImage& img, int, int, int, int); @@ -38,9 +45,6 @@ public slots: void blit(int x, int y, int w, int h); void mousePoll(); -private slots: - void on_RendererStack_currentChanged(int arg1); - private: Ui::RendererStack *ui; @@ -57,6 +61,8 @@ private: // when calling bits(); int currentBuf = 0; QVector imagebufs; + + QWidget* current = nullptr; }; #endif // QT_RENDERERCONTAINER_HPP From 1cc09b90333fd3b30735ea17de1b7f130aa6ef5c Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Wed, 15 Dec 2021 20:02:35 +0100 Subject: [PATCH 110/278] make sure render-widget gets deleted when switching --- src/qt/qt_rendererstack.cpp | 12 ++++++------ src/qt/qt_rendererstack.hpp | 3 ++- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 843e84909..afd52af5d 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -164,8 +164,8 @@ void RendererStack::leaveEvent(QEvent* event) void RendererStack::switchRenderer(Renderer renderer) { startblit(); - if (current != nullptr) { - removeWidget(current); + if (current) { + removeWidget(current.get()); } switch (renderer) { @@ -173,7 +173,7 @@ void RendererStack::switchRenderer(Renderer renderer) { { auto sw = new SoftwareRenderer(this); connect(this, &RendererStack::blitToRenderer, sw, &SoftwareRenderer::onBlit); - current = sw; + current.reset(sw); } break; case Renderer::OpenGL: @@ -181,7 +181,7 @@ void RendererStack::switchRenderer(Renderer renderer) { auto hw = new HardwareRenderer(this); connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit); hw->setRenderType(HardwareRenderer::RenderType::OpenGL); - current = hw; + current.reset(hw); break; } case Renderer::OpenGLES: @@ -189,12 +189,12 @@ void RendererStack::switchRenderer(Renderer renderer) { auto hw = new HardwareRenderer(this); connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit); hw->setRenderType(HardwareRenderer::RenderType::OpenGLES); - current = hw; + current.reset(hw); break; } } current->setFocusPolicy(Qt::NoFocus); - addWidget(current); + addWidget(current.get()); endblit(); } diff --git a/src/qt/qt_rendererstack.hpp b/src/qt/qt_rendererstack.hpp index b31f3da5e..e8a49a82a 100644 --- a/src/qt/qt_rendererstack.hpp +++ b/src/qt/qt_rendererstack.hpp @@ -4,6 +4,7 @@ #include #include #include +#include namespace Ui { class RendererStack; @@ -62,7 +63,7 @@ private: int currentBuf = 0; QVector imagebufs; - QWidget* current = nullptr; + std::unique_ptr current; }; #endif // QT_RENDERERCONTAINER_HPP From 9d313fde179e955a299e0c0dbcacb738d13ce52d Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Wed, 15 Dec 2021 21:19:46 +0200 Subject: [PATCH 111/278] qt: clear buffers_in_use flags when changing renderer --- src/qt/qt_rendererstack.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index b25cd2df1..23f61f186 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -200,6 +200,10 @@ void RendererStack::switchRenderer(Renderer renderer) { } current->setFocusPolicy(Qt::NoFocus); addWidget(current.get()); + + for (auto& in_use : buffers_in_use) + in_use.clear(); + endblit(); } From 07e0b541718600b16d05a4bfdf70a0faae242e13 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Thu, 16 Dec 2021 07:52:33 +0200 Subject: [PATCH 112/278] qt: Set vsync off for hardware renderers --- src/qt/qt_hardwarerenderer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index 4b12fc249..d1bd781ae 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -32,6 +32,7 @@ void HardwareRenderer::setRenderType(RenderType type) { format.setRenderableType(QSurfaceFormat::OpenGLES); break; } + format.setSwapInterval(0); setFormat(format); } From 17a75137de0b57e3a1c4ee018a57682230ff4435 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Thu, 16 Dec 2021 12:53:04 +0100 Subject: [PATCH 113/278] include for std::min --- src/qt/qt_settingsmachine.cpp | 2 ++ src/qt/sdl_joystick.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/qt/qt_settingsmachine.cpp b/src/qt/qt_settingsmachine.cpp index 267ea06ae..d278031cb 100644 --- a/src/qt/qt_settingsmachine.cpp +++ b/src/qt/qt_settingsmachine.cpp @@ -7,6 +7,8 @@ #include #include +#include + extern "C" { #include "../cpu/cpu.h" diff --git a/src/qt/sdl_joystick.cpp b/src/qt/sdl_joystick.cpp index 5a8100ee5..60d2dafad 100644 --- a/src/qt/sdl_joystick.cpp +++ b/src/qt/sdl_joystick.cpp @@ -2,6 +2,8 @@ #include +#include + extern "C" { #include <86box/device.h> #include <86box/gameport.h> From 92b7ea8536b6c2c665c08923ddcd39231eb5035e Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Thu, 16 Dec 2021 13:52:37 +0100 Subject: [PATCH 114/278] simplified (from @OBattler) --- src/qt/qt_settingsmachine.cpp | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/src/qt/qt_settingsmachine.cpp b/src/qt/qt_settingsmachine.cpp index d278031cb..959c53635 100644 --- a/src/qt/qt_settingsmachine.cpp +++ b/src/qt/qt_settingsmachine.cpp @@ -158,26 +158,18 @@ void SettingsMachine::on_comboBoxMachine_currentIndexChanged(int index) { ui->comboBoxCPU->setCurrentIndex(-1); ui->comboBoxCPU->setCurrentIndex(selectedCpuFamilyRow); - auto* machine = &machines[machineId]; - if ((machine->ram_granularity < 1024)) { - ui->spinBoxRAM->setMinimum(machine_get_min_ram(machineId)); - ui->spinBoxRAM->setMaximum(machine_get_max_ram(machineId)); - ui->spinBoxRAM->setSingleStep(machine_get_ram_granularity(machineId)); - ui->spinBoxRAM->setSuffix(" KiB"); - ui->spinBoxRAM->setValue(mem_size); + int divisor; + if ((machine_get_ram_granularity(machineId) < 1024)) { + divisor = 1; + ui->spinBoxRAM->setSuffix(" KB"); } else { - int maxram; -#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64)) - maxram = std::min(machine->max_ram, 2097152); -#else - maxram = std::min(machine_get_max_ram(machineId), 3145728); -#endif - ui->spinBoxRAM->setMinimum(machine_get_min_ram(machineId) / 1024); - ui->spinBoxRAM->setMaximum(maxram / 1024); - ui->spinBoxRAM->setSingleStep(machine_get_ram_granularity(machineId) / 1024); - ui->spinBoxRAM->setSuffix(" MiB"); - ui->spinBoxRAM->setValue(mem_size / 1024); + divisor = 1024; + ui->spinBoxRAM->setSuffix(" MB"); } + ui->spinBoxRAM->setMinimum(machine_get_min_ram(machineId) / divisor); + ui->spinBoxRAM->setMaximum(machine_get_max_ram(machineId) / divisor); + ui->spinBoxRAM->setSingleStep(machine_get_ram_granularity(machineId) / divisor); + ui->spinBoxRAM->setValue(mem_size / divisor); ui->spinBoxRAM->setEnabled(machine_get_min_ram(machineId) != machine_get_max_ram(machineId)); emit currentMachineChanged(machineId); From b3c048551591a8c35a80d3766142636c6085c87c Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Thu, 16 Dec 2021 23:05:55 +0200 Subject: [PATCH 115/278] qt: import plugins only for win32 build --- src/qt/CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index ea8fa4fb0..c810975f3 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -133,8 +133,6 @@ target_link_libraries( # needed for static builds if (WIN32) qt_import_plugins(plat INCLUDE Qt5::QWindowsIntegrationPlugin Qt5::QICOPlugin QWindowsVistaStylePlugin) -else() - qt_import_plugins(plat INCLUDE Qt5::QICOPlugin) endif() if (UNIX AND NOT APPLE) From f8cd957aac6684875cd3435e539c001cdaca3b6a Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Thu, 16 Dec 2021 22:30:48 +0100 Subject: [PATCH 116/278] missing include for unique_ptr --- src/qt/qt_machinestatus.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/qt/qt_machinestatus.hpp b/src/qt/qt_machinestatus.hpp index 09ef80fa4..6c983cff2 100644 --- a/src/qt/qt_machinestatus.hpp +++ b/src/qt/qt_machinestatus.hpp @@ -5,6 +5,8 @@ #include #include +#include + class QStatusBar; class ClickableLabel : public QLabel { From e686a0ad873855a9d19c4833d23074a17fc203c4 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Fri, 17 Dec 2021 07:52:30 +0200 Subject: [PATCH 117/278] qt: Buffer/texture size to 2048x2048 --- src/qt/qt_rendererstack.cpp | 8 ++++---- src/qt/qt_sdl.c | 6 +++--- src/qt/qt_specifydimensions.cpp | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 23f61f186..4aacd0c50 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -25,8 +25,8 @@ RendererStack::RendererStack(QWidget *parent) : { ui->setupUi(this); imagebufs = QVector(2); - imagebufs[0] = QImage{QSize(2048 + 64, 2048 + 64), QImage::Format_RGB32}; - imagebufs[1] = QImage{QSize(2048 + 64, 2048 + 64), QImage::Format_RGB32}; + imagebufs[0] = QImage{QSize(2048, 2048), QImage::Format_RGB32}; + imagebufs[1] = QImage{QSize(2048, 2048), QImage::Format_RGB32}; buffers_in_use = std::vector(2); buffers_in_use[0].clear(); @@ -220,11 +220,11 @@ void RendererStack::blit(int x, int y, int w, int h) sw = this->w = w; sh = this->h = h; auto imagebits = imagebufs[currentBuf].bits(); - video_copy(imagebits + y * ((2048 + 64) * 4) + x * 4, &(buffer32->line[y][x]), h * (2048 + 64) * sizeof(uint32_t)); + video_copy(imagebits + y * ((2048) * 4) + x * 4, &(buffer32->line[y][x]), h * (2048) * sizeof(uint32_t)); if (screenshots) { - video_screenshot((uint32_t *)imagebits, 0, 0, 2048 + 64); + video_screenshot((uint32_t *)imagebits, 0, 0, 2048); } video_blit_complete(); blitToRenderer(imagebufs[currentBuf], sx, sy, sw, sh, &buffers_in_use[currentBuf]); diff --git a/src/qt/qt_sdl.c b/src/qt/qt_sdl.c index 072531bd6..81a1311d1 100644 --- a/src/qt/qt_sdl.c +++ b/src/qt/qt_sdl.c @@ -313,10 +313,10 @@ sdl_blit(int x, int y, int w, int h) SDL_LockMutex(sdl_mutex); SDL_LockTexture(sdl_tex, 0, &pixeldata, &pitch); - video_copy(pixeldata, &(buffer32->line[y][x]), h * (2048 + 64) * sizeof(uint32_t)); + video_copy(pixeldata, &(buffer32->line[y][x]), h * (2048) * sizeof(uint32_t)); if (screenshots) - video_screenshot((uint32_t *) pixeldata, 0, 0, (2048 + 64)); + video_screenshot((uint32_t *) pixeldata, 0, 0, (2048)); SDL_UnlockTexture(sdl_tex); @@ -414,7 +414,7 @@ sdl_init_texture(void) } sdl_tex = SDL_CreateTexture(sdl_render, SDL_PIXELFORMAT_ARGB8888, - SDL_TEXTUREACCESS_STREAMING, (2048 + 64), (2048 + 64)); + SDL_TEXTUREACCESS_STREAMING, (2048), (2048)); if (sdl_render == NULL) { sdl_log("SDL: unable to SDL_CreateRenderer (%s)\n", SDL_GetError()); diff --git a/src/qt/qt_specifydimensions.cpp b/src/qt/qt_specifydimensions.cpp index 58c2ae1a6..4ef9ae76d 100644 --- a/src/qt/qt_specifydimensions.cpp +++ b/src/qt/qt_specifydimensions.cpp @@ -22,9 +22,9 @@ SpecifyDimensions::SpecifyDimensions(QWidget *parent) : { ui->setupUi(this); ui->checkBox->setChecked(vid_resize == 2); - ui->spinBoxWidth->setRange(16, 2048 + 64); + ui->spinBoxWidth->setRange(16, 2048); ui->spinBoxWidth->setValue(main_window->getRenderWidgetSize().width()); - ui->spinBoxHeight->setRange(16, 2048 + 64); + ui->spinBoxHeight->setRange(16, 2048); ui->spinBoxHeight->setValue(main_window->getRenderWidgetSize().height()); } From 30376341d154cff167d5fa290c2e728cf7bf0d05 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 17 Dec 2021 12:17:54 +0600 Subject: [PATCH 118/278] Start of windowed OpenGL rendering --- src/qt/qt_hardwarerenderer.cpp | 10 +++++++--- src/qt/qt_hardwarerenderer.hpp | 11 +++++++---- src/qt/qt_rendererstack.cpp | 10 ++++++---- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index d1bd781ae..856577d50 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -17,6 +17,12 @@ void HardwareRenderer::initializeGL() } void HardwareRenderer::paintGL() { + //onPaint(this); +} + +void HardwareRenderer::paintUnderGL() { + glClearColor(0.f, 0.f, 0.f, 1.f); + glClear(GL_COLOR_BUFFER_BIT); onPaint(this); } @@ -24,11 +30,9 @@ void HardwareRenderer::setRenderType(RenderType type) { QSurfaceFormat format; switch (type) { case RenderType::OpenGL: - setTextureFormat(GL_RGB); format.setRenderableType(QSurfaceFormat::OpenGL); break; case RenderType::OpenGLES: - setTextureFormat((QApplication::platformName().contains("wayland") || QApplication::platformName() == "cocoa") ? GL_RGB : GL_RGBA); format.setRenderableType(QSurfaceFormat::OpenGLES); break; } @@ -45,5 +49,5 @@ void HardwareRenderer::onBlit(const QImage& img, int x, int y, int w, int h, std void HardwareRenderer::resizeEvent(QResizeEvent *event) { onResize(width(), height()); - QOpenGLWidget::resizeEvent(event); + QOpenGLWindow::resizeEvent(event); } diff --git a/src/qt/qt_hardwarerenderer.hpp b/src/qt/qt_hardwarerenderer.hpp index fa9e7ec31..a1bd4ff86 100644 --- a/src/qt/qt_hardwarerenderer.hpp +++ b/src/qt/qt_hardwarerenderer.hpp @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -16,7 +17,7 @@ #include "wl_mouse.hpp" #endif -class HardwareRenderer : public QOpenGLWidget, protected QOpenGLFunctions, public RendererCommon +class HardwareRenderer : public QOpenGLWindow, protected QOpenGLFunctions, public RendererCommon { Q_OBJECT @@ -26,10 +27,12 @@ public: void resizeGL(int w, int h) override; void initializeGL() override; void paintGL() override; - HardwareRenderer(QWidget* parent = nullptr) - : QOpenGLWidget(parent), QOpenGLFunctions() + void paintUnderGL() override; + HardwareRenderer(QWindow* parent = nullptr) + : QOpenGLWindow(QOpenGLWindow::PartialUpdateBlend, parent), QOpenGLFunctions() { - setMinimumSize(16, 16); + setMinimumSize(QSize(16, 16)); + setFlags(Qt::FramelessWindowHint); } ~HardwareRenderer() { diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 23f61f186..0b89f258d 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -183,18 +183,20 @@ void RendererStack::switchRenderer(Renderer renderer) { break; case Renderer::OpenGL: { - auto hw = new HardwareRenderer(this); + this->createWinId(); + auto hw = new HardwareRenderer(this->windowHandle()); connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit, Qt::QueuedConnection); hw->setRenderType(HardwareRenderer::RenderType::OpenGL); - current.reset(hw); + current.reset(this->createWindowContainer(hw, this)); break; } case Renderer::OpenGLES: { - auto hw = new HardwareRenderer(this); + this->createWinId(); + auto hw = new HardwareRenderer(this->windowHandle()); connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit, Qt::QueuedConnection); hw->setRenderType(HardwareRenderer::RenderType::OpenGLES); - current.reset(hw); + current.reset(this->createWindowContainer(hw, this)); break; } } From c3c5a87a7053a9688e63d6ed3b843caba5054718 Mon Sep 17 00:00:00 2001 From: "Joakim L. Gilje" Date: Fri, 17 Dec 2021 11:10:32 +0100 Subject: [PATCH 119/278] fixups after latest merge: plat_midi_ => rtmidi_, framebuffer is now 2048x2048 --- src/qt/qt_deviceconfig.cpp | 10 +++++----- src/qt/qt_rendererstack.cpp | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/qt/qt_deviceconfig.cpp b/src/qt/qt_deviceconfig.cpp index 0cfe14a73..7218ab63c 100644 --- a/src/qt/qt_deviceconfig.cpp +++ b/src/qt/qt_deviceconfig.cpp @@ -11,7 +11,7 @@ extern "C" { #include <86box/86box.h> #include <86box/config.h> #include <86box/device.h> -#include <86box/plat_midi.h> +#include <86box/midi_rtmidi.h> } #include "qt_filefield.hpp" @@ -55,9 +55,9 @@ void DeviceConfig::ConfigureDevice(const _device_* device, int instance) { auto* model = cbox->model(); int currentIndex = -1; int selected = config_get_int(device_context.name, const_cast(config->name), config->default_int); - for (int i = 0; i < plat_midi_get_num_devs(); i++) { + for (int i = 0; i < rtmidi_get_num_devs(); i++) { char midiName[512] = { 0 }; - plat_midi_get_dev_name(i, midiName); + rtmidi_get_dev_name(i, midiName); Models::AddEntry(model, midiName, i); if (selected == i) { @@ -75,9 +75,9 @@ void DeviceConfig::ConfigureDevice(const _device_* device, int instance) { auto* model = cbox->model(); int currentIndex = -1; int selected = config_get_int(device_context.name, const_cast(config->name), config->default_int); - for (int i = 0; i < plat_midi_in_get_num_devs(); i++) { + for (int i = 0; i < rtmidi_in_get_num_devs(); i++) { char midiName[512] = { 0 }; - plat_midi_in_get_dev_name(i, midiName); + rtmidi_in_get_dev_name(i, midiName); Models::AddEntry(model, midiName, i); if (selected == i) { diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index afd52af5d..88d62e56b 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -25,8 +25,8 @@ RendererStack::RendererStack(QWidget *parent) : { ui->setupUi(this); imagebufs = QVector(2); - imagebufs[0] = QImage{QSize(2048 + 64, 2048 + 64), QImage::Format_RGB32}; - imagebufs[1] = QImage{QSize(2048 + 64, 2048 + 64), QImage::Format_RGB32}; + imagebufs[0] = QImage{QSize(2048, 2048), QImage::Format_RGB32}; + imagebufs[1] = QImage{QSize(2048, 2048), QImage::Format_RGB32}; #ifdef WAYLAND if (QApplication::platformName().contains("wayland")) { wl_init(); @@ -211,11 +211,11 @@ void RendererStack::blit(int x, int y, int w, int h) sw = this->w = w; sh = this->h = h; auto imagebits = imagebufs[currentBuf].bits(); - video_copy(imagebits + y * ((2048 + 64) * 4) + x * 4, &(buffer32->line[y][x]), h * (2048 + 64) * sizeof(uint32_t)); + video_copy(imagebits + y * (2048 * 4) + x * 4, &(buffer32->line[y][x]), h * 2048 * sizeof(uint32_t)); if (screenshots) { - video_screenshot((uint32_t *)imagebits, 0, 0, 2048 + 64); + video_screenshot((uint32_t *)imagebits, 0, 0, 2048); } video_blit_complete(); blitToRenderer(imagebufs[currentBuf], sx, sy, sw, sh); From ffde0ea25427ba822a6e86312999275221e9c8dd Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Fri, 17 Dec 2021 18:37:57 +0200 Subject: [PATCH 120/278] qt: fix mouse grab on opengl renderer (for windows) --- src/qt/qt_hardwarerenderer.cpp | 17 +++++++++++++++++ src/qt/qt_hardwarerenderer.hpp | 1 + 2 files changed, 18 insertions(+) diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index 30d4a42a8..5e34c1079 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -4,6 +4,7 @@ extern "C" { #include <86box/86box.h> +#include <86box/plat.h> } void HardwareRenderer::resizeGL(int w, int h) @@ -45,3 +46,19 @@ void HardwareRenderer::resizeEvent(QResizeEvent *event) { onResize(width(), height()); QOpenGLWindow::resizeEvent(event); } + +void HardwareRenderer::mouseReleaseEvent(QMouseEvent *event) +{ + if (this->geometry().contains(event->pos()) && event->button() == Qt::LeftButton && !mouse_capture) + { + plat_mouse_capture(1); + this->setCursor(Qt::BlankCursor); + return; + } + if (mouse_capture && event->button() == Qt::MiddleButton) + { + plat_mouse_capture(0); + this->setCursor(Qt::ArrowCursor); + return; + } +} \ No newline at end of file diff --git a/src/qt/qt_hardwarerenderer.hpp b/src/qt/qt_hardwarerenderer.hpp index 8b75d19b8..e5f1c1845 100644 --- a/src/qt/qt_hardwarerenderer.hpp +++ b/src/qt/qt_hardwarerenderer.hpp @@ -49,4 +49,5 @@ public slots: protected: void resizeEvent(QResizeEvent *event) override; + void mouseReleaseEvent(QMouseEvent* event) override; }; From 0313d020736a6f5772a2b7b64635d78162af7b17 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 18 Dec 2021 00:37:30 +0600 Subject: [PATCH 121/278] Delegate input events of HardwareRenderer to RendererStack --- src/qt/qt_hardwarerenderer.cpp | 27 +++++++++++++++------------ src/qt/qt_hardwarerenderer.hpp | 8 +++++--- src/qt/qt_rendererstack.cpp | 5 +++-- 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index 5e34c1079..077021a24 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -47,18 +47,21 @@ void HardwareRenderer::resizeEvent(QResizeEvent *event) { QOpenGLWindow::resizeEvent(event); } -void HardwareRenderer::mouseReleaseEvent(QMouseEvent *event) +bool HardwareRenderer::event(QEvent *event) { - if (this->geometry().contains(event->pos()) && event->button() == Qt::LeftButton && !mouse_capture) + switch (event->type()) { - plat_mouse_capture(1); - this->setCursor(Qt::BlankCursor); - return; + default: + return QOpenGLWindow::event(event); + case QEvent::MouseButtonPress: + case QEvent::MouseMove: + case QEvent::MouseButtonRelease: + case QEvent::KeyPress: + case QEvent::KeyRelease: + case QEvent::Wheel: + case QEvent::Enter: + case QEvent::Leave: + return QApplication::sendEvent(parentWidget, event); } - if (mouse_capture && event->button() == Qt::MiddleButton) - { - plat_mouse_capture(0); - this->setCursor(Qt::ArrowCursor); - return; - } -} \ No newline at end of file + return false; +} diff --git a/src/qt/qt_hardwarerenderer.hpp b/src/qt/qt_hardwarerenderer.hpp index e5f1c1845..0068eb7dc 100644 --- a/src/qt/qt_hardwarerenderer.hpp +++ b/src/qt/qt_hardwarerenderer.hpp @@ -23,15 +23,17 @@ class HardwareRenderer : public QOpenGLWindow, protected QOpenGLFunctions, publi private: bool wayland = false; + QWidget* parentWidget{nullptr}; public: void resizeGL(int w, int h) override; void initializeGL() override; void paintGL() override; - HardwareRenderer(QWindow* parent = nullptr) - : QOpenGLWindow(QOpenGLWindow::NoPartialUpdate, parent), QOpenGLFunctions() + HardwareRenderer(QWidget* parent = nullptr) + : QOpenGLWindow(QOpenGLWindow::NoPartialUpdate, parent->windowHandle()), QOpenGLFunctions() { setMinimumSize(QSize(16, 16)); setFlags(Qt::FramelessWindowHint); + parentWidget = parent; } ~HardwareRenderer() { @@ -49,5 +51,5 @@ public slots: protected: void resizeEvent(QResizeEvent *event) override; - void mouseReleaseEvent(QMouseEvent* event) override; + bool event(QEvent* event) override; }; diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index e3ab5fc8e..72d79fae6 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -184,7 +184,7 @@ void RendererStack::switchRenderer(Renderer renderer) { case Renderer::OpenGL: { this->createWinId(); - auto hw = new HardwareRenderer(this->windowHandle()); + auto hw = new HardwareRenderer(this); connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit, Qt::QueuedConnection); hw->setRenderType(HardwareRenderer::RenderType::OpenGL); current.reset(this->createWindowContainer(hw, this)); @@ -193,7 +193,7 @@ void RendererStack::switchRenderer(Renderer renderer) { case Renderer::OpenGLES: { this->createWinId(); - auto hw = new HardwareRenderer(this->windowHandle()); + auto hw = new HardwareRenderer(this); connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit, Qt::QueuedConnection); hw->setRenderType(HardwareRenderer::RenderType::OpenGLES); current.reset(this->createWindowContainer(hw, this)); @@ -201,6 +201,7 @@ void RendererStack::switchRenderer(Renderer renderer) { } } current->setFocusPolicy(Qt::NoFocus); + current->setFocusProxy(this); addWidget(current.get()); for (auto& in_use : buffers_in_use) From 227e177b11457b66a0d0f81f93cfdbb0609cb720 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 18 Dec 2021 01:03:05 +0600 Subject: [PATCH 122/278] Implement action exclusivity in menus --- src/qt/qt_mainwindow.cpp | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 64a589e63..839744eb3 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -26,6 +26,7 @@ extern "C" { #include #include #include +#include #include #include @@ -134,6 +135,7 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionHiDPI_scaling->setChecked(dpi_scale); ui->actionHide_status_bar->setChecked(hide_status_bar); ui->actionUpdate_status_bar_icons->setChecked(update_icons); + QActionGroup* actGroup = nullptr; switch (vid_api) { case 0: ui->stackedWidget->switchRenderer(RendererStack::Renderer::Software); @@ -148,6 +150,10 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionHardware_Renderer_OpenGL_ES->setChecked(true); break; } + actGroup = new QActionGroup(this); + actGroup->addAction(ui->actionSoftware_Renderer); + actGroup->addAction(ui->actionHardware_Renderer_OpenGL); + actGroup->addAction(ui->actionHardware_Renderer_OpenGL_ES); switch (scale) { case 0: ui->action0_5x->setChecked(true); @@ -162,6 +168,11 @@ MainWindow::MainWindow(QWidget *parent) : ui->action2x->setChecked(true); break; } + actGroup = new QActionGroup(this); + actGroup->addAction(ui->action0_5x); + actGroup->addAction(ui->action1x); + actGroup->addAction(ui->action1_5x); + actGroup->addAction(ui->action2x); switch (video_filter_method) { case 0: ui->actionNearest->setChecked(true); @@ -170,6 +181,9 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionLinear->setChecked(true); break; } + actGroup = new QActionGroup(this); + actGroup->addAction(ui->actionNearest); + actGroup->addAction(ui->actionLinear); switch (video_fullscreen_scale) { case FULLSCR_SCALE_FULL: ui->actionFullScreen_stretch->setChecked(true); @@ -184,6 +198,11 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionFullScreen_int->setChecked(true); break; } + actGroup = new QActionGroup(this); + actGroup->addAction(ui->actionFullScreen_stretch); + actGroup->addAction(ui->actionFullScreen_43); + actGroup->addAction(ui->actionFullScreen_keepRatio); + actGroup->addAction(ui->actionFullScreen_int); switch (video_grayscale) { case 0: ui->actionRGB_Color->setChecked(true); @@ -201,6 +220,12 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionWhite_monitor->setChecked(true); break; } + actGroup = new QActionGroup(this); + actGroup->addAction(ui->actionRGB_Grayscale); + actGroup->addAction(ui->actionAmber_monitor); + actGroup->addAction(ui->actionGreen_monitor); + actGroup->addAction(ui->actionWhite_monitor); + actGroup->addAction(ui->actionRGB_Color); switch (video_graytype) { case 0: ui->actionBT601_NTSC_PAL->setChecked(true); @@ -212,6 +237,10 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionAverage->setChecked(true); break; } + actGroup = new QActionGroup(this); + actGroup->addAction(ui->actionBT601_NTSC_PAL); + actGroup->addAction(ui->actionBT709_HDTV); + actGroup->addAction(ui->actionAverage); if (force_43 > 0) { ui->actionForce_4_3_display_ratio->setChecked(true); } @@ -1281,4 +1310,4 @@ void MainWindow::on_actionSound_gain_triggered() void MainWindow::setSendKeyboardInput(bool enabled) { send_keyboard_input = enabled; -} \ No newline at end of file +} From 31fe83072e9853960e73a18125751a08787ddc3f Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Fri, 17 Dec 2021 21:33:11 +0200 Subject: [PATCH 123/278] qt: remove redundant files --- src/qt/CMakeLists.txt | 3 +- src/qt/cpp11_thread.cpp | 133 -------------------------------- src/qt/rtmidi_midi.cpp | 165 ---------------------------------------- 3 files changed, 2 insertions(+), 299 deletions(-) delete mode 100644 src/qt/cpp11_thread.cpp delete mode 100644 src/qt/rtmidi_midi.cpp diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index c810975f3..9e5d740db 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -11,8 +11,8 @@ add_library(plat STATIC qt_main.cpp qt_platform.cpp sdl_joystick.cpp - cpp11_thread.cpp ) + add_library(ui STATIC qt_ui.cpp qt_cdrom.c @@ -106,6 +106,7 @@ add_library(ui STATIC ../qt_resources.qrc ) + if (APPLE) target_sources(ui PRIVATE macos_event_filter.mm) endif() diff --git a/src/qt/cpp11_thread.cpp b/src/qt/cpp11_thread.cpp deleted file mode 100644 index 96eb4a2e1..000000000 --- a/src/qt/cpp11_thread.cpp +++ /dev/null @@ -1,133 +0,0 @@ -#include -#include -#include - -#include <86box/plat.h> - -struct event_cpp11_t -{ - std::condition_variable cond; - std::mutex mutex; - bool state = false; -}; - -extern "C" { - -thread_t * -thread_create(void (*thread_rout)(void *param), void *param) -{ - auto thread = new std::thread([thread_rout, param] { - thread_rout(param); - }); - return thread; -} - -mutex_t * -thread_create_mutex_with_spin_count(unsigned int spin_count) -{ - /* Setting spin count of a mutex is not possible with pthreads. */ - return thread_create_mutex(); -} - -int -thread_wait(thread_t *arg, int timeout) -{ - (void) timeout; - auto thread = reinterpret_cast(arg); - thread->join(); - return 0; -} - -mutex_t * -thread_create_mutex(void) -{ - auto mutex = new std::mutex; - return mutex; -} - -int -thread_wait_mutex(mutex_t *_mutex) -{ - if (_mutex == nullptr) - return(0); - auto mutex = reinterpret_cast(_mutex); - mutex->lock(); - return 1; -} - - -int -thread_release_mutex(mutex_t *_mutex) -{ - if (_mutex == nullptr) - return(0); - auto mutex = reinterpret_cast(_mutex); - mutex->unlock(); - return 1; -} - - -void -thread_close_mutex(mutex_t *_mutex) -{ - auto mutex = reinterpret_cast(_mutex); - delete mutex; -} - -event_t * -thread_create_event() -{ - auto ev = new event_cpp11_t; - return ev; -} - -int -thread_wait_event(event_t *handle, int timeout) -{ - auto event = reinterpret_cast(handle); - auto lock = std::unique_lock(event->mutex); - - if (timeout < 0) { - event->cond.wait(lock, [event] { return event->state; }); - } else { - auto to = std::chrono::system_clock::now() + std::chrono::milliseconds(timeout); - std::cv_status status; - - do { - status = event->cond.wait_until(lock, to); - } while ((status != std::cv_status::timeout) && !event->state); - - if (status == std::cv_status::timeout) { - return 1; - } - } - return 0; -} - -void -thread_set_event(event_t *handle) -{ - auto event = reinterpret_cast(handle); - { - auto lock = std::unique_lock(event->mutex); - event->state = true; - } - event->cond.notify_all(); -} - -void -thread_reset_event(event_t *handle) -{ - auto event = reinterpret_cast(handle); - auto lock = std::unique_lock(event->mutex); - event->state = false; -} - -void -thread_destroy_event(event_t *handle) -{ - auto event = reinterpret_cast(handle); - delete event; -} - -} diff --git a/src/qt/rtmidi_midi.cpp b/src/qt/rtmidi_midi.cpp deleted file mode 100644 index fd4ccbbaf..000000000 --- a/src/qt/rtmidi_midi.cpp +++ /dev/null @@ -1,165 +0,0 @@ - -#include -#include -#include -extern "C" -{ -#include <86box/86box.h> -#include <86box/midi.h> -#include <86box/plat_midi.h> -#include <86box/config.h> -} - -extern "C" { - -static RtMidiOut* midiout = nullptr; -static RtMidiIn* midiin = nullptr; -static int midi_out_id = 0, midi_in_id = 0; -static const int midi_lengths[8] = {3, 3, 3, 3, 2, 2, 3, 1}; - -int plat_midi_write(uint8_t val) -{ return 0; } - -void plat_midi_init() -{ - try - { - if (!midiout) midiout = new RtMidiOut; - } - catch (RtMidiError& error) - { - pclog("Failed to initialize MIDI output: %s\n", error.getMessage().c_str()); - return; - } - midi_out_id = config_get_int((char*)SYSTEM_MIDI_NAME, (char*)"midi", 0); - try - { - midiout->openPort(midi_out_id); - } - catch (RtMidiError& error) - { - pclog("Fallback to default MIDI output port: %s\n", error.getMessage().c_str()); - try - { - midiout->openPort(0); - } - catch (RtMidiError& error) - { - pclog("Failed to initialize MIDI output: %s\n", error.getMessage().c_str()); - delete midiout; - midiout = nullptr; - return; - } - } -} - -void plat_midi_close() -{ - if (!midiout) return; - midiout->closePort(); - delete midiout; - midiout = nullptr; -} - -int plat_midi_get_num_devs() -{ - if (!midiout) - { - try - { - midiout = new RtMidiOut; - } - catch (RtMidiError& error) - { - pclog("Failed to initialize MIDI output: %s\n", error.getMessage().c_str()); - } - } - return midiout ? midiout->getPortCount() : 0; -} - -void plat_midi_play_msg(uint8_t *msg) -{ - if (midiout) midiout->sendMessage(msg, midi_lengths[(msg[0] >> 4) & 7]); -} - -void plat_midi_get_dev_name(int num, char *s) -{ - strcpy(s, midiout->getPortName(num).c_str()); -} - -void plat_midi_play_sysex(uint8_t *sysex, unsigned int len) -{ - if (midiout) midiout->sendMessage(sysex, len); -} - -static void plat_midi_callback(double timeStamp, std::vector *message, void *userData) -{ - if (message->size() <= 3) midi_in_msg(message->data()); - else midi_in_sysex(message->data(), message->size()); -} - -void plat_midi_input_init(void) -{ - try - { - if (!midiin) midiin = new RtMidiIn; - } - catch (RtMidiError& error) - { - pclog("Failed to initialize MIDI input: %s\n", error.getMessage().c_str()); - return; - } - midi_in_id = config_get_int((char*)SYSTEM_MIDI_NAME, (char*)"midi_input", 0); - try - { - midiin->openPort(midi_in_id); - } - catch (RtMidiError& error) - { - pclog("Fallback to default MIDI input port: %s\n", error.getMessage().c_str()); - try - { - midiin->openPort(0); - } - catch (RtMidiError& error) - { - pclog("Failed to initialize MIDI input: %s\n", error.getMessage().c_str()); - delete midiin; - midiin = nullptr; - return; - } - } - midiin->setCallback(plat_midi_callback); -} - -void plat_midi_input_close(void) -{ - midiin->cancelCallback(); - midiin->closePort(); - delete midiin; - midiin = nullptr; - return; -} - -int plat_midi_in_get_num_devs(void) -{ - if (!midiin) - { - try - { - midiin = new RtMidiIn; - } - catch (RtMidiError& error) - { - pclog("Failed to initialize MIDI input: %s\n", error.getMessage().c_str()); - } - } - return midiin ? midiin->getPortCount() : 0; -} - -void plat_midi_in_get_dev_name(int num, char *s) -{ - strcpy(s, midiin->getPortName(num).c_str()); -} - -} From d3467568b0a5be4af6858abd1277321d591496f3 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Fri, 17 Dec 2021 22:23:08 +0200 Subject: [PATCH 124/278] qt: port atomic_flag doresize from master --- src/include/86box/plat.h | 5 +++-- src/qt/qt_main.cpp | 3 +-- src/qt/qt_mainwindow.cpp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/include/86box/plat.h b/src/include/86box/plat.h index fde9bf8d8..8b6f709d2 100644 --- a/src/include/86box/plat.h +++ b/src/include/86box/plat.h @@ -66,16 +66,17 @@ extern int strnicmp(const char* s1, const char* s2, size_t n); #ifdef __cplusplus #include -#define atomic_flag std::atomic_flag +#define atomic_flag_t std::atomic_flag extern "C" { #else #include +#define atomic_flag_t atomic_flag #endif /* Global variables residing in the platform module. */ extern int dopause, /* system is paused */ mouse_capture; /* mouse is captured in app */ -extern atomic_flag doresize; /* screen resize requested */ +extern atomic_flag_t doresize; /* screen resize requested */ extern volatile int is_quit; /* system exit requested */ #ifdef MTR_ENABLED diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 5246dd3c5..f8ffd3720 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -80,12 +80,11 @@ main_thread_fn() } /* If needed, handle a screen resize. */ - if (doresize && !video_fullscreen && !is_quit) { + if (!atomic_flag_test_and_set(&doresize) && !video_fullscreen && !is_quit) { if (vid_resize & 2) plat_resize(fixed_size_x, fixed_size_y); else plat_resize(scrnsz_x, scrnsz_y); - doresize = 0; } } diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 839744eb3..a02ed77d6 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -1067,7 +1067,7 @@ static void update_scaled_checkboxes(Ui::MainWindow* ui, QAction* selected) { reset_screen_size(); device_force_redraw(); video_force_resize_set(1); - doresize = 1; + atomic_flag_clear(&doresize); config_save(); } From da9b8f4b64b1065f7b11189358e2676175eb275b Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Mon, 20 Dec 2021 00:30:42 +0600 Subject: [PATCH 125/278] * Fix files not appearing because of filter strings being wrong * Implement settings save prompt --- src/qt/qt_mediamenu.cpp | 8 ++++---- src/qt/qt_settings.cpp | 27 +++++++++++++++++++++++++++ src/qt/qt_settings.hpp | 3 +++ 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/qt/qt_mediamenu.cpp b/src/qt/qt_mediamenu.cpp index 07b073968..f89c25447 100644 --- a/src/qt/qt_mediamenu.cpp +++ b/src/qt/qt_mediamenu.cpp @@ -241,7 +241,7 @@ void MediaMenu::floppyNewImage(int i) { } void MediaMenu::floppySelectImage(int i, bool wp) { - auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "All images (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF);;Advanced sector images (*.IMD;*.JSON;*.TD0);;Basic sector images (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?);;Flux images (*.FDI);;Surface images (*.86F;*.MFM);;All files (*)"); + auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "All images (*.0?? *.1?? *.??0 *.86F *.BIN *.CQ? *.D?? *.FLP *.HDM *.IM? *.JSON *.TD0 *.*FD? *.MFM *.XDF);;Advanced sector images (*.IMD *.JSON *.TD0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.CQ? *.D?? *.FLP *.HDM *.IM? *.XDF *.*FD?);;Flux images (*.FDI);;Surface images (*.86F *.MFM);;All files (*)"); floppyMount(i, filename, wp); } @@ -304,7 +304,7 @@ void MediaMenu::cdromMount(int i) { QString dir; QFileInfo fi(cdrom[i].image_path); - auto filename = QFileDialog::getOpenFileName(parentWidget, "CD-ROM images (*.ISO;*.CUE)\0*.ISO;*.CUE\0All files (*.*)\0*.*\0", fi.canonicalPath()); + auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*)"); if (filename.isEmpty()) { auto* imageMenu = dynamic_cast(cdromMenus[i]->children()[cdromImagePos]); imageMenu->setChecked(false); @@ -386,7 +386,7 @@ void MediaMenu::zipNewImage(int i) { } void MediaMenu::zipSelectImage(int i, bool wp) { - auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "ZIP images (*.im?;*.zdi);;All files (*)"); + auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*)"); zipMount(i, filename, wp); } @@ -474,7 +474,7 @@ void MediaMenu::moNewImage(int i) { } void MediaMenu::moSelectImage(int i, bool wp) { - auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "MO images (*.im?;*.mdi);;All files (*)"); + auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "MO images (*.im? *.mdi *.IM? *.MDI);;All files (*)"); moMount(i, filename, wp); } diff --git a/src/qt/qt_settings.cpp b/src/qt/qt_settings.cpp index b2716b1e0..5caa68249 100644 --- a/src/qt/qt_settings.cpp +++ b/src/qt/qt_settings.cpp @@ -13,7 +13,14 @@ #include "qt_settingsotherremovable.hpp" #include "qt_settingsotherperipherals.hpp" +extern "C" +{ +#include <86box/86box.h> +} + #include +#include +#include class SettingsModel : public QAbstractListModel { public: @@ -129,3 +136,23 @@ void Settings::save() { otherRemovable->save(); otherPeripherals->save(); } + +void Settings::accept() +{ + if (confirm_save) + { + QMessageBox questionbox(QMessageBox::Icon::Question, "86Box", "Do you want to save the settings?\n\nThis will hard reset the emulated machine.", QMessageBox::Save | QMessageBox::Cancel, this); + QCheckBox *chkbox = new QCheckBox("Do not ask me again"); + questionbox.setCheckBox(chkbox); + chkbox->setChecked(!confirm_save); + QObject::connect(chkbox, &QCheckBox::stateChanged, [](int state) { + confirm_save = (state == Qt::CheckState::Unchecked); + }); + questionbox.exec(); + if (questionbox.result() == QMessageBox::Cancel) { + confirm_save = true; + return; + } + } + QDialog::accept(); +} diff --git a/src/qt/qt_settings.hpp b/src/qt/qt_settings.hpp index 2fa189186..49137b8b7 100644 --- a/src/qt/qt_settings.hpp +++ b/src/qt/qt_settings.hpp @@ -28,6 +28,9 @@ public: ~Settings(); void save(); +protected slots: + void accept() override; + private: Ui::Settings *ui; SettingsMachine* machine; From 63f07b89570dcbddffacc64be49b237c26015252 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Mon, 20 Dec 2021 01:38:58 +0600 Subject: [PATCH 126/278] * Fix another show-stopper bug where the cards wouldn't show their true selections when Other Peripherals settings page was opened --- src/qt/qt_settingsotherperipherals.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_settingsotherperipherals.cpp b/src/qt/qt_settingsotherperipherals.cpp index 729ebe62e..834c6bdad 100644 --- a/src/qt/qt_settingsotherperipherals.cpp +++ b/src/qt/qt_settingsotherperipherals.cpp @@ -49,7 +49,7 @@ SettingsOtherPeripherals::SettingsOtherPeripherals(QWidget *parent) : } int row = Models::AddEntry(model, name, d); - if (d == isartc_type) { + if (d == isamem_type[c]) { selectedRow = row; } ++d; From 3b1613614227c43e624d6299dcf724113ae91e3d Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sun, 19 Dec 2021 23:49:47 +0200 Subject: [PATCH 127/278] qt: Fix windows clang & vcpkg build --- src/qt/CMakeLists.txt | 5 +++++ src/qt/qt.c | 3 ++- src/qt/qt_main.cpp | 5 ++++- src/qt/qt_platform.cpp | 1 + vcpkg.json | 3 ++- 5 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 9e5d740db..ca30e69ce 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -107,6 +107,11 @@ add_library(ui STATIC ../qt_resources.qrc ) +if(NOT MINGW) + target_sources(plat PRIVATE ../win/win_opendir.c) + target_sources(plat PRIVATE ../nvr.c) +endif() + if (APPLE) target_sources(ui PRIVATE macos_event_filter.mm) endif() diff --git a/src/qt/qt.c b/src/qt/qt.c index 5aca045dc..e5a639081 100644 --- a/src/qt/qt.c +++ b/src/qt/qt.c @@ -2,8 +2,9 @@ * C functionality for Qt platform, where the C equivalent is not easily * implemented in Qt */ - +#ifdef __MINGW32__ #include +#endif #include #include diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index f8ffd3720..b730e40b0 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -33,10 +33,13 @@ Q_IMPORT_PLUGIN(QWindowsVistaStylePlugin) #define VC(x) const_cast(x) extern QElapsedTimer elapsed_timer; -extern int nvr_dosave; extern MainWindow* main_window; extern "C" { +#define new not_new +#include <86box/timer.h> +#include <86box/nvr.h> +#undef new extern int qt_nvr_save(void); } diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index aa4daee76..c2bb7a751 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -48,6 +48,7 @@ private: extern "C" { #ifdef Q_OS_WINDOWS +#define NOMINMAX #include #endif #include <86box/86box.h> diff --git a/vcpkg.json b/vcpkg.json index d8ec1d981..5607b5691 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -9,6 +9,7 @@ "libpng", "openal-soft", "sdl2", - "rtmidi" + "rtmidi", + "qt5" ] } \ No newline at end of file From a9ecd17f5c3b51cab40dd88772314289e6c62ada Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Mon, 20 Dec 2021 21:54:25 +0200 Subject: [PATCH 128/278] Improve clang fixes --- src/qt/CMakeLists.txt | 3 +-- src/qt/qt.c | 2 +- vcpkg.json | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index ca30e69ce..1ba132846 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -107,9 +107,8 @@ add_library(ui STATIC ../qt_resources.qrc ) -if(NOT MINGW) +if(WIN32 AND NOT MINGW) target_sources(plat PRIVATE ../win/win_opendir.c) - target_sources(plat PRIVATE ../nvr.c) endif() if (APPLE) diff --git a/src/qt/qt.c b/src/qt/qt.c index e5a639081..a742a962f 100644 --- a/src/qt/qt.c +++ b/src/qt/qt.c @@ -2,7 +2,7 @@ * C functionality for Qt platform, where the C equivalent is not easily * implemented in Qt */ -#ifdef __MINGW32__ +#if !defined(_WIN32) && !defined(__clang__) #include #endif #include diff --git a/vcpkg.json b/vcpkg.json index 5607b5691..f1837d129 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -10,6 +10,6 @@ "openal-soft", "sdl2", "rtmidi", - "qt5" + "qt5-base" ] } \ No newline at end of file From a99b556b147f6baf86a50c795a8d0cb723fbb78d Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Mon, 20 Dec 2021 22:51:39 +0200 Subject: [PATCH 129/278] qt: string.h inclusion predicate was backwards --- src/qt/qt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt.c b/src/qt/qt.c index a742a962f..907660a32 100644 --- a/src/qt/qt.c +++ b/src/qt/qt.c @@ -2,7 +2,7 @@ * C functionality for Qt platform, where the C equivalent is not easily * implemented in Qt */ -#if !defined(_WIN32) && !defined(__clang__) +#if !defined(_WIN32) || !defined(__clang__) #include #endif #include From bbb0b38d31b73982a179089c526ecd0615a72d66 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Tue, 21 Dec 2021 00:28:52 +0200 Subject: [PATCH 130/278] qt: Remove a workaround that is now obsolete --- src/qt/qt_main.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index b730e40b0..1b014fda5 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -36,10 +36,8 @@ extern QElapsedTimer elapsed_timer; extern MainWindow* main_window; extern "C" { -#define new not_new #include <86box/timer.h> #include <86box/nvr.h> -#undef new extern int qt_nvr_save(void); } From 67a0f7a85fb434415c18a60afbe0e7e776e3b117 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 21 Dec 2021 16:38:13 +0600 Subject: [PATCH 131/278] Blitting improvements * Use a single QImage copy for actual drawing * Use std::array and std::unique_ptr for image buffers * Signal immediately after copying the buffer to internal image --- src/qt/qt_hardwarerenderer.cpp | 6 +++--- src/qt/qt_hardwarerenderer.hpp | 2 +- src/qt/qt_mainwindow.cpp | 4 +--- src/qt/qt_renderercomon.cpp | 3 --- src/qt/qt_renderercomon.hpp | 2 +- src/qt/qt_rendererstack.cpp | 9 ++++----- src/qt/qt_rendererstack.hpp | 8 +++----- src/qt/qt_softwarerenderer.cpp | 6 +++--- src/qt/qt_softwarerenderer.hpp | 2 +- 9 files changed, 17 insertions(+), 25 deletions(-) diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index 077021a24..4c491495f 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -35,11 +35,11 @@ void HardwareRenderer::setRenderType(RenderType type) { setFormat(format); } -void HardwareRenderer::onBlit(const QImage& img, int x, int y, int w, int h, std::atomic_flag* in_use) { - image = img; +void HardwareRenderer::onBlit(const std::unique_ptr* img, int x, int y, int w, int h, std::atomic_flag* in_use) { + memcpy(image.bits(), img->get(), 2048 * 2048 * 4); + in_use->clear(); source.setRect(x, y, w, h); update(); - in_use->clear(); } void HardwareRenderer::resizeEvent(QResizeEvent *event) { diff --git a/src/qt/qt_hardwarerenderer.hpp b/src/qt/qt_hardwarerenderer.hpp index 0068eb7dc..3c8fb3110 100644 --- a/src/qt/qt_hardwarerenderer.hpp +++ b/src/qt/qt_hardwarerenderer.hpp @@ -47,7 +47,7 @@ public: void setRenderType(RenderType type); public slots: - void onBlit(const QImage& img, int, int, int, int, std::atomic_flag* in_use); + void onBlit(const std::unique_ptr* img, int, int, int, int, std::atomic_flag* in_use); protected: void resizeEvent(QResizeEvent *event) override; diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index a02ed77d6..8e4dcc1de 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -901,9 +901,7 @@ void MainWindow::on_actionFullscreen_triggered() { video_fullscreen = 1; } - auto widget = ui->stackedWidget->currentWidget(); - auto rc = dynamic_cast(widget); - rc->onResize(widget->width(), widget->height()); + ui->stackedWidget->switchRenderer((RendererStack::Renderer)vid_api); } void MainWindow::getTitle_(wchar_t *title) diff --git a/src/qt/qt_renderercomon.cpp b/src/qt/qt_renderercomon.cpp index 8c1b89aeb..144bb88af 100644 --- a/src/qt/qt_renderercomon.cpp +++ b/src/qt/qt_renderercomon.cpp @@ -18,9 +18,6 @@ void RendererCommon::onPaint(QPaintDevice* device) { painter.fillRect(0, 0, device->width(), device->height(), QColorConstants::Black); painter.setCompositionMode(QPainter::CompositionMode_Plus); painter.drawImage(destination, image, source); - // "release" image, reducing it's refcount, so renderstack::blit() - // won't have to reallocate - image = QImage(); } static void integer_scale(double *d, double *g) { diff --git a/src/qt/qt_renderercomon.hpp b/src/qt/qt_renderercomon.hpp index 6eed9c9b2..8cad5f92c 100644 --- a/src/qt/qt_renderercomon.hpp +++ b/src/qt/qt_renderercomon.hpp @@ -14,6 +14,6 @@ public: protected: void onPaint(QPaintDevice* device); - QImage image; + QImage image{QSize(2048, 2048), QImage::Format_RGB32}; QRect source, destination; }; diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 72d79fae6..15ab840d1 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -24,9 +24,8 @@ RendererStack::RendererStack(QWidget *parent) : ui(new Ui::RendererStack) { ui->setupUi(this); - imagebufs = QVector(2); - imagebufs[0] = QImage{QSize(2048, 2048), QImage::Format_RGB32}; - imagebufs[1] = QImage{QSize(2048, 2048), QImage::Format_RGB32}; + imagebufs[0].reset(new uint8_t[2048 * 2048 * 4]); + imagebufs[1].reset(new uint8_t[2048 * 2048 * 4]); buffers_in_use = std::vector(2); buffers_in_use[0].clear(); @@ -222,7 +221,7 @@ void RendererStack::blit(int x, int y, int w, int h) sy = y; sw = this->w = w; sh = this->h = h; - auto imagebits = imagebufs[currentBuf].bits(); + auto imagebits = imagebufs[currentBuf].get(); video_copy(imagebits + y * (2048 * 4) + x * 4, &(buffer32->line[y][x]), h * 2048 * sizeof(uint32_t)); if (screenshots) @@ -230,6 +229,6 @@ void RendererStack::blit(int x, int y, int w, int h) video_screenshot((uint32_t *)imagebits, 0, 0, 2048); } video_blit_complete(); - blitToRenderer(imagebufs[currentBuf], sx, sy, sw, sh, &buffers_in_use[currentBuf]); + blitToRenderer(&imagebufs[currentBuf], sx, sy, sw, sh, &buffers_in_use[currentBuf]); currentBuf = (currentBuf + 1) % 2; } diff --git a/src/qt/qt_rendererstack.hpp b/src/qt/qt_rendererstack.hpp index 2d987aa1e..a512fb7e1 100644 --- a/src/qt/qt_rendererstack.hpp +++ b/src/qt/qt_rendererstack.hpp @@ -7,6 +7,7 @@ #include #include #include +#include namespace Ui { class RendererStack; @@ -42,7 +43,7 @@ public: void switchRenderer(Renderer renderer); signals: - void blitToRenderer(const QImage& img, int, int, int, int, std::atomic_flag* in_use); + void blitToRenderer(const std::unique_ptr* img, int, int, int, int, std::atomic_flag* in_use); public slots: void blit(int x, int y, int w, int h); @@ -59,11 +60,8 @@ private: int x, y, w, h, sx, sy, sw, sh; - // always have a qimage available for writing, which is _probably_ unused - // worst case - it will just get reallocated because it's refcounter is > 1 - // when calling bits(); int currentBuf = 0; - QVector imagebufs; + std::array, 2> imagebufs; std::unique_ptr current; diff --git a/src/qt/qt_softwarerenderer.cpp b/src/qt/qt_softwarerenderer.cpp index b424c8bad..9a64fe043 100644 --- a/src/qt/qt_softwarerenderer.cpp +++ b/src/qt/qt_softwarerenderer.cpp @@ -7,11 +7,11 @@ void SoftwareRenderer::paintEvent(QPaintEvent *event) { onPaint(this); } -void SoftwareRenderer::onBlit(const QImage& img, int x, int y, int w, int h, std::atomic_flag* in_use) { - image = img; +void SoftwareRenderer::onBlit(const std::unique_ptr* img, int x, int y, int w, int h, std::atomic_flag* in_use) { + memcpy(image.bits(), img->get(), 2048 * 2048 * 4); + in_use->clear(); source.setRect(x, y, w, h); update(); - in_use->clear(); } void SoftwareRenderer::resizeEvent(QResizeEvent *event) { diff --git a/src/qt/qt_softwarerenderer.hpp b/src/qt/qt_softwarerenderer.hpp index 1e37f65d4..c30303cc5 100644 --- a/src/qt/qt_softwarerenderer.hpp +++ b/src/qt/qt_softwarerenderer.hpp @@ -13,7 +13,7 @@ public: void paintEvent(QPaintEvent *event) override; public slots: - void onBlit(const QImage& img, int, int, int, int, std::atomic_flag* in_use); + void onBlit(const std::unique_ptr* img, int, int, int, int, std::atomic_flag* in_use); protected: void resizeEvent(QResizeEvent *event) override; From f481574a0fdaf3b7f45c4656b211990bf2c858ad Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 23 Dec 2021 01:56:56 +0600 Subject: [PATCH 132/278] Port 3 out of 4 recent Win32 commits --- .gitignore | 3 +++ src/qt/qt_machinestatus.cpp | 9 ++++++--- src/qt/qt_mediamenu.cpp | 6 +++--- src/qt/qt_platform.cpp | 5 +++++ src/qt/qt_settingssound.cpp | 4 ++-- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index fe3a35b37..79cfbb168 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,6 @@ Makefile /.vs /.vscode src/win/RCa04980 + +# Qt Creator +CMakeLists.txt.user diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index a2b44b36e..af81fc1e0 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -239,7 +239,8 @@ void MachineStatus::iterateCDROM(const std::function &cb) { for (size_t i = 0; i < CDROM_NUM; i++) { /* Could be Internal or External IDE.. */ if ((cdrom[i].bus_type == CDROM_BUS_ATAPI) && - !hasIDE() && hdc_name != QStringLiteral("ide")) + !hasIDE() && hdc_name != QStringLiteral("ide") && + hdc_name != QStringLiteral("xtide")) continue; if ((cdrom[i].bus_type == CDROM_BUS_SCSI) && !hasSCSI() && (scsi_card_current[0] == 0) && (scsi_card_current[1] == 0) && @@ -256,7 +257,8 @@ void MachineStatus::iterateZIP(const std::function &cb) { for (size_t i = 0; i < ZIP_NUM; i++) { /* Could be Internal or External IDE.. */ if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && - !hasIDE() && hdc_name != QStringLiteral("ide")) + !hasIDE() && hdc_name != QStringLiteral("ide") && + hdc_name != QStringLiteral("xtide")) continue; if ((zip_drives[i].bus_type == ZIP_BUS_SCSI) && !hasSCSI() && (scsi_card_current[0] == 0) && (scsi_card_current[1] == 0) && @@ -273,7 +275,8 @@ void MachineStatus::iterateMO(const std::function &cb) { for (size_t i = 0; i < MO_NUM; i++) { /* Could be Internal or External IDE.. */ if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && - !hasIDE() && hdc_name != QStringLiteral("ide")) + !hasIDE() && hdc_name != QStringLiteral("ide") && + hdc_name != QStringLiteral("xtide")) continue; if ((mo_drives[i].bus_type == MO_BUS_SCSI) && !hasSCSI() && (scsi_card_current[0] == 0) && (scsi_card_current[1] == 0) && diff --git a/src/qt/qt_mediamenu.cpp b/src/qt/qt_mediamenu.cpp index f89c25447..94cdb73f1 100644 --- a/src/qt/qt_mediamenu.cpp +++ b/src/qt/qt_mediamenu.cpp @@ -145,7 +145,7 @@ void MediaMenu::cassetteNewImage() { } void MediaMenu::cassetteSelectImage(bool wp) { - auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "Cassette images (*.pcm;*.raw;*.wav;*.cas);;All files (*)"); + auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*)"); cassetteMount(filename, wp); } @@ -199,7 +199,7 @@ void MediaMenu::cassetteUpdateMenu() { } void MediaMenu::cartridgeSelectImage(int i) { - auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "Cartridge images (*.a;*.b;*.jrc);;All files (*)"); + auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*)"); if (filename.isEmpty()) { return; } @@ -241,7 +241,7 @@ void MediaMenu::floppyNewImage(int i) { } void MediaMenu::floppySelectImage(int i, bool wp) { - auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "All images (*.0?? *.1?? *.??0 *.86F *.BIN *.CQ? *.D?? *.FLP *.HDM *.IM? *.JSON *.TD0 *.*FD? *.MFM *.XDF);;Advanced sector images (*.IMD *.JSON *.TD0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.CQ? *.D?? *.FLP *.HDM *.IM? *.XDF *.*FD?);;Flux images (*.FDI);;Surface images (*.86F *.MFM);;All files (*)"); + auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)"); floppyMount(i, filename, wp); } diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index c2bb7a751..d33ba24ac 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -54,6 +54,8 @@ extern "C" { #include <86box/86box.h> #include <86box/device.h> #include <86box/gameport.h> +#include <86box/timer.h> +#include <86box/nvr.h> #include <86box/plat_dynld.h> #include <86box/config.h> #include <86box/ui.h> @@ -328,6 +330,9 @@ plat_pause(int p) static wchar_t oldtitle[512]; wchar_t title[512]; + if ((p == 0) && (time_sync & TIME_SYNC_ENABLED)) + nvr_time_sync(); + dopause = p; if (p) { wcsncpy(oldtitle, ui_window_title(NULL), sizeof_w(oldtitle) - 1); diff --git a/src/qt/qt_settingssound.cpp b/src/qt/qt_settingssound.cpp index 35adcf295..fa8188567 100644 --- a/src/qt/qt_settingssound.cpp +++ b/src/qt/qt_settingssound.cpp @@ -169,7 +169,7 @@ void SettingsSound::on_comboBoxMidiOut_currentIndexChanged(int index) { return; } ui->pushButtonConfigureMidiOut->setEnabled(midi_device_has_config(ui->comboBoxMidiOut->currentData().toInt())); - ui->checkBoxMPU401->setEnabled(allowMpu401(ui)); + ui->checkBoxMPU401->setEnabled(allowMpu401(ui) && (machine_has_bus(machineId, MACHINE_BUS_ISA) || machine_has_bus(machineId, MACHINE_BUS_MCA))); ui->pushButtonConfigureMPU401->setEnabled(allowMpu401(ui) && ui->checkBoxMPU401->isChecked()); } @@ -182,7 +182,7 @@ void SettingsSound::on_comboBoxMidiIn_currentIndexChanged(int index) { return; } ui->pushButtonConfigureMidiIn->setEnabled(midi_in_device_has_config(ui->comboBoxMidiIn->currentData().toInt())); - ui->checkBoxMPU401->setEnabled(allowMpu401(ui)); + ui->checkBoxMPU401->setEnabled(allowMpu401(ui) && (machine_has_bus(machineId, MACHINE_BUS_ISA) || machine_has_bus(machineId, MACHINE_BUS_MCA))); ui->pushButtonConfigureMPU401->setEnabled(allowMpu401(ui) && ui->checkBoxMPU401->isChecked()); } From 17c3e803a4db87b483b98454030590bcf5012ea1 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 23 Dec 2021 17:05:11 +0600 Subject: [PATCH 133/278] Qt UI improvements * Port https://github.com/86Box/86Box/commit/209b5d9cd1b5ec63fca324aaea8f4dcc1160e21c to Qt UI * Remove dividers from status bar * Make OpenGL ES available as an option only if ANGLE is used --- src/qt/qt_mainwindow.cpp | 8 ++++--- src/qt/qt_settings.cpp | 1 + src/qt/qt_settingsotherperipherals.cpp | 30 +++++++++++++++++++++----- src/qt/qt_settingsotherperipherals.hpp | 5 +++++ 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 8e4dcc1de..e4ad4ad04 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -57,6 +57,7 @@ MainWindow::MainWindow(QWidget *parent) : ui->setupUi(this); ui->stackedWidget->setMouseTracking(true); statusBar()->setVisible(!hide_status_bar); + statusBar()->setStyleSheet("QStatusBar::item {border: None;}"); this->setWindowIcon(QIcon(":/settings/win/icons/86Box-yellow.ico")); @@ -252,8 +253,8 @@ MainWindow::MainWindow(QWidget *parent) : } #ifdef Q_OS_WINDOWS - /* qt opengles doesn't work (yet?) so hide the menu option */ - ui->actionHardware_Renderer_OpenGL_ES->setVisible(false); + /* Make the option visible only if ANGLE is loaded. */ + ui->actionHardware_Renderer_OpenGL_ES->setVisible(QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGLES); #endif setFocusPolicy(Qt::StrongFocus); @@ -890,10 +891,11 @@ uint16_t x11_keycode_to_keysym(uint32_t keycode) void MainWindow::on_actionFullscreen_triggered() { if (video_fullscreen > 0) { + showNormal(); ui->menubar->show(); ui->statusbar->show(); - showNormal(); video_fullscreen = 0; + setGeometry(geometry()); } else { ui->menubar->hide(); ui->statusbar->hide(); diff --git a/src/qt/qt_settings.cpp b/src/qt/qt_settings.cpp index 5caa68249..7284d0cad 100644 --- a/src/qt/qt_settings.cpp +++ b/src/qt/qt_settings.cpp @@ -112,6 +112,7 @@ Settings::Settings(QWidget *parent) : connect(machine, &SettingsMachine::currentMachineChanged, sound, &SettingsSound::onCurrentMachineChanged); connect(machine, &SettingsMachine::currentMachineChanged, network, &SettingsNetwork::onCurrentMachineChanged); connect(machine, &SettingsMachine::currentMachineChanged, storageControllers, &SettingsStorageControllers::onCurrentMachineChanged); + connect(machine, &SettingsMachine::currentMachineChanged, otherPeripherals, &SettingsOtherPeripherals::onCurrentMachineChanged); connect(ui->listView->selectionModel(), &QItemSelectionModel::currentChanged, this, [this](const QModelIndex ¤t, const QModelIndex &previous) { ui->stackedWidget->setCurrentIndex(current.row()); diff --git a/src/qt/qt_settingsotherperipherals.cpp b/src/qt/qt_settingsotherperipherals.cpp index 834c6bdad..8eb849497 100644 --- a/src/qt/qt_settingsotherperipherals.cpp +++ b/src/qt/qt_settingsotherperipherals.cpp @@ -4,6 +4,7 @@ extern "C" { #include <86box/86box.h> #include <86box/device.h> +#include <86box/machine.h> #include <86box/isamem.h> #include <86box/isartc.h> } @@ -16,9 +17,18 @@ SettingsOtherPeripherals::SettingsOtherPeripherals(QWidget *parent) : ui(new Ui::SettingsOtherPeripherals) { ui->setupUi(this); + onCurrentMachineChanged(machine); +} + +void SettingsOtherPeripherals::onCurrentMachineChanged(int machineId) +{ + this->machineId = machineId; ui->checkBoxISABugger->setChecked(bugger_enabled > 0 ? true : false); ui->checkBoxPOSTCard->setChecked(postcard_enabled > 0 ? true : false); + ui->checkBoxISABugger->setEnabled(machine_has_bus(machineId, MACHINE_BUS_ISA)); + ui->comboBoxRTC->setEnabled(machine_has_bus(machineId, MACHINE_BUS_ISA)); + ui->pushButtonConfigureRTC->setEnabled(machine_has_bus(machineId, MACHINE_BUS_ISA)); auto* model = ui->comboBoxRTC->model(); int d = 0; @@ -29,6 +39,10 @@ SettingsOtherPeripherals::SettingsOtherPeripherals(QWidget *parent) : break; } + if (!device_is_valid(isartc_get_device(d), machineId)) { + break; + } + int row = Models::AddEntry(model, name, d); if (d == isartc_type) { selectedRow = row; @@ -48,6 +62,10 @@ SettingsOtherPeripherals::SettingsOtherPeripherals(QWidget *parent) : break; } + if (!device_is_valid(isamem_get_device(d), machineId)) { + break; + } + int row = Models::AddEntry(model, name, d); if (d == isamem_type[c]) { selectedRow = row; @@ -56,6 +74,8 @@ SettingsOtherPeripherals::SettingsOtherPeripherals(QWidget *parent) : } cbox->setCurrentIndex(-1); cbox->setCurrentIndex(selectedRow); + cbox->setEnabled(machine_has_bus(machineId, MACHINE_BUS_ISA)); + findChild(QString("pushButtonConfigureCard%1").arg(c + 1))->setEnabled(isamem_type[c] != 0 && machine_has_bus(machineId, MACHINE_BUS_ISA)); } } @@ -81,7 +101,7 @@ void SettingsOtherPeripherals::on_comboBoxRTC_currentIndexChanged(int index) { if (index < 0) { return; } - ui->pushButtonConfigureRTC->setEnabled(index != 0); + ui->pushButtonConfigureRTC->setEnabled(index != 0 && machine_has_bus(machineId, MACHINE_BUS_ISA)); } void SettingsOtherPeripherals::on_pushButtonConfigureRTC_clicked() { @@ -92,7 +112,7 @@ void SettingsOtherPeripherals::on_comboBoxCard1_currentIndexChanged(int index) { if (index < 0) { return; } - ui->pushButtonConfigureCard1->setEnabled(index != 0); + ui->pushButtonConfigureCard1->setEnabled(index != 0 && machine_has_bus(machineId, MACHINE_BUS_ISA)); } void SettingsOtherPeripherals::on_pushButtonConfigureCard1_clicked() { @@ -103,7 +123,7 @@ void SettingsOtherPeripherals::on_comboBoxCard2_currentIndexChanged(int index) { if (index < 0) { return; } - ui->pushButtonConfigureCard2->setEnabled(index != 0); + ui->pushButtonConfigureCard2->setEnabled(index != 0 && machine_has_bus(machineId, MACHINE_BUS_ISA)); } void SettingsOtherPeripherals::on_pushButtonConfigureCard2_clicked() { @@ -114,7 +134,7 @@ void SettingsOtherPeripherals::on_comboBoxCard3_currentIndexChanged(int index) { if (index < 0) { return; } - ui->pushButtonConfigureCard3->setEnabled(index != 0); + ui->pushButtonConfigureCard3->setEnabled(index != 0 && machine_has_bus(machineId, MACHINE_BUS_ISA)); } void SettingsOtherPeripherals::on_pushButtonConfigureCard3_clicked() { @@ -125,7 +145,7 @@ void SettingsOtherPeripherals::on_comboBoxCard4_currentIndexChanged(int index) { if (index < 0) { return; } - ui->pushButtonConfigureCard4->setEnabled(index != 0); + ui->pushButtonConfigureCard4->setEnabled(index != 0 && machine_has_bus(machineId, MACHINE_BUS_ISA)); } void SettingsOtherPeripherals::on_pushButtonConfigureCard4_clicked() { diff --git a/src/qt/qt_settingsotherperipherals.hpp b/src/qt/qt_settingsotherperipherals.hpp index e32704f1b..f8eed2c9e 100644 --- a/src/qt/qt_settingsotherperipherals.hpp +++ b/src/qt/qt_settingsotherperipherals.hpp @@ -16,6 +16,10 @@ public: ~SettingsOtherPeripherals(); void save(); + +public slots: + void onCurrentMachineChanged(int machineId); + private slots: void on_pushButtonConfigureCard4_clicked(); void on_comboBoxCard4_currentIndexChanged(int index); @@ -30,6 +34,7 @@ private slots: private: Ui::SettingsOtherPeripherals *ui; + int machineId{0}; }; #endif // QT_SETTINGSOTHERPERIPHERALS_HPP From 5a59d4eb05e69851e1f34f2b81352a29d7cacd8f Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 24 Dec 2021 00:14:48 +0600 Subject: [PATCH 134/278] * Fix wrong title bar text for Windows --- src/qt/qt.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/qt/qt.c b/src/qt/qt.c index 907660a32..f167660cd 100644 --- a/src/qt/qt.c +++ b/src/qt/qt.c @@ -27,9 +27,17 @@ wchar_t* plat_get_string(int i) case IDS_2077: return L"Click to capture mouse."; case IDS_2078: +#ifdef _WIN32 + return L"Press F8+F12 to release mouse"; +#else return L"Press CTRL-END to release mouse"; +#endif case IDS_2079: +#ifdef _WIN32 + return L"Press F8+F12 or middle button to release mouse"; +#else return L"Press CTRL-END or middle button to release mouse"; +#endif case IDS_2080: return L"Failed to initialize FluidSynth"; case IDS_4099: From 4002149d4d5c1f2b5ebd8b18b79702971b712cc7 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 24 Dec 2021 00:15:30 +0600 Subject: [PATCH 135/278] * Menus invoked from status bar now appear inside the window --- src/qt/qt_machinestatus.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index af81fc1e0..e873744a7 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -339,7 +339,7 @@ void MachineStatus::refresh(QStatusBar* sbar) { d->cassette.label = std::make_unique(); d->cassette.setEmpty(QString(cassette_fname).isEmpty()); connect((ClickableLabel*)d->cassette.label.get(), &ClickableLabel::clicked, [this](QPoint pos) { - MediaMenu::ptr->cassetteMenu->popup(pos); + MediaMenu::ptr->cassetteMenu->popup(pos - QPoint(0, MediaMenu::ptr->cassetteMenu->sizeHint().height())); }); d->cassette.label->setToolTip(MediaMenu::ptr->cassetteMenu->title()); sbar->addWidget(d->cassette.label.get()); @@ -347,10 +347,10 @@ void MachineStatus::refresh(QStatusBar* sbar) { if (machine_has_cartridge(machine)) { for (int i = 0; i < 2; ++i) { - d->cartridge[i].label = std::make_unique(); + d->cartridge[i].label = std::make_unique(); d->cartridge[i].setEmpty(QString(cart_fns[i]).isEmpty()); connect((ClickableLabel*)d->cartridge[i].label.get(), &ClickableLabel::clicked, [this, i](QPoint pos) { - MediaMenu::ptr->cartridgeMenus[i]->popup(pos); + MediaMenu::ptr->cartridgeMenus[i]->popup(pos - QPoint(0, MediaMenu::ptr->cartridgeMenus[i]->sizeHint().height())); }); d->cartridge[i].label->setToolTip(MediaMenu::ptr->cartridgeMenus[i]->title()); sbar->addWidget(d->cartridge[i].label.get()); @@ -370,7 +370,7 @@ void MachineStatus::refresh(QStatusBar* sbar) { d->fdd[i].setEmpty(QString(floppyfns[i]).isEmpty()); d->fdd[i].setActive(false); connect((ClickableLabel*)d->fdd[i].label.get(), &ClickableLabel::clicked, [this, i](QPoint pos) { - MediaMenu::ptr->floppyMenus[i]->popup(pos); + MediaMenu::ptr->floppyMenus[i]->popup(pos - QPoint(0, MediaMenu::ptr->floppyMenus[i]->sizeHint().height())); }); d->fdd[i].label->setToolTip(MediaMenu::ptr->floppyMenus[i]->title()); sbar->addWidget(d->fdd[i].label.get()); @@ -381,7 +381,7 @@ void MachineStatus::refresh(QStatusBar* sbar) { d->cdrom[i].setEmpty(cdrom[i].host_drive != 200 || QString(cdrom[i].image_path).isEmpty()); d->cdrom[i].setActive(false); connect((ClickableLabel*)d->cdrom[i].label.get(), &ClickableLabel::clicked, [this, i](QPoint pos) { - MediaMenu::ptr->cdromMenus[i]->popup(pos); + MediaMenu::ptr->cdromMenus[i]->popup(pos - QPoint(0, MediaMenu::ptr->cdromMenus[i]->sizeHint().height())); }); d->cdrom[i].label->setToolTip(MediaMenu::ptr->cdromMenus[i]->title()); sbar->addWidget(d->cdrom[i].label.get()); @@ -392,7 +392,7 @@ void MachineStatus::refresh(QStatusBar* sbar) { d->zip[i].setEmpty(QString(zip_drives[i].image_path).isEmpty()); d->zip[i].setActive(false); connect((ClickableLabel*)d->zip[i].label.get(), &ClickableLabel::clicked, [this, i](QPoint pos) { - MediaMenu::ptr->zipMenus[i]->popup(pos); + MediaMenu::ptr->zipMenus[i]->popup(pos - QPoint(0, MediaMenu::ptr->zipMenus[i]->sizeHint().height())); }); d->zip[i].label->setToolTip(MediaMenu::ptr->zipMenus[i]->title()); sbar->addWidget(d->zip[i].label.get()); @@ -403,7 +403,7 @@ void MachineStatus::refresh(QStatusBar* sbar) { d->mo[i].setEmpty(QString(mo_drives[i].image_path).isEmpty()); d->mo[i].setActive(false); connect((ClickableLabel*)d->mo[i].label.get(), &ClickableLabel::clicked, [this, i](QPoint pos) { - MediaMenu::ptr->moMenus[i]->popup(pos); + MediaMenu::ptr->moMenus[i]->popup(pos - QPoint(0, MediaMenu::ptr->moMenus[i]->sizeHint().height())); }); d->mo[i].label->setToolTip(MediaMenu::ptr->moMenus[i]->title()); sbar->addWidget(d->mo[i].label.get()); From eb84dc6ef4ee4052d26337046321ca582bad52d0 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 24 Dec 2021 00:26:47 +0600 Subject: [PATCH 136/278] Make OpenGL ES only available on macOS if ANGLE is loaded --- src/qt/qt_mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index e4ad4ad04..cd5293905 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -252,7 +252,7 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionChange_contrast_for_monochrome_display->setChecked(true); } -#ifdef Q_OS_WINDOWS +#if defined Q_OS_WINDOWS || defined Q_OS_MACOS /* Make the option visible only if ANGLE is loaded. */ ui->actionHardware_Renderer_OpenGL_ES->setVisible(QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGLES); #endif From b3876ee9345fbf2d87fe51cc96cde4b1fc76c0b7 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Thu, 23 Dec 2021 20:31:51 +0200 Subject: [PATCH 137/278] qt: create opengl context on hardware renderer Prevent OpenGLES renderer crashing on windows --- src/qt/qt_hardwarerenderer.cpp | 2 ++ src/qt/qt_hardwarerenderer.hpp | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index 4c491495f..ec0f71f3a 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -14,6 +14,7 @@ void HardwareRenderer::resizeGL(int w, int h) void HardwareRenderer::initializeGL() { + m_context->makeCurrent(this); initializeOpenGLFunctions(); } @@ -44,6 +45,7 @@ void HardwareRenderer::onBlit(const std::unique_ptr* img, int x, int y, void HardwareRenderer::resizeEvent(QResizeEvent *event) { onResize(width(), height()); + QOpenGLWindow::resizeEvent(event); } diff --git a/src/qt/qt_hardwarerenderer.hpp b/src/qt/qt_hardwarerenderer.hpp index 3c8fb3110..d2152def5 100644 --- a/src/qt/qt_hardwarerenderer.hpp +++ b/src/qt/qt_hardwarerenderer.hpp @@ -24,6 +24,7 @@ class HardwareRenderer : public QOpenGLWindow, protected QOpenGLFunctions, publi private: bool wayland = false; QWidget* parentWidget{nullptr}; + QOpenGLContext* m_context; public: void resizeGL(int w, int h) override; void initializeGL() override; @@ -34,6 +35,9 @@ public: setMinimumSize(QSize(16, 16)); setFlags(Qt::FramelessWindowHint); parentWidget = parent; + + m_context = new QOpenGLContext(); + m_context->create(); } ~HardwareRenderer() { From fddae6b11f1b27c06e06e788088b45fe66b9c73f Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 24 Dec 2021 01:57:26 +0600 Subject: [PATCH 138/278] * Remember windows geometry correctly * Disable maximize button when window isn't resizable --- src/qt/qt_mainwindow.cpp | 14 ++++++++++++-- src/qt/qt_mainwindow.hpp | 3 +++ src/qt/qt_specifydimensions.cpp | 7 +++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index cd5293905..6ea9f9c0f 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -60,6 +60,8 @@ MainWindow::MainWindow(QWidget *parent) : statusBar()->setStyleSheet("QStatusBar::item {border: None;}"); this->setWindowIcon(QIcon(":/settings/win/icons/86Box-yellow.ico")); + this->setWindowFlag(Qt::MSWindowsFixedSizeDialogHint, vid_resize != 1); + this->setWindowFlag(Qt::WindowMaximizeButtonHint, vid_resize == 1); connect(this, &MainWindow::showMessageForNonQtThread, this, &MainWindow::showMessage_, Qt::BlockingQueuedConnection); @@ -284,7 +286,6 @@ void MainWindow::closeEvent(QCloseEvent *event) { event->ignore(); return; } - config_save(); } if (window_remember) { window_w = ui->stackedWidget->width(); @@ -294,6 +295,7 @@ void MainWindow::closeEvent(QCloseEvent *event) { window_y = this->geometry().y(); } } + config_save(); event->accept(); } @@ -302,8 +304,10 @@ MainWindow::~MainWindow() { } void MainWindow::showEvent(QShowEvent *event) { + if (shownonce) return; + shownonce = true; if (window_remember && !QApplication::platformName().contains("wayland")) { - setGeometry(window_x, window_y, window_w, window_h); + setGeometry(window_x, window_y, window_w, window_h + menuBar()->height() + (hide_status_bar ? 0 : statusBar()->height())); } if (vid_resize == 2) { setFixedSize(fixed_size_x, fixed_size_y + this->menuBar()->height() + this->statusBar()->height()); @@ -1034,10 +1038,16 @@ void MainWindow::focusOutEvent(QFocusEvent* event) void MainWindow::on_actionResizable_window_triggered(bool checked) { if (checked) { vid_resize = 1; + setWindowFlag(Qt::WindowMaximizeButtonHint); + setWindowFlag(Qt::MSWindowsFixedSizeDialogHint, false); setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); } else { vid_resize = 0; + setWindowFlag(Qt::WindowMaximizeButtonHint, false); + setWindowFlag(Qt::MSWindowsFixedSizeDialogHint); } + show(); + ui->menuWindow_scale_factor->setEnabled(! checked); emit resizeContents(scrnsz_x, scrnsz_y); } diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 5cc49c6b0..126ecaccd 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -115,6 +115,9 @@ private: /* If main window should send keyboard input */ bool send_keyboard_input = true; + bool shownonce = false; + + friend class SpecifyDimensions; }; #endif // QT_MAINWINDOW_HPP diff --git a/src/qt/qt_specifydimensions.cpp b/src/qt/qt_specifydimensions.cpp index 4ef9ae76d..85da6212b 100644 --- a/src/qt/qt_specifydimensions.cpp +++ b/src/qt/qt_specifydimensions.cpp @@ -2,9 +2,11 @@ #include "ui_qt_specifydimensions.h" #include "qt_mainwindow.hpp" +#include "ui_qt_mainwindow.h" #include #include +#include extern "C" { @@ -38,14 +40,18 @@ void SpecifyDimensions::on_SpecifyDimensions_accepted() if (ui->checkBox->isChecked()) { vid_resize = 2; + main_window->setWindowFlag(Qt::WindowMaximizeButtonHint, false); + main_window->setWindowFlag(Qt::MSWindowsFixedSizeDialogHint); window_remember = 0; fixed_size_x = ui->spinBoxWidth->value(); fixed_size_y = ui->spinBoxHeight->value(); main_window->setFixedSize(ui->spinBoxWidth->value(), ui->spinBoxHeight->value() + (hide_status_bar ? main_window->statusBar()->height() : 0) + main_window->menuBar()->height()); emit main_window->updateMenuResizeOptions(); + main_window->show(); } else { + if (vid_resize != 1) main_window->ui->actionResizable_window->trigger(); vid_resize = 0; window_remember = 1; window_w = ui->spinBoxWidth->value(); @@ -55,6 +61,7 @@ void SpecifyDimensions::on_SpecifyDimensions_accepted() vid_resize = 1; emit main_window->updateMenuResizeOptions(); } + main_window->show(); emit main_window->updateWindowRememberOption(); } From 8a6df0dcf62969e64e837f0fa621982b1e840bb8 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Fri, 24 Dec 2021 00:44:32 +0200 Subject: [PATCH 139/278] Revert changes to README.md to avoid confusion This reverts commit 4d7434809f8dceec22a04a7dffccc48af2b0c297. --- README.md | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/README.md b/README.md index b23c5817e..cfadfe55f 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,5 @@ 86Box ===== -**This Branch:** I've added initial Qt support to 86Box because I wanted to -have the configuration dialogs available on Linux, similar to what was -available on PCem. - -This is work-in-progress! - -Implemented ------------ -* The settings dialog -* Full screen switching -* Keyboard and mouse -* Status updates (activity lights) - -TODO ----- -* Emulation state and updates (titlebar in windows) -* Display output options (like forced 4:3) -* Entering full screen from within the emulated screen - -Original Readme -=============== **86Box** is a low level x86 emulator that runs older operating systems and software designed for IBM PC systems and compatibles from 1981 through fairly recent system designs based on the PCI bus. Features From ff175e399e7cf34cf11047b6cd0fb5014ee8ecd8 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 24 Dec 2021 11:53:24 +0600 Subject: [PATCH 140/278] Fix screenshots --- src/qt/qt_platform.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index d33ba24ac..8d30ab5df 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -283,14 +284,9 @@ plat_tempfile(char *bufp, char *prefix, char *suffix) name.append(QString("%1-").arg(prefix)); } - name.append("XXXXXX"); - - if (suffix != nullptr) { - name.append(suffix); - } - QTemporaryFile temp(name); - QByteArray buf(bufp); - buf = temp.fileName().toUtf8(); + name.append(QDateTime::currentDateTime().toString("yyyyMMdd-hhmmss-zzzz")); + if (suffix) name.append(suffix); + sprintf(&bufp[strlen(bufp)], "%s", name.toUtf8().data()); } void plat_remove(char* path) From 13d75c2e4f953b5966bc7e6dec168128e07286bc Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 24 Dec 2021 12:59:10 +0600 Subject: [PATCH 141/278] Close the main window after ACPI/APM shutdown --- src/qt/qt_mainwindow.cpp | 2 +- src/qt/qt_platform.cpp | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 6ea9f9c0f..d63c20668 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -270,7 +270,7 @@ MainWindow::MainWindow(QWidget *parent) : } void MainWindow::closeEvent(QCloseEvent *event) { - if (confirm_exit) + if (confirm_exit && cpu_thread_run) { QMessageBox questionbox(QMessageBox::Icon::Question, "86Box", "Are you sure you want to exit 86Box?", QMessageBox::Yes | QMessageBox::No, this); QCheckBox *chkbox = new QCheckBox("Do not ask me again"); diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index 8d30ab5df..9665c3a1b 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -16,12 +16,15 @@ #include #include +#include "qt_mainwindow.hpp" + #ifdef Q_OS_UNIX #include #endif // static QByteArray buf; extern QElapsedTimer elapsed_timer; +extern MainWindow* main_window; QElapsedTimer elapsed_timer; static std::atomic_int blitmx_contention = 0; @@ -355,6 +358,7 @@ plat_power_off(void) cycles -= 99999999; cpu_thread_run = 0; + main_window->close(); } void set_language(uint32_t id) { From 0402048629c76c4dbdb573a55db87ec34db8cf3f Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 24 Dec 2021 14:16:10 +0600 Subject: [PATCH 142/278] Use platform string comparison functions --- src/qt/qt.c | 1 + src/qt/qt_platform.cpp | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/qt/qt.c b/src/qt/qt.c index f167660cd..7bbc91036 100644 --- a/src/qt/qt.c +++ b/src/qt/qt.c @@ -5,6 +5,7 @@ #if !defined(_WIN32) || !defined(__clang__) #include #endif +#include #include #include diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index 9665c3a1b..a41509b9c 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -54,6 +54,8 @@ extern "C" { #ifdef Q_OS_WINDOWS #define NOMINMAX #include +#else +#include #endif #include <86box/86box.h> #include <86box/device.h> @@ -79,14 +81,20 @@ uint32_t lang_id = 0x0409, lang_sys = 0x0409; // Multilangual UI variables, for int stricmp(const char* s1, const char* s2) { - return QByteArray(s1).compare(s2, Qt::CaseInsensitive); +#ifdef Q_OS_WINDOWS + return _stricmp(s1, s2); +#else + return strcasecmp(s1, s2); +#endif } int strnicmp(const char *s1, const char *s2, size_t n) { - QByteArray b1(s1, std::min(strlen(s1), n)); - QByteArray b2(s2, std::min(strlen(s2), n)); - return b1.compare(b2, Qt::CaseInsensitive); +#ifdef Q_OS_WINDOWS + return _strnicmp(s1, s2, n); +#else + return strncasecmp(s1, s2, n); +#endif } void From 967146977862e9a93deb653550b6c0f8933224fb Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 24 Dec 2021 15:02:16 +0600 Subject: [PATCH 143/278] * Implement settings-only mode * Show correct directory to place ROMs in on macOS --- src/qt/qt_main.cpp | 10 +++++++++- src/qt/qt_mainwindow.cpp | 7 ++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 1b014fda5..562944385 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -101,9 +101,16 @@ int main(int argc, char* argv[]) { #endif elapsed_timer.start(); - pc_init(argc, argv); + if (!pc_init(argc, argv)) + { + return 0; + } if (! pc_init_modules()) { +#ifdef Q_OS_MACOS + ui_msgbox_header(MBX_FATAL, VC(L"No ROMs found."), VC(L"86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"~/Library/Application Support/net.86box.86box/roms\" directory.")); +#else ui_msgbox_header(MBX_FATAL, VC(L"No ROMs found."), VC(L"86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory.")); +#endif return 6; } @@ -134,6 +141,7 @@ int main(int argc, char* argv[]) { /* Set the PAUSE mode depending on the renderer. */ // plat_pause(0); + if (settings_only) dopause = 1; QTimer onesec; QObject::connect(&onesec, &QTimer::timeout, &app, [] { pc_onesec(); diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index d63c20668..22f80b6cf 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -374,6 +374,10 @@ void MainWindow::on_actionSettings_triggered() { break; } plat_pause(currentPause); + if (settings_only) { + cpu_thread_run = 0; + close(); + } } std::array x11_to_xt_base @@ -1027,7 +1031,8 @@ void MainWindow::on_actionHardware_Renderer_OpenGL_ES_triggered() { void MainWindow::focusInEvent(QFocusEvent* event) { - this->grabKeyboard(); + if (settings_only) ui->actionSettings->trigger(); + else this->grabKeyboard(); } void MainWindow::focusOutEvent(QFocusEvent* event) From 2c4fe15539df0dce94a2dbc58d5f86f4ad35fb78 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 24 Dec 2021 16:31:36 +0600 Subject: [PATCH 144/278] Implement rest of Action checkable options --- src/qt/qt_mainwindow.cpp | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 22f80b6cf..cdd5a581b 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -138,6 +138,17 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionHiDPI_scaling->setChecked(dpi_scale); ui->actionHide_status_bar->setChecked(hide_status_bar); ui->actionUpdate_status_bar_icons->setChecked(update_icons); + +#if defined Q_OS_WINDOWS || defined Q_OS_MACOS + /* Make the option visible only if ANGLE is loaded. */ + ui->actionHardware_Renderer_OpenGL_ES->setVisible(QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGLES); + if (QOpenGLContext::openGLModuleType() != QOpenGLContext::LibGLES && vid_api == 2) vid_api = 1; +#endif + + if (QApplication::platformName().contains("eglfs") && vid_api >= 1) { + fprintf(stderr, "OpenGL renderers are unsupported on EGLFS.\n"); + vid_api = 0; + } QActionGroup* actGroup = nullptr; switch (vid_api) { case 0: @@ -254,11 +265,6 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionChange_contrast_for_monochrome_display->setChecked(true); } -#if defined Q_OS_WINDOWS || defined Q_OS_MACOS - /* Make the option visible only if ANGLE is loaded. */ - ui->actionHardware_Renderer_OpenGL_ES->setVisible(QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGLES); -#endif - setFocusPolicy(Qt::StrongFocus); ui->stackedWidget->setFocusPolicy(Qt::NoFocus); ui->centralwidget->setFocusPolicy(Qt::NoFocus); @@ -865,10 +871,11 @@ static std::array& selected_keycode = x11_to_xt_base; uint16_t x11_keycode_to_keysym(uint32_t keycode) { + uint16_t finalkeycode = 0; #if defined(Q_OS_WINDOWS) - return keycode & 0xFFFF; + finalkeycode = (keycode & 0xFFFF); #elif defined(__APPLE__) - return darwin_to_xt[keycode]; + finalkeycode = darwin_to_xt[keycode]; #else static Display* x11display = nullptr; if (QApplication::platformName().contains("wayland")) @@ -878,8 +885,8 @@ uint16_t x11_keycode_to_keysym(uint32_t keycode) else if (QApplication::platformName().contains("eglfs")) { keycode -= 8; - if (keycode <= 88) return keycode; - else return evdev_to_xt[keycode]; + if (keycode <= 88) finalkeycode = keycode; + else finalkeycode = evdev_to_xt[keycode]; } else if (!x11display) { @@ -893,8 +900,13 @@ uint16_t x11_keycode_to_keysym(uint32_t keycode) selected_keycode = x11_to_xt_vnc; } } - return selected_keycode[keycode]; + if (!QApplication::platformName().contains("eglfs")) finalkeycode = selected_keycode[keycode]; #endif + if (rctrl_is_lalt && finalkeycode == 0x11D) + { + finalkeycode = 0x38; + } + return finalkeycode; } void MainWindow::on_actionFullscreen_triggered() { @@ -967,7 +979,7 @@ void MainWindow::showMessage_(const QString &header, const QString &message) { void MainWindow::keyPressEvent(QKeyEvent* event) { - if (send_keyboard_input) + if (send_keyboard_input && !(kbd_req_capture && !mouse_capture && !video_fullscreen)) { #ifdef __APPLE__ keyboard_input(1, x11_keycode_to_keysym(event->nativeVirtualKey())); From 9291f23461116b47c3ecd14b56f1d379b0122e22 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 25 Dec 2021 15:28:48 +0600 Subject: [PATCH 145/278] * Fix black screen on Wayland when setting resizable options * Fix incorrect fixed size at startup when status bar is disabled * Fix incorrect fixed size when it is set from Specify Dimensions --- src/qt/qt_mainwindow.cpp | 11 ++++++++--- src/qt/qt_specifydimensions.cpp | 7 +++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index cdd5a581b..49394a06b 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -316,7 +316,7 @@ void MainWindow::showEvent(QShowEvent *event) { setGeometry(window_x, window_y, window_w, window_h + menuBar()->height() + (hide_status_bar ? 0 : statusBar()->height())); } if (vid_resize == 2) { - setFixedSize(fixed_size_x, fixed_size_y + this->menuBar()->height() + this->statusBar()->height()); + setFixedSize(fixed_size_x, fixed_size_y + menuBar()->height() + (hide_status_bar ? 0 : statusBar()->height())); scrnsz_x = fixed_size_x; scrnsz_y = fixed_size_y; } @@ -913,10 +913,14 @@ void MainWindow::on_actionFullscreen_triggered() { if (video_fullscreen > 0) { showNormal(); ui->menubar->show(); - ui->statusbar->show(); + if (!hide_status_bar) ui->statusbar->show(); video_fullscreen = 0; - setGeometry(geometry()); + if (vid_resize != 1) { + if (vid_resize == 2) setFixedSize(fixed_size_x, fixed_size_y + menuBar()->height() + (!hide_status_bar ? statusBar()->height() : 0)); + emit resizeContents(scrnsz_x, scrnsz_y); + } } else { + setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); ui->menubar->hide(); ui->statusbar->hide(); showFullScreen(); @@ -1064,6 +1068,7 @@ void MainWindow::on_actionResizable_window_triggered(bool checked) { setWindowFlag(Qt::MSWindowsFixedSizeDialogHint); } show(); + ui->stackedWidget->switchRenderer((RendererStack::Renderer)vid_api); ui->menuWindow_scale_factor->setEnabled(! checked); emit resizeContents(scrnsz_x, scrnsz_y); diff --git a/src/qt/qt_specifydimensions.cpp b/src/qt/qt_specifydimensions.cpp index 85da6212b..ca4aa5706 100644 --- a/src/qt/qt_specifydimensions.cpp +++ b/src/qt/qt_specifydimensions.cpp @@ -45,14 +45,17 @@ void SpecifyDimensions::on_SpecifyDimensions_accepted() window_remember = 0; fixed_size_x = ui->spinBoxWidth->value(); fixed_size_y = ui->spinBoxHeight->value(); - main_window->setFixedSize(ui->spinBoxWidth->value(), ui->spinBoxHeight->value() + (hide_status_bar ? main_window->statusBar()->height() : 0) + main_window->menuBar()->height()); + main_window->setFixedSize(ui->spinBoxWidth->value(), ui->spinBoxHeight->value() + (!hide_status_bar ? main_window->statusBar()->height() : 0) + main_window->menuBar()->height()); emit main_window->updateMenuResizeOptions(); main_window->show(); + main_window->ui->stackedWidget->switchRenderer((RendererStack::Renderer)vid_api); } else { - if (vid_resize != 1) main_window->ui->actionResizable_window->trigger(); + main_window->setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); + main_window->ui->actionResizable_window->setChecked(false); vid_resize = 0; + main_window->ui->actionResizable_window->trigger(); window_remember = 1; window_w = ui->spinBoxWidth->value(); window_h = ui->spinBoxHeight->value(); From 07af487acb04ff1de5426b93e04620d10280a76d Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 25 Dec 2021 15:34:00 +0600 Subject: [PATCH 146/278] * Fix rare crash when switching renderers * Abandon QPainter in hardware renderers in favour of OpenGL * Disable VSync in the application globally --- src/qt/qt_hardwarerenderer.cpp | 16 ++++++++++++++-- src/qt/qt_hardwarerenderer.hpp | 10 +++++++++- src/qt/qt_main.cpp | 4 ++++ src/qt/qt_rendererstack.cpp | 1 + src/qt/qt_softwarerenderer.cpp | 3 +++ 5 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index ec0f71f3a..9c3df9c48 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -16,10 +16,18 @@ void HardwareRenderer::initializeGL() { m_context->makeCurrent(this); initializeOpenGLFunctions(); + m_texture = new QOpenGLTexture(image); + m_blt = new QOpenGLTextureBlitter; + m_blt->setRedBlueSwizzle(true); + m_blt->create(); } void HardwareRenderer::paintGL() { - onPaint(this); + m_context->makeCurrent(this); + m_blt->bind(); + QMatrix4x4 target = QOpenGLTextureBlitter::targetTransform(QRect(0, 0, 2048, 2048), source); + m_blt->blit(m_texture->textureId(), target, QOpenGLTextureBlitter::Origin::OriginTopLeft); + m_blt->release(); } void HardwareRenderer::setRenderType(RenderType type) { @@ -37,7 +45,11 @@ void HardwareRenderer::setRenderType(RenderType type) { } void HardwareRenderer::onBlit(const std::unique_ptr* img, int x, int y, int w, int h, std::atomic_flag* in_use) { - memcpy(image.bits(), img->get(), 2048 * 2048 * 4); + auto tval = this; + void* nuldata = 0; + if (memcmp(&tval, &nuldata, sizeof(void*)) == 0) return; + m_context->makeCurrent(this); + m_texture->setData(QOpenGLTexture::PixelFormat::RGBA, QOpenGLTexture::PixelType::UInt8, (const void*)img->get()); in_use->clear(); source.setRect(x, y, w, h); update(); diff --git a/src/qt/qt_hardwarerenderer.hpp b/src/qt/qt_hardwarerenderer.hpp index d2152def5..f64fa121f 100644 --- a/src/qt/qt_hardwarerenderer.hpp +++ b/src/qt/qt_hardwarerenderer.hpp @@ -3,6 +3,10 @@ #include #include #include +#include +#include +#include +#include #include #include #include @@ -25,6 +29,9 @@ private: bool wayland = false; QWidget* parentWidget{nullptr}; QOpenGLContext* m_context; + QOpenGLTexture* m_texture; + QOpenGLShaderProgram* m_prog; + QOpenGLTextureBlitter* m_blt; public: void resizeGL(int w, int h) override; void initializeGL() override; @@ -41,7 +48,8 @@ public: } ~HardwareRenderer() { - makeCurrent(); + m_context->makeCurrent(this); + if (m_blt) m_blt->destroy(); } enum class RenderType { diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 562944385..91fee7408 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -94,6 +95,9 @@ main_thread_fn() int main(int argc, char* argv[]) { QApplication app(argc, argv); + QSurfaceFormat fmt = QSurfaceFormat::defaultFormat(); + fmt.setSwapInterval(0); + QSurfaceFormat::setDefaultFormat(fmt); app.setStyle(new StyleOverride()); #ifdef __APPLE__ CocoaEventFilter cocoafilter; diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 15ab840d1..ed5d01e1d 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -203,6 +203,7 @@ void RendererStack::switchRenderer(Renderer renderer) { current->setFocusProxy(this); addWidget(current.get()); + this->setStyleSheet("background-color: black"); for (auto& in_use : buffers_in_use) in_use.clear(); diff --git a/src/qt/qt_softwarerenderer.cpp b/src/qt/qt_softwarerenderer.cpp index 9a64fe043..d9195d7b6 100644 --- a/src/qt/qt_softwarerenderer.cpp +++ b/src/qt/qt_softwarerenderer.cpp @@ -8,6 +8,9 @@ void SoftwareRenderer::paintEvent(QPaintEvent *event) { } void SoftwareRenderer::onBlit(const std::unique_ptr* img, int x, int y, int w, int h, std::atomic_flag* in_use) { + auto tval = this; + void* nuldata = 0; + if (memcmp(&tval, &nuldata, sizeof(void*)) == 0) return; memcpy(image.bits(), img->get(), 2048 * 2048 * 4); in_use->clear(); source.setRect(x, y, w, h); From 033abed3fecf8a35066935d0a8196f36ac3045f4 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 25 Dec 2021 21:49:25 +0600 Subject: [PATCH 147/278] Use shader-based hardware rendering --- src/qt/qt_hardwarerenderer.cpp | 60 +++++++++++++++++++++++++++++++--- 1 file changed, 56 insertions(+), 4 deletions(-) diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index 9c3df9c48..2e029f066 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -1,5 +1,6 @@ #include "qt_hardwarerenderer.hpp" #include +#include #include extern "C" { @@ -12,6 +13,9 @@ void HardwareRenderer::resizeGL(int w, int h) glViewport(0, 0, w, h); } +#define PROGRAM_VERTEX_ATTRIBUTE 0 +#define PROGRAM_TEXCOORD_ATTRIBUTE 1 + void HardwareRenderer::initializeGL() { m_context->makeCurrent(this); @@ -20,14 +24,62 @@ void HardwareRenderer::initializeGL() m_blt = new QOpenGLTextureBlitter; m_blt->setRedBlueSwizzle(true); m_blt->create(); + QOpenGLShader *vshader = new QOpenGLShader(QOpenGLShader::Vertex, this); + const char *vsrc = + "attribute highp vec4 vertex;\n" + "attribute mediump vec4 texCoord;\n" + "varying mediump vec4 texc;\n" + "uniform mediump mat4 matrix;\n" + "void main(void)\n" + "{\n" + " gl_Position = matrix * vertex;\n" + " texc = texCoord;\n" + "}\n"; + vshader->compileSourceCode(vsrc); + + QOpenGLShader *fshader = new QOpenGLShader(QOpenGLShader::Fragment, this); + const char *fsrc = + "uniform sampler2D texture;\n" + "varying mediump vec4 texc;\n" + "void main(void)\n" + "{\n" + " gl_FragColor = texture2D(texture, texc.st).bgra;\n" + "}\n"; + fshader->compileSourceCode(fsrc); + + m_prog = new QOpenGLShaderProgram; + m_prog->addShader(vshader); + m_prog->addShader(fshader); + m_prog->bindAttributeLocation("vertex", PROGRAM_VERTEX_ATTRIBUTE); + m_prog->bindAttributeLocation("texCoord", PROGRAM_TEXCOORD_ATTRIBUTE); + m_prog->link(); + + m_prog->bind(); + m_prog->setUniformValue("texture", 0); } void HardwareRenderer::paintGL() { m_context->makeCurrent(this); - m_blt->bind(); - QMatrix4x4 target = QOpenGLTextureBlitter::targetTransform(QRect(0, 0, 2048, 2048), source); - m_blt->blit(m_texture->textureId(), target, QOpenGLTextureBlitter::Origin::OriginTopLeft); - m_blt->release(); + QVector verts, texcoords; + QMatrix4x4 mat; + mat.setToIdentity(); + mat.ortho(QRect(0, 0, width(), height())); + verts.push_back(QVector2D((float)destination.x(), (float)destination.y())); + verts.push_back(QVector2D((float)destination.x(), (float)destination.y() + destination.height())); + verts.push_back(QVector2D((float)destination.x() + destination.width(), (float)destination.y() + destination.height())); + verts.push_back(QVector2D((float)destination.x() + destination.width(), (float)destination.y())); + texcoords.push_back(QVector2D((float)source.x() / 2048.f, (float)(source.y()) / 2048.f)); + texcoords.push_back(QVector2D((float)source.x() / 2048.f, (float)(source.y() + source.height()) / 2048.f)); + texcoords.push_back(QVector2D((float)(source.x() + source.width()) / 2048.f, (float)(source.y() + source.height()) / 2048.f)); + texcoords.push_back(QVector2D((float)(source.x() + source.width()) / 2048.f, (float)(source.y()) / 2048.f)); + + m_prog->setUniformValue("matrix", mat); + m_prog->enableAttributeArray(PROGRAM_VERTEX_ATTRIBUTE); + m_prog->enableAttributeArray(PROGRAM_TEXCOORD_ATTRIBUTE); + m_prog->setAttributeArray(PROGRAM_VERTEX_ATTRIBUTE, verts.data()); + m_prog->setAttributeArray(PROGRAM_TEXCOORD_ATTRIBUTE, texcoords.data()); + m_texture->bind(); + glDrawArrays(GL_TRIANGLE_FAN, 0, 4); } void HardwareRenderer::setRenderType(RenderType type) { From fa70dda2c004786536da6d4d092c739ea5c8fe0b Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 26 Dec 2021 00:49:21 +0600 Subject: [PATCH 148/278] Fix screenshots being cut off --- src/qt/qt_rendererstack.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index ed5d01e1d..8529f0f66 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -227,7 +227,7 @@ void RendererStack::blit(int x, int y, int w, int h) if (screenshots) { - video_screenshot((uint32_t *)imagebits, 0, 0, 2048); + video_screenshot((uint32_t *)imagebits, x, y, 2048); } video_blit_complete(); blitToRenderer(&imagebufs[currentBuf], sx, sy, sw, sh, &buffers_in_use[currentBuf]); From b1925183867b5a22e6b8a07ab85d441a4a4c75aa Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 26 Dec 2021 01:34:34 +0600 Subject: [PATCH 149/278] Respect filtering options --- src/qt/qt_hardwarerenderer.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index 2e029f066..e286cf52f 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -6,6 +6,7 @@ extern "C" { #include <86box/86box.h> #include <86box/plat.h> +#include <86box/video.h> } void HardwareRenderer::resizeGL(int w, int h) @@ -79,6 +80,7 @@ void HardwareRenderer::paintGL() { m_prog->setAttributeArray(PROGRAM_VERTEX_ATTRIBUTE, verts.data()); m_prog->setAttributeArray(PROGRAM_TEXCOORD_ATTRIBUTE, texcoords.data()); m_texture->bind(); + m_texture->setMinMagFilters(video_filter_method ? QOpenGLTexture::Linear : QOpenGLTexture::Nearest, video_filter_method ? QOpenGLTexture::Linear : QOpenGLTexture::Nearest); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); } From 33d2844de66bf5e9b48c41ffe9e6a396502ee371 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 26 Dec 2021 11:52:50 +0600 Subject: [PATCH 150/278] Fix OpenGL ES renderer not actually creating OpenGL ES contexts --- src/qt/qt_hardwarerenderer.cpp | 5 +++++ src/qt/qt_hardwarerenderer.hpp | 13 ++++++++----- src/qt/qt_rendererstack.cpp | 4 +--- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index e286cf52f..64dcbdd50 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -57,6 +57,11 @@ void HardwareRenderer::initializeGL() m_prog->bind(); m_prog->setUniformValue("texture", 0); + + pclog("OpenGL vendor: %s\n", glGetString(GL_VENDOR)); + pclog("OpenGL renderer: %s\n", glGetString(GL_RENDERER)); + pclog("OpenGL version: %s\n", glGetString(GL_VERSION)); + pclog("OpenGL shader language version: %s\n", glGetString(GL_SHADING_LANGUAGE_VERSION)); } void HardwareRenderer::paintGL() { diff --git a/src/qt/qt_hardwarerenderer.hpp b/src/qt/qt_hardwarerenderer.hpp index f64fa121f..296306f15 100644 --- a/src/qt/qt_hardwarerenderer.hpp +++ b/src/qt/qt_hardwarerenderer.hpp @@ -33,17 +33,23 @@ private: QOpenGLShaderProgram* m_prog; QOpenGLTextureBlitter* m_blt; public: + enum class RenderType { + OpenGL, + OpenGLES, + }; void resizeGL(int w, int h) override; void initializeGL() override; void paintGL() override; - HardwareRenderer(QWidget* parent = nullptr) + HardwareRenderer(QWidget* parent = nullptr, RenderType rtype = RenderType::OpenGL) : QOpenGLWindow(QOpenGLWindow::NoPartialUpdate, parent->windowHandle()), QOpenGLFunctions() { setMinimumSize(QSize(16, 16)); setFlags(Qt::FramelessWindowHint); parentWidget = parent; + setRenderType(rtype); m_context = new QOpenGLContext(); + m_context->setFormat(format()); m_context->create(); } ~HardwareRenderer() @@ -52,10 +58,7 @@ public: if (m_blt) m_blt->destroy(); } - enum class RenderType { - OpenGL, - OpenGLES, - }; + void setRenderType(RenderType type); public slots: diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 8529f0f66..bdbf3529c 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -185,16 +185,14 @@ void RendererStack::switchRenderer(Renderer renderer) { this->createWinId(); auto hw = new HardwareRenderer(this); connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit, Qt::QueuedConnection); - hw->setRenderType(HardwareRenderer::RenderType::OpenGL); current.reset(this->createWindowContainer(hw, this)); break; } case Renderer::OpenGLES: { this->createWinId(); - auto hw = new HardwareRenderer(this); + auto hw = new HardwareRenderer(this, HardwareRenderer::RenderType::OpenGLES); connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit, Qt::QueuedConnection); - hw->setRenderType(HardwareRenderer::RenderType::OpenGLES); current.reset(this->createWindowContainer(hw, this)); break; } From b40b3a56ae5b4fe14a98c2ed9ea3260e03d16316 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 26 Dec 2021 15:48:06 +0600 Subject: [PATCH 151/278] Compare against MAP_FAILED for Qt plat_mmap --- src/qt/qt_platform.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index a41509b9c..1c7a6eded 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -316,8 +316,7 @@ plat_mmap(size_t size, uint8_t executable) #else void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE, 0, 0); #endif - auto retval = *reinterpret_cast(ret); - return (retval < 0) ? nullptr : ret; + return (ret == MAP_FAILED) ? nullptr : ret; #endif } From 814aaf08a743a8421809fe3aa1b8454990b285b0 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Mon, 27 Dec 2021 16:32:03 +0600 Subject: [PATCH 152/278] Add OpenGL 3.0 Core renderer --- src/qt/qt.c | 5 ++ src/qt/qt_hardwarerenderer.cpp | 85 +++++++++++++++++++++++++++++----- src/qt/qt_hardwarerenderer.hpp | 16 +++++-- src/qt/qt_mainwindow.cpp | 24 ++++++++++ src/qt/qt_mainwindow.hpp | 2 + src/qt/qt_mainwindow.ui | 24 +++++----- src/qt/qt_rendererstack.cpp | 8 ++++ src/qt/qt_rendererstack.hpp | 1 + 8 files changed, 137 insertions(+), 28 deletions(-) diff --git a/src/qt/qt.c b/src/qt/qt.c index 7bbc91036..7207a67e2 100644 --- a/src/qt/qt.c +++ b/src/qt/qt.c @@ -79,6 +79,8 @@ plat_vidapi(char* api) { return 1; } else if (!strcasecmp(api, "qt_opengles")) { return 2; + } else if (!strcasecmp(api, "qt_opengl3")) { + return 3; } return 0; @@ -97,6 +99,9 @@ char* plat_vidapi_name(int api) { case 2: name = "qt_opengles"; break; + case 3: + name = "qt_opengl3"; + break; default: fatal("Unknown renderer: %i\n", api); break; diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index 64dcbdd50..ac0acb8b5 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -27,16 +27,36 @@ void HardwareRenderer::initializeGL() m_blt->create(); QOpenGLShader *vshader = new QOpenGLShader(QOpenGLShader::Vertex, this); const char *vsrc = - "attribute highp vec4 vertex;\n" - "attribute mediump vec4 texCoord;\n" + "attribute highp vec4 VertexCoord;\n" + "attribute mediump vec4 TexCoord;\n" "varying mediump vec4 texc;\n" - "uniform mediump mat4 matrix;\n" + "uniform mediump mat4 MVPMatrix;\n" "void main(void)\n" "{\n" - " gl_Position = matrix * vertex;\n" - " texc = texCoord;\n" + " gl_Position = MVPMatrix * VertexCoord;\n" + " texc = TexCoord;\n" "}\n"; - vshader->compileSourceCode(vsrc); + QString vsrccore = + "in highp vec4 VertexCoord;\n" + "in mediump vec4 TexCoord;\n" + "out mediump vec4 texc;\n" + "uniform mediump mat4 MVPMatrix;\n" + "void main(void)\n" + "{\n" + " gl_Position = MVPMatrix * VertexCoord;\n" + " texc = TexCoord;\n" + "}\n"; + if (m_context->isOpenGLES() && m_context->format().version() >= qMakePair(3, 0)) + { + vsrccore.prepend("#version 300 es\n"); + vshader->compileSourceCode(vsrccore); + } + else if (m_context->format().version() >= qMakePair(3, 0) && m_context->format().profile() == QSurfaceFormat::CoreProfile) + { + vsrccore.prepend("#version 130\n"); + vshader->compileSourceCode(vsrccore); + } + else vshader->compileSourceCode(vsrc); QOpenGLShader *fshader = new QOpenGLShader(QOpenGLShader::Fragment, this); const char *fsrc = @@ -46,18 +66,47 @@ void HardwareRenderer::initializeGL() "{\n" " gl_FragColor = texture2D(texture, texc.st).bgra;\n" "}\n"; - fshader->compileSourceCode(fsrc); + QString fsrccore = + "uniform sampler2D texture;\n" + "in mediump vec4 texc;\n" + "out highp vec4 FragColor;\n" + "void main(void)\n" + "{\n" + " FragColor = texture2D(texture, texc.st).bgra;\n" + "}\n"; + if (m_context->isOpenGLES() && m_context->format().version() >= qMakePair(3, 0)) + { + fsrccore.prepend("#version 300 es\n"); + fshader->compileSourceCode(fsrccore); + } + else if (m_context->format().version() >= qMakePair(3, 0) && m_context->format().profile() == QSurfaceFormat::CoreProfile) + { + fsrccore.prepend("#version 130\n"); + fshader->compileSourceCode(fsrccore); + } + else fshader->compileSourceCode(fsrc); m_prog = new QOpenGLShaderProgram; m_prog->addShader(vshader); m_prog->addShader(fshader); - m_prog->bindAttributeLocation("vertex", PROGRAM_VERTEX_ATTRIBUTE); - m_prog->bindAttributeLocation("texCoord", PROGRAM_TEXCOORD_ATTRIBUTE); + m_prog->bindAttributeLocation("VertexCoord", PROGRAM_VERTEX_ATTRIBUTE); + m_prog->bindAttributeLocation("TexCoord", PROGRAM_TEXCOORD_ATTRIBUTE); m_prog->link(); m_prog->bind(); m_prog->setUniformValue("texture", 0); + if (m_context->format().version() >= qMakePair(3, 0) && m_vao.create()) { + m_vao.bind(); + } + + m_vbo[PROGRAM_VERTEX_ATTRIBUTE].create(); + m_vbo[PROGRAM_VERTEX_ATTRIBUTE].bind(); + m_vbo[PROGRAM_VERTEX_ATTRIBUTE].allocate(sizeof(QVector2D) * 4); + m_vbo[PROGRAM_TEXCOORD_ATTRIBUTE].create(); + m_vbo[PROGRAM_TEXCOORD_ATTRIBUTE].bind(); + m_vbo[PROGRAM_TEXCOORD_ATTRIBUTE].allocate(sizeof(QVector2D) * 4); + pclog("OpenGL vendor: %s\n", glGetString(GL_VENDOR)); pclog("OpenGL renderer: %s\n", glGetString(GL_RENDERER)); pclog("OpenGL version: %s\n", glGetString(GL_VERSION)); @@ -78,12 +127,15 @@ void HardwareRenderer::paintGL() { texcoords.push_back(QVector2D((float)source.x() / 2048.f, (float)(source.y() + source.height()) / 2048.f)); texcoords.push_back(QVector2D((float)(source.x() + source.width()) / 2048.f, (float)(source.y() + source.height()) / 2048.f)); texcoords.push_back(QVector2D((float)(source.x() + source.width()) / 2048.f, (float)(source.y()) / 2048.f)); + m_vbo[PROGRAM_VERTEX_ATTRIBUTE].bind(); m_vbo[PROGRAM_VERTEX_ATTRIBUTE].write(0, verts.data(), sizeof(QVector2D) * 4); m_vbo[PROGRAM_VERTEX_ATTRIBUTE].release(); + m_vbo[PROGRAM_TEXCOORD_ATTRIBUTE].bind(); m_vbo[PROGRAM_TEXCOORD_ATTRIBUTE].write(0, texcoords.data(), sizeof(QVector2D) * 4); m_vbo[PROGRAM_TEXCOORD_ATTRIBUTE].release(); - m_prog->setUniformValue("matrix", mat); + m_prog->setUniformValue("MVPMatrix", mat); m_prog->enableAttributeArray(PROGRAM_VERTEX_ATTRIBUTE); m_prog->enableAttributeArray(PROGRAM_TEXCOORD_ATTRIBUTE); - m_prog->setAttributeArray(PROGRAM_VERTEX_ATTRIBUTE, verts.data()); - m_prog->setAttributeArray(PROGRAM_TEXCOORD_ATTRIBUTE, texcoords.data()); + + m_vbo[PROGRAM_VERTEX_ATTRIBUTE].bind(); m_prog->setAttributeBuffer(PROGRAM_VERTEX_ATTRIBUTE, GL_FLOAT, 0, 2, 0); m_vbo[PROGRAM_VERTEX_ATTRIBUTE].release(); + m_vbo[PROGRAM_TEXCOORD_ATTRIBUTE].bind(); m_prog->setAttributeBuffer(PROGRAM_TEXCOORD_ATTRIBUTE, GL_FLOAT, 0, 2, 0); m_vbo[PROGRAM_TEXCOORD_ATTRIBUTE].release(); m_texture->bind(); m_texture->setMinMagFilters(video_filter_method ? QOpenGLTexture::Linear : QOpenGLTexture::Nearest, video_filter_method ? QOpenGLTexture::Linear : QOpenGLTexture::Nearest); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); @@ -92,6 +144,9 @@ void HardwareRenderer::paintGL() { void HardwareRenderer::setRenderType(RenderType type) { QSurfaceFormat format; switch (type) { + case RenderType::OpenGL3: + format.setVersion(3, 0); + format.setProfile(QSurfaceFormat::CoreProfile); case RenderType::OpenGL: format.setRenderableType(QSurfaceFormat::OpenGL); break; @@ -107,6 +162,12 @@ void HardwareRenderer::onBlit(const std::unique_ptr* img, int x, int y, auto tval = this; void* nuldata = 0; if (memcmp(&tval, &nuldata, sizeof(void*)) == 0) return; + if (!m_texture || !img || !img->get() || (m_texture && !m_texture->isCreated())) + { + in_use->clear(); + source.setRect(x, y, w, h); + return; + } m_context->makeCurrent(this); m_texture->setData(QOpenGLTexture::PixelFormat::RGBA, QOpenGLTexture::PixelType::UInt8, (const void*)img->get()); in_use->clear(); diff --git a/src/qt/qt_hardwarerenderer.hpp b/src/qt/qt_hardwarerenderer.hpp index 296306f15..6e2103071 100644 --- a/src/qt/qt_hardwarerenderer.hpp +++ b/src/qt/qt_hardwarerenderer.hpp @@ -1,8 +1,10 @@ #pragma once #include +#include #include #include +#include #include #include #include @@ -29,13 +31,16 @@ private: bool wayland = false; QWidget* parentWidget{nullptr}; QOpenGLContext* m_context; - QOpenGLTexture* m_texture; - QOpenGLShaderProgram* m_prog; - QOpenGLTextureBlitter* m_blt; + QOpenGLTexture* m_texture{nullptr}; + QOpenGLShaderProgram* m_prog{nullptr}; + QOpenGLTextureBlitter* m_blt{nullptr}; + QOpenGLBuffer m_vbo[2]; + QOpenGLVertexArrayObject m_vao; public: enum class RenderType { OpenGL, OpenGLES, + OpenGL3, }; void resizeGL(int w, int h) override; void initializeGL() override; @@ -56,6 +61,11 @@ public: { m_context->makeCurrent(this); if (m_blt) m_blt->destroy(); + m_prog->release(); + delete m_prog; + m_prog = nullptr; + m_context->doneCurrent(); + delete m_context; } diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 49394a06b..00128c187 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -4,6 +4,9 @@ #include "qt_specifydimensions.h" #include "qt_soundgain.hpp" +#include "qt_rendererstack.hpp" +#include "qt_renderercomon.hpp" + extern "C" { #include <86box/86box.h> #include <86box/config.h> @@ -36,6 +39,9 @@ extern "C" { #include "qt_mediamenu.hpp" #ifdef __unix__ +#ifdef WAYLAND +#include "wl_mouse.hpp" +#endif #include #include #undef KeyPress @@ -163,11 +169,16 @@ MainWindow::MainWindow(QWidget *parent) : ui->stackedWidget->switchRenderer(RendererStack::Renderer::OpenGLES); ui->actionHardware_Renderer_OpenGL_ES->setChecked(true); break; + case 3: + ui->stackedWidget->switchRenderer(RendererStack::Renderer::OpenGL3); + ui->actionOpenGL_3_0_Core->setChecked(true); + break; } actGroup = new QActionGroup(this); actGroup->addAction(ui->actionSoftware_Renderer); actGroup->addAction(ui->actionHardware_Renderer_OpenGL); actGroup->addAction(ui->actionHardware_Renderer_OpenGL_ES); + actGroup->addAction(ui->actionOpenGL_3_0_Core); switch (scale) { case 0: ui->action0_5x->setChecked(true); @@ -1028,6 +1039,7 @@ void MainWindow::on_actionSoftware_Renderer_triggered() { ui->stackedWidget->switchRenderer(RendererStack::Renderer::Software); ui->actionHardware_Renderer_OpenGL->setChecked(false); ui->actionHardware_Renderer_OpenGL_ES->setChecked(false); + ui->actionOpenGL_3_0_Core->setChecked(false); vid_api = 0; } @@ -1035,6 +1047,7 @@ void MainWindow::on_actionHardware_Renderer_OpenGL_triggered() { ui->stackedWidget->switchRenderer(RendererStack::Renderer::OpenGL); ui->actionSoftware_Renderer->setChecked(false); ui->actionHardware_Renderer_OpenGL_ES->setChecked(false); + ui->actionOpenGL_3_0_Core->setChecked(false); vid_api = 1; } @@ -1042,6 +1055,7 @@ void MainWindow::on_actionHardware_Renderer_OpenGL_ES_triggered() { ui->stackedWidget->switchRenderer(RendererStack::Renderer::OpenGLES); ui->actionSoftware_Renderer->setChecked(false); ui->actionHardware_Renderer_OpenGL->setChecked(false); + ui->actionOpenGL_3_0_Core->setChecked(false); vid_api = 2; } @@ -1343,3 +1357,13 @@ void MainWindow::setSendKeyboardInput(bool enabled) { send_keyboard_input = enabled; } + +void MainWindow::on_actionOpenGL_3_0_Core_triggered() +{ + ui->stackedWidget->switchRenderer(RendererStack::Renderer::OpenGL3); + ui->actionSoftware_Renderer->setChecked(false); + ui->actionHardware_Renderer_OpenGL->setChecked(false); + ui->actionHardware_Renderer_OpenGL_ES->setChecked(false); + ui->actionOpenGL_3_0_Core->setChecked(true); + vid_api = 3; +} diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 126ecaccd..559352df3 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -99,6 +99,8 @@ private slots: void on_actionSound_gain_triggered(); + void on_actionOpenGL_3_0_Core_triggered(); + protected: void keyPressEvent(QKeyEvent* event) override; void keyReleaseEvent(QKeyEvent* event) override; diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 35471ddc3..6eff44fc6 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -37,7 +37,7 @@ 0 - + @@ -47,7 +47,7 @@ 0 0 724 - 19 + 22 @@ -87,6 +87,7 @@ + @@ -511,19 +512,16 @@ Sound gain... + + + true + + + OpenGL 3.0 Core + + - - HardwareRenderer - QOpenGLWidget -
qt_hardwarerenderer.hpp
-
- - SoftwareRenderer - QWidget -
qt_softwarerenderer.hpp
- 1 -
RendererStack QStackedWidget diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index bdbf3529c..d165c007b 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -196,6 +196,14 @@ void RendererStack::switchRenderer(Renderer renderer) { current.reset(this->createWindowContainer(hw, this)); break; } + case Renderer::OpenGL3: + { + this->createWinId(); + auto hw = new HardwareRenderer(this, HardwareRenderer::RenderType::OpenGL3); + connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit, Qt::QueuedConnection); + current.reset(this->createWindowContainer(hw, this)); + break; + } } current->setFocusPolicy(Qt::NoFocus); current->setFocusProxy(this); diff --git a/src/qt/qt_rendererstack.hpp b/src/qt/qt_rendererstack.hpp index a512fb7e1..5edd40f08 100644 --- a/src/qt/qt_rendererstack.hpp +++ b/src/qt/qt_rendererstack.hpp @@ -39,6 +39,7 @@ public: Software, OpenGL, OpenGLES, + OpenGL3 }; void switchRenderer(Renderer renderer); From 7a90cb4c8b1f3a425c5e86dbc5bc4297115a1ebd Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Mon, 27 Dec 2021 14:25:18 +0200 Subject: [PATCH 153/278] qt: add missing include --- src/qt/qt_mainwindow.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 00128c187..29ebd40a1 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -30,6 +30,7 @@ extern "C" { #include #include #include +#include #include #include From 98c5115b99b345eed60b7aab8420ee24687542a6 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 28 Dec 2021 16:47:10 +0600 Subject: [PATCH 154/278] Implement Preferences dialog (except language setting) --- src/qt/CMakeLists.txt | 3 + src/qt/qt_machinestatus.cpp | 27 ++++--- src/qt/qt_machinestatus.hpp | 2 + src/qt/qt_mainwindow.cpp | 8 ++ src/qt/qt_mainwindow.hpp | 3 + src/qt/qt_mainwindow.ui | 7 ++ src/qt/qt_progsettings.cpp | 94 ++++++++++++++++++++++ src/qt/qt_progsettings.hpp | 30 +++++++ src/qt/qt_progsettings.ui | 112 +++++++++++++++++++++++++++ src/qt/qt_settings.cpp | 4 +- src/qt/qt_settingsfloppycdrom.cpp | 11 +-- src/qt/qt_settingsharddisks.cpp | 3 +- src/qt/qt_settingsotherremovable.cpp | 9 ++- 13 files changed, 291 insertions(+), 22 deletions(-) create mode 100644 src/qt/qt_progsettings.cpp create mode 100644 src/qt/qt_progsettings.hpp create mode 100644 src/qt/qt_progsettings.ui diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 1ba132846..571d9519d 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -103,6 +103,9 @@ add_library(ui STATIC qt_styleoverride.cpp qt_styleoverride.hpp + qt_progsettings.hpp + qt_progsettings.cpp + qt_progsettings.ui ../qt_resources.qrc ) diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index e873744a7..1f32294df 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -33,6 +33,7 @@ extern uint64_t tsc; #include "qt_mediamenu.hpp" #include "qt_mainwindow.hpp" #include "qt_soundgain.hpp" +#include "qt_progsettings.hpp" #include @@ -152,20 +153,20 @@ struct MachineStatus::States { Pixmaps pixmaps; States(QObject* parent) { - pixmaps.cartridge.load(":/settings/win/icons/cartridge%1.ico"); - pixmaps.cassette.load(":/settings/win/icons/cassette%1.ico"); - pixmaps.floppy_disabled.normal = QIcon(QStringLiteral(":/settings/win/icons/floppy_disabled.ico")).pixmap(pixmap_size); + pixmaps.cartridge.load(ProgSettings::getIconSetPath() + "/cartridge%1.ico"); + pixmaps.cassette.load(ProgSettings::getIconSetPath() + "/cassette%1.ico"); + pixmaps.floppy_disabled.normal = QIcon(ProgSettings::getIconSetPath() + QStringLiteral("/floppy_disabled.ico")).pixmap(pixmap_size); pixmaps.floppy_disabled.active = pixmaps.floppy_disabled.normal; pixmaps.floppy_disabled.empty = pixmaps.floppy_disabled.normal; pixmaps.floppy_disabled.empty_active = pixmaps.floppy_disabled.normal; - pixmaps.floppy_525.load(":/settings/win/icons/floppy_525%1.ico"); - pixmaps.floppy_35.load(":/settings/win/icons/floppy_35%1.ico"); - pixmaps.cdrom.load(":/settings/win/icons/cdrom%1.ico"); - pixmaps.zip.load(":/settings/win/icons/zip%1.ico"); - pixmaps.mo.load(":/settings/win/icons/mo%1.ico"); - pixmaps.hd.load(":/settings/win/icons/hard_disk%1.ico"); - pixmaps.net.load(":/settings/win/icons/network%1.ico"); - pixmaps.sound = QIcon(":/settings/win/icons/sound.ico").pixmap(pixmap_size); + pixmaps.floppy_525.load(ProgSettings::getIconSetPath() + "/floppy_525%1.ico"); + pixmaps.floppy_35.load(ProgSettings::getIconSetPath() + "/floppy_35%1.ico"); + pixmaps.cdrom.load(ProgSettings::getIconSetPath() + "/cdrom%1.ico"); + pixmaps.zip.load(ProgSettings::getIconSetPath() + "/zip%1.ico"); + pixmaps.mo.load(ProgSettings::getIconSetPath() + "/mo%1.ico"); + pixmaps.hd.load(ProgSettings::getIconSetPath() + "/hard_disk%1.ico"); + pixmaps.net.load(ProgSettings::getIconSetPath() + "/network%1.ico"); + pixmaps.sound = QIcon(ProgSettings::getIconSetPath() + "/sound.ico").pixmap(pixmap_size); cartridge[0].pixmaps = &pixmaps.cartridge; cartridge[1].pixmaps = &pixmaps.cartridge; @@ -531,6 +532,10 @@ void MachineStatus::message(const QString &msg) { d->text->setText(msg); } +QString MachineStatus::getMessage() { + return d->text->text(); +} + void MachineStatus::updateTip(int tag) { int category = tag & 0xfffffff0; diff --git a/src/qt/qt_machinestatus.hpp b/src/qt/qt_machinestatus.hpp index 6c983cff2..6f83234df 100644 --- a/src/qt/qt_machinestatus.hpp +++ b/src/qt/qt_machinestatus.hpp @@ -40,6 +40,8 @@ public: static void iterateCDROM(const std::function& cb); static void iterateZIP(const std::function& cb); static void iterateMO(const std::function& cb); + + QString getMessage(); public slots: void refresh(QStatusBar* sbar); void setActivity(int tag, bool active); diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 29ebd40a1..0d89d44f4 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -3,6 +3,7 @@ #include "qt_specifydimensions.h" #include "qt_soundgain.hpp" +#include "qt_progsettings.hpp" #include "qt_rendererstack.hpp" #include "qt_renderercomon.hpp" @@ -1368,3 +1369,10 @@ void MainWindow::on_actionOpenGL_3_0_Core_triggered() ui->actionOpenGL_3_0_Core->setChecked(true); vid_api = 3; } + +void MainWindow::on_actionPreferences_triggered() +{ + ProgSettings progsettings(this); + progsettings.exec(); +} + diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 559352df3..7683c526b 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -101,6 +101,8 @@ private slots: void on_actionOpenGL_3_0_Core_triggered(); + void on_actionPreferences_triggered(); + protected: void keyPressEvent(QKeyEvent* event) override; void keyReleaseEvent(QKeyEvent* event) override; @@ -120,6 +122,7 @@ private: bool shownonce = false; friend class SpecifyDimensions; + friend class ProgSettings; }; #endif // QT_MAINWINDOW_HPP diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 6eff44fc6..8d4a35d09 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -75,6 +75,8 @@ + + @@ -520,6 +522,11 @@ OpenGL 3.0 Core
+ + + Preferences + + diff --git a/src/qt/qt_progsettings.cpp b/src/qt/qt_progsettings.cpp new file mode 100644 index 000000000..930efb6f3 --- /dev/null +++ b/src/qt/qt_progsettings.cpp @@ -0,0 +1,94 @@ +#include "qt_progsettings.hpp" +#include "ui_qt_progsettings.h" +#include "qt_mainwindow.hpp" +#include "ui_qt_mainwindow.h" +#include "qt_machinestatus.hpp" + +#include +#include +#include + +extern "C" +{ +#include <86box/86box.h> +#include <86box/config.h> +#include <86box/plat.h> +} + + +static QMap iconset_to_qt; +extern MainWindow* main_window; + +QString ProgSettings::getIconSetPath() +{ + QString roms_root; + if (rom_path[0]) + roms_root = rom_path; + else { + roms_root = QString("%1/roms").arg(exe_path); + } + + if (iconset_to_qt.isEmpty()) + { + iconset_to_qt.insert("", ":/settings/win/icons"); + QDir dir(roms_root + "/icons/"); + if (dir.isReadable()) + { + auto dirList = dir.entryList(QDir::AllDirs | QDir::Executable | QDir::Readable); + for (auto &curIconSet : dirList) + { + if (curIconSet == "." || curIconSet == "..") continue; + iconset_to_qt.insert(curIconSet, (dir.canonicalPath() + '/') + curIconSet); + } + } + } + return iconset_to_qt[icon_set]; +} + +ProgSettings::ProgSettings(QWidget *parent) : + QDialog(parent), + ui(new Ui::ProgSettings) +{ + ui->setupUi(this); + (void)getIconSetPath(); + ui->comboBox->setItemData(0, ""); + ui->comboBox->setCurrentIndex(0); + for (auto i = iconset_to_qt.begin(); i != iconset_to_qt.end(); i++) + { + if (i.key() == "") continue; + QFile iconfile(i.value() + "/iconinfo.txt"); + iconfile.open(QFile::ReadOnly); + QString friendlyName; + QString iconsetinfo(iconfile.readAll()); + iconfile.close(); + if (iconsetinfo.isEmpty()) friendlyName = i.key(); + else friendlyName = iconsetinfo.split('\n')[0]; + ui->comboBox->addItem(friendlyName, i.key()); + if (strcmp(icon_set, i.key().toUtf8().data()) == 0) + { + ui->comboBox->setCurrentIndex(ui->comboBox->findData(i.key())); + } + } +} + +void ProgSettings::accept() +{ + strcpy(icon_set, ui->comboBox->currentData().toString().toUtf8().data()); + + QString msg = main_window->status->getMessage(); + main_window->status.reset(new MachineStatus(main_window)); + main_window->refreshMediaMenu(); + main_window->status->message(msg); + QDialog::accept(); +} + +ProgSettings::~ProgSettings() +{ + delete ui; +} + +void ProgSettings::on_pushButton_released() +{ + ui->comboBox->setCurrentIndex(0); +} + diff --git a/src/qt/qt_progsettings.hpp b/src/qt/qt_progsettings.hpp new file mode 100644 index 000000000..0d7800370 --- /dev/null +++ b/src/qt/qt_progsettings.hpp @@ -0,0 +1,30 @@ +#ifndef QT_PROGSETTINGS_HPP +#define QT_PROGSETTINGS_HPP + +#include + +namespace Ui { +class ProgSettings; +} + +class ProgSettings : public QDialog +{ + Q_OBJECT + +public: + explicit ProgSettings(QWidget *parent = nullptr); + ~ProgSettings(); + static QString getIconSetPath(); + +protected slots: + void accept() override; +private slots: + void on_pushButton_released(); + +private: + Ui::ProgSettings *ui; + + friend class MainWindow; +}; + +#endif // QT_PROGSETTINGS_HPP diff --git a/src/qt/qt_progsettings.ui b/src/qt/qt_progsettings.ui new file mode 100644 index 000000000..6adb8bcfc --- /dev/null +++ b/src/qt/qt_progsettings.ui @@ -0,0 +1,112 @@ + + + ProgSettings + + + + 0 + 0 + 400 + 300 + + + + Preferences + + + + + 30 + 240 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 20 + 80 + 351 + 25 + + + + false + + + + (Default) + + + + + + + 20 + 60 + 54 + 17 + + + + Icon set: + + + + + + 290 + 110 + 80 + 25 + + + + Default + + + + + + + buttonBox + accepted() + ProgSettings + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + ProgSettings + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/qt/qt_settings.cpp b/src/qt/qt_settings.cpp index 7284d0cad..b06495ce8 100644 --- a/src/qt/qt_settings.cpp +++ b/src/qt/qt_settings.cpp @@ -13,6 +13,8 @@ #include "qt_settingsotherremovable.hpp" #include "qt_settingsotherperipherals.hpp" +#include "qt_progsettings.hpp" + extern "C" { #include <86box/86box.h> @@ -64,7 +66,7 @@ QVariant SettingsModel::data(const QModelIndex &index, int role) const { case Qt::DisplayRole: return pages.at(index.row()); case Qt::DecorationRole: - return QIcon(QString(":/settings/win/icons/%1.ico").arg(page_icons[index.row()])); + return QIcon(QString("%1/%2.ico").arg(ProgSettings::getIconSetPath(), page_icons[index.row()])); default: return {}; } diff --git a/src/qt/qt_settingsfloppycdrom.cpp b/src/qt/qt_settingsfloppycdrom.cpp index f6f0fb94c..02c890125 100644 --- a/src/qt/qt_settingsfloppycdrom.cpp +++ b/src/qt/qt_settingsfloppycdrom.cpp @@ -11,15 +11,16 @@ extern "C" { #include "qt_models_common.hpp" #include "qt_harddrive_common.hpp" +#include "qt_progsettings.hpp" static void setFloppyType(QAbstractItemModel* model, const QModelIndex& idx, int type) { QIcon icon; if (type == 0) { - icon = QIcon(":/settings/win/icons/floppy_disabled.ico"); + icon = QIcon(ProgSettings::getIconSetPath() + "/floppy_disabled.ico"); } else if (type >= 1 && type <= 6) { - icon = QIcon(":/settings/win/icons/floppy_525.ico"); + icon = QIcon(ProgSettings::getIconSetPath() + "/floppy_525.ico"); } else { - icon = QIcon(":/settings/win/icons/floppy_35.ico"); + icon = QIcon(ProgSettings::getIconSetPath() + "/floppy_35.ico"); } model->setData(idx, fdd_getname(type)); @@ -31,11 +32,11 @@ static void setCDROMBus(QAbstractItemModel* model, const QModelIndex& idx, uint8 QIcon icon; switch (bus) { case CDROM_BUS_DISABLED: - icon = QIcon(":/settings/win/icons/cdrom_disabled.ico"); + icon = QIcon(ProgSettings::getIconSetPath() + "/cdrom_disabled.ico"); break; case CDROM_BUS_ATAPI: case CDROM_BUS_SCSI: - icon = QIcon(":/settings/win/icons/cdrom.ico"); + icon = QIcon(ProgSettings::getIconSetPath() + "/cdrom.ico"); break; } diff --git a/src/qt/qt_settingsharddisks.cpp b/src/qt/qt_settingsharddisks.cpp index ddd419636..f3e399ef8 100644 --- a/src/qt/qt_settingsharddisks.cpp +++ b/src/qt/qt_settingsharddisks.cpp @@ -10,6 +10,7 @@ extern "C" { #include "qt_harddiskdialog.hpp" #include "qt_harddrive_common.hpp" +#include "qt_progsettings.hpp" const int ColumnBus = 0; const int ColumnFilename = 1; @@ -54,7 +55,7 @@ static void addRow(QAbstractItemModel* model, hard_disk_t* hd) { QString busName = Harddrives::BusChannelName(hd->bus, hd->channel); model->setData(model->index(row, ColumnBus), busName); - model->setData(model->index(row, ColumnBus), QIcon(":/settings/win/icons/hard_disk.ico"), Qt::DecorationRole); + model->setData(model->index(row, ColumnBus), QIcon(ProgSettings::getIconSetPath() + "/hard_disk.ico"), Qt::DecorationRole); model->setData(model->index(row, ColumnBus), hd->bus, DataBus); model->setData(model->index(row, ColumnBus), hd->channel, DataBusChannel); QString fileName = hd->fn; diff --git a/src/qt/qt_settingsotherremovable.cpp b/src/qt/qt_settingsotherremovable.cpp index f101afd14..64bc8acdc 100644 --- a/src/qt/qt_settingsotherremovable.cpp +++ b/src/qt/qt_settingsotherremovable.cpp @@ -12,6 +12,7 @@ extern "C" { #include "qt_models_common.hpp" #include "qt_harddrive_common.hpp" +#include "qt_progsettings.hpp" static QString moDriveTypeName(int i) { return QString("%1 %2 %3").arg(mo_drive_types[i].vendor, mo_drive_types[i].model, mo_drive_types[i].revision); @@ -21,11 +22,11 @@ static void setMOBus(QAbstractItemModel* model, const QModelIndex& idx, uint8_t QIcon icon; switch (bus) { case MO_BUS_DISABLED: - icon = QIcon(":/settings/win/icons/mo_disabled.ico"); + icon = QIcon(ProgSettings::getIconSetPath() + "/mo_disabled.ico"); break; case MO_BUS_ATAPI: case MO_BUS_SCSI: - icon = QIcon(":/settings/win/icons/mo.ico"); + icon = QIcon(ProgSettings::getIconSetPath() + "/mo.ico"); break; } @@ -50,11 +51,11 @@ static void setZIPBus(QAbstractItemModel* model, const QModelIndex& idx, uint8_t QIcon icon; switch (bus) { case ZIP_BUS_DISABLED: - icon = QIcon(":/settings/win/icons/zip_disabled.ico"); + icon = QIcon(ProgSettings::getIconSetPath() + "/zip_disabled.ico"); break; case ZIP_BUS_ATAPI: case ZIP_BUS_SCSI: - icon = QIcon(":/settings/win/icons/zip.ico"); + icon = QIcon(ProgSettings::getIconSetPath() + "/zip.ico"); break; } From 6b07e1094711622fe40015c977d8cf4e68566b21 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 28 Dec 2021 22:06:46 +0600 Subject: [PATCH 155/278] Rename Preferences to "Program preferences..." Machine settings is now named "Preferences" on macOS instead --- src/qt/qt_mainwindow.ui | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 8d4a35d09..f56576714 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -229,6 +229,9 @@ Settings + + QAction::PreferencesRole +
@@ -524,7 +527,10 @@ - Preferences + Program preferences... + + + QAction::NoRole From 1975c767302127e9111265ca40ea625bff545a10 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Wed, 29 Dec 2021 07:50:25 +0200 Subject: [PATCH 156/278] qt: restore full screen functionality on windows --- src/qt/qt_mainwindow.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 0d89d44f4..900dc11d8 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -939,8 +939,6 @@ void MainWindow::on_actionFullscreen_triggered() { showFullScreen(); video_fullscreen = 1; } - - ui->stackedWidget->switchRenderer((RendererStack::Renderer)vid_api); } void MainWindow::getTitle_(wchar_t *title) From 1bdff37e3865b37db76cb8c07778b500d8f9ba7c Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 29 Dec 2021 23:49:09 +0600 Subject: [PATCH 157/278] * Turned the software renderer into a window as well * Fix inability to move window on GNOME * Fix status bar icons being frozen after icon set switch --- src/qt/qt_hardwarerenderer.cpp | 18 +++--------------- src/qt/qt_hardwarerenderer.hpp | 1 - src/qt/qt_main.cpp | 8 -------- src/qt/qt_mainwindow.cpp | 15 +++++++-------- src/qt/qt_progsettings.cpp | 4 ++++ src/qt/qt_renderercomon.cpp | 26 ++++++++++++++++++++++++++ src/qt/qt_renderercomon.hpp | 2 ++ src/qt/qt_rendererstack.cpp | 9 ++++++++- src/qt/qt_rendererstack.hpp | 2 ++ src/qt/qt_softwarerenderer.cpp | 12 ++++++++++-- src/qt/qt_softwarerenderer.hpp | 4 +++- 11 files changed, 65 insertions(+), 36 deletions(-) diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index ac0acb8b5..02f19f28b 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -183,19 +183,7 @@ void HardwareRenderer::resizeEvent(QResizeEvent *event) { bool HardwareRenderer::event(QEvent *event) { - switch (event->type()) - { - default: - return QOpenGLWindow::event(event); - case QEvent::MouseButtonPress: - case QEvent::MouseMove: - case QEvent::MouseButtonRelease: - case QEvent::KeyPress: - case QEvent::KeyRelease: - case QEvent::Wheel: - case QEvent::Enter: - case QEvent::Leave: - return QApplication::sendEvent(parentWidget, event); - } - return false; + bool res = false; + if (!eventDelegate(event, res)) return QOpenGLWindow::event(event); + return res; } diff --git a/src/qt/qt_hardwarerenderer.hpp b/src/qt/qt_hardwarerenderer.hpp index 6e2103071..4fb132da6 100644 --- a/src/qt/qt_hardwarerenderer.hpp +++ b/src/qt/qt_hardwarerenderer.hpp @@ -29,7 +29,6 @@ class HardwareRenderer : public QOpenGLWindow, protected QOpenGLFunctions, publi private: bool wayland = false; - QWidget* parentWidget{nullptr}; QOpenGLContext* m_context; QOpenGLTexture* m_texture{nullptr}; QOpenGLShaderProgram* m_prog{nullptr}; diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 91fee7408..2fb4e35fe 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -120,7 +120,6 @@ int main(int argc, char* argv[]) { main_window = new MainWindow(); main_window->show(); - main_window->setFocus(); app.installEventFilter(main_window); #ifdef Q_OS_WINDOWS @@ -134,13 +133,6 @@ int main(int argc, char* argv[]) { } #endif - auto widgetList = app.allWidgets(); - for (auto curWidget : widgetList) - { - curWidget->setFocusPolicy(Qt::NoFocus); - } - main_window->setFocusPolicy(Qt::StrongFocus); - pc_reset_hard_init(); /* Set the PAUSE mode depending on the renderer. */ diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 0d89d44f4..6fa2417b3 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -97,6 +97,7 @@ MainWindow::MainWindow(QWidget *parent) : qt_mouse_capture(mouse_capture); if (mouse_capture) { ui->stackedWidget->grabMouse(); + this->grabKeyboard(); #ifdef WAYLAND if (QGuiApplication::platformName().contains("wayland")) { wl_mouse_capture(this->windowHandle()); @@ -104,6 +105,7 @@ MainWindow::MainWindow(QWidget *parent) : #endif } else { ui->stackedWidget->releaseMouse(); + this->releaseKeyboard(); #ifdef WAYLAND if (QGuiApplication::platformName().contains("wayland")) { wl_mouse_uncapture(); @@ -125,8 +127,12 @@ MainWindow::MainWindow(QWidget *parent) : } }); - connect(ui->menubar, &QMenuBar::triggered, this, [] { + connect(ui->menubar, &QMenuBar::triggered, this, [this] { config_save(); + if (QApplication::activeWindow() == this) + { + ui->stackedWidget->current->setFocus(); + } }); connect(this, &MainWindow::updateStatusBarPanes, this, [this] { @@ -278,13 +284,6 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionChange_contrast_for_monochrome_display->setChecked(true); } - setFocusPolicy(Qt::StrongFocus); - ui->stackedWidget->setFocusPolicy(Qt::NoFocus); - ui->centralwidget->setFocusPolicy(Qt::NoFocus); - menuBar()->setFocusPolicy(Qt::NoFocus); - menuWidget()->setFocusPolicy(Qt::NoFocus); - statusBar()->setFocusPolicy(Qt::NoFocus); - video_setblit(qt_blit); } diff --git a/src/qt/qt_progsettings.cpp b/src/qt/qt_progsettings.cpp index 930efb6f3..a228b55c1 100644 --- a/src/qt/qt_progsettings.cpp +++ b/src/qt/qt_progsettings.cpp @@ -79,6 +79,10 @@ void ProgSettings::accept() main_window->status.reset(new MachineStatus(main_window)); main_window->refreshMediaMenu(); main_window->status->message(msg); + connect(main_window, &MainWindow::updateStatusBarTip, main_window->status.get(), &MachineStatus::updateTip); + connect(main_window, &MainWindow::updateStatusBarActivity, main_window->status.get(), &MachineStatus::setActivity); + connect(main_window, &MainWindow::updateStatusBarEmpty, main_window->status.get(), &MachineStatus::setEmpty); + connect(main_window, &MainWindow::statusBarMessage, main_window->status.get(), &MachineStatus::message); QDialog::accept(); } diff --git a/src/qt/qt_renderercomon.cpp b/src/qt/qt_renderercomon.cpp index 144bb88af..ed55e9a71 100644 --- a/src/qt/qt_renderercomon.cpp +++ b/src/qt/qt_renderercomon.cpp @@ -1,7 +1,10 @@ #include "qt_renderercomon.hpp" +#include "qt_mainwindow.hpp" #include #include +#include +#include #include @@ -12,6 +15,7 @@ extern "C" { RendererCommon::RendererCommon() = default; +extern MainWindow* main_window; void RendererCommon::onPaint(QPaintDevice* device) { QPainter painter(device); painter.setRenderHint(QPainter::SmoothPixmapTransform, video_filter_method > 0 ? true : false); @@ -86,3 +90,25 @@ void RendererCommon::onResize(int width, int height) { break; } } + +bool RendererCommon::eventDelegate(QEvent *event, bool& result) +{ + switch (event->type()) + { + default: + return false; + case QEvent::KeyPress: + case QEvent::KeyRelease: + result = QApplication::sendEvent(main_window, event); + return true; + case QEvent::MouseButtonPress: + case QEvent::MouseMove: + case QEvent::MouseButtonRelease: + case QEvent::Wheel: + case QEvent::Enter: + case QEvent::Leave: + result = QApplication::sendEvent(parentWidget, event); + return true; + } + return false; +} diff --git a/src/qt/qt_renderercomon.hpp b/src/qt/qt_renderercomon.hpp index 8cad5f92c..cf05a7321 100644 --- a/src/qt/qt_renderercomon.hpp +++ b/src/qt/qt_renderercomon.hpp @@ -13,7 +13,9 @@ public: void onResize(int width, int height); protected: void onPaint(QPaintDevice* device); + bool eventDelegate(QEvent* event, bool& result); QImage image{QSize(2048, 2048), QImage::Format_RGB32}; QRect source, destination; + QWidget* parentWidget{nullptr}; }; diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index d165c007b..fab8783b9 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -4,6 +4,8 @@ #include "qt_softwarerenderer.hpp" #include "qt_hardwarerenderer.hpp" +#include "qt_mainwindow.hpp" + #include "evdev_mouse.hpp" #include @@ -19,6 +21,7 @@ extern "C" #include <86box/video.h> } +extern MainWindow* main_window; RendererStack::RendererStack(QWidget *parent) : QStackedWidget(parent), ui(new Ui::RendererStack) @@ -116,6 +119,10 @@ void RendererStack::mousePressEvent(QMouseEvent *event) { mousedata.mousebuttons |= event->button(); } + if (main_window->frameGeometry().contains(event->pos()) && !geometry().contains(event->pos())) + { + main_window->windowHandle()->startSystemMove(); + } event->accept(); } void RendererStack::wheelEvent(QWheelEvent *event) @@ -177,7 +184,7 @@ void RendererStack::switchRenderer(Renderer renderer) { { auto sw = new SoftwareRenderer(this); connect(this, &RendererStack::blitToRenderer, sw, &SoftwareRenderer::onBlit, Qt::QueuedConnection); - current.reset(sw); + current.reset(this->createWindowContainer(sw, this)); } break; case Renderer::OpenGL: diff --git a/src/qt/qt_rendererstack.hpp b/src/qt/qt_rendererstack.hpp index 5edd40f08..8ad1e39db 100644 --- a/src/qt/qt_rendererstack.hpp +++ b/src/qt/qt_rendererstack.hpp @@ -68,6 +68,8 @@ private: /* atomic flag for each buffer to not overload the renderer */ std::vector buffers_in_use; + + friend class MainWindow; }; #endif // QT_RENDERERCONTAINER_HPP diff --git a/src/qt/qt_softwarerenderer.cpp b/src/qt/qt_softwarerenderer.cpp index d9195d7b6..962260fd8 100644 --- a/src/qt/qt_softwarerenderer.cpp +++ b/src/qt/qt_softwarerenderer.cpp @@ -1,6 +1,7 @@ #include "qt_softwarerenderer.hpp" +#include -SoftwareRenderer::SoftwareRenderer(QWidget *parent) : QWidget(parent) {} +SoftwareRenderer::SoftwareRenderer(QWidget *parent) : QRasterWindow(parent->windowHandle()) { parentWidget = parent; } void SoftwareRenderer::paintEvent(QPaintEvent *event) { (void) event; @@ -19,5 +20,12 @@ void SoftwareRenderer::onBlit(const std::unique_ptr* img, int x, int y, void SoftwareRenderer::resizeEvent(QResizeEvent *event) { onResize(width(), height()); - QWidget::resizeEvent(event); + QRasterWindow::resizeEvent(event); +} + +bool SoftwareRenderer::event(QEvent *event) +{ + bool res = false; + if (!eventDelegate(event, res)) return QRasterWindow::event(event); + return res; } diff --git a/src/qt/qt_softwarerenderer.hpp b/src/qt/qt_softwarerenderer.hpp index c30303cc5..c60ab110c 100644 --- a/src/qt/qt_softwarerenderer.hpp +++ b/src/qt/qt_softwarerenderer.hpp @@ -2,10 +2,11 @@ #define SOFTWARERENDERER_HPP #include +#include #include #include "qt_renderercomon.hpp" -class SoftwareRenderer : public QWidget, public RendererCommon +class SoftwareRenderer : public QRasterWindow, public RendererCommon { Q_OBJECT public: @@ -17,6 +18,7 @@ public slots: protected: void resizeEvent(QResizeEvent *event) override; + bool event(QEvent *event) override; }; #endif // SOFTWARERENDERER_HPP From 087e978a1845e9c52578fad95a5de5f6e225521b Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 30 Dec 2021 00:07:29 +0600 Subject: [PATCH 158/278] Fix missing FluidSynth message string --- src/qt/qt.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/qt/qt.c b/src/qt/qt.c index 7207a67e2..2a4e83e71 100644 --- a/src/qt/qt.c +++ b/src/qt/qt.c @@ -21,6 +21,12 @@ int qt_nvr_save(void) { char icon_set[256] = ""; /* name of the iconset to be used */ +#ifdef _WIN32 +#define LIB_NAME_FLUIDSYNTH "libfluidsynth.dll" +#else +#define LIB_NAME_FLUIDSYNTH "libfluidsynth" +#endif + wchar_t* plat_get_string(int i) { switch (i) @@ -55,6 +61,8 @@ wchar_t* plat_get_string(int i) return L"libfreetype is required for ESC/P printer emulation."; case IDS_2132: return L"libgs is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files."; + case IDS_2133: + return L""LIB_NAME_FLUIDSYNTH" is required for FluidSynth MIDI output."; case IDS_2129: return L"Make sure libpcap is installed and that you are on a libpcap-compatible network connection."; case IDS_2114: From 33d0cbfed556ef37705ce9c9d2a69458b864f25b Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 30 Dec 2021 01:13:47 +0600 Subject: [PATCH 159/278] Fix black screen when fullscreen on Windows --- src/qt/qt_mainwindow.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 6fa2417b3..67e3237e3 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -938,8 +938,6 @@ void MainWindow::on_actionFullscreen_triggered() { showFullScreen(); video_fullscreen = 1; } - - ui->stackedWidget->switchRenderer((RendererStack::Renderer)vid_api); } void MainWindow::getTitle_(wchar_t *title) From b907b7bec4dcdd4adef8ee578228b8947ba7b3ea Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 30 Dec 2021 02:10:21 +0600 Subject: [PATCH 160/278] Fix hardware renderer scaling on HiDPI modes --- src/qt/qt_hardwarerenderer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index 02f19f28b..7681b8979 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -11,7 +11,7 @@ extern "C" { void HardwareRenderer::resizeGL(int w, int h) { - glViewport(0, 0, w, h); + glViewport(0, 0, w * devicePixelRatio(), h * devicePixelRatio()); } #define PROGRAM_VERTEX_ATTRIBUTE 0 From 81a7107969fe71b7c8271a82c503a907b31e22f7 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 30 Dec 2021 23:36:49 +0600 Subject: [PATCH 161/278] Fix HiDPI scaling setting --- src/qt/qt_mainwindow.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 67e3237e3..cfe743b0b 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -32,6 +32,7 @@ extern "C" { #include #include #include +#include #include #include @@ -116,8 +117,8 @@ MainWindow::MainWindow(QWidget *parent) : connect(this, &MainWindow::resizeContents, this, [this](int w, int h) { if (!QApplication::platformName().contains("eglfs") && vid_resize == 0) { - w = w / (!dpi_scale ? devicePixelRatio() : 1); - int modifiedHeight = (h / (!dpi_scale ? devicePixelRatio() : 1)) + menuBar()->height() + (statusBar()->height() * !hide_status_bar); + w = w / (!dpi_scale ? this->screen()->devicePixelRatio() : 1); + int modifiedHeight = (h / (!dpi_scale ? this->screen()->devicePixelRatio() : 1)) + menuBar()->height() + (statusBar()->height() * !hide_status_bar); ui->stackedWidget->resize(w, h); if (vid_resize == 0) { setFixedSize(w, modifiedHeight); From 27e144f7fa64d2c7f00ba6d888675b8fad672b34 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 31 Dec 2021 12:35:00 +0600 Subject: [PATCH 162/278] Hardware Renderers: Fix leftover artefacts on fullscreen modes --- src/qt/qt_hardwarerenderer.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index 7681b8979..f6d6142b9 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -111,10 +111,12 @@ void HardwareRenderer::initializeGL() pclog("OpenGL renderer: %s\n", glGetString(GL_RENDERER)); pclog("OpenGL version: %s\n", glGetString(GL_VERSION)); pclog("OpenGL shader language version: %s\n", glGetString(GL_SHADING_LANGUAGE_VERSION)); + glClearColor(0, 0, 0, 1); } void HardwareRenderer::paintGL() { m_context->makeCurrent(this); + glClear(GL_COLOR_BUFFER_BIT); QVector verts, texcoords; QMatrix4x4 mat; mat.setToIdentity(); From 81055c03e2b51997eb1d549c99d5d47d96fc100b Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 31 Dec 2021 12:36:55 +0600 Subject: [PATCH 163/278] Begin Qt translation framework --- src/CMakeLists.txt | 1 + src/qt/86box_de.ts | 1332 ++++++++++++++++++++++++++++++++++++ src/qt/86box_en-GB.ts | 1332 ++++++++++++++++++++++++++++++++++++ src/qt/86box_en.ts | 1332 ++++++++++++++++++++++++++++++++++++ src/qt/86box_es.ts | 1332 ++++++++++++++++++++++++++++++++++++ src/qt/86box_fi.ts | 1332 ++++++++++++++++++++++++++++++++++++ src/qt/86box_fr.ts | 1332 ++++++++++++++++++++++++++++++++++++ src/qt/86box_hr.ts | 1332 ++++++++++++++++++++++++++++++++++++ src/qt/86box_hu.ts | 1332 ++++++++++++++++++++++++++++++++++++ src/qt/86box_it.ts | 1332 ++++++++++++++++++++++++++++++++++++ src/qt/86box_ja.ts | 1332 ++++++++++++++++++++++++++++++++++++ src/qt/86box_ko.ts | 1332 ++++++++++++++++++++++++++++++++++++ src/qt/86box_pt-BR.ts | 1332 ++++++++++++++++++++++++++++++++++++ src/qt/86box_pt-PT.ts | 1332 ++++++++++++++++++++++++++++++++++++ src/qt/86box_ru.ts | 1332 ++++++++++++++++++++++++++++++++++++ src/qt/86box_sl.ts | 1332 ++++++++++++++++++++++++++++++++++++ src/qt/86box_tr.ts | 1332 ++++++++++++++++++++++++++++++++++++ src/qt/86box_zh.ts | 1332 ++++++++++++++++++++++++++++++++++++ src/qt/CMakeLists.txt | 3 + src/qt/qt.c | 56 -- src/qt/qt_main.cpp | 21 +- src/qt/qt_mainwindow.cpp | 1 - src/qt/qt_mediamenu.cpp | 94 +-- src/qt/qt_platform.cpp | 47 ++ src/qt/qt_translations.qrc | 21 + vcpkg.json | 5 +- 26 files changed, 22782 insertions(+), 111 deletions(-) create mode 100644 src/qt/86box_de.ts create mode 100644 src/qt/86box_en-GB.ts create mode 100644 src/qt/86box_en.ts create mode 100644 src/qt/86box_es.ts create mode 100644 src/qt/86box_fi.ts create mode 100644 src/qt/86box_fr.ts create mode 100644 src/qt/86box_hr.ts create mode 100644 src/qt/86box_hu.ts create mode 100644 src/qt/86box_it.ts create mode 100644 src/qt/86box_ja.ts create mode 100644 src/qt/86box_ko.ts create mode 100644 src/qt/86box_pt-BR.ts create mode 100644 src/qt/86box_pt-PT.ts create mode 100644 src/qt/86box_ru.ts create mode 100644 src/qt/86box_sl.ts create mode 100644 src/qt/86box_tr.ts create mode 100644 src/qt/86box_zh.ts create mode 100644 src/qt/qt_translations.qrc diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 47d48e4a2..a2a933454 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -90,6 +90,7 @@ if(QT) #set(CMAKE_PREFIX_PATH "path/to/qt5-static") find_package(Qt5 COMPONENTS Core Widgets REQUIRED) + find_package(Qt5LinguistTools REQUIRED) endif() find_package(Freetype REQUIRED) diff --git a/src/qt/86box_de.ts b/src/qt/86box_de.ts new file mode 100644 index 000000000..010836b16 --- /dev/null +++ b/src/qt/86box_de.ts @@ -0,0 +1,1332 @@ + + + + + DeviceConfig + + + Dialog + + + + + FileField + + + Form + + + + + Browse + + + + + HarddiskDialog + + + Dialog + + + + + File name + + + + + Cylinders + + + + + Sectors + + + + + Size (MiB) + + + + + Heads + + + + + Type + + + + + Bus + + + + + Channel + + + + + Format + + + + + Block Size + + + + + JoystickConfiguration + + + Dialog + + + + + Device + + + + + MainWindow + + + 86Box + + + + + Action + + + + + Tools + + + + + View + + + + + Renderer + + + + + Window scale factor + + + + + Filter method + + + + + Fullscreen stretch mode + + + + + EGA/(S)VGA settings + + + + + VGA screen type + + + + + Grayscale conversion type + + + + + Media + + + + + Help + + + + + Keyboard requires capture + + + + + Right CTRL is left ALT + + + + + Hard Reset + + + + + Ctrl+Alt+Del + + + + + Ctrl+Alt+Esc + + + + + Pause + + + + + Exit + + + + + Settings + + + + + Fullscreen + + + + + Ctrl+Alt+PgUp + + + + + Software Renderer + + + + + Hardware Renderer (OpenGL) + + + + + Hardware Renderer (OpenGL ES) + + + + + Hide status bar + + + + + Resizable window + + + + + Remember size and position + + + + + Specify dimensions... + + + + + Force 4:3 display ratio + + + + + HiDPI scaling + + + + + CGA/PCjr/Tandy/EGA/(S)VGA overscan + + + + + Change contrast for monochrome display + + + + + 0.5x + + + + + 1x + + + + + 1.5x + + + + + 2x + + + + + Nearest + + + + + Linear + + + + + Full screen stretch + + + + + 4:3 + + + + + Square pixels (Keep ratio) + + + + + Integer scale + + + + + Inverted VGA monitor + + + + + RGB Color + + + + + RGB Grayscale + + + + + Amber monitor + + + + + Green monitor + + + + + White monitor + + + + + BT601 (NTSC/PAL) + + + + + BT709 (HDTV) + + + + + Average + + + + + About Qt... + + + + + About 86Box... + + + + + Documentation... + + + + + Update status bar icons + + + + + Take screenshot... + + + + + Sound gain... + + + + + OpenGL 3.0 Core + + + + + Program preferences... + + + + + MediaMenu + + + + + + New Image + + + + + + + + Existing Image + + + + + + + + Existing Image (Write Protected) + + + + + Record + + + + + Play + + + + + Rewind + + + + + Fast Forward + + + + + + + + + Eject + + + + + + Image + + + + + Export to 86F + + + + + Mute + + + + + Empty + + + + + + + Reload previous image + + + + + Create... + + + + + + + + + Open + + + + + Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) + + + + + Cassette: %1 + + + + + + + + + + (empty) + + + + + Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) + + + + + Cartridge %1: %2 + + + + + All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) + + + + + Save as 86f + + + + + Surface images (*.86f) + + + + + Unable to write file + + + + + Make sure the file is being saved to a writable directory + + + + + Floppy %1 (%2): %3 + + + + + CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) + + + + + + + Unknown Bus + + + + + CD-ROM %1 (%2): %3 + + + + + ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) + + + + + ZIP %1 %2 (%3): %4 + + + + + MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) + + + + + MO %1 (%2): %3 + + + + + NewFloppyDialog + + + New Image + + + + + File Name + + + + + Disk Size + + + + + RPM Mode + + + + + ProgSettings + + + Preferences + + + + + (Default) + + + + + Icon set: + + + + + Default + + + + + QObject + + + Click to capture mouse. + + + + + Press %1 to release mouse + + + + + Press %1 or middle button to release mouse + + + + + Failed to initialize FluidSynth + + + + + MFM/RLL or ESDI CD-ROM drives never existed + + + + + Failed to set up PCap + + + + + No PCap devices found + + + + + Unable to initialize FreeType + + + + + Unable to initialize SDL, libsdl2 is required + + + + + libfreetype is required for ESC/P printer emulation. + + + + + libgs is required for automatic conversion of PostScript files to PDF. + +Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. + + + + + %1 is required for FluidSynth MIDI output. + + + + + Make sure libpcap is installed and that you are on a libpcap-compatible network connection. + + + + + Unable to initialize Ghostscript + + + + + Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. + + + + + Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. + + + + + Hardware not available + + + + + No ROMs found. + + + + + 86Box could not find any usable ROM images. + +Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. + + + + + RendererStack + + + StackedWidget + + + + + Settings + + + 86Box Settings + + + + + SettingsDisplay + + + Form + + + + + Video + + + + + + Configure + + + + + Voodoo Graphics + + + + + SettingsFloppyCDROM + + + Form + + + + + Floppy Drives + + + + + Type + + + + + Turbo Timings + + + + + Check BPB + + + + + CD-ROM Drives + + + + + Channel + + + + + Speed + + + + + Bus + + + + + SettingsHarddisks + + + Form + + + + + Bus + + + + + ID + + + + + New + + + + + Existing + + + + + Remove + + + + + SettingsInput + + + Form + + + + + Mouse + + + + + Configure + + + + + Joystick + + + + + Joystick 1... + + + + + Joystick 2... + + + + + Joystick 3... + + + + + Joystick 4... + + + + + SettingsMachine + + + Form + + + + + Machine Type + + + + + Machine + + + + + CPU + + + + + FPU + + + + + Wait States + + + + + Memory + + + + + Speed + + + + + Configure + + + + + Dynamic Recompiler + + + + + Time Synchronization + + + + + Disabled + + + + + Enabled (Local Time) + + + + + Enabled (UTC) + + + + + SettingsNetwork + + + Form + + + + + PCap Device + + + + + Network Adapter + + + + + Network Type + + + + + Configure + + + + + SettingsOtherPeripherals + + + Form + + + + + ISA RTC + + + + + + + + + Configure + + + + + ISA Memory Expansion + + + + + Card 2 + + + + + Card 3 + + + + + Card 1 + + + + + Card 4 + + + + + ISABugger Device + + + + + POST card + + + + + SettingsOtherRemovable + + + Form + + + + + MO Drives + + + + + + Bus + + + + + + Channel + + + + + Type + + + + + ZIP Drives + + + + + ZIP 250 + + + + + SettingsPorts + + + Form + + + + + LPT1 Device + + + + + LPT2 Device + + + + + LPT3 Device + + + + + Serial Port 1 + + + + + Parallel Port 1 + + + + + Serial Port 2 + + + + + Parallel Port 2 + + + + + Serial Port 3 + + + + + Parallel Port 3 + + + + + Serial Port 4 + + + + + SettingsSound + + + Form + + + + + MIDI In + + + + + Innovation SSI-2001 + + + + + Gravis Ultrasound + + + + + Sound Card + + + + + + + + + + + Configure + + + + + MIDI Out + + + + + Standalone MPU-401 + + + + + CMS / Game Blaster + + + + + Use FLOAT32 sound + + + + + SettingsStorageControllers + + + Form + + + + + HD Controller + + + + + + + + + + + + Configure + + + + + FD Controller + + + + + Tertiary IDE Controller + + + + + Quaternary IDE Controller + + + + + SCSI + + + + + Controller 1 + + + + + Controller 4 + + + + + Controller 2 + + + + + Controller 3 + + + + + Cassette + + + + + SoundGain + + + Sound Gain + + + + + Gain: + + + + + SpecifyDimensions + + + Specify Main Window Dimensions + + + + + Width: + + + + + Lock to this size + + + + + Height: + + + + diff --git a/src/qt/86box_en-GB.ts b/src/qt/86box_en-GB.ts new file mode 100644 index 000000000..1d92557ca --- /dev/null +++ b/src/qt/86box_en-GB.ts @@ -0,0 +1,1332 @@ + + + + + DeviceConfig + + + Dialog + + + + + FileField + + + Form + + + + + Browse + + + + + HarddiskDialog + + + Dialog + + + + + File name + + + + + Cylinders + + + + + Sectors + + + + + Size (MiB) + + + + + Heads + + + + + Type + + + + + Bus + + + + + Channel + + + + + Format + + + + + Block Size + + + + + JoystickConfiguration + + + Dialog + + + + + Device + + + + + MainWindow + + + 86Box + + + + + Action + + + + + Tools + + + + + View + + + + + Renderer + + + + + Window scale factor + + + + + Filter method + + + + + Fullscreen stretch mode + + + + + EGA/(S)VGA settings + + + + + VGA screen type + + + + + Grayscale conversion type + + + + + Media + + + + + Help + + + + + Keyboard requires capture + + + + + Right CTRL is left ALT + + + + + Hard Reset + + + + + Ctrl+Alt+Del + + + + + Ctrl+Alt+Esc + + + + + Pause + + + + + Exit + + + + + Settings + + + + + Fullscreen + + + + + Ctrl+Alt+PgUp + + + + + Software Renderer + + + + + Hardware Renderer (OpenGL) + + + + + Hardware Renderer (OpenGL ES) + + + + + Hide status bar + + + + + Resizable window + + + + + Remember size and position + + + + + Specify dimensions... + + + + + Force 4:3 display ratio + + + + + HiDPI scaling + + + + + CGA/PCjr/Tandy/EGA/(S)VGA overscan + + + + + Change contrast for monochrome display + + + + + 0.5x + + + + + 1x + + + + + 1.5x + + + + + 2x + + + + + Nearest + + + + + Linear + + + + + Full screen stretch + + + + + 4:3 + + + + + Square pixels (Keep ratio) + + + + + Integer scale + + + + + Inverted VGA monitor + + + + + RGB Color + + + + + RGB Grayscale + + + + + Amber monitor + + + + + Green monitor + + + + + White monitor + + + + + BT601 (NTSC/PAL) + + + + + BT709 (HDTV) + + + + + Average + + + + + About Qt... + + + + + About 86Box... + + + + + Documentation... + + + + + Update status bar icons + + + + + Take screenshot... + + + + + Sound gain... + + + + + OpenGL 3.0 Core + + + + + Program preferences... + + + + + MediaMenu + + + + + + New Image + + + + + + + + Existing Image + + + + + + + + Existing Image (Write Protected) + + + + + Record + + + + + Play + + + + + Rewind + + + + + Fast Forward + + + + + + + + + Eject + + + + + + Image + + + + + Export to 86F + + + + + Mute + + + + + Empty + + + + + + + Reload previous image + + + + + Create... + + + + + + + + + Open + + + + + Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) + + + + + Cassette: %1 + + + + + + + + + + (empty) + + + + + Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) + + + + + Cartridge %1: %2 + + + + + All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) + + + + + Save as 86f + + + + + Surface images (*.86f) + + + + + Unable to write file + + + + + Make sure the file is being saved to a writable directory + + + + + Floppy %1 (%2): %3 + + + + + CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) + + + + + + + Unknown Bus + + + + + CD-ROM %1 (%2): %3 + + + + + ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) + + + + + ZIP %1 %2 (%3): %4 + + + + + MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) + + + + + MO %1 (%2): %3 + + + + + NewFloppyDialog + + + New Image + + + + + File Name + + + + + Disk Size + + + + + RPM Mode + + + + + ProgSettings + + + Preferences + + + + + (Default) + + + + + Icon set: + + + + + Default + + + + + QObject + + + Click to capture mouse. + + + + + Press %1 to release mouse + + + + + Press %1 or middle button to release mouse + + + + + Failed to initialize FluidSynth + + + + + MFM/RLL or ESDI CD-ROM drives never existed + + + + + Failed to set up PCap + + + + + No PCap devices found + + + + + Unable to initialize FreeType + + + + + Unable to initialize SDL, libsdl2 is required + + + + + libfreetype is required for ESC/P printer emulation. + + + + + libgs is required for automatic conversion of PostScript files to PDF. + +Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. + + + + + %1 is required for FluidSynth MIDI output. + + + + + Make sure libpcap is installed and that you are on a libpcap-compatible network connection. + + + + + Unable to initialize Ghostscript + + + + + Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. + + + + + Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. + + + + + Hardware not available + + + + + No ROMs found. + + + + + 86Box could not find any usable ROM images. + +Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. + + + + + RendererStack + + + StackedWidget + + + + + Settings + + + 86Box Settings + + + + + SettingsDisplay + + + Form + + + + + Video + + + + + + Configure + + + + + Voodoo Graphics + + + + + SettingsFloppyCDROM + + + Form + + + + + Floppy Drives + + + + + Type + + + + + Turbo Timings + + + + + Check BPB + + + + + CD-ROM Drives + + + + + Channel + + + + + Speed + + + + + Bus + + + + + SettingsHarddisks + + + Form + + + + + Bus + + + + + ID + + + + + New + + + + + Existing + + + + + Remove + + + + + SettingsInput + + + Form + + + + + Mouse + + + + + Configure + + + + + Joystick + + + + + Joystick 1... + + + + + Joystick 2... + + + + + Joystick 3... + + + + + Joystick 4... + + + + + SettingsMachine + + + Form + + + + + Machine Type + + + + + Machine + + + + + CPU + + + + + FPU + + + + + Wait States + + + + + Memory + + + + + Speed + + + + + Configure + + + + + Dynamic Recompiler + + + + + Time Synchronization + + + + + Disabled + + + + + Enabled (Local Time) + + + + + Enabled (UTC) + + + + + SettingsNetwork + + + Form + + + + + PCap Device + + + + + Network Adapter + + + + + Network Type + + + + + Configure + + + + + SettingsOtherPeripherals + + + Form + + + + + ISA RTC + + + + + + + + + Configure + + + + + ISA Memory Expansion + + + + + Card 2 + + + + + Card 3 + + + + + Card 1 + + + + + Card 4 + + + + + ISABugger Device + + + + + POST card + + + + + SettingsOtherRemovable + + + Form + + + + + MO Drives + + + + + + Bus + + + + + + Channel + + + + + Type + + + + + ZIP Drives + + + + + ZIP 250 + + + + + SettingsPorts + + + Form + + + + + LPT1 Device + + + + + LPT2 Device + + + + + LPT3 Device + + + + + Serial Port 1 + + + + + Parallel Port 1 + + + + + Serial Port 2 + + + + + Parallel Port 2 + + + + + Serial Port 3 + + + + + Parallel Port 3 + + + + + Serial Port 4 + + + + + SettingsSound + + + Form + + + + + MIDI In + + + + + Innovation SSI-2001 + + + + + Gravis Ultrasound + + + + + Sound Card + + + + + + + + + + + Configure + + + + + MIDI Out + + + + + Standalone MPU-401 + + + + + CMS / Game Blaster + + + + + Use FLOAT32 sound + + + + + SettingsStorageControllers + + + Form + + + + + HD Controller + + + + + + + + + + + + Configure + + + + + FD Controller + + + + + Tertiary IDE Controller + + + + + Quaternary IDE Controller + + + + + SCSI + + + + + Controller 1 + + + + + Controller 4 + + + + + Controller 2 + + + + + Controller 3 + + + + + Cassette + + + + + SoundGain + + + Sound Gain + + + + + Gain: + + + + + SpecifyDimensions + + + Specify Main Window Dimensions + + + + + Width: + + + + + Lock to this size + + + + + Height: + + + + diff --git a/src/qt/86box_en.ts b/src/qt/86box_en.ts new file mode 100644 index 000000000..9694d0a32 --- /dev/null +++ b/src/qt/86box_en.ts @@ -0,0 +1,1332 @@ + + + + + DeviceConfig + + + Dialog + + + + + FileField + + + Form + + + + + Browse + + + + + HarddiskDialog + + + Dialog + + + + + File name + + + + + Cylinders + + + + + Sectors + + + + + Size (MiB) + + + + + Heads + + + + + Type + + + + + Bus + + + + + Channel + + + + + Format + + + + + Block Size + + + + + JoystickConfiguration + + + Dialog + + + + + Device + + + + + MainWindow + + + 86Box + + + + + Action + + + + + Tools + + + + + View + + + + + Renderer + + + + + Window scale factor + + + + + Filter method + + + + + Fullscreen stretch mode + + + + + EGA/(S)VGA settings + + + + + VGA screen type + + + + + Grayscale conversion type + + + + + Media + + + + + Help + + + + + Keyboard requires capture + + + + + Right CTRL is left ALT + + + + + Hard Reset + + + + + Ctrl+Alt+Del + + + + + Ctrl+Alt+Esc + + + + + Pause + + + + + Exit + + + + + Settings + + + + + Fullscreen + + + + + Ctrl+Alt+PgUp + + + + + Software Renderer + + + + + Hardware Renderer (OpenGL) + + + + + Hardware Renderer (OpenGL ES) + + + + + Hide status bar + + + + + Resizable window + + + + + Remember size and position + + + + + Specify dimensions... + + + + + Force 4:3 display ratio + + + + + HiDPI scaling + + + + + CGA/PCjr/Tandy/EGA/(S)VGA overscan + + + + + Change contrast for monochrome display + + + + + 0.5x + + + + + 1x + + + + + 1.5x + + + + + 2x + + + + + Nearest + + + + + Linear + + + + + Full screen stretch + + + + + 4:3 + + + + + Square pixels (Keep ratio) + + + + + Integer scale + + + + + Inverted VGA monitor + + + + + RGB Color + + + + + RGB Grayscale + + + + + Amber monitor + + + + + Green monitor + + + + + White monitor + + + + + BT601 (NTSC/PAL) + + + + + BT709 (HDTV) + + + + + Average + + + + + About Qt... + + + + + About 86Box... + + + + + Documentation... + + + + + Update status bar icons + + + + + Take screenshot... + + + + + Sound gain... + + + + + OpenGL 3.0 Core + + + + + Program preferences... + + + + + MediaMenu + + + + + + New Image + + + + + + + + Existing Image + + + + + + + + Existing Image (Write Protected) + + + + + Record + + + + + Play + + + + + Rewind + + + + + Fast Forward + + + + + + + + + Eject + + + + + + Image + + + + + Export to 86F + + + + + Mute + + + + + Empty + + + + + + + Reload previous image + + + + + Create... + + + + + + + + + Open + + + + + Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) + + + + + Cassette: %1 + + + + + + + + + + (empty) + + + + + Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) + + + + + Cartridge %1: %2 + + + + + All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) + + + + + Save as 86f + + + + + Surface images (*.86f) + + + + + Unable to write file + + + + + Make sure the file is being saved to a writable directory + + + + + Floppy %1 (%2): %3 + + + + + CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) + + + + + + + Unknown Bus + + + + + CD-ROM %1 (%2): %3 + + + + + ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) + + + + + ZIP %1 %2 (%3): %4 + + + + + MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) + + + + + MO %1 (%2): %3 + + + + + NewFloppyDialog + + + New Image + + + + + File Name + + + + + Disk Size + + + + + RPM Mode + + + + + ProgSettings + + + Preferences + + + + + (Default) + + + + + Icon set: + + + + + Default + + + + + QObject + + + Click to capture mouse. + + + + + Press %1 to release mouse + + + + + Press %1 or middle button to release mouse + + + + + Failed to initialize FluidSynth + + + + + MFM/RLL or ESDI CD-ROM drives never existed + + + + + Failed to set up PCap + + + + + No PCap devices found + + + + + Unable to initialize FreeType + + + + + Unable to initialize SDL, libsdl2 is required + + + + + libfreetype is required for ESC/P printer emulation. + + + + + libgs is required for automatic conversion of PostScript files to PDF. + +Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. + + + + + %1 is required for FluidSynth MIDI output. + + + + + Make sure libpcap is installed and that you are on a libpcap-compatible network connection. + + + + + Unable to initialize Ghostscript + + + + + Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. + + + + + Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. + + + + + Hardware not available + + + + + No ROMs found. + + + + + 86Box could not find any usable ROM images. + +Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. + + + + + RendererStack + + + StackedWidget + + + + + Settings + + + 86Box Settings + + + + + SettingsDisplay + + + Form + + + + + Video + + + + + + Configure + + + + + Voodoo Graphics + + + + + SettingsFloppyCDROM + + + Form + + + + + Floppy Drives + + + + + Type + + + + + Turbo Timings + + + + + Check BPB + + + + + CD-ROM Drives + + + + + Channel + + + + + Speed + + + + + Bus + + + + + SettingsHarddisks + + + Form + + + + + Bus + + + + + ID + + + + + New + + + + + Existing + + + + + Remove + + + + + SettingsInput + + + Form + + + + + Mouse + + + + + Configure + + + + + Joystick + + + + + Joystick 1... + + + + + Joystick 2... + + + + + Joystick 3... + + + + + Joystick 4... + + + + + SettingsMachine + + + Form + + + + + Machine Type + + + + + Machine + + + + + CPU + + + + + FPU + + + + + Wait States + + + + + Memory + + + + + Speed + + + + + Configure + + + + + Dynamic Recompiler + + + + + Time Synchronization + + + + + Disabled + + + + + Enabled (Local Time) + + + + + Enabled (UTC) + + + + + SettingsNetwork + + + Form + + + + + PCap Device + + + + + Network Adapter + + + + + Network Type + + + + + Configure + + + + + SettingsOtherPeripherals + + + Form + + + + + ISA RTC + + + + + + + + + Configure + + + + + ISA Memory Expansion + + + + + Card 2 + + + + + Card 3 + + + + + Card 1 + + + + + Card 4 + + + + + ISABugger Device + + + + + POST card + + + + + SettingsOtherRemovable + + + Form + + + + + MO Drives + + + + + + Bus + + + + + + Channel + + + + + Type + + + + + ZIP Drives + + + + + ZIP 250 + + + + + SettingsPorts + + + Form + + + + + LPT1 Device + + + + + LPT2 Device + + + + + LPT3 Device + + + + + Serial Port 1 + + + + + Parallel Port 1 + + + + + Serial Port 2 + + + + + Parallel Port 2 + + + + + Serial Port 3 + + + + + Parallel Port 3 + + + + + Serial Port 4 + + + + + SettingsSound + + + Form + + + + + MIDI In + + + + + Innovation SSI-2001 + + + + + Gravis Ultrasound + + + + + Sound Card + + + + + + + + + + + Configure + + + + + MIDI Out + + + + + Standalone MPU-401 + + + + + CMS / Game Blaster + + + + + Use FLOAT32 sound + + + + + SettingsStorageControllers + + + Form + + + + + HD Controller + + + + + + + + + + + + Configure + + + + + FD Controller + + + + + Tertiary IDE Controller + + + + + Quaternary IDE Controller + + + + + SCSI + + + + + Controller 1 + + + + + Controller 4 + + + + + Controller 2 + + + + + Controller 3 + + + + + Cassette + + + + + SoundGain + + + Sound Gain + + + + + Gain: + + + + + SpecifyDimensions + + + Specify Main Window Dimensions + + + + + Width: + + + + + Lock to this size + + + + + Height: + + + + diff --git a/src/qt/86box_es.ts b/src/qt/86box_es.ts new file mode 100644 index 000000000..9d15e64ed --- /dev/null +++ b/src/qt/86box_es.ts @@ -0,0 +1,1332 @@ + + + + + DeviceConfig + + + Dialog + + + + + FileField + + + Form + + + + + Browse + + + + + HarddiskDialog + + + Dialog + + + + + File name + + + + + Cylinders + + + + + Sectors + + + + + Size (MiB) + + + + + Heads + + + + + Type + + + + + Bus + + + + + Channel + + + + + Format + + + + + Block Size + + + + + JoystickConfiguration + + + Dialog + + + + + Device + + + + + MainWindow + + + 86Box + + + + + Action + + + + + Tools + + + + + View + + + + + Renderer + + + + + Window scale factor + + + + + Filter method + + + + + Fullscreen stretch mode + + + + + EGA/(S)VGA settings + + + + + VGA screen type + + + + + Grayscale conversion type + + + + + Media + + + + + Help + + + + + Keyboard requires capture + + + + + Right CTRL is left ALT + + + + + Hard Reset + + + + + Ctrl+Alt+Del + + + + + Ctrl+Alt+Esc + + + + + Pause + + + + + Exit + + + + + Settings + + + + + Fullscreen + + + + + Ctrl+Alt+PgUp + + + + + Software Renderer + + + + + Hardware Renderer (OpenGL) + + + + + Hardware Renderer (OpenGL ES) + + + + + Hide status bar + + + + + Resizable window + + + + + Remember size and position + + + + + Specify dimensions... + + + + + Force 4:3 display ratio + + + + + HiDPI scaling + + + + + CGA/PCjr/Tandy/EGA/(S)VGA overscan + + + + + Change contrast for monochrome display + + + + + 0.5x + + + + + 1x + + + + + 1.5x + + + + + 2x + + + + + Nearest + + + + + Linear + + + + + Full screen stretch + + + + + 4:3 + + + + + Square pixels (Keep ratio) + + + + + Integer scale + + + + + Inverted VGA monitor + + + + + RGB Color + + + + + RGB Grayscale + + + + + Amber monitor + + + + + Green monitor + + + + + White monitor + + + + + BT601 (NTSC/PAL) + + + + + BT709 (HDTV) + + + + + Average + + + + + About Qt... + + + + + About 86Box... + + + + + Documentation... + + + + + Update status bar icons + + + + + Take screenshot... + + + + + Sound gain... + + + + + OpenGL 3.0 Core + + + + + Program preferences... + + + + + MediaMenu + + + + + + New Image + + + + + + + + Existing Image + + + + + + + + Existing Image (Write Protected) + + + + + Record + + + + + Play + + + + + Rewind + + + + + Fast Forward + + + + + + + + + Eject + + + + + + Image + + + + + Export to 86F + + + + + Mute + + + + + Empty + + + + + + + Reload previous image + + + + + Create... + + + + + + + + + Open + + + + + Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) + + + + + Cassette: %1 + + + + + + + + + + (empty) + + + + + Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) + + + + + Cartridge %1: %2 + + + + + All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) + + + + + Save as 86f + + + + + Surface images (*.86f) + + + + + Unable to write file + + + + + Make sure the file is being saved to a writable directory + + + + + Floppy %1 (%2): %3 + + + + + CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) + + + + + + + Unknown Bus + + + + + CD-ROM %1 (%2): %3 + + + + + ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) + + + + + ZIP %1 %2 (%3): %4 + + + + + MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) + + + + + MO %1 (%2): %3 + + + + + NewFloppyDialog + + + New Image + + + + + File Name + + + + + Disk Size + + + + + RPM Mode + + + + + ProgSettings + + + Preferences + + + + + (Default) + + + + + Icon set: + + + + + Default + + + + + QObject + + + Click to capture mouse. + + + + + Press %1 to release mouse + + + + + Press %1 or middle button to release mouse + + + + + Failed to initialize FluidSynth + + + + + MFM/RLL or ESDI CD-ROM drives never existed + + + + + Failed to set up PCap + + + + + No PCap devices found + + + + + Unable to initialize FreeType + + + + + Unable to initialize SDL, libsdl2 is required + + + + + libfreetype is required for ESC/P printer emulation. + + + + + libgs is required for automatic conversion of PostScript files to PDF. + +Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. + + + + + %1 is required for FluidSynth MIDI output. + + + + + Make sure libpcap is installed and that you are on a libpcap-compatible network connection. + + + + + Unable to initialize Ghostscript + + + + + Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. + + + + + Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. + + + + + Hardware not available + + + + + No ROMs found. + + + + + 86Box could not find any usable ROM images. + +Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. + + + + + RendererStack + + + StackedWidget + + + + + Settings + + + 86Box Settings + + + + + SettingsDisplay + + + Form + + + + + Video + + + + + + Configure + + + + + Voodoo Graphics + + + + + SettingsFloppyCDROM + + + Form + + + + + Floppy Drives + + + + + Type + + + + + Turbo Timings + + + + + Check BPB + + + + + CD-ROM Drives + + + + + Channel + + + + + Speed + + + + + Bus + + + + + SettingsHarddisks + + + Form + + + + + Bus + + + + + ID + + + + + New + + + + + Existing + + + + + Remove + + + + + SettingsInput + + + Form + + + + + Mouse + + + + + Configure + + + + + Joystick + + + + + Joystick 1... + + + + + Joystick 2... + + + + + Joystick 3... + + + + + Joystick 4... + + + + + SettingsMachine + + + Form + + + + + Machine Type + + + + + Machine + + + + + CPU + + + + + FPU + + + + + Wait States + + + + + Memory + + + + + Speed + + + + + Configure + + + + + Dynamic Recompiler + + + + + Time Synchronization + + + + + Disabled + + + + + Enabled (Local Time) + + + + + Enabled (UTC) + + + + + SettingsNetwork + + + Form + + + + + PCap Device + + + + + Network Adapter + + + + + Network Type + + + + + Configure + + + + + SettingsOtherPeripherals + + + Form + + + + + ISA RTC + + + + + + + + + Configure + + + + + ISA Memory Expansion + + + + + Card 2 + + + + + Card 3 + + + + + Card 1 + + + + + Card 4 + + + + + ISABugger Device + + + + + POST card + + + + + SettingsOtherRemovable + + + Form + + + + + MO Drives + + + + + + Bus + + + + + + Channel + + + + + Type + + + + + ZIP Drives + + + + + ZIP 250 + + + + + SettingsPorts + + + Form + + + + + LPT1 Device + + + + + LPT2 Device + + + + + LPT3 Device + + + + + Serial Port 1 + + + + + Parallel Port 1 + + + + + Serial Port 2 + + + + + Parallel Port 2 + + + + + Serial Port 3 + + + + + Parallel Port 3 + + + + + Serial Port 4 + + + + + SettingsSound + + + Form + + + + + MIDI In + + + + + Innovation SSI-2001 + + + + + Gravis Ultrasound + + + + + Sound Card + + + + + + + + + + + Configure + + + + + MIDI Out + + + + + Standalone MPU-401 + + + + + CMS / Game Blaster + + + + + Use FLOAT32 sound + + + + + SettingsStorageControllers + + + Form + + + + + HD Controller + + + + + + + + + + + + Configure + + + + + FD Controller + + + + + Tertiary IDE Controller + + + + + Quaternary IDE Controller + + + + + SCSI + + + + + Controller 1 + + + + + Controller 4 + + + + + Controller 2 + + + + + Controller 3 + + + + + Cassette + + + + + SoundGain + + + Sound Gain + + + + + Gain: + + + + + SpecifyDimensions + + + Specify Main Window Dimensions + + + + + Width: + + + + + Lock to this size + + + + + Height: + + + + diff --git a/src/qt/86box_fi.ts b/src/qt/86box_fi.ts new file mode 100644 index 000000000..fb342f75f --- /dev/null +++ b/src/qt/86box_fi.ts @@ -0,0 +1,1332 @@ + + + + + DeviceConfig + + + Dialog + + + + + FileField + + + Form + + + + + Browse + + + + + HarddiskDialog + + + Dialog + + + + + File name + + + + + Cylinders + + + + + Sectors + + + + + Size (MiB) + + + + + Heads + + + + + Type + + + + + Bus + + + + + Channel + + + + + Format + + + + + Block Size + + + + + JoystickConfiguration + + + Dialog + + + + + Device + + + + + MainWindow + + + 86Box + + + + + Action + + + + + Tools + + + + + View + + + + + Renderer + + + + + Window scale factor + + + + + Filter method + + + + + Fullscreen stretch mode + + + + + EGA/(S)VGA settings + + + + + VGA screen type + + + + + Grayscale conversion type + + + + + Media + + + + + Help + + + + + Keyboard requires capture + + + + + Right CTRL is left ALT + + + + + Hard Reset + + + + + Ctrl+Alt+Del + + + + + Ctrl+Alt+Esc + + + + + Pause + + + + + Exit + + + + + Settings + + + + + Fullscreen + + + + + Ctrl+Alt+PgUp + + + + + Software Renderer + + + + + Hardware Renderer (OpenGL) + + + + + Hardware Renderer (OpenGL ES) + + + + + Hide status bar + + + + + Resizable window + + + + + Remember size and position + + + + + Specify dimensions... + + + + + Force 4:3 display ratio + + + + + HiDPI scaling + + + + + CGA/PCjr/Tandy/EGA/(S)VGA overscan + + + + + Change contrast for monochrome display + + + + + 0.5x + + + + + 1x + + + + + 1.5x + + + + + 2x + + + + + Nearest + + + + + Linear + + + + + Full screen stretch + + + + + 4:3 + + + + + Square pixels (Keep ratio) + + + + + Integer scale + + + + + Inverted VGA monitor + + + + + RGB Color + + + + + RGB Grayscale + + + + + Amber monitor + + + + + Green monitor + + + + + White monitor + + + + + BT601 (NTSC/PAL) + + + + + BT709 (HDTV) + + + + + Average + + + + + About Qt... + + + + + About 86Box... + + + + + Documentation... + + + + + Update status bar icons + + + + + Take screenshot... + + + + + Sound gain... + + + + + OpenGL 3.0 Core + + + + + Program preferences... + + + + + MediaMenu + + + + + + New Image + + + + + + + + Existing Image + + + + + + + + Existing Image (Write Protected) + + + + + Record + + + + + Play + + + + + Rewind + + + + + Fast Forward + + + + + + + + + Eject + + + + + + Image + + + + + Export to 86F + + + + + Mute + + + + + Empty + + + + + + + Reload previous image + + + + + Create... + + + + + + + + + Open + + + + + Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) + + + + + Cassette: %1 + + + + + + + + + + (empty) + + + + + Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) + + + + + Cartridge %1: %2 + + + + + All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) + + + + + Save as 86f + + + + + Surface images (*.86f) + + + + + Unable to write file + + + + + Make sure the file is being saved to a writable directory + + + + + Floppy %1 (%2): %3 + + + + + CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) + + + + + + + Unknown Bus + + + + + CD-ROM %1 (%2): %3 + + + + + ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) + + + + + ZIP %1 %2 (%3): %4 + + + + + MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) + + + + + MO %1 (%2): %3 + + + + + NewFloppyDialog + + + New Image + + + + + File Name + + + + + Disk Size + + + + + RPM Mode + + + + + ProgSettings + + + Preferences + + + + + (Default) + + + + + Icon set: + + + + + Default + + + + + QObject + + + Click to capture mouse. + + + + + Press %1 to release mouse + + + + + Press %1 or middle button to release mouse + + + + + Failed to initialize FluidSynth + + + + + MFM/RLL or ESDI CD-ROM drives never existed + + + + + Failed to set up PCap + + + + + No PCap devices found + + + + + Unable to initialize FreeType + + + + + Unable to initialize SDL, libsdl2 is required + + + + + libfreetype is required for ESC/P printer emulation. + + + + + libgs is required for automatic conversion of PostScript files to PDF. + +Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. + + + + + %1 is required for FluidSynth MIDI output. + + + + + Make sure libpcap is installed and that you are on a libpcap-compatible network connection. + + + + + Unable to initialize Ghostscript + + + + + Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. + + + + + Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. + + + + + Hardware not available + + + + + No ROMs found. + + + + + 86Box could not find any usable ROM images. + +Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. + + + + + RendererStack + + + StackedWidget + + + + + Settings + + + 86Box Settings + + + + + SettingsDisplay + + + Form + + + + + Video + + + + + + Configure + + + + + Voodoo Graphics + + + + + SettingsFloppyCDROM + + + Form + + + + + Floppy Drives + + + + + Type + + + + + Turbo Timings + + + + + Check BPB + + + + + CD-ROM Drives + + + + + Channel + + + + + Speed + + + + + Bus + + + + + SettingsHarddisks + + + Form + + + + + Bus + + + + + ID + + + + + New + + + + + Existing + + + + + Remove + + + + + SettingsInput + + + Form + + + + + Mouse + + + + + Configure + + + + + Joystick + + + + + Joystick 1... + + + + + Joystick 2... + + + + + Joystick 3... + + + + + Joystick 4... + + + + + SettingsMachine + + + Form + + + + + Machine Type + + + + + Machine + + + + + CPU + + + + + FPU + + + + + Wait States + + + + + Memory + + + + + Speed + + + + + Configure + + + + + Dynamic Recompiler + + + + + Time Synchronization + + + + + Disabled + + + + + Enabled (Local Time) + + + + + Enabled (UTC) + + + + + SettingsNetwork + + + Form + + + + + PCap Device + + + + + Network Adapter + + + + + Network Type + + + + + Configure + + + + + SettingsOtherPeripherals + + + Form + + + + + ISA RTC + + + + + + + + + Configure + + + + + ISA Memory Expansion + + + + + Card 2 + + + + + Card 3 + + + + + Card 1 + + + + + Card 4 + + + + + ISABugger Device + + + + + POST card + + + + + SettingsOtherRemovable + + + Form + + + + + MO Drives + + + + + + Bus + + + + + + Channel + + + + + Type + + + + + ZIP Drives + + + + + ZIP 250 + + + + + SettingsPorts + + + Form + + + + + LPT1 Device + + + + + LPT2 Device + + + + + LPT3 Device + + + + + Serial Port 1 + + + + + Parallel Port 1 + + + + + Serial Port 2 + + + + + Parallel Port 2 + + + + + Serial Port 3 + + + + + Parallel Port 3 + + + + + Serial Port 4 + + + + + SettingsSound + + + Form + + + + + MIDI In + + + + + Innovation SSI-2001 + + + + + Gravis Ultrasound + + + + + Sound Card + + + + + + + + + + + Configure + + + + + MIDI Out + + + + + Standalone MPU-401 + + + + + CMS / Game Blaster + + + + + Use FLOAT32 sound + + + + + SettingsStorageControllers + + + Form + + + + + HD Controller + + + + + + + + + + + + Configure + + + + + FD Controller + + + + + Tertiary IDE Controller + + + + + Quaternary IDE Controller + + + + + SCSI + + + + + Controller 1 + + + + + Controller 4 + + + + + Controller 2 + + + + + Controller 3 + + + + + Cassette + + + + + SoundGain + + + Sound Gain + + + + + Gain: + + + + + SpecifyDimensions + + + Specify Main Window Dimensions + + + + + Width: + + + + + Lock to this size + + + + + Height: + + + + diff --git a/src/qt/86box_fr.ts b/src/qt/86box_fr.ts new file mode 100644 index 000000000..a441da067 --- /dev/null +++ b/src/qt/86box_fr.ts @@ -0,0 +1,1332 @@ + + + + + DeviceConfig + + + Dialog + + + + + FileField + + + Form + + + + + Browse + + + + + HarddiskDialog + + + Dialog + + + + + File name + + + + + Cylinders + + + + + Sectors + + + + + Size (MiB) + + + + + Heads + + + + + Type + + + + + Bus + + + + + Channel + + + + + Format + + + + + Block Size + + + + + JoystickConfiguration + + + Dialog + + + + + Device + + + + + MainWindow + + + 86Box + + + + + Action + + + + + Tools + + + + + View + + + + + Renderer + + + + + Window scale factor + + + + + Filter method + + + + + Fullscreen stretch mode + + + + + EGA/(S)VGA settings + + + + + VGA screen type + + + + + Grayscale conversion type + + + + + Media + + + + + Help + + + + + Keyboard requires capture + + + + + Right CTRL is left ALT + + + + + Hard Reset + + + + + Ctrl+Alt+Del + + + + + Ctrl+Alt+Esc + + + + + Pause + + + + + Exit + + + + + Settings + + + + + Fullscreen + + + + + Ctrl+Alt+PgUp + + + + + Software Renderer + + + + + Hardware Renderer (OpenGL) + + + + + Hardware Renderer (OpenGL ES) + + + + + Hide status bar + + + + + Resizable window + + + + + Remember size and position + + + + + Specify dimensions... + + + + + Force 4:3 display ratio + + + + + HiDPI scaling + + + + + CGA/PCjr/Tandy/EGA/(S)VGA overscan + + + + + Change contrast for monochrome display + + + + + 0.5x + + + + + 1x + + + + + 1.5x + + + + + 2x + + + + + Nearest + + + + + Linear + + + + + Full screen stretch + + + + + 4:3 + + + + + Square pixels (Keep ratio) + + + + + Integer scale + + + + + Inverted VGA monitor + + + + + RGB Color + + + + + RGB Grayscale + + + + + Amber monitor + + + + + Green monitor + + + + + White monitor + + + + + BT601 (NTSC/PAL) + + + + + BT709 (HDTV) + + + + + Average + + + + + About Qt... + + + + + About 86Box... + + + + + Documentation... + + + + + Update status bar icons + + + + + Take screenshot... + + + + + Sound gain... + + + + + OpenGL 3.0 Core + + + + + Program preferences... + + + + + MediaMenu + + + + + + New Image + + + + + + + + Existing Image + + + + + + + + Existing Image (Write Protected) + + + + + Record + + + + + Play + + + + + Rewind + + + + + Fast Forward + + + + + + + + + Eject + + + + + + Image + + + + + Export to 86F + + + + + Mute + + + + + Empty + + + + + + + Reload previous image + + + + + Create... + + + + + + + + + Open + + + + + Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) + + + + + Cassette: %1 + + + + + + + + + + (empty) + + + + + Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) + + + + + Cartridge %1: %2 + + + + + All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) + + + + + Save as 86f + + + + + Surface images (*.86f) + + + + + Unable to write file + + + + + Make sure the file is being saved to a writable directory + + + + + Floppy %1 (%2): %3 + + + + + CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) + + + + + + + Unknown Bus + + + + + CD-ROM %1 (%2): %3 + + + + + ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) + + + + + ZIP %1 %2 (%3): %4 + + + + + MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) + + + + + MO %1 (%2): %3 + + + + + NewFloppyDialog + + + New Image + + + + + File Name + + + + + Disk Size + + + + + RPM Mode + + + + + ProgSettings + + + Preferences + + + + + (Default) + + + + + Icon set: + + + + + Default + + + + + QObject + + + Click to capture mouse. + + + + + Press %1 to release mouse + + + + + Press %1 or middle button to release mouse + + + + + Failed to initialize FluidSynth + + + + + MFM/RLL or ESDI CD-ROM drives never existed + + + + + Failed to set up PCap + + + + + No PCap devices found + + + + + Unable to initialize FreeType + + + + + Unable to initialize SDL, libsdl2 is required + + + + + libfreetype is required for ESC/P printer emulation. + + + + + libgs is required for automatic conversion of PostScript files to PDF. + +Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. + + + + + %1 is required for FluidSynth MIDI output. + + + + + Make sure libpcap is installed and that you are on a libpcap-compatible network connection. + + + + + Unable to initialize Ghostscript + + + + + Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. + + + + + Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. + + + + + Hardware not available + + + + + No ROMs found. + + + + + 86Box could not find any usable ROM images. + +Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. + + + + + RendererStack + + + StackedWidget + + + + + Settings + + + 86Box Settings + + + + + SettingsDisplay + + + Form + + + + + Video + + + + + + Configure + + + + + Voodoo Graphics + + + + + SettingsFloppyCDROM + + + Form + + + + + Floppy Drives + + + + + Type + + + + + Turbo Timings + + + + + Check BPB + + + + + CD-ROM Drives + + + + + Channel + + + + + Speed + + + + + Bus + + + + + SettingsHarddisks + + + Form + + + + + Bus + + + + + ID + + + + + New + + + + + Existing + + + + + Remove + + + + + SettingsInput + + + Form + + + + + Mouse + + + + + Configure + + + + + Joystick + + + + + Joystick 1... + + + + + Joystick 2... + + + + + Joystick 3... + + + + + Joystick 4... + + + + + SettingsMachine + + + Form + + + + + Machine Type + + + + + Machine + + + + + CPU + + + + + FPU + + + + + Wait States + + + + + Memory + + + + + Speed + + + + + Configure + + + + + Dynamic Recompiler + + + + + Time Synchronization + + + + + Disabled + + + + + Enabled (Local Time) + + + + + Enabled (UTC) + + + + + SettingsNetwork + + + Form + + + + + PCap Device + + + + + Network Adapter + + + + + Network Type + + + + + Configure + + + + + SettingsOtherPeripherals + + + Form + + + + + ISA RTC + + + + + + + + + Configure + + + + + ISA Memory Expansion + + + + + Card 2 + + + + + Card 3 + + + + + Card 1 + + + + + Card 4 + + + + + ISABugger Device + + + + + POST card + + + + + SettingsOtherRemovable + + + Form + + + + + MO Drives + + + + + + Bus + + + + + + Channel + + + + + Type + + + + + ZIP Drives + + + + + ZIP 250 + + + + + SettingsPorts + + + Form + + + + + LPT1 Device + + + + + LPT2 Device + + + + + LPT3 Device + + + + + Serial Port 1 + + + + + Parallel Port 1 + + + + + Serial Port 2 + + + + + Parallel Port 2 + + + + + Serial Port 3 + + + + + Parallel Port 3 + + + + + Serial Port 4 + + + + + SettingsSound + + + Form + + + + + MIDI In + + + + + Innovation SSI-2001 + + + + + Gravis Ultrasound + + + + + Sound Card + + + + + + + + + + + Configure + + + + + MIDI Out + + + + + Standalone MPU-401 + + + + + CMS / Game Blaster + + + + + Use FLOAT32 sound + + + + + SettingsStorageControllers + + + Form + + + + + HD Controller + + + + + + + + + + + + Configure + + + + + FD Controller + + + + + Tertiary IDE Controller + + + + + Quaternary IDE Controller + + + + + SCSI + + + + + Controller 1 + + + + + Controller 4 + + + + + Controller 2 + + + + + Controller 3 + + + + + Cassette + + + + + SoundGain + + + Sound Gain + + + + + Gain: + + + + + SpecifyDimensions + + + Specify Main Window Dimensions + + + + + Width: + + + + + Lock to this size + + + + + Height: + + + + diff --git a/src/qt/86box_hr.ts b/src/qt/86box_hr.ts new file mode 100644 index 000000000..b9e83e2f0 --- /dev/null +++ b/src/qt/86box_hr.ts @@ -0,0 +1,1332 @@ + + + + + DeviceConfig + + + Dialog + + + + + FileField + + + Form + + + + + Browse + + + + + HarddiskDialog + + + Dialog + + + + + File name + + + + + Cylinders + + + + + Sectors + + + + + Size (MiB) + + + + + Heads + + + + + Type + + + + + Bus + + + + + Channel + + + + + Format + + + + + Block Size + + + + + JoystickConfiguration + + + Dialog + + + + + Device + + + + + MainWindow + + + 86Box + + + + + Action + + + + + Tools + + + + + View + + + + + Renderer + + + + + Window scale factor + + + + + Filter method + + + + + Fullscreen stretch mode + + + + + EGA/(S)VGA settings + + + + + VGA screen type + + + + + Grayscale conversion type + + + + + Media + + + + + Help + + + + + Keyboard requires capture + + + + + Right CTRL is left ALT + + + + + Hard Reset + + + + + Ctrl+Alt+Del + + + + + Ctrl+Alt+Esc + + + + + Pause + + + + + Exit + + + + + Settings + + + + + Fullscreen + + + + + Ctrl+Alt+PgUp + + + + + Software Renderer + + + + + Hardware Renderer (OpenGL) + + + + + Hardware Renderer (OpenGL ES) + + + + + Hide status bar + + + + + Resizable window + + + + + Remember size and position + + + + + Specify dimensions... + + + + + Force 4:3 display ratio + + + + + HiDPI scaling + + + + + CGA/PCjr/Tandy/EGA/(S)VGA overscan + + + + + Change contrast for monochrome display + + + + + 0.5x + + + + + 1x + + + + + 1.5x + + + + + 2x + + + + + Nearest + + + + + Linear + + + + + Full screen stretch + + + + + 4:3 + + + + + Square pixels (Keep ratio) + + + + + Integer scale + + + + + Inverted VGA monitor + + + + + RGB Color + + + + + RGB Grayscale + + + + + Amber monitor + + + + + Green monitor + + + + + White monitor + + + + + BT601 (NTSC/PAL) + + + + + BT709 (HDTV) + + + + + Average + + + + + About Qt... + + + + + About 86Box... + + + + + Documentation... + + + + + Update status bar icons + + + + + Take screenshot... + + + + + Sound gain... + + + + + OpenGL 3.0 Core + + + + + Program preferences... + + + + + MediaMenu + + + + + + New Image + + + + + + + + Existing Image + + + + + + + + Existing Image (Write Protected) + + + + + Record + + + + + Play + + + + + Rewind + + + + + Fast Forward + + + + + + + + + Eject + + + + + + Image + + + + + Export to 86F + + + + + Mute + + + + + Empty + + + + + + + Reload previous image + + + + + Create... + + + + + + + + + Open + + + + + Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) + + + + + Cassette: %1 + + + + + + + + + + (empty) + + + + + Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) + + + + + Cartridge %1: %2 + + + + + All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) + + + + + Save as 86f + + + + + Surface images (*.86f) + + + + + Unable to write file + + + + + Make sure the file is being saved to a writable directory + + + + + Floppy %1 (%2): %3 + + + + + CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) + + + + + + + Unknown Bus + + + + + CD-ROM %1 (%2): %3 + + + + + ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) + + + + + ZIP %1 %2 (%3): %4 + + + + + MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) + + + + + MO %1 (%2): %3 + + + + + NewFloppyDialog + + + New Image + + + + + File Name + + + + + Disk Size + + + + + RPM Mode + + + + + ProgSettings + + + Preferences + + + + + (Default) + + + + + Icon set: + + + + + Default + + + + + QObject + + + Click to capture mouse. + + + + + Press %1 to release mouse + + + + + Press %1 or middle button to release mouse + + + + + Failed to initialize FluidSynth + + + + + MFM/RLL or ESDI CD-ROM drives never existed + + + + + Failed to set up PCap + + + + + No PCap devices found + + + + + Unable to initialize FreeType + + + + + Unable to initialize SDL, libsdl2 is required + + + + + libfreetype is required for ESC/P printer emulation. + + + + + libgs is required for automatic conversion of PostScript files to PDF. + +Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. + + + + + %1 is required for FluidSynth MIDI output. + + + + + Make sure libpcap is installed and that you are on a libpcap-compatible network connection. + + + + + Unable to initialize Ghostscript + + + + + Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. + + + + + Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. + + + + + Hardware not available + + + + + No ROMs found. + + + + + 86Box could not find any usable ROM images. + +Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. + + + + + RendererStack + + + StackedWidget + + + + + Settings + + + 86Box Settings + + + + + SettingsDisplay + + + Form + + + + + Video + + + + + + Configure + + + + + Voodoo Graphics + + + + + SettingsFloppyCDROM + + + Form + + + + + Floppy Drives + + + + + Type + + + + + Turbo Timings + + + + + Check BPB + + + + + CD-ROM Drives + + + + + Channel + + + + + Speed + + + + + Bus + + + + + SettingsHarddisks + + + Form + + + + + Bus + + + + + ID + + + + + New + + + + + Existing + + + + + Remove + + + + + SettingsInput + + + Form + + + + + Mouse + + + + + Configure + + + + + Joystick + + + + + Joystick 1... + + + + + Joystick 2... + + + + + Joystick 3... + + + + + Joystick 4... + + + + + SettingsMachine + + + Form + + + + + Machine Type + + + + + Machine + + + + + CPU + + + + + FPU + + + + + Wait States + + + + + Memory + + + + + Speed + + + + + Configure + + + + + Dynamic Recompiler + + + + + Time Synchronization + + + + + Disabled + + + + + Enabled (Local Time) + + + + + Enabled (UTC) + + + + + SettingsNetwork + + + Form + + + + + PCap Device + + + + + Network Adapter + + + + + Network Type + + + + + Configure + + + + + SettingsOtherPeripherals + + + Form + + + + + ISA RTC + + + + + + + + + Configure + + + + + ISA Memory Expansion + + + + + Card 2 + + + + + Card 3 + + + + + Card 1 + + + + + Card 4 + + + + + ISABugger Device + + + + + POST card + + + + + SettingsOtherRemovable + + + Form + + + + + MO Drives + + + + + + Bus + + + + + + Channel + + + + + Type + + + + + ZIP Drives + + + + + ZIP 250 + + + + + SettingsPorts + + + Form + + + + + LPT1 Device + + + + + LPT2 Device + + + + + LPT3 Device + + + + + Serial Port 1 + + + + + Parallel Port 1 + + + + + Serial Port 2 + + + + + Parallel Port 2 + + + + + Serial Port 3 + + + + + Parallel Port 3 + + + + + Serial Port 4 + + + + + SettingsSound + + + Form + + + + + MIDI In + + + + + Innovation SSI-2001 + + + + + Gravis Ultrasound + + + + + Sound Card + + + + + + + + + + + Configure + + + + + MIDI Out + + + + + Standalone MPU-401 + + + + + CMS / Game Blaster + + + + + Use FLOAT32 sound + + + + + SettingsStorageControllers + + + Form + + + + + HD Controller + + + + + + + + + + + + Configure + + + + + FD Controller + + + + + Tertiary IDE Controller + + + + + Quaternary IDE Controller + + + + + SCSI + + + + + Controller 1 + + + + + Controller 4 + + + + + Controller 2 + + + + + Controller 3 + + + + + Cassette + + + + + SoundGain + + + Sound Gain + + + + + Gain: + + + + + SpecifyDimensions + + + Specify Main Window Dimensions + + + + + Width: + + + + + Lock to this size + + + + + Height: + + + + diff --git a/src/qt/86box_hu.ts b/src/qt/86box_hu.ts new file mode 100644 index 000000000..48f6600b5 --- /dev/null +++ b/src/qt/86box_hu.ts @@ -0,0 +1,1332 @@ + + + + + DeviceConfig + + + Dialog + + + + + FileField + + + Form + + + + + Browse + + + + + HarddiskDialog + + + Dialog + + + + + File name + + + + + Cylinders + + + + + Sectors + + + + + Size (MiB) + + + + + Heads + + + + + Type + + + + + Bus + + + + + Channel + + + + + Format + + + + + Block Size + + + + + JoystickConfiguration + + + Dialog + + + + + Device + + + + + MainWindow + + + 86Box + + + + + Action + + + + + Tools + + + + + View + + + + + Renderer + + + + + Window scale factor + + + + + Filter method + + + + + Fullscreen stretch mode + + + + + EGA/(S)VGA settings + + + + + VGA screen type + + + + + Grayscale conversion type + + + + + Media + + + + + Help + + + + + Keyboard requires capture + + + + + Right CTRL is left ALT + + + + + Hard Reset + + + + + Ctrl+Alt+Del + + + + + Ctrl+Alt+Esc + + + + + Pause + + + + + Exit + + + + + Settings + + + + + Fullscreen + + + + + Ctrl+Alt+PgUp + + + + + Software Renderer + + + + + Hardware Renderer (OpenGL) + + + + + Hardware Renderer (OpenGL ES) + + + + + Hide status bar + + + + + Resizable window + + + + + Remember size and position + + + + + Specify dimensions... + + + + + Force 4:3 display ratio + + + + + HiDPI scaling + + + + + CGA/PCjr/Tandy/EGA/(S)VGA overscan + + + + + Change contrast for monochrome display + + + + + 0.5x + + + + + 1x + + + + + 1.5x + + + + + 2x + + + + + Nearest + + + + + Linear + + + + + Full screen stretch + + + + + 4:3 + + + + + Square pixels (Keep ratio) + + + + + Integer scale + + + + + Inverted VGA monitor + + + + + RGB Color + + + + + RGB Grayscale + + + + + Amber monitor + + + + + Green monitor + + + + + White monitor + + + + + BT601 (NTSC/PAL) + + + + + BT709 (HDTV) + + + + + Average + + + + + About Qt... + + + + + About 86Box... + + + + + Documentation... + + + + + Update status bar icons + + + + + Take screenshot... + + + + + Sound gain... + + + + + OpenGL 3.0 Core + + + + + Program preferences... + + + + + MediaMenu + + + + + + New Image + + + + + + + + Existing Image + + + + + + + + Existing Image (Write Protected) + + + + + Record + + + + + Play + + + + + Rewind + + + + + Fast Forward + + + + + + + + + Eject + + + + + + Image + + + + + Export to 86F + + + + + Mute + + + + + Empty + + + + + + + Reload previous image + + + + + Create... + + + + + + + + + Open + + + + + Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) + + + + + Cassette: %1 + + + + + + + + + + (empty) + + + + + Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) + + + + + Cartridge %1: %2 + + + + + All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) + + + + + Save as 86f + + + + + Surface images (*.86f) + + + + + Unable to write file + + + + + Make sure the file is being saved to a writable directory + + + + + Floppy %1 (%2): %3 + + + + + CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) + + + + + + + Unknown Bus + + + + + CD-ROM %1 (%2): %3 + + + + + ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) + + + + + ZIP %1 %2 (%3): %4 + + + + + MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) + + + + + MO %1 (%2): %3 + + + + + NewFloppyDialog + + + New Image + + + + + File Name + + + + + Disk Size + + + + + RPM Mode + + + + + ProgSettings + + + Preferences + + + + + (Default) + + + + + Icon set: + + + + + Default + + + + + QObject + + + Click to capture mouse. + + + + + Press %1 to release mouse + + + + + Press %1 or middle button to release mouse + + + + + Failed to initialize FluidSynth + + + + + MFM/RLL or ESDI CD-ROM drives never existed + + + + + Failed to set up PCap + + + + + No PCap devices found + + + + + Unable to initialize FreeType + + + + + Unable to initialize SDL, libsdl2 is required + + + + + libfreetype is required for ESC/P printer emulation. + + + + + libgs is required for automatic conversion of PostScript files to PDF. + +Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. + + + + + %1 is required for FluidSynth MIDI output. + + + + + Make sure libpcap is installed and that you are on a libpcap-compatible network connection. + + + + + Unable to initialize Ghostscript + + + + + Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. + + + + + Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. + + + + + Hardware not available + + + + + No ROMs found. + + + + + 86Box could not find any usable ROM images. + +Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. + + + + + RendererStack + + + StackedWidget + + + + + Settings + + + 86Box Settings + + + + + SettingsDisplay + + + Form + + + + + Video + + + + + + Configure + + + + + Voodoo Graphics + + + + + SettingsFloppyCDROM + + + Form + + + + + Floppy Drives + + + + + Type + + + + + Turbo Timings + + + + + Check BPB + + + + + CD-ROM Drives + + + + + Channel + + + + + Speed + + + + + Bus + + + + + SettingsHarddisks + + + Form + + + + + Bus + + + + + ID + + + + + New + + + + + Existing + + + + + Remove + + + + + SettingsInput + + + Form + + + + + Mouse + + + + + Configure + + + + + Joystick + + + + + Joystick 1... + + + + + Joystick 2... + + + + + Joystick 3... + + + + + Joystick 4... + + + + + SettingsMachine + + + Form + + + + + Machine Type + + + + + Machine + + + + + CPU + + + + + FPU + + + + + Wait States + + + + + Memory + + + + + Speed + + + + + Configure + + + + + Dynamic Recompiler + + + + + Time Synchronization + + + + + Disabled + + + + + Enabled (Local Time) + + + + + Enabled (UTC) + + + + + SettingsNetwork + + + Form + + + + + PCap Device + + + + + Network Adapter + + + + + Network Type + + + + + Configure + + + + + SettingsOtherPeripherals + + + Form + + + + + ISA RTC + + + + + + + + + Configure + + + + + ISA Memory Expansion + + + + + Card 2 + + + + + Card 3 + + + + + Card 1 + + + + + Card 4 + + + + + ISABugger Device + + + + + POST card + + + + + SettingsOtherRemovable + + + Form + + + + + MO Drives + + + + + + Bus + + + + + + Channel + + + + + Type + + + + + ZIP Drives + + + + + ZIP 250 + + + + + SettingsPorts + + + Form + + + + + LPT1 Device + + + + + LPT2 Device + + + + + LPT3 Device + + + + + Serial Port 1 + + + + + Parallel Port 1 + + + + + Serial Port 2 + + + + + Parallel Port 2 + + + + + Serial Port 3 + + + + + Parallel Port 3 + + + + + Serial Port 4 + + + + + SettingsSound + + + Form + + + + + MIDI In + + + + + Innovation SSI-2001 + + + + + Gravis Ultrasound + + + + + Sound Card + + + + + + + + + + + Configure + + + + + MIDI Out + + + + + Standalone MPU-401 + + + + + CMS / Game Blaster + + + + + Use FLOAT32 sound + + + + + SettingsStorageControllers + + + Form + + + + + HD Controller + + + + + + + + + + + + Configure + + + + + FD Controller + + + + + Tertiary IDE Controller + + + + + Quaternary IDE Controller + + + + + SCSI + + + + + Controller 1 + + + + + Controller 4 + + + + + Controller 2 + + + + + Controller 3 + + + + + Cassette + + + + + SoundGain + + + Sound Gain + + + + + Gain: + + + + + SpecifyDimensions + + + Specify Main Window Dimensions + + + + + Width: + + + + + Lock to this size + + + + + Height: + + + + diff --git a/src/qt/86box_it.ts b/src/qt/86box_it.ts new file mode 100644 index 000000000..9de8be31a --- /dev/null +++ b/src/qt/86box_it.ts @@ -0,0 +1,1332 @@ + + + + + DeviceConfig + + + Dialog + + + + + FileField + + + Form + + + + + Browse + + + + + HarddiskDialog + + + Dialog + + + + + File name + + + + + Cylinders + + + + + Sectors + + + + + Size (MiB) + + + + + Heads + + + + + Type + + + + + Bus + + + + + Channel + + + + + Format + + + + + Block Size + + + + + JoystickConfiguration + + + Dialog + + + + + Device + + + + + MainWindow + + + 86Box + + + + + Action + + + + + Tools + + + + + View + + + + + Renderer + + + + + Window scale factor + + + + + Filter method + + + + + Fullscreen stretch mode + + + + + EGA/(S)VGA settings + + + + + VGA screen type + + + + + Grayscale conversion type + + + + + Media + + + + + Help + + + + + Keyboard requires capture + + + + + Right CTRL is left ALT + + + + + Hard Reset + + + + + Ctrl+Alt+Del + + + + + Ctrl+Alt+Esc + + + + + Pause + + + + + Exit + + + + + Settings + + + + + Fullscreen + + + + + Ctrl+Alt+PgUp + + + + + Software Renderer + + + + + Hardware Renderer (OpenGL) + + + + + Hardware Renderer (OpenGL ES) + + + + + Hide status bar + + + + + Resizable window + + + + + Remember size and position + + + + + Specify dimensions... + + + + + Force 4:3 display ratio + + + + + HiDPI scaling + + + + + CGA/PCjr/Tandy/EGA/(S)VGA overscan + + + + + Change contrast for monochrome display + + + + + 0.5x + + + + + 1x + + + + + 1.5x + + + + + 2x + + + + + Nearest + + + + + Linear + + + + + Full screen stretch + + + + + 4:3 + + + + + Square pixels (Keep ratio) + + + + + Integer scale + + + + + Inverted VGA monitor + + + + + RGB Color + + + + + RGB Grayscale + + + + + Amber monitor + + + + + Green monitor + + + + + White monitor + + + + + BT601 (NTSC/PAL) + + + + + BT709 (HDTV) + + + + + Average + + + + + About Qt... + + + + + About 86Box... + + + + + Documentation... + + + + + Update status bar icons + + + + + Take screenshot... + + + + + Sound gain... + + + + + OpenGL 3.0 Core + + + + + Program preferences... + + + + + MediaMenu + + + + + + New Image + + + + + + + + Existing Image + + + + + + + + Existing Image (Write Protected) + + + + + Record + + + + + Play + + + + + Rewind + + + + + Fast Forward + + + + + + + + + Eject + + + + + + Image + + + + + Export to 86F + + + + + Mute + + + + + Empty + + + + + + + Reload previous image + + + + + Create... + + + + + + + + + Open + + + + + Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) + + + + + Cassette: %1 + + + + + + + + + + (empty) + + + + + Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) + + + + + Cartridge %1: %2 + + + + + All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) + + + + + Save as 86f + + + + + Surface images (*.86f) + + + + + Unable to write file + + + + + Make sure the file is being saved to a writable directory + + + + + Floppy %1 (%2): %3 + + + + + CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) + + + + + + + Unknown Bus + + + + + CD-ROM %1 (%2): %3 + + + + + ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) + + + + + ZIP %1 %2 (%3): %4 + + + + + MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) + + + + + MO %1 (%2): %3 + + + + + NewFloppyDialog + + + New Image + + + + + File Name + + + + + Disk Size + + + + + RPM Mode + + + + + ProgSettings + + + Preferences + + + + + (Default) + + + + + Icon set: + + + + + Default + + + + + QObject + + + Click to capture mouse. + + + + + Press %1 to release mouse + + + + + Press %1 or middle button to release mouse + + + + + Failed to initialize FluidSynth + + + + + MFM/RLL or ESDI CD-ROM drives never existed + + + + + Failed to set up PCap + + + + + No PCap devices found + + + + + Unable to initialize FreeType + + + + + Unable to initialize SDL, libsdl2 is required + + + + + libfreetype is required for ESC/P printer emulation. + + + + + libgs is required for automatic conversion of PostScript files to PDF. + +Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. + + + + + %1 is required for FluidSynth MIDI output. + + + + + Make sure libpcap is installed and that you are on a libpcap-compatible network connection. + + + + + Unable to initialize Ghostscript + + + + + Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. + + + + + Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. + + + + + Hardware not available + + + + + No ROMs found. + + + + + 86Box could not find any usable ROM images. + +Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. + + + + + RendererStack + + + StackedWidget + + + + + Settings + + + 86Box Settings + + + + + SettingsDisplay + + + Form + + + + + Video + + + + + + Configure + + + + + Voodoo Graphics + + + + + SettingsFloppyCDROM + + + Form + + + + + Floppy Drives + + + + + Type + + + + + Turbo Timings + + + + + Check BPB + + + + + CD-ROM Drives + + + + + Channel + + + + + Speed + + + + + Bus + + + + + SettingsHarddisks + + + Form + + + + + Bus + + + + + ID + + + + + New + + + + + Existing + + + + + Remove + + + + + SettingsInput + + + Form + + + + + Mouse + + + + + Configure + + + + + Joystick + + + + + Joystick 1... + + + + + Joystick 2... + + + + + Joystick 3... + + + + + Joystick 4... + + + + + SettingsMachine + + + Form + + + + + Machine Type + + + + + Machine + + + + + CPU + + + + + FPU + + + + + Wait States + + + + + Memory + + + + + Speed + + + + + Configure + + + + + Dynamic Recompiler + + + + + Time Synchronization + + + + + Disabled + + + + + Enabled (Local Time) + + + + + Enabled (UTC) + + + + + SettingsNetwork + + + Form + + + + + PCap Device + + + + + Network Adapter + + + + + Network Type + + + + + Configure + + + + + SettingsOtherPeripherals + + + Form + + + + + ISA RTC + + + + + + + + + Configure + + + + + ISA Memory Expansion + + + + + Card 2 + + + + + Card 3 + + + + + Card 1 + + + + + Card 4 + + + + + ISABugger Device + + + + + POST card + + + + + SettingsOtherRemovable + + + Form + + + + + MO Drives + + + + + + Bus + + + + + + Channel + + + + + Type + + + + + ZIP Drives + + + + + ZIP 250 + + + + + SettingsPorts + + + Form + + + + + LPT1 Device + + + + + LPT2 Device + + + + + LPT3 Device + + + + + Serial Port 1 + + + + + Parallel Port 1 + + + + + Serial Port 2 + + + + + Parallel Port 2 + + + + + Serial Port 3 + + + + + Parallel Port 3 + + + + + Serial Port 4 + + + + + SettingsSound + + + Form + + + + + MIDI In + + + + + Innovation SSI-2001 + + + + + Gravis Ultrasound + + + + + Sound Card + + + + + + + + + + + Configure + + + + + MIDI Out + + + + + Standalone MPU-401 + + + + + CMS / Game Blaster + + + + + Use FLOAT32 sound + + + + + SettingsStorageControllers + + + Form + + + + + HD Controller + + + + + + + + + + + + Configure + + + + + FD Controller + + + + + Tertiary IDE Controller + + + + + Quaternary IDE Controller + + + + + SCSI + + + + + Controller 1 + + + + + Controller 4 + + + + + Controller 2 + + + + + Controller 3 + + + + + Cassette + + + + + SoundGain + + + Sound Gain + + + + + Gain: + + + + + SpecifyDimensions + + + Specify Main Window Dimensions + + + + + Width: + + + + + Lock to this size + + + + + Height: + + + + diff --git a/src/qt/86box_ja.ts b/src/qt/86box_ja.ts new file mode 100644 index 000000000..1c83a743e --- /dev/null +++ b/src/qt/86box_ja.ts @@ -0,0 +1,1332 @@ + + + + + DeviceConfig + + + Dialog + + + + + FileField + + + Form + + + + + Browse + + + + + HarddiskDialog + + + Dialog + + + + + File name + + + + + Cylinders + + + + + Sectors + + + + + Size (MiB) + + + + + Heads + + + + + Type + + + + + Bus + + + + + Channel + + + + + Format + + + + + Block Size + + + + + JoystickConfiguration + + + Dialog + + + + + Device + + + + + MainWindow + + + 86Box + + + + + Action + + + + + Tools + + + + + View + + + + + Renderer + + + + + Window scale factor + + + + + Filter method + + + + + Fullscreen stretch mode + + + + + EGA/(S)VGA settings + + + + + VGA screen type + + + + + Grayscale conversion type + + + + + Media + + + + + Help + + + + + Keyboard requires capture + + + + + Right CTRL is left ALT + + + + + Hard Reset + + + + + Ctrl+Alt+Del + + + + + Ctrl+Alt+Esc + + + + + Pause + + + + + Exit + + + + + Settings + + + + + Fullscreen + + + + + Ctrl+Alt+PgUp + + + + + Software Renderer + + + + + Hardware Renderer (OpenGL) + + + + + Hardware Renderer (OpenGL ES) + + + + + Hide status bar + + + + + Resizable window + + + + + Remember size and position + + + + + Specify dimensions... + + + + + Force 4:3 display ratio + + + + + HiDPI scaling + + + + + CGA/PCjr/Tandy/EGA/(S)VGA overscan + + + + + Change contrast for monochrome display + + + + + 0.5x + + + + + 1x + + + + + 1.5x + + + + + 2x + + + + + Nearest + + + + + Linear + + + + + Full screen stretch + + + + + 4:3 + + + + + Square pixels (Keep ratio) + + + + + Integer scale + + + + + Inverted VGA monitor + + + + + RGB Color + + + + + RGB Grayscale + + + + + Amber monitor + + + + + Green monitor + + + + + White monitor + + + + + BT601 (NTSC/PAL) + + + + + BT709 (HDTV) + + + + + Average + + + + + About Qt... + + + + + About 86Box... + + + + + Documentation... + + + + + Update status bar icons + + + + + Take screenshot... + + + + + Sound gain... + + + + + OpenGL 3.0 Core + + + + + Program preferences... + + + + + MediaMenu + + + + + + New Image + + + + + + + + Existing Image + + + + + + + + Existing Image (Write Protected) + + + + + Record + + + + + Play + + + + + Rewind + + + + + Fast Forward + + + + + + + + + Eject + + + + + + Image + + + + + Export to 86F + + + + + Mute + + + + + Empty + + + + + + + Reload previous image + + + + + Create... + + + + + + + + + Open + + + + + Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) + + + + + Cassette: %1 + + + + + + + + + + (empty) + + + + + Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) + + + + + Cartridge %1: %2 + + + + + All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) + + + + + Save as 86f + + + + + Surface images (*.86f) + + + + + Unable to write file + + + + + Make sure the file is being saved to a writable directory + + + + + Floppy %1 (%2): %3 + + + + + CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) + + + + + + + Unknown Bus + + + + + CD-ROM %1 (%2): %3 + + + + + ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) + + + + + ZIP %1 %2 (%3): %4 + + + + + MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) + + + + + MO %1 (%2): %3 + + + + + NewFloppyDialog + + + New Image + + + + + File Name + + + + + Disk Size + + + + + RPM Mode + + + + + ProgSettings + + + Preferences + + + + + (Default) + + + + + Icon set: + + + + + Default + + + + + QObject + + + Click to capture mouse. + + + + + Press %1 to release mouse + + + + + Press %1 or middle button to release mouse + + + + + Failed to initialize FluidSynth + + + + + MFM/RLL or ESDI CD-ROM drives never existed + + + + + Failed to set up PCap + + + + + No PCap devices found + + + + + Unable to initialize FreeType + + + + + Unable to initialize SDL, libsdl2 is required + + + + + libfreetype is required for ESC/P printer emulation. + + + + + libgs is required for automatic conversion of PostScript files to PDF. + +Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. + + + + + %1 is required for FluidSynth MIDI output. + + + + + Make sure libpcap is installed and that you are on a libpcap-compatible network connection. + + + + + Unable to initialize Ghostscript + + + + + Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. + + + + + Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. + + + + + Hardware not available + + + + + No ROMs found. + + + + + 86Box could not find any usable ROM images. + +Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. + + + + + RendererStack + + + StackedWidget + + + + + Settings + + + 86Box Settings + + + + + SettingsDisplay + + + Form + + + + + Video + + + + + + Configure + + + + + Voodoo Graphics + + + + + SettingsFloppyCDROM + + + Form + + + + + Floppy Drives + + + + + Type + + + + + Turbo Timings + + + + + Check BPB + + + + + CD-ROM Drives + + + + + Channel + + + + + Speed + + + + + Bus + + + + + SettingsHarddisks + + + Form + + + + + Bus + + + + + ID + + + + + New + + + + + Existing + + + + + Remove + + + + + SettingsInput + + + Form + + + + + Mouse + + + + + Configure + + + + + Joystick + + + + + Joystick 1... + + + + + Joystick 2... + + + + + Joystick 3... + + + + + Joystick 4... + + + + + SettingsMachine + + + Form + + + + + Machine Type + + + + + Machine + + + + + CPU + + + + + FPU + + + + + Wait States + + + + + Memory + + + + + Speed + + + + + Configure + + + + + Dynamic Recompiler + + + + + Time Synchronization + + + + + Disabled + + + + + Enabled (Local Time) + + + + + Enabled (UTC) + + + + + SettingsNetwork + + + Form + + + + + PCap Device + + + + + Network Adapter + + + + + Network Type + + + + + Configure + + + + + SettingsOtherPeripherals + + + Form + + + + + ISA RTC + + + + + + + + + Configure + + + + + ISA Memory Expansion + + + + + Card 2 + + + + + Card 3 + + + + + Card 1 + + + + + Card 4 + + + + + ISABugger Device + + + + + POST card + + + + + SettingsOtherRemovable + + + Form + + + + + MO Drives + + + + + + Bus + + + + + + Channel + + + + + Type + + + + + ZIP Drives + + + + + ZIP 250 + + + + + SettingsPorts + + + Form + + + + + LPT1 Device + + + + + LPT2 Device + + + + + LPT3 Device + + + + + Serial Port 1 + + + + + Parallel Port 1 + + + + + Serial Port 2 + + + + + Parallel Port 2 + + + + + Serial Port 3 + + + + + Parallel Port 3 + + + + + Serial Port 4 + + + + + SettingsSound + + + Form + + + + + MIDI In + + + + + Innovation SSI-2001 + + + + + Gravis Ultrasound + + + + + Sound Card + + + + + + + + + + + Configure + + + + + MIDI Out + + + + + Standalone MPU-401 + + + + + CMS / Game Blaster + + + + + Use FLOAT32 sound + + + + + SettingsStorageControllers + + + Form + + + + + HD Controller + + + + + + + + + + + + Configure + + + + + FD Controller + + + + + Tertiary IDE Controller + + + + + Quaternary IDE Controller + + + + + SCSI + + + + + Controller 1 + + + + + Controller 4 + + + + + Controller 2 + + + + + Controller 3 + + + + + Cassette + + + + + SoundGain + + + Sound Gain + + + + + Gain: + + + + + SpecifyDimensions + + + Specify Main Window Dimensions + + + + + Width: + + + + + Lock to this size + + + + + Height: + + + + diff --git a/src/qt/86box_ko.ts b/src/qt/86box_ko.ts new file mode 100644 index 000000000..4f6f72c43 --- /dev/null +++ b/src/qt/86box_ko.ts @@ -0,0 +1,1332 @@ + + + + + DeviceConfig + + + Dialog + + + + + FileField + + + Form + + + + + Browse + + + + + HarddiskDialog + + + Dialog + + + + + File name + + + + + Cylinders + + + + + Sectors + + + + + Size (MiB) + + + + + Heads + + + + + Type + + + + + Bus + + + + + Channel + + + + + Format + + + + + Block Size + + + + + JoystickConfiguration + + + Dialog + + + + + Device + + + + + MainWindow + + + 86Box + + + + + Action + + + + + Tools + + + + + View + + + + + Renderer + + + + + Window scale factor + + + + + Filter method + + + + + Fullscreen stretch mode + + + + + EGA/(S)VGA settings + + + + + VGA screen type + + + + + Grayscale conversion type + + + + + Media + + + + + Help + + + + + Keyboard requires capture + + + + + Right CTRL is left ALT + + + + + Hard Reset + + + + + Ctrl+Alt+Del + + + + + Ctrl+Alt+Esc + + + + + Pause + + + + + Exit + + + + + Settings + + + + + Fullscreen + + + + + Ctrl+Alt+PgUp + + + + + Software Renderer + + + + + Hardware Renderer (OpenGL) + + + + + Hardware Renderer (OpenGL ES) + + + + + Hide status bar + + + + + Resizable window + + + + + Remember size and position + + + + + Specify dimensions... + + + + + Force 4:3 display ratio + + + + + HiDPI scaling + + + + + CGA/PCjr/Tandy/EGA/(S)VGA overscan + + + + + Change contrast for monochrome display + + + + + 0.5x + + + + + 1x + + + + + 1.5x + + + + + 2x + + + + + Nearest + + + + + Linear + + + + + Full screen stretch + + + + + 4:3 + + + + + Square pixels (Keep ratio) + + + + + Integer scale + + + + + Inverted VGA monitor + + + + + RGB Color + + + + + RGB Grayscale + + + + + Amber monitor + + + + + Green monitor + + + + + White monitor + + + + + BT601 (NTSC/PAL) + + + + + BT709 (HDTV) + + + + + Average + + + + + About Qt... + + + + + About 86Box... + + + + + Documentation... + + + + + Update status bar icons + + + + + Take screenshot... + + + + + Sound gain... + + + + + OpenGL 3.0 Core + + + + + Program preferences... + + + + + MediaMenu + + + + + + New Image + + + + + + + + Existing Image + + + + + + + + Existing Image (Write Protected) + + + + + Record + + + + + Play + + + + + Rewind + + + + + Fast Forward + + + + + + + + + Eject + + + + + + Image + + + + + Export to 86F + + + + + Mute + + + + + Empty + + + + + + + Reload previous image + + + + + Create... + + + + + + + + + Open + + + + + Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) + + + + + Cassette: %1 + + + + + + + + + + (empty) + + + + + Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) + + + + + Cartridge %1: %2 + + + + + All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) + + + + + Save as 86f + + + + + Surface images (*.86f) + + + + + Unable to write file + + + + + Make sure the file is being saved to a writable directory + + + + + Floppy %1 (%2): %3 + + + + + CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) + + + + + + + Unknown Bus + + + + + CD-ROM %1 (%2): %3 + + + + + ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) + + + + + ZIP %1 %2 (%3): %4 + + + + + MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) + + + + + MO %1 (%2): %3 + + + + + NewFloppyDialog + + + New Image + + + + + File Name + + + + + Disk Size + + + + + RPM Mode + + + + + ProgSettings + + + Preferences + + + + + (Default) + + + + + Icon set: + + + + + Default + + + + + QObject + + + Click to capture mouse. + + + + + Press %1 to release mouse + + + + + Press %1 or middle button to release mouse + + + + + Failed to initialize FluidSynth + + + + + MFM/RLL or ESDI CD-ROM drives never existed + + + + + Failed to set up PCap + + + + + No PCap devices found + + + + + Unable to initialize FreeType + + + + + Unable to initialize SDL, libsdl2 is required + + + + + libfreetype is required for ESC/P printer emulation. + + + + + libgs is required for automatic conversion of PostScript files to PDF. + +Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. + + + + + %1 is required for FluidSynth MIDI output. + + + + + Make sure libpcap is installed and that you are on a libpcap-compatible network connection. + + + + + Unable to initialize Ghostscript + + + + + Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. + + + + + Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. + + + + + Hardware not available + + + + + No ROMs found. + + + + + 86Box could not find any usable ROM images. + +Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. + + + + + RendererStack + + + StackedWidget + + + + + Settings + + + 86Box Settings + + + + + SettingsDisplay + + + Form + + + + + Video + + + + + + Configure + + + + + Voodoo Graphics + + + + + SettingsFloppyCDROM + + + Form + + + + + Floppy Drives + + + + + Type + + + + + Turbo Timings + + + + + Check BPB + + + + + CD-ROM Drives + + + + + Channel + + + + + Speed + + + + + Bus + + + + + SettingsHarddisks + + + Form + + + + + Bus + + + + + ID + + + + + New + + + + + Existing + + + + + Remove + + + + + SettingsInput + + + Form + + + + + Mouse + + + + + Configure + + + + + Joystick + + + + + Joystick 1... + + + + + Joystick 2... + + + + + Joystick 3... + + + + + Joystick 4... + + + + + SettingsMachine + + + Form + + + + + Machine Type + + + + + Machine + + + + + CPU + + + + + FPU + + + + + Wait States + + + + + Memory + + + + + Speed + + + + + Configure + + + + + Dynamic Recompiler + + + + + Time Synchronization + + + + + Disabled + + + + + Enabled (Local Time) + + + + + Enabled (UTC) + + + + + SettingsNetwork + + + Form + + + + + PCap Device + + + + + Network Adapter + + + + + Network Type + + + + + Configure + + + + + SettingsOtherPeripherals + + + Form + + + + + ISA RTC + + + + + + + + + Configure + + + + + ISA Memory Expansion + + + + + Card 2 + + + + + Card 3 + + + + + Card 1 + + + + + Card 4 + + + + + ISABugger Device + + + + + POST card + + + + + SettingsOtherRemovable + + + Form + + + + + MO Drives + + + + + + Bus + + + + + + Channel + + + + + Type + + + + + ZIP Drives + + + + + ZIP 250 + + + + + SettingsPorts + + + Form + + + + + LPT1 Device + + + + + LPT2 Device + + + + + LPT3 Device + + + + + Serial Port 1 + + + + + Parallel Port 1 + + + + + Serial Port 2 + + + + + Parallel Port 2 + + + + + Serial Port 3 + + + + + Parallel Port 3 + + + + + Serial Port 4 + + + + + SettingsSound + + + Form + + + + + MIDI In + + + + + Innovation SSI-2001 + + + + + Gravis Ultrasound + + + + + Sound Card + + + + + + + + + + + Configure + + + + + MIDI Out + + + + + Standalone MPU-401 + + + + + CMS / Game Blaster + + + + + Use FLOAT32 sound + + + + + SettingsStorageControllers + + + Form + + + + + HD Controller + + + + + + + + + + + + Configure + + + + + FD Controller + + + + + Tertiary IDE Controller + + + + + Quaternary IDE Controller + + + + + SCSI + + + + + Controller 1 + + + + + Controller 4 + + + + + Controller 2 + + + + + Controller 3 + + + + + Cassette + + + + + SoundGain + + + Sound Gain + + + + + Gain: + + + + + SpecifyDimensions + + + Specify Main Window Dimensions + + + + + Width: + + + + + Lock to this size + + + + + Height: + + + + diff --git a/src/qt/86box_pt-BR.ts b/src/qt/86box_pt-BR.ts new file mode 100644 index 000000000..f4e460942 --- /dev/null +++ b/src/qt/86box_pt-BR.ts @@ -0,0 +1,1332 @@ + + + + + DeviceConfig + + + Dialog + + + + + FileField + + + Form + + + + + Browse + + + + + HarddiskDialog + + + Dialog + + + + + File name + + + + + Cylinders + + + + + Sectors + + + + + Size (MiB) + + + + + Heads + + + + + Type + + + + + Bus + + + + + Channel + + + + + Format + + + + + Block Size + + + + + JoystickConfiguration + + + Dialog + + + + + Device + + + + + MainWindow + + + 86Box + + + + + Action + + + + + Tools + + + + + View + + + + + Renderer + + + + + Window scale factor + + + + + Filter method + + + + + Fullscreen stretch mode + + + + + EGA/(S)VGA settings + + + + + VGA screen type + + + + + Grayscale conversion type + + + + + Media + + + + + Help + + + + + Keyboard requires capture + + + + + Right CTRL is left ALT + + + + + Hard Reset + + + + + Ctrl+Alt+Del + + + + + Ctrl+Alt+Esc + + + + + Pause + + + + + Exit + + + + + Settings + + + + + Fullscreen + + + + + Ctrl+Alt+PgUp + + + + + Software Renderer + + + + + Hardware Renderer (OpenGL) + + + + + Hardware Renderer (OpenGL ES) + + + + + Hide status bar + + + + + Resizable window + + + + + Remember size and position + + + + + Specify dimensions... + + + + + Force 4:3 display ratio + + + + + HiDPI scaling + + + + + CGA/PCjr/Tandy/EGA/(S)VGA overscan + + + + + Change contrast for monochrome display + + + + + 0.5x + + + + + 1x + + + + + 1.5x + + + + + 2x + + + + + Nearest + + + + + Linear + + + + + Full screen stretch + + + + + 4:3 + + + + + Square pixels (Keep ratio) + + + + + Integer scale + + + + + Inverted VGA monitor + + + + + RGB Color + + + + + RGB Grayscale + + + + + Amber monitor + + + + + Green monitor + + + + + White monitor + + + + + BT601 (NTSC/PAL) + + + + + BT709 (HDTV) + + + + + Average + + + + + About Qt... + + + + + About 86Box... + + + + + Documentation... + + + + + Update status bar icons + + + + + Take screenshot... + + + + + Sound gain... + + + + + OpenGL 3.0 Core + + + + + Program preferences... + + + + + MediaMenu + + + + + + New Image + + + + + + + + Existing Image + + + + + + + + Existing Image (Write Protected) + + + + + Record + + + + + Play + + + + + Rewind + + + + + Fast Forward + + + + + + + + + Eject + + + + + + Image + + + + + Export to 86F + + + + + Mute + + + + + Empty + + + + + + + Reload previous image + + + + + Create... + + + + + + + + + Open + + + + + Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) + + + + + Cassette: %1 + + + + + + + + + + (empty) + + + + + Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) + + + + + Cartridge %1: %2 + + + + + All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) + + + + + Save as 86f + + + + + Surface images (*.86f) + + + + + Unable to write file + + + + + Make sure the file is being saved to a writable directory + + + + + Floppy %1 (%2): %3 + + + + + CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) + + + + + + + Unknown Bus + + + + + CD-ROM %1 (%2): %3 + + + + + ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) + + + + + ZIP %1 %2 (%3): %4 + + + + + MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) + + + + + MO %1 (%2): %3 + + + + + NewFloppyDialog + + + New Image + + + + + File Name + + + + + Disk Size + + + + + RPM Mode + + + + + ProgSettings + + + Preferences + + + + + (Default) + + + + + Icon set: + + + + + Default + + + + + QObject + + + Click to capture mouse. + + + + + Press %1 to release mouse + + + + + Press %1 or middle button to release mouse + + + + + Failed to initialize FluidSynth + + + + + MFM/RLL or ESDI CD-ROM drives never existed + + + + + Failed to set up PCap + + + + + No PCap devices found + + + + + Unable to initialize FreeType + + + + + Unable to initialize SDL, libsdl2 is required + + + + + libfreetype is required for ESC/P printer emulation. + + + + + libgs is required for automatic conversion of PostScript files to PDF. + +Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. + + + + + %1 is required for FluidSynth MIDI output. + + + + + Make sure libpcap is installed and that you are on a libpcap-compatible network connection. + + + + + Unable to initialize Ghostscript + + + + + Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. + + + + + Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. + + + + + Hardware not available + + + + + No ROMs found. + + + + + 86Box could not find any usable ROM images. + +Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. + + + + + RendererStack + + + StackedWidget + + + + + Settings + + + 86Box Settings + + + + + SettingsDisplay + + + Form + + + + + Video + + + + + + Configure + + + + + Voodoo Graphics + + + + + SettingsFloppyCDROM + + + Form + + + + + Floppy Drives + + + + + Type + + + + + Turbo Timings + + + + + Check BPB + + + + + CD-ROM Drives + + + + + Channel + + + + + Speed + + + + + Bus + + + + + SettingsHarddisks + + + Form + + + + + Bus + + + + + ID + + + + + New + + + + + Existing + + + + + Remove + + + + + SettingsInput + + + Form + + + + + Mouse + + + + + Configure + + + + + Joystick + + + + + Joystick 1... + + + + + Joystick 2... + + + + + Joystick 3... + + + + + Joystick 4... + + + + + SettingsMachine + + + Form + + + + + Machine Type + + + + + Machine + + + + + CPU + + + + + FPU + + + + + Wait States + + + + + Memory + + + + + Speed + + + + + Configure + + + + + Dynamic Recompiler + + + + + Time Synchronization + + + + + Disabled + + + + + Enabled (Local Time) + + + + + Enabled (UTC) + + + + + SettingsNetwork + + + Form + + + + + PCap Device + + + + + Network Adapter + + + + + Network Type + + + + + Configure + + + + + SettingsOtherPeripherals + + + Form + + + + + ISA RTC + + + + + + + + + Configure + + + + + ISA Memory Expansion + + + + + Card 2 + + + + + Card 3 + + + + + Card 1 + + + + + Card 4 + + + + + ISABugger Device + + + + + POST card + + + + + SettingsOtherRemovable + + + Form + + + + + MO Drives + + + + + + Bus + + + + + + Channel + + + + + Type + + + + + ZIP Drives + + + + + ZIP 250 + + + + + SettingsPorts + + + Form + + + + + LPT1 Device + + + + + LPT2 Device + + + + + LPT3 Device + + + + + Serial Port 1 + + + + + Parallel Port 1 + + + + + Serial Port 2 + + + + + Parallel Port 2 + + + + + Serial Port 3 + + + + + Parallel Port 3 + + + + + Serial Port 4 + + + + + SettingsSound + + + Form + + + + + MIDI In + + + + + Innovation SSI-2001 + + + + + Gravis Ultrasound + + + + + Sound Card + + + + + + + + + + + Configure + + + + + MIDI Out + + + + + Standalone MPU-401 + + + + + CMS / Game Blaster + + + + + Use FLOAT32 sound + + + + + SettingsStorageControllers + + + Form + + + + + HD Controller + + + + + + + + + + + + Configure + + + + + FD Controller + + + + + Tertiary IDE Controller + + + + + Quaternary IDE Controller + + + + + SCSI + + + + + Controller 1 + + + + + Controller 4 + + + + + Controller 2 + + + + + Controller 3 + + + + + Cassette + + + + + SoundGain + + + Sound Gain + + + + + Gain: + + + + + SpecifyDimensions + + + Specify Main Window Dimensions + + + + + Width: + + + + + Lock to this size + + + + + Height: + + + + diff --git a/src/qt/86box_pt-PT.ts b/src/qt/86box_pt-PT.ts new file mode 100644 index 000000000..363a99686 --- /dev/null +++ b/src/qt/86box_pt-PT.ts @@ -0,0 +1,1332 @@ + + + + + DeviceConfig + + + Dialog + + + + + FileField + + + Form + + + + + Browse + + + + + HarddiskDialog + + + Dialog + + + + + File name + + + + + Cylinders + + + + + Sectors + + + + + Size (MiB) + + + + + Heads + + + + + Type + + + + + Bus + + + + + Channel + + + + + Format + + + + + Block Size + + + + + JoystickConfiguration + + + Dialog + + + + + Device + + + + + MainWindow + + + 86Box + + + + + Action + + + + + Tools + + + + + View + + + + + Renderer + + + + + Window scale factor + + + + + Filter method + + + + + Fullscreen stretch mode + + + + + EGA/(S)VGA settings + + + + + VGA screen type + + + + + Grayscale conversion type + + + + + Media + + + + + Help + + + + + Keyboard requires capture + + + + + Right CTRL is left ALT + + + + + Hard Reset + + + + + Ctrl+Alt+Del + + + + + Ctrl+Alt+Esc + + + + + Pause + + + + + Exit + + + + + Settings + + + + + Fullscreen + + + + + Ctrl+Alt+PgUp + + + + + Software Renderer + + + + + Hardware Renderer (OpenGL) + + + + + Hardware Renderer (OpenGL ES) + + + + + Hide status bar + + + + + Resizable window + + + + + Remember size and position + + + + + Specify dimensions... + + + + + Force 4:3 display ratio + + + + + HiDPI scaling + + + + + CGA/PCjr/Tandy/EGA/(S)VGA overscan + + + + + Change contrast for monochrome display + + + + + 0.5x + + + + + 1x + + + + + 1.5x + + + + + 2x + + + + + Nearest + + + + + Linear + + + + + Full screen stretch + + + + + 4:3 + + + + + Square pixels (Keep ratio) + + + + + Integer scale + + + + + Inverted VGA monitor + + + + + RGB Color + + + + + RGB Grayscale + + + + + Amber monitor + + + + + Green monitor + + + + + White monitor + + + + + BT601 (NTSC/PAL) + + + + + BT709 (HDTV) + + + + + Average + + + + + About Qt... + + + + + About 86Box... + + + + + Documentation... + + + + + Update status bar icons + + + + + Take screenshot... + + + + + Sound gain... + + + + + OpenGL 3.0 Core + + + + + Program preferences... + + + + + MediaMenu + + + + + + New Image + + + + + + + + Existing Image + + + + + + + + Existing Image (Write Protected) + + + + + Record + + + + + Play + + + + + Rewind + + + + + Fast Forward + + + + + + + + + Eject + + + + + + Image + + + + + Export to 86F + + + + + Mute + + + + + Empty + + + + + + + Reload previous image + + + + + Create... + + + + + + + + + Open + + + + + Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) + + + + + Cassette: %1 + + + + + + + + + + (empty) + + + + + Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) + + + + + Cartridge %1: %2 + + + + + All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) + + + + + Save as 86f + + + + + Surface images (*.86f) + + + + + Unable to write file + + + + + Make sure the file is being saved to a writable directory + + + + + Floppy %1 (%2): %3 + + + + + CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) + + + + + + + Unknown Bus + + + + + CD-ROM %1 (%2): %3 + + + + + ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) + + + + + ZIP %1 %2 (%3): %4 + + + + + MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) + + + + + MO %1 (%2): %3 + + + + + NewFloppyDialog + + + New Image + + + + + File Name + + + + + Disk Size + + + + + RPM Mode + + + + + ProgSettings + + + Preferences + + + + + (Default) + + + + + Icon set: + + + + + Default + + + + + QObject + + + Click to capture mouse. + + + + + Press %1 to release mouse + + + + + Press %1 or middle button to release mouse + + + + + Failed to initialize FluidSynth + + + + + MFM/RLL or ESDI CD-ROM drives never existed + + + + + Failed to set up PCap + + + + + No PCap devices found + + + + + Unable to initialize FreeType + + + + + Unable to initialize SDL, libsdl2 is required + + + + + libfreetype is required for ESC/P printer emulation. + + + + + libgs is required for automatic conversion of PostScript files to PDF. + +Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. + + + + + %1 is required for FluidSynth MIDI output. + + + + + Make sure libpcap is installed and that you are on a libpcap-compatible network connection. + + + + + Unable to initialize Ghostscript + + + + + Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. + + + + + Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. + + + + + Hardware not available + + + + + No ROMs found. + + + + + 86Box could not find any usable ROM images. + +Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. + + + + + RendererStack + + + StackedWidget + + + + + Settings + + + 86Box Settings + + + + + SettingsDisplay + + + Form + + + + + Video + + + + + + Configure + + + + + Voodoo Graphics + + + + + SettingsFloppyCDROM + + + Form + + + + + Floppy Drives + + + + + Type + + + + + Turbo Timings + + + + + Check BPB + + + + + CD-ROM Drives + + + + + Channel + + + + + Speed + + + + + Bus + + + + + SettingsHarddisks + + + Form + + + + + Bus + + + + + ID + + + + + New + + + + + Existing + + + + + Remove + + + + + SettingsInput + + + Form + + + + + Mouse + + + + + Configure + + + + + Joystick + + + + + Joystick 1... + + + + + Joystick 2... + + + + + Joystick 3... + + + + + Joystick 4... + + + + + SettingsMachine + + + Form + + + + + Machine Type + + + + + Machine + + + + + CPU + + + + + FPU + + + + + Wait States + + + + + Memory + + + + + Speed + + + + + Configure + + + + + Dynamic Recompiler + + + + + Time Synchronization + + + + + Disabled + + + + + Enabled (Local Time) + + + + + Enabled (UTC) + + + + + SettingsNetwork + + + Form + + + + + PCap Device + + + + + Network Adapter + + + + + Network Type + + + + + Configure + + + + + SettingsOtherPeripherals + + + Form + + + + + ISA RTC + + + + + + + + + Configure + + + + + ISA Memory Expansion + + + + + Card 2 + + + + + Card 3 + + + + + Card 1 + + + + + Card 4 + + + + + ISABugger Device + + + + + POST card + + + + + SettingsOtherRemovable + + + Form + + + + + MO Drives + + + + + + Bus + + + + + + Channel + + + + + Type + + + + + ZIP Drives + + + + + ZIP 250 + + + + + SettingsPorts + + + Form + + + + + LPT1 Device + + + + + LPT2 Device + + + + + LPT3 Device + + + + + Serial Port 1 + + + + + Parallel Port 1 + + + + + Serial Port 2 + + + + + Parallel Port 2 + + + + + Serial Port 3 + + + + + Parallel Port 3 + + + + + Serial Port 4 + + + + + SettingsSound + + + Form + + + + + MIDI In + + + + + Innovation SSI-2001 + + + + + Gravis Ultrasound + + + + + Sound Card + + + + + + + + + + + Configure + + + + + MIDI Out + + + + + Standalone MPU-401 + + + + + CMS / Game Blaster + + + + + Use FLOAT32 sound + + + + + SettingsStorageControllers + + + Form + + + + + HD Controller + + + + + + + + + + + + Configure + + + + + FD Controller + + + + + Tertiary IDE Controller + + + + + Quaternary IDE Controller + + + + + SCSI + + + + + Controller 1 + + + + + Controller 4 + + + + + Controller 2 + + + + + Controller 3 + + + + + Cassette + + + + + SoundGain + + + Sound Gain + + + + + Gain: + + + + + SpecifyDimensions + + + Specify Main Window Dimensions + + + + + Width: + + + + + Lock to this size + + + + + Height: + + + + diff --git a/src/qt/86box_ru.ts b/src/qt/86box_ru.ts new file mode 100644 index 000000000..680acac99 --- /dev/null +++ b/src/qt/86box_ru.ts @@ -0,0 +1,1332 @@ + + + + + DeviceConfig + + + Dialog + + + + + FileField + + + Form + + + + + Browse + + + + + HarddiskDialog + + + Dialog + + + + + File name + + + + + Cylinders + + + + + Sectors + + + + + Size (MiB) + + + + + Heads + + + + + Type + + + + + Bus + + + + + Channel + + + + + Format + + + + + Block Size + + + + + JoystickConfiguration + + + Dialog + + + + + Device + + + + + MainWindow + + + 86Box + + + + + Action + + + + + Tools + + + + + View + + + + + Renderer + + + + + Window scale factor + + + + + Filter method + + + + + Fullscreen stretch mode + + + + + EGA/(S)VGA settings + + + + + VGA screen type + + + + + Grayscale conversion type + + + + + Media + + + + + Help + + + + + Keyboard requires capture + + + + + Right CTRL is left ALT + + + + + Hard Reset + + + + + Ctrl+Alt+Del + + + + + Ctrl+Alt+Esc + + + + + Pause + + + + + Exit + + + + + Settings + + + + + Fullscreen + + + + + Ctrl+Alt+PgUp + + + + + Software Renderer + + + + + Hardware Renderer (OpenGL) + + + + + Hardware Renderer (OpenGL ES) + + + + + Hide status bar + + + + + Resizable window + + + + + Remember size and position + + + + + Specify dimensions... + + + + + Force 4:3 display ratio + + + + + HiDPI scaling + + + + + CGA/PCjr/Tandy/EGA/(S)VGA overscan + + + + + Change contrast for monochrome display + + + + + 0.5x + + + + + 1x + + + + + 1.5x + + + + + 2x + + + + + Nearest + + + + + Linear + + + + + Full screen stretch + + + + + 4:3 + + + + + Square pixels (Keep ratio) + + + + + Integer scale + + + + + Inverted VGA monitor + + + + + RGB Color + + + + + RGB Grayscale + + + + + Amber monitor + + + + + Green monitor + + + + + White monitor + + + + + BT601 (NTSC/PAL) + + + + + BT709 (HDTV) + + + + + Average + + + + + About Qt... + + + + + About 86Box... + + + + + Documentation... + + + + + Update status bar icons + + + + + Take screenshot... + + + + + Sound gain... + + + + + OpenGL 3.0 Core + + + + + Program preferences... + + + + + MediaMenu + + + + + + New Image + + + + + + + + Existing Image + + + + + + + + Existing Image (Write Protected) + + + + + Record + + + + + Play + + + + + Rewind + + + + + Fast Forward + + + + + + + + + Eject + + + + + + Image + + + + + Export to 86F + + + + + Mute + + + + + Empty + + + + + + + Reload previous image + + + + + Create... + + + + + + + + + Open + + + + + Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) + + + + + Cassette: %1 + + + + + + + + + + (empty) + + + + + Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) + + + + + Cartridge %1: %2 + + + + + All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) + + + + + Save as 86f + + + + + Surface images (*.86f) + + + + + Unable to write file + + + + + Make sure the file is being saved to a writable directory + + + + + Floppy %1 (%2): %3 + + + + + CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) + + + + + + + Unknown Bus + + + + + CD-ROM %1 (%2): %3 + + + + + ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) + + + + + ZIP %1 %2 (%3): %4 + + + + + MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) + + + + + MO %1 (%2): %3 + + + + + NewFloppyDialog + + + New Image + + + + + File Name + + + + + Disk Size + + + + + RPM Mode + + + + + ProgSettings + + + Preferences + + + + + (Default) + + + + + Icon set: + + + + + Default + + + + + QObject + + + Click to capture mouse. + + + + + Press %1 to release mouse + + + + + Press %1 or middle button to release mouse + + + + + Failed to initialize FluidSynth + + + + + MFM/RLL or ESDI CD-ROM drives never existed + + + + + Failed to set up PCap + + + + + No PCap devices found + + + + + Unable to initialize FreeType + + + + + Unable to initialize SDL, libsdl2 is required + + + + + libfreetype is required for ESC/P printer emulation. + + + + + libgs is required for automatic conversion of PostScript files to PDF. + +Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. + + + + + %1 is required for FluidSynth MIDI output. + + + + + Make sure libpcap is installed and that you are on a libpcap-compatible network connection. + + + + + Unable to initialize Ghostscript + + + + + Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. + + + + + Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. + + + + + Hardware not available + + + + + No ROMs found. + + + + + 86Box could not find any usable ROM images. + +Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. + + + + + RendererStack + + + StackedWidget + + + + + Settings + + + 86Box Settings + + + + + SettingsDisplay + + + Form + + + + + Video + + + + + + Configure + + + + + Voodoo Graphics + + + + + SettingsFloppyCDROM + + + Form + + + + + Floppy Drives + + + + + Type + + + + + Turbo Timings + + + + + Check BPB + + + + + CD-ROM Drives + + + + + Channel + + + + + Speed + + + + + Bus + + + + + SettingsHarddisks + + + Form + + + + + Bus + + + + + ID + + + + + New + + + + + Existing + + + + + Remove + + + + + SettingsInput + + + Form + + + + + Mouse + + + + + Configure + + + + + Joystick + + + + + Joystick 1... + + + + + Joystick 2... + + + + + Joystick 3... + + + + + Joystick 4... + + + + + SettingsMachine + + + Form + + + + + Machine Type + + + + + Machine + + + + + CPU + + + + + FPU + + + + + Wait States + + + + + Memory + + + + + Speed + + + + + Configure + + + + + Dynamic Recompiler + + + + + Time Synchronization + + + + + Disabled + + + + + Enabled (Local Time) + + + + + Enabled (UTC) + + + + + SettingsNetwork + + + Form + + + + + PCap Device + + + + + Network Adapter + + + + + Network Type + + + + + Configure + + + + + SettingsOtherPeripherals + + + Form + + + + + ISA RTC + + + + + + + + + Configure + + + + + ISA Memory Expansion + + + + + Card 2 + + + + + Card 3 + + + + + Card 1 + + + + + Card 4 + + + + + ISABugger Device + + + + + POST card + + + + + SettingsOtherRemovable + + + Form + + + + + MO Drives + + + + + + Bus + + + + + + Channel + + + + + Type + + + + + ZIP Drives + + + + + ZIP 250 + + + + + SettingsPorts + + + Form + + + + + LPT1 Device + + + + + LPT2 Device + + + + + LPT3 Device + + + + + Serial Port 1 + + + + + Parallel Port 1 + + + + + Serial Port 2 + + + + + Parallel Port 2 + + + + + Serial Port 3 + + + + + Parallel Port 3 + + + + + Serial Port 4 + + + + + SettingsSound + + + Form + + + + + MIDI In + + + + + Innovation SSI-2001 + + + + + Gravis Ultrasound + + + + + Sound Card + + + + + + + + + + + Configure + + + + + MIDI Out + + + + + Standalone MPU-401 + + + + + CMS / Game Blaster + + + + + Use FLOAT32 sound + + + + + SettingsStorageControllers + + + Form + + + + + HD Controller + + + + + + + + + + + + Configure + + + + + FD Controller + + + + + Tertiary IDE Controller + + + + + Quaternary IDE Controller + + + + + SCSI + + + + + Controller 1 + + + + + Controller 4 + + + + + Controller 2 + + + + + Controller 3 + + + + + Cassette + + + + + SoundGain + + + Sound Gain + + + + + Gain: + + + + + SpecifyDimensions + + + Specify Main Window Dimensions + + + + + Width: + + + + + Lock to this size + + + + + Height: + + + + diff --git a/src/qt/86box_sl.ts b/src/qt/86box_sl.ts new file mode 100644 index 000000000..5cc93e09f --- /dev/null +++ b/src/qt/86box_sl.ts @@ -0,0 +1,1332 @@ + + + + + DeviceConfig + + + Dialog + + + + + FileField + + + Form + + + + + Browse + + + + + HarddiskDialog + + + Dialog + + + + + File name + + + + + Cylinders + + + + + Sectors + + + + + Size (MiB) + + + + + Heads + + + + + Type + + + + + Bus + + + + + Channel + + + + + Format + + + + + Block Size + + + + + JoystickConfiguration + + + Dialog + + + + + Device + + + + + MainWindow + + + 86Box + + + + + Action + + + + + Tools + + + + + View + + + + + Renderer + + + + + Window scale factor + + + + + Filter method + + + + + Fullscreen stretch mode + + + + + EGA/(S)VGA settings + + + + + VGA screen type + + + + + Grayscale conversion type + + + + + Media + + + + + Help + + + + + Keyboard requires capture + + + + + Right CTRL is left ALT + + + + + Hard Reset + + + + + Ctrl+Alt+Del + + + + + Ctrl+Alt+Esc + + + + + Pause + + + + + Exit + + + + + Settings + + + + + Fullscreen + + + + + Ctrl+Alt+PgUp + + + + + Software Renderer + + + + + Hardware Renderer (OpenGL) + + + + + Hardware Renderer (OpenGL ES) + + + + + Hide status bar + + + + + Resizable window + + + + + Remember size and position + + + + + Specify dimensions... + + + + + Force 4:3 display ratio + + + + + HiDPI scaling + + + + + CGA/PCjr/Tandy/EGA/(S)VGA overscan + + + + + Change contrast for monochrome display + + + + + 0.5x + + + + + 1x + + + + + 1.5x + + + + + 2x + + + + + Nearest + + + + + Linear + + + + + Full screen stretch + + + + + 4:3 + + + + + Square pixels (Keep ratio) + + + + + Integer scale + + + + + Inverted VGA monitor + + + + + RGB Color + + + + + RGB Grayscale + + + + + Amber monitor + + + + + Green monitor + + + + + White monitor + + + + + BT601 (NTSC/PAL) + + + + + BT709 (HDTV) + + + + + Average + + + + + About Qt... + + + + + About 86Box... + + + + + Documentation... + + + + + Update status bar icons + + + + + Take screenshot... + + + + + Sound gain... + + + + + OpenGL 3.0 Core + + + + + Program preferences... + + + + + MediaMenu + + + + + + New Image + + + + + + + + Existing Image + + + + + + + + Existing Image (Write Protected) + + + + + Record + + + + + Play + + + + + Rewind + + + + + Fast Forward + + + + + + + + + Eject + + + + + + Image + + + + + Export to 86F + + + + + Mute + + + + + Empty + + + + + + + Reload previous image + + + + + Create... + + + + + + + + + Open + + + + + Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) + + + + + Cassette: %1 + + + + + + + + + + (empty) + + + + + Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) + + + + + Cartridge %1: %2 + + + + + All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) + + + + + Save as 86f + + + + + Surface images (*.86f) + + + + + Unable to write file + + + + + Make sure the file is being saved to a writable directory + + + + + Floppy %1 (%2): %3 + + + + + CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) + + + + + + + Unknown Bus + + + + + CD-ROM %1 (%2): %3 + + + + + ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) + + + + + ZIP %1 %2 (%3): %4 + + + + + MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) + + + + + MO %1 (%2): %3 + + + + + NewFloppyDialog + + + New Image + + + + + File Name + + + + + Disk Size + + + + + RPM Mode + + + + + ProgSettings + + + Preferences + + + + + (Default) + + + + + Icon set: + + + + + Default + + + + + QObject + + + Click to capture mouse. + + + + + Press %1 to release mouse + + + + + Press %1 or middle button to release mouse + + + + + Failed to initialize FluidSynth + + + + + MFM/RLL or ESDI CD-ROM drives never existed + + + + + Failed to set up PCap + + + + + No PCap devices found + + + + + Unable to initialize FreeType + + + + + Unable to initialize SDL, libsdl2 is required + + + + + libfreetype is required for ESC/P printer emulation. + + + + + libgs is required for automatic conversion of PostScript files to PDF. + +Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. + + + + + %1 is required for FluidSynth MIDI output. + + + + + Make sure libpcap is installed and that you are on a libpcap-compatible network connection. + + + + + Unable to initialize Ghostscript + + + + + Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. + + + + + Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. + + + + + Hardware not available + + + + + No ROMs found. + + + + + 86Box could not find any usable ROM images. + +Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. + + + + + RendererStack + + + StackedWidget + + + + + Settings + + + 86Box Settings + + + + + SettingsDisplay + + + Form + + + + + Video + + + + + + Configure + + + + + Voodoo Graphics + + + + + SettingsFloppyCDROM + + + Form + + + + + Floppy Drives + + + + + Type + + + + + Turbo Timings + + + + + Check BPB + + + + + CD-ROM Drives + + + + + Channel + + + + + Speed + + + + + Bus + + + + + SettingsHarddisks + + + Form + + + + + Bus + + + + + ID + + + + + New + + + + + Existing + + + + + Remove + + + + + SettingsInput + + + Form + + + + + Mouse + + + + + Configure + + + + + Joystick + + + + + Joystick 1... + + + + + Joystick 2... + + + + + Joystick 3... + + + + + Joystick 4... + + + + + SettingsMachine + + + Form + + + + + Machine Type + + + + + Machine + + + + + CPU + + + + + FPU + + + + + Wait States + + + + + Memory + + + + + Speed + + + + + Configure + + + + + Dynamic Recompiler + + + + + Time Synchronization + + + + + Disabled + + + + + Enabled (Local Time) + + + + + Enabled (UTC) + + + + + SettingsNetwork + + + Form + + + + + PCap Device + + + + + Network Adapter + + + + + Network Type + + + + + Configure + + + + + SettingsOtherPeripherals + + + Form + + + + + ISA RTC + + + + + + + + + Configure + + + + + ISA Memory Expansion + + + + + Card 2 + + + + + Card 3 + + + + + Card 1 + + + + + Card 4 + + + + + ISABugger Device + + + + + POST card + + + + + SettingsOtherRemovable + + + Form + + + + + MO Drives + + + + + + Bus + + + + + + Channel + + + + + Type + + + + + ZIP Drives + + + + + ZIP 250 + + + + + SettingsPorts + + + Form + + + + + LPT1 Device + + + + + LPT2 Device + + + + + LPT3 Device + + + + + Serial Port 1 + + + + + Parallel Port 1 + + + + + Serial Port 2 + + + + + Parallel Port 2 + + + + + Serial Port 3 + + + + + Parallel Port 3 + + + + + Serial Port 4 + + + + + SettingsSound + + + Form + + + + + MIDI In + + + + + Innovation SSI-2001 + + + + + Gravis Ultrasound + + + + + Sound Card + + + + + + + + + + + Configure + + + + + MIDI Out + + + + + Standalone MPU-401 + + + + + CMS / Game Blaster + + + + + Use FLOAT32 sound + + + + + SettingsStorageControllers + + + Form + + + + + HD Controller + + + + + + + + + + + + Configure + + + + + FD Controller + + + + + Tertiary IDE Controller + + + + + Quaternary IDE Controller + + + + + SCSI + + + + + Controller 1 + + + + + Controller 4 + + + + + Controller 2 + + + + + Controller 3 + + + + + Cassette + + + + + SoundGain + + + Sound Gain + + + + + Gain: + + + + + SpecifyDimensions + + + Specify Main Window Dimensions + + + + + Width: + + + + + Lock to this size + + + + + Height: + + + + diff --git a/src/qt/86box_tr.ts b/src/qt/86box_tr.ts new file mode 100644 index 000000000..cb163220d --- /dev/null +++ b/src/qt/86box_tr.ts @@ -0,0 +1,1332 @@ + + + + + DeviceConfig + + + Dialog + + + + + FileField + + + Form + + + + + Browse + + + + + HarddiskDialog + + + Dialog + + + + + File name + + + + + Cylinders + + + + + Sectors + + + + + Size (MiB) + + + + + Heads + + + + + Type + + + + + Bus + + + + + Channel + + + + + Format + + + + + Block Size + + + + + JoystickConfiguration + + + Dialog + + + + + Device + + + + + MainWindow + + + 86Box + + + + + Action + + + + + Tools + + + + + View + + + + + Renderer + + + + + Window scale factor + + + + + Filter method + + + + + Fullscreen stretch mode + + + + + EGA/(S)VGA settings + + + + + VGA screen type + + + + + Grayscale conversion type + + + + + Media + + + + + Help + + + + + Keyboard requires capture + + + + + Right CTRL is left ALT + + + + + Hard Reset + + + + + Ctrl+Alt+Del + + + + + Ctrl+Alt+Esc + + + + + Pause + + + + + Exit + + + + + Settings + + + + + Fullscreen + + + + + Ctrl+Alt+PgUp + + + + + Software Renderer + + + + + Hardware Renderer (OpenGL) + + + + + Hardware Renderer (OpenGL ES) + + + + + Hide status bar + + + + + Resizable window + + + + + Remember size and position + + + + + Specify dimensions... + + + + + Force 4:3 display ratio + + + + + HiDPI scaling + + + + + CGA/PCjr/Tandy/EGA/(S)VGA overscan + + + + + Change contrast for monochrome display + + + + + 0.5x + + + + + 1x + + + + + 1.5x + + + + + 2x + + + + + Nearest + + + + + Linear + + + + + Full screen stretch + + + + + 4:3 + + + + + Square pixels (Keep ratio) + + + + + Integer scale + + + + + Inverted VGA monitor + + + + + RGB Color + + + + + RGB Grayscale + + + + + Amber monitor + + + + + Green monitor + + + + + White monitor + + + + + BT601 (NTSC/PAL) + + + + + BT709 (HDTV) + + + + + Average + + + + + About Qt... + + + + + About 86Box... + + + + + Documentation... + + + + + Update status bar icons + + + + + Take screenshot... + + + + + Sound gain... + + + + + OpenGL 3.0 Core + + + + + Program preferences... + + + + + MediaMenu + + + + + + New Image + + + + + + + + Existing Image + + + + + + + + Existing Image (Write Protected) + + + + + Record + + + + + Play + + + + + Rewind + + + + + Fast Forward + + + + + + + + + Eject + + + + + + Image + + + + + Export to 86F + + + + + Mute + + + + + Empty + + + + + + + Reload previous image + + + + + Create... + + + + + + + + + Open + + + + + Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) + + + + + Cassette: %1 + + + + + + + + + + (empty) + + + + + Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) + + + + + Cartridge %1: %2 + + + + + All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) + + + + + Save as 86f + + + + + Surface images (*.86f) + + + + + Unable to write file + + + + + Make sure the file is being saved to a writable directory + + + + + Floppy %1 (%2): %3 + + + + + CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) + + + + + + + Unknown Bus + + + + + CD-ROM %1 (%2): %3 + + + + + ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) + + + + + ZIP %1 %2 (%3): %4 + + + + + MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) + + + + + MO %1 (%2): %3 + + + + + NewFloppyDialog + + + New Image + + + + + File Name + + + + + Disk Size + + + + + RPM Mode + + + + + ProgSettings + + + Preferences + + + + + (Default) + + + + + Icon set: + + + + + Default + + + + + QObject + + + Click to capture mouse. + + + + + Press %1 to release mouse + + + + + Press %1 or middle button to release mouse + + + + + Failed to initialize FluidSynth + + + + + MFM/RLL or ESDI CD-ROM drives never existed + + + + + Failed to set up PCap + + + + + No PCap devices found + + + + + Unable to initialize FreeType + + + + + Unable to initialize SDL, libsdl2 is required + + + + + libfreetype is required for ESC/P printer emulation. + + + + + libgs is required for automatic conversion of PostScript files to PDF. + +Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. + + + + + %1 is required for FluidSynth MIDI output. + + + + + Make sure libpcap is installed and that you are on a libpcap-compatible network connection. + + + + + Unable to initialize Ghostscript + + + + + Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. + + + + + Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. + + + + + Hardware not available + + + + + No ROMs found. + + + + + 86Box could not find any usable ROM images. + +Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. + + + + + RendererStack + + + StackedWidget + + + + + Settings + + + 86Box Settings + + + + + SettingsDisplay + + + Form + + + + + Video + + + + + + Configure + + + + + Voodoo Graphics + + + + + SettingsFloppyCDROM + + + Form + + + + + Floppy Drives + + + + + Type + + + + + Turbo Timings + + + + + Check BPB + + + + + CD-ROM Drives + + + + + Channel + + + + + Speed + + + + + Bus + + + + + SettingsHarddisks + + + Form + + + + + Bus + + + + + ID + + + + + New + + + + + Existing + + + + + Remove + + + + + SettingsInput + + + Form + + + + + Mouse + + + + + Configure + + + + + Joystick + + + + + Joystick 1... + + + + + Joystick 2... + + + + + Joystick 3... + + + + + Joystick 4... + + + + + SettingsMachine + + + Form + + + + + Machine Type + + + + + Machine + + + + + CPU + + + + + FPU + + + + + Wait States + + + + + Memory + + + + + Speed + + + + + Configure + + + + + Dynamic Recompiler + + + + + Time Synchronization + + + + + Disabled + + + + + Enabled (Local Time) + + + + + Enabled (UTC) + + + + + SettingsNetwork + + + Form + + + + + PCap Device + + + + + Network Adapter + + + + + Network Type + + + + + Configure + + + + + SettingsOtherPeripherals + + + Form + + + + + ISA RTC + + + + + + + + + Configure + + + + + ISA Memory Expansion + + + + + Card 2 + + + + + Card 3 + + + + + Card 1 + + + + + Card 4 + + + + + ISABugger Device + + + + + POST card + + + + + SettingsOtherRemovable + + + Form + + + + + MO Drives + + + + + + Bus + + + + + + Channel + + + + + Type + + + + + ZIP Drives + + + + + ZIP 250 + + + + + SettingsPorts + + + Form + + + + + LPT1 Device + + + + + LPT2 Device + + + + + LPT3 Device + + + + + Serial Port 1 + + + + + Parallel Port 1 + + + + + Serial Port 2 + + + + + Parallel Port 2 + + + + + Serial Port 3 + + + + + Parallel Port 3 + + + + + Serial Port 4 + + + + + SettingsSound + + + Form + + + + + MIDI In + + + + + Innovation SSI-2001 + + + + + Gravis Ultrasound + + + + + Sound Card + + + + + + + + + + + Configure + + + + + MIDI Out + + + + + Standalone MPU-401 + + + + + CMS / Game Blaster + + + + + Use FLOAT32 sound + + + + + SettingsStorageControllers + + + Form + + + + + HD Controller + + + + + + + + + + + + Configure + + + + + FD Controller + + + + + Tertiary IDE Controller + + + + + Quaternary IDE Controller + + + + + SCSI + + + + + Controller 1 + + + + + Controller 4 + + + + + Controller 2 + + + + + Controller 3 + + + + + Cassette + + + + + SoundGain + + + Sound Gain + + + + + Gain: + + + + + SpecifyDimensions + + + Specify Main Window Dimensions + + + + + Width: + + + + + Lock to this size + + + + + Height: + + + + diff --git a/src/qt/86box_zh.ts b/src/qt/86box_zh.ts new file mode 100644 index 000000000..1fb859578 --- /dev/null +++ b/src/qt/86box_zh.ts @@ -0,0 +1,1332 @@ + + + + + DeviceConfig + + + Dialog + + + + + FileField + + + Form + + + + + Browse + + + + + HarddiskDialog + + + Dialog + + + + + File name + + + + + Cylinders + + + + + Sectors + + + + + Size (MiB) + + + + + Heads + + + + + Type + + + + + Bus + + + + + Channel + + + + + Format + + + + + Block Size + + + + + JoystickConfiguration + + + Dialog + + + + + Device + + + + + MainWindow + + + 86Box + + + + + Action + + + + + Tools + + + + + View + + + + + Renderer + + + + + Window scale factor + + + + + Filter method + + + + + Fullscreen stretch mode + + + + + EGA/(S)VGA settings + + + + + VGA screen type + + + + + Grayscale conversion type + + + + + Media + + + + + Help + + + + + Keyboard requires capture + + + + + Right CTRL is left ALT + + + + + Hard Reset + + + + + Ctrl+Alt+Del + + + + + Ctrl+Alt+Esc + + + + + Pause + + + + + Exit + + + + + Settings + + + + + Fullscreen + + + + + Ctrl+Alt+PgUp + + + + + Software Renderer + + + + + Hardware Renderer (OpenGL) + + + + + Hardware Renderer (OpenGL ES) + + + + + Hide status bar + + + + + Resizable window + + + + + Remember size and position + + + + + Specify dimensions... + + + + + Force 4:3 display ratio + + + + + HiDPI scaling + + + + + CGA/PCjr/Tandy/EGA/(S)VGA overscan + + + + + Change contrast for monochrome display + + + + + 0.5x + + + + + 1x + + + + + 1.5x + + + + + 2x + + + + + Nearest + + + + + Linear + + + + + Full screen stretch + + + + + 4:3 + + + + + Square pixels (Keep ratio) + + + + + Integer scale + + + + + Inverted VGA monitor + + + + + RGB Color + + + + + RGB Grayscale + + + + + Amber monitor + + + + + Green monitor + + + + + White monitor + + + + + BT601 (NTSC/PAL) + + + + + BT709 (HDTV) + + + + + Average + + + + + About Qt... + + + + + About 86Box... + + + + + Documentation... + + + + + Update status bar icons + + + + + Take screenshot... + + + + + Sound gain... + + + + + OpenGL 3.0 Core + + + + + Program preferences... + + + + + MediaMenu + + + + + + New Image + + + + + + + + Existing Image + + + + + + + + Existing Image (Write Protected) + + + + + Record + + + + + Play + + + + + Rewind + + + + + Fast Forward + + + + + + + + + Eject + + + + + + Image + + + + + Export to 86F + + + + + Mute + + + + + Empty + + + + + + + Reload previous image + + + + + Create... + + + + + + + + + Open + + + + + Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) + + + + + Cassette: %1 + + + + + + + + + + (empty) + + + + + Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) + + + + + Cartridge %1: %2 + + + + + All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) + + + + + Save as 86f + + + + + Surface images (*.86f) + + + + + Unable to write file + + + + + Make sure the file is being saved to a writable directory + + + + + Floppy %1 (%2): %3 + + + + + CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) + + + + + + + Unknown Bus + + + + + CD-ROM %1 (%2): %3 + + + + + ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) + + + + + ZIP %1 %2 (%3): %4 + + + + + MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) + + + + + MO %1 (%2): %3 + + + + + NewFloppyDialog + + + New Image + + + + + File Name + + + + + Disk Size + + + + + RPM Mode + + + + + ProgSettings + + + Preferences + + + + + (Default) + + + + + Icon set: + + + + + Default + + + + + QObject + + + Click to capture mouse. + + + + + Press %1 to release mouse + + + + + Press %1 or middle button to release mouse + + + + + Failed to initialize FluidSynth + + + + + MFM/RLL or ESDI CD-ROM drives never existed + + + + + Failed to set up PCap + + + + + No PCap devices found + + + + + Unable to initialize FreeType + + + + + Unable to initialize SDL, libsdl2 is required + + + + + libfreetype is required for ESC/P printer emulation. + + + + + libgs is required for automatic conversion of PostScript files to PDF. + +Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. + + + + + %1 is required for FluidSynth MIDI output. + + + + + Make sure libpcap is installed and that you are on a libpcap-compatible network connection. + + + + + Unable to initialize Ghostscript + + + + + Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. + + + + + Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. + + + + + Hardware not available + + + + + No ROMs found. + + + + + 86Box could not find any usable ROM images. + +Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. + + + + + RendererStack + + + StackedWidget + + + + + Settings + + + 86Box Settings + + + + + SettingsDisplay + + + Form + + + + + Video + + + + + + Configure + + + + + Voodoo Graphics + + + + + SettingsFloppyCDROM + + + Form + + + + + Floppy Drives + + + + + Type + + + + + Turbo Timings + + + + + Check BPB + + + + + CD-ROM Drives + + + + + Channel + + + + + Speed + + + + + Bus + + + + + SettingsHarddisks + + + Form + + + + + Bus + + + + + ID + + + + + New + + + + + Existing + + + + + Remove + + + + + SettingsInput + + + Form + + + + + Mouse + + + + + Configure + + + + + Joystick + + + + + Joystick 1... + + + + + Joystick 2... + + + + + Joystick 3... + + + + + Joystick 4... + + + + + SettingsMachine + + + Form + + + + + Machine Type + + + + + Machine + + + + + CPU + + + + + FPU + + + + + Wait States + + + + + Memory + + + + + Speed + + + + + Configure + + + + + Dynamic Recompiler + + + + + Time Synchronization + + + + + Disabled + + + + + Enabled (Local Time) + + + + + Enabled (UTC) + + + + + SettingsNetwork + + + Form + + + + + PCap Device + + + + + Network Adapter + + + + + Network Type + + + + + Configure + + + + + SettingsOtherPeripherals + + + Form + + + + + ISA RTC + + + + + + + + + Configure + + + + + ISA Memory Expansion + + + + + Card 2 + + + + + Card 3 + + + + + Card 1 + + + + + Card 4 + + + + + ISABugger Device + + + + + POST card + + + + + SettingsOtherRemovable + + + Form + + + + + MO Drives + + + + + + Bus + + + + + + Channel + + + + + Type + + + + + ZIP Drives + + + + + ZIP 250 + + + + + SettingsPorts + + + Form + + + + + LPT1 Device + + + + + LPT2 Device + + + + + LPT3 Device + + + + + Serial Port 1 + + + + + Parallel Port 1 + + + + + Serial Port 2 + + + + + Parallel Port 2 + + + + + Serial Port 3 + + + + + Parallel Port 3 + + + + + Serial Port 4 + + + + + SettingsSound + + + Form + + + + + MIDI In + + + + + Innovation SSI-2001 + + + + + Gravis Ultrasound + + + + + Sound Card + + + + + + + + + + + Configure + + + + + MIDI Out + + + + + Standalone MPU-401 + + + + + CMS / Game Blaster + + + + + Use FLOAT32 sound + + + + + SettingsStorageControllers + + + Form + + + + + HD Controller + + + + + + + + + + + + Configure + + + + + FD Controller + + + + + Tertiary IDE Controller + + + + + Quaternary IDE Controller + + + + + SCSI + + + + + Controller 1 + + + + + Controller 4 + + + + + Controller 2 + + + + + Controller 3 + + + + + Cassette + + + + + SoundGain + + + Sound Gain + + + + + Gain: + + + + + SpecifyDimensions + + + Specify Main Window Dimensions + + + + + Width: + + + + + Lock to this size + + + + + Height: + + + + diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 571d9519d..edfc2b198 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -172,3 +172,6 @@ if (UNIX AND NOT APPLE) endif() endif() endif() +qt5_create_translation(QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} 86box_en.ts 86box_en-GB.ts 86box_de.ts 86box_es.ts 86box_fi.ts 86box_fr.ts 86box_hr.ts 86box_hu.ts 86box_it.ts 86box_ja.ts 86box_ko.ts 86box_pt-BR.ts 86box_pt-PT.ts 86box_ru.ts 86box_sl.ts 86box_tr.ts 86box_zh.ts) +configure_file(qt_translations.qrc ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) +target_sources(ui PRIVATE ${QM_FILES} ${CMAKE_CURRENT_BINARY_DIR}/qt_translations.qrc) diff --git a/src/qt/qt.c b/src/qt/qt.c index 2a4e83e71..507645c84 100644 --- a/src/qt/qt.c +++ b/src/qt/qt.c @@ -21,62 +21,6 @@ int qt_nvr_save(void) { char icon_set[256] = ""; /* name of the iconset to be used */ -#ifdef _WIN32 -#define LIB_NAME_FLUIDSYNTH "libfluidsynth.dll" -#else -#define LIB_NAME_FLUIDSYNTH "libfluidsynth" -#endif - -wchar_t* plat_get_string(int i) -{ - switch (i) - { - case IDS_2077: - return L"Click to capture mouse."; - case IDS_2078: -#ifdef _WIN32 - return L"Press F8+F12 to release mouse"; -#else - return L"Press CTRL-END to release mouse"; -#endif - case IDS_2079: -#ifdef _WIN32 - return L"Press F8+F12 or middle button to release mouse"; -#else - return L"Press CTRL-END or middle button to release mouse"; -#endif - case IDS_2080: - return L"Failed to initialize FluidSynth"; - case IDS_4099: - return L"MFM/RLL or ESDI CD-ROM drives never existed"; - case IDS_2093: - return L"Failed to set up PCap"; - case IDS_2094: - return L"No PCap devices found"; - case IDS_2110: - return L"Unable to initialize FreeType"; - case IDS_2111: - return L"Unable to initialize SDL, libsdl2 is required"; - case IDS_2131: - return L"libfreetype is required for ESC/P printer emulation."; - case IDS_2132: - return L"libgs is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files."; - case IDS_2133: - return L""LIB_NAME_FLUIDSYNTH" is required for FluidSynth MIDI output."; - case IDS_2129: - return L"Make sure libpcap is installed and that you are on a libpcap-compatible network connection."; - case IDS_2114: - return L"Unable to initialize Ghostscript"; - case IDS_2063: - return L"Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine."; - case IDS_2064: - return L"Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card."; - case IDS_2128: - return L"Hardware not available"; - } - return L""; -} - int plat_vidapi(char* api) { if (!strcasecmp(api, "default") || !strcasecmp(api, "system")) { diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 2fb4e35fe..822b35436 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -4,6 +4,9 @@ #include #include #include +#include +#include +#include #ifdef QT_STATIC /* Static builds need plugin imports */ @@ -25,6 +28,7 @@ Q_IMPORT_PLUGIN(QWindowsVistaStylePlugin) #include <86box/video.h> #include +#include #include "qt_mainwindow.hpp" #include "cocoa_mouse.hpp" @@ -95,10 +99,21 @@ main_thread_fn() int main(int argc, char* argv[]) { QApplication app(argc, argv); + Q_INIT_RESOURCE(qt_resources); + Q_INIT_RESOURCE(qt_translations); QSurfaceFormat fmt = QSurfaceFormat::defaultFormat(); fmt.setSwapInterval(0); QSurfaceFormat::setDefaultFormat(fmt); app.setStyle(new StyleOverride()); + + QTranslator translator; + if (translator.load(QLocale(), QLatin1String("86box"), QLatin1String("_"), QLatin1String(":/"))) + { + translator.load(QLocale(), QLatin1String("qt"), QLatin1String("_"), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + translator.load(QLocale(), QLatin1String("qt_help"), QLatin1String("_"), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + translator.load(QLocale(), QLatin1String("qtbase"), QLatin1String("_"), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + QCoreApplication::installTranslator(&translator); + } #ifdef __APPLE__ CocoaEventFilter cocoafilter; app.installNativeEventFilter(&cocoafilter); @@ -110,11 +125,7 @@ int main(int argc, char* argv[]) { return 0; } if (! pc_init_modules()) { -#ifdef Q_OS_MACOS - ui_msgbox_header(MBX_FATAL, VC(L"No ROMs found."), VC(L"86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"~/Library/Application Support/net.86box.86box/roms\" directory.")); -#else - ui_msgbox_header(MBX_FATAL, VC(L"No ROMs found."), VC(L"86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory.")); -#endif + ui_msgbox_header(MBX_FATAL, (void*)IDS_2120, (void*)IDS_2056); return 6; } diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index cfe743b0b..d69bb0ccb 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -58,7 +58,6 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { - Q_INIT_RESOURCE(qt_resources); mm = std::make_shared(this); MediaMenu::ptr = mm; status = std::make_unique(this); diff --git a/src/qt/qt_mediamenu.cpp b/src/qt/qt_mediamenu.cpp index 94cdb73f1..0f6a478d6 100644 --- a/src/qt/qt_mediamenu.cpp +++ b/src/qt/qt_mediamenu.cpp @@ -36,22 +36,22 @@ void MediaMenu::refresh(QMenu *parentMenu) { if(MachineStatus::hasCassette()) { cassetteMenu = parentMenu->addMenu(""); - cassetteMenu->addAction("New Image", [this]() { cassetteNewImage(); }); + cassetteMenu->addAction(tr("New Image"), [this]() { cassetteNewImage(); }); cassetteMenu->addSeparator(); - cassetteMenu->addAction("Existing Image", [this]() { cassetteSelectImage(false); }); - cassetteMenu->addAction("Existing Image (Write Protected)", [this]() { cassetteSelectImage(true); }); + cassetteMenu->addAction(tr("Existing Image"), [this]() { cassetteSelectImage(false); }); + cassetteMenu->addAction(tr("Existing Image (Write Protected)"), [this]() { cassetteSelectImage(true); }); cassetteMenu->addSeparator(); cassetteRecordPos = cassetteMenu->children().count(); - cassetteMenu->addAction("Record", [this] { pc_cas_set_mode(cassette, 1); cassetteUpdateMenu(); })->setCheckable(true); + cassetteMenu->addAction(tr("Record"), [this] { pc_cas_set_mode(cassette, 1); cassetteUpdateMenu(); })->setCheckable(true); cassettePlayPos = cassetteMenu->children().count(); - cassetteMenu->addAction("Play", [this] { pc_cas_set_mode(cassette, 0); cassetteUpdateMenu(); })->setCheckable(true); + cassetteMenu->addAction(tr("Play"), [this] { pc_cas_set_mode(cassette, 0); cassetteUpdateMenu(); })->setCheckable(true); cassetteRewindPos = cassetteMenu->children().count(); - cassetteMenu->addAction("Rewind", [] { pc_cas_rewind(cassette); }); + cassetteMenu->addAction(tr("Rewind"), [] { pc_cas_rewind(cassette); }); cassetteFastFwdPos = cassetteMenu->children().count(); - cassetteMenu->addAction("Fast Forward", [] { pc_cas_append(cassette); }); + cassetteMenu->addAction(tr("Fast Forward"), [] { pc_cas_append(cassette); }); cassetteMenu->addSeparator(); cassetteEjectPos = cassetteMenu->children().count(); - cassetteMenu->addAction("Eject", [this]() { cassetteEject(); }); + cassetteMenu->addAction(tr("Eject"), [this]() { cassetteEject(); }); cassetteUpdateMenu(); } @@ -59,10 +59,10 @@ void MediaMenu::refresh(QMenu *parentMenu) { if (machine_has_cartridge(machine)) { for(int i = 0; i < 2; i++) { auto* menu = parentMenu->addMenu(""); - menu->addAction("Image", [this, i]() { cartridgeSelectImage(i); }); + menu->addAction(tr("Image"), [this, i]() { cartridgeSelectImage(i); }); menu->addSeparator(); cartridgeEjectPos = menu->children().count(); - menu->addAction("Eject", [this, i]() { cartridgeEject(i); }); + menu->addAction(tr("Eject"), [this, i]() { cartridgeEject(i); }); cartridgeMenus[i] = menu; cartridgeUpdateMenu(i); } @@ -71,16 +71,16 @@ void MediaMenu::refresh(QMenu *parentMenu) { floppyMenus.clear(); MachineStatus::iterateFDD([this, parentMenu](int i) { auto* menu = parentMenu->addMenu(""); - menu->addAction("New Image", [this, i]() { floppyNewImage(i); }); + menu->addAction(tr("New Image"), [this, i]() { floppyNewImage(i); }); menu->addSeparator(); - menu->addAction("Existing Image", [this, i]() { floppySelectImage(i, false); }); - menu->addAction("Existing Image (Write Protected)", [this, i]() { floppySelectImage(i, true); }); + menu->addAction(tr("Existing Image"), [this, i]() { floppySelectImage(i, false); }); + menu->addAction(tr("Existing Image (Write Protected)"), [this, i]() { floppySelectImage(i, true); }); menu->addSeparator(); floppyExportPos = menu->children().count(); - menu->addAction("Export to 86F", [this, i]() { floppyExportTo86f(i); }); + menu->addAction(tr("Export to 86F"), [this, i]() { floppyExportTo86f(i); }); menu->addSeparator(); floppyEjectPos = menu->children().count(); - menu->addAction("Eject", [this, i]() { floppyEject(i); }); + menu->addAction(tr("Eject"), [this, i]() { floppyEject(i); }); floppyMenus[i] = menu; floppyUpdateMenu(i); }); @@ -89,15 +89,15 @@ void MediaMenu::refresh(QMenu *parentMenu) { MachineStatus::iterateCDROM([this, parentMenu](int i) { auto* menu = parentMenu->addMenu(""); cdromMutePos = menu->children().count(); - menu->addAction("Mute", [this, i]() { cdromMute(i); })->setCheckable(true); + menu->addAction(tr("Mute"), [this, i]() { cdromMute(i); })->setCheckable(true); menu->addSeparator(); cdromEmptyPos = menu->children().count(); - menu->addAction("Empty", [this, i]() { cdromEject(i); })->setCheckable(true); + menu->addAction(tr("Empty"), [this, i]() { cdromEject(i); })->setCheckable(true); cdromReloadPos = menu->children().count(); - menu->addAction("Reload previous image", [this, i]() { cdromReload(i); }); + menu->addAction(tr("Reload previous image"), [this, i]() { cdromReload(i); }); menu->addSeparator(); cdromImagePos = menu->children().count(); - menu->addAction("Image", [this, i]() { cdromMount(i); })->setCheckable(true); + menu->addAction(tr("Image"), [this, i]() { cdromMount(i); })->setCheckable(true); cdromMenus[i] = menu; cdromUpdateMenu(i); }); @@ -105,15 +105,15 @@ void MediaMenu::refresh(QMenu *parentMenu) { zipMenus.clear(); MachineStatus::iterateZIP([this, parentMenu](int i) { auto* menu = parentMenu->addMenu(""); - menu->addAction("New Image", [this, i]() { zipNewImage(i); }); + menu->addAction(tr("New Image"), [this, i]() { zipNewImage(i); }); menu->addSeparator(); - menu->addAction("Existing Image", [this, i]() { zipSelectImage(i, false); }); - menu->addAction("Existing Image (Write Protected)", [this, i]() { zipSelectImage(i, true); }); + menu->addAction(tr("Existing Image"), [this, i]() { zipSelectImage(i, false); }); + menu->addAction(tr("Existing Image (Write Protected)"), [this, i]() { zipSelectImage(i, true); }); menu->addSeparator(); zipEjectPos = menu->children().count(); - menu->addAction("Eject", [this, i]() { zipEject(i); }); + menu->addAction(tr("Eject"), [this, i]() { zipEject(i); }); zipReloadPos = menu->children().count(); - menu->addAction("Reload previous image", [this, i]() { zipReload(i); }); + menu->addAction(tr("Reload previous image"), [this, i]() { zipReload(i); }); zipMenus[i] = menu; zipUpdateMenu(i); }); @@ -121,22 +121,22 @@ void MediaMenu::refresh(QMenu *parentMenu) { moMenus.clear(); MachineStatus::iterateMO([this, parentMenu](int i) { auto* menu = parentMenu->addMenu(""); - menu->addAction("New Image", [this, i]() { moNewImage(i); }); + menu->addAction(tr("New Image"), [this, i]() { moNewImage(i); }); menu->addSeparator(); - menu->addAction("Existing Image", [this, i]() { moSelectImage(i, false); }); - menu->addAction("Existing Image (Write Protected)", [this, i]() { moSelectImage(i, true); }); + menu->addAction(tr("Existing Image"), [this, i]() { moSelectImage(i, false); }); + menu->addAction(tr("Existing Image (Write Protected)"), [this, i]() { moSelectImage(i, true); }); menu->addSeparator(); moEjectPos = menu->children().count(); - menu->addAction("Eject", [this, i]() { moEject(i); }); + menu->addAction(tr("Eject"), [this, i]() { moEject(i); }); moReloadPos = menu->children().count(); - menu->addAction("Reload previous image", [this, i]() { moReload(i); }); + menu->addAction(tr("Reload previous image"), [this, i]() { moReload(i); }); moMenus[i] = menu; moUpdateMenu(i); }); } void MediaMenu::cassetteNewImage() { - auto filename = QFileDialog::getSaveFileName(parentWidget, "Create..."); + auto filename = QFileDialog::getSaveFileName(parentWidget, tr("Create...")); QFileInfo fileinfo(filename); if (fileinfo.suffix().isEmpty()) { filename.append(".cas"); @@ -145,7 +145,7 @@ void MediaMenu::cassetteNewImage() { } void MediaMenu::cassetteSelectImage(bool wp) { - auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*)"); + auto filename = QFileDialog::getOpenFileName(parentWidget, tr("Open"), QString(), tr("Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*)")); cassetteMount(filename, wp); } @@ -195,11 +195,11 @@ void MediaMenu::cassetteUpdateMenu() { recordMenu->setChecked(isSaving); playMenu->setChecked(! isSaving); - cassetteMenu->setTitle(QString("Cassette: %1").arg(name.isEmpty() ? "(empty)" : name)); + cassetteMenu->setTitle(tr("Cassette: %1").arg(name.isEmpty() ? tr("(empty)") : name)); } void MediaMenu::cartridgeSelectImage(int i) { - auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*)"); + auto filename = QFileDialog::getOpenFileName(parentWidget, tr("Open"), QString(), tr("Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*)")); if (filename.isEmpty()) { return; } @@ -227,7 +227,7 @@ void MediaMenu::cartridgeUpdateMenu(int i) { auto childs = menu->children(); auto* ejectMenu = dynamic_cast(childs[cartridgeEjectPos]); ejectMenu->setEnabled(!name.isEmpty()); - menu->setTitle(QString("Cartridge %1: %2").arg(QString::number(i+1), name.isEmpty() ? "(empty)" : name)); + menu->setTitle(tr("Cartridge %1: %2").arg(QString::number(i+1), name.isEmpty() ? tr("(empty)") : name)); } void MediaMenu::floppyNewImage(int i) { @@ -241,7 +241,7 @@ void MediaMenu::floppyNewImage(int i) { } void MediaMenu::floppySelectImage(int i, bool wp) { - auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)"); + auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), tr("All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)")); floppyMount(i, filename, wp); } @@ -267,12 +267,12 @@ void MediaMenu::floppyEject(int i) { } void MediaMenu::floppyExportTo86f(int i) { - auto filename = QFileDialog::getSaveFileName(parentWidget, "Save as 86f", QString(), "Surface images (*.86f)"); + auto filename = QFileDialog::getSaveFileName(parentWidget, tr("Save as 86f"), QString(), tr("Surface images (*.86f)")); if (! filename.isEmpty()) { QByteArray filenameBytes = filename.toUtf8(); plat_pause(1); if (d86f_export(i, filenameBytes.data()) == 0) { - QMessageBox::critical(parentWidget, "Unable to write file", "Make sure the file is being saved to a writable directory"); + QMessageBox::critical(parentWidget, tr("Unable to write file"), tr("Make sure the file is being saved to a writable directory")); } plat_pause(0); } @@ -290,7 +290,7 @@ void MediaMenu::floppyUpdateMenu(int i) { exportMenu->setEnabled(!name.isEmpty()); int type = fdd_get_type(i); - floppyMenus[i]->setTitle(QString("Floppy %1 (%2): %3").arg(QString::number(i+1), fdd_getname(type), name.isEmpty() ? "(empty)" : name)); + floppyMenus[i]->setTitle(tr("Floppy %1 (%2): %3").arg(QString::number(i+1), fdd_getname(type), name.isEmpty() ? tr("(empty)") : name)); } void MediaMenu::cdromMute(int i) { @@ -304,7 +304,7 @@ void MediaMenu::cdromMount(int i) { QString dir; QFileInfo fi(cdrom[i].image_path); - auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*)"); + auto filename = QFileDialog::getOpenFileName(parentWidget, tr("Open"), QString(), tr("CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*)")); if (filename.isEmpty()) { auto* imageMenu = dynamic_cast(cdromMenus[i]->children()[cdromImagePos]); imageMenu->setChecked(false); @@ -362,7 +362,7 @@ void MediaMenu::cdromUpdateMenu(int i) { auto* prevMenu = dynamic_cast(childs[cdromReloadPos]); prevMenu->setEnabled(cdrom[i].prev_host_drive != 0); - QString busName = "Unknown Bus"; + QString busName = tr("Unknown Bus"); switch (cdrom[i].bus_type) { case CDROM_BUS_ATAPI: busName = "ATAPI"; @@ -372,7 +372,7 @@ void MediaMenu::cdromUpdateMenu(int i) { break; } - menu->setTitle(QString("CD-ROM %1 (%2): %3").arg(QString::number(i+1), busName, name.isEmpty() ? "(empty)" : name)); + menu->setTitle(tr("CD-ROM %1 (%2): %3").arg(QString::number(i+1), busName, name.isEmpty() ? tr("(empty)") : name)); } void MediaMenu::zipNewImage(int i) { @@ -386,7 +386,7 @@ void MediaMenu::zipNewImage(int i) { } void MediaMenu::zipSelectImage(int i, bool wp) { - auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*)"); + auto filename = QFileDialog::getOpenFileName(parentWidget, tr("Open"), QString(), tr("ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*)")); zipMount(i, filename, wp); } @@ -450,7 +450,7 @@ void MediaMenu::zipUpdateMenu(int i) { ejectMenu->setEnabled(!name.isEmpty()); reloadMenu->setEnabled(!prev_name.isEmpty()); - QString busName = "Unknown Bus"; + QString busName = tr("Unknown Bus"); switch (zip_drives[i].bus_type) { case ZIP_BUS_ATAPI: busName = "ATAPI"; @@ -460,7 +460,7 @@ void MediaMenu::zipUpdateMenu(int i) { break; } - menu->setTitle(QString("ZIP %1 %2 (%3): %4").arg((zip_drives[i].is_250 > 0) ? "250" : "100", QString::number(i+1), busName, name.isEmpty() ? "(empty)" : name)); + menu->setTitle(tr("ZIP %1 %2 (%3): %4").arg((zip_drives[i].is_250 > 0) ? "250" : "100", QString::number(i+1), busName, name.isEmpty() ? tr("(empty)") : name)); } void MediaMenu::moNewImage(int i) { @@ -474,7 +474,7 @@ void MediaMenu::moNewImage(int i) { } void MediaMenu::moSelectImage(int i, bool wp) { - auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), "MO images (*.im? *.mdi *.IM? *.MDI);;All files (*)"); + auto filename = QFileDialog::getOpenFileName(parentWidget, tr("Open"), QString(), tr("MO images (*.im? *.mdi *.IM? *.MDI);;All files (*)")); moMount(i, filename, wp); } @@ -538,7 +538,7 @@ void MediaMenu::moUpdateMenu(int i) { ejectMenu->setEnabled(!name.isEmpty()); reloadMenu->setEnabled(!prev_name.isEmpty()); - QString busName = "Unknown Bus"; + QString busName = tr("Unknown Bus"); switch (mo_drives[i].bus_type) { case MO_BUS_ATAPI: busName = "ATAPI"; @@ -548,7 +548,7 @@ void MediaMenu::moUpdateMenu(int i) { break; } - menu->setTitle(QString("MO %1 (%2): %3").arg(QString::number(i+1), busName, name.isEmpty() ? "(empty)" : name)); + menu->setTitle(tr("MO %1 (%2): %3").arg(QString::number(i+1), busName, name.isEmpty() ? tr("(empty)") : name)); } diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index 1c7a6eded..f94b13e86 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include @@ -470,6 +471,52 @@ size_t c16stombs(char dst[], const uint16_t src[], int len) } #endif +#ifdef _WIN32 +#define LIB_NAME_FLUIDSYNTH "libfluidsynth.dll" +#define MOUSE_CAPTURE_KEYSEQ "F8+F12" +#else +#define LIB_NAME_FLUIDSYNTH "libfluidsynth" +#define MOUSE_CAPTURE_KEYSEQ "CTRL-END" +#endif +#ifdef Q_OS_MACOS +#define ROMDIR "~/Library/Application Support/net.86box.86box/roms" +#else +#define ROMDIR "roms" +#endif + + +static std::map translatedstrings; + +static void reload_strings() +{ + translatedstrings.clear(); + translatedstrings[IDS_2077] = QObject::tr("Click to capture mouse.").toStdWString(); + translatedstrings[IDS_2078] = QObject::tr("Press %1 to release mouse").arg(MOUSE_CAPTURE_KEYSEQ).toStdWString(); + translatedstrings[IDS_2079] = QObject::tr("Press %1 or middle button to release mouse").arg(MOUSE_CAPTURE_KEYSEQ).toStdWString(); + translatedstrings[IDS_2080] = QObject::tr("Failed to initialize FluidSynth").toStdWString(); + translatedstrings[IDS_4099] = QObject::tr("MFM/RLL or ESDI CD-ROM drives never existed").toStdWString(); + translatedstrings[IDS_2093] = QObject::tr("Failed to set up PCap").toStdWString(); + translatedstrings[IDS_2094] = QObject::tr("No PCap devices found").toStdWString(); + translatedstrings[IDS_2110] = QObject::tr("Unable to initialize FreeType").toStdWString(); + translatedstrings[IDS_2111] = QObject::tr("Unable to initialize SDL, libsdl2 is required").toStdWString(); + translatedstrings[IDS_2131] = QObject::tr("libfreetype is required for ESC/P printer emulation.").toStdWString(); + translatedstrings[IDS_2132] = QObject::tr("libgs is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files.").toStdWString(); + translatedstrings[IDS_2133] = QObject::tr("%1 is required for FluidSynth MIDI output.").arg(LIB_NAME_FLUIDSYNTH).toStdWString(); + translatedstrings[IDS_2129] = QObject::tr("Make sure libpcap is installed and that you are on a libpcap-compatible network connection.").toStdWString(); + translatedstrings[IDS_2114] = QObject::tr("Unable to initialize Ghostscript").toStdWString(); + translatedstrings[IDS_2063] = QObject::tr("Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine.").toStdWString(); + translatedstrings[IDS_2064] = QObject::tr("Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card.").toStdWString(); + translatedstrings[IDS_2128] = QObject::tr("Hardware not available").toStdWString(); + translatedstrings[IDS_2120] = QObject::tr("No ROMs found.").toStdWString(); + translatedstrings[IDS_2056] = QObject::tr("86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"%1\" directory.").arg(ROMDIR).toStdWString(); +} + +wchar_t* plat_get_string(int i) +{ + if (translatedstrings.empty()) reload_strings(); + return translatedstrings[i].data(); +} + int plat_chdir(char *path) { diff --git a/src/qt/qt_translations.qrc b/src/qt/qt_translations.qrc new file mode 100644 index 000000000..4a971471c --- /dev/null +++ b/src/qt/qt_translations.qrc @@ -0,0 +1,21 @@ + + + 86box_de.qm + 86box_en-GB.qm + 86box_en.qm + 86box_es.qm + 86box_fi.qm + 86box_fr.qm + 86box_hr.qm + 86box_hu.qm + 86box_it.qm + 86box_ja.qm + 86box_ko.qm + 86box_pt-BR.qm + 86box_pt-PT.qm + 86box_ru.qm + 86box_sl.qm + 86box_tr.qm + 86box_zh.qm + + diff --git a/vcpkg.json b/vcpkg.json index 9cf35af71..193d96e6f 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -10,6 +10,7 @@ "openal-soft", "sdl2", "rtmidi", - "qt5-base" + "qt5-base", + "qt5-translations", ] -} \ No newline at end of file +} From 9b8650cae5ccc54350bb08fde84c2937eccce797 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 31 Dec 2021 13:02:27 +0600 Subject: [PATCH 164/278] Fix crash when switching fullscreen stretching modes when fullscreen --- src/qt/qt_mainwindow.cpp | 2 +- src/qt/qt_rendererstack.cpp | 4 ++++ src/qt/qt_rendererstack.hpp | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index d69bb0ccb..227029a91 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -1154,7 +1154,7 @@ static void update_fullscreen_scale_checkboxes(Ui::MainWindow* ui, QAction* sele if (video_fullscreen > 0) { auto widget = ui->stackedWidget->currentWidget(); - auto rc = dynamic_cast(widget); + auto rc = ui->stackedWidget->rendererWindow; rc->onResize(widget->width(), widget->height()); } diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index fab8783b9..c736baa5d 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -183,6 +183,7 @@ void RendererStack::switchRenderer(Renderer renderer) { case Renderer::Software: { auto sw = new SoftwareRenderer(this); + rendererWindow = sw; connect(this, &RendererStack::blitToRenderer, sw, &SoftwareRenderer::onBlit, Qt::QueuedConnection); current.reset(this->createWindowContainer(sw, this)); } @@ -191,6 +192,7 @@ void RendererStack::switchRenderer(Renderer renderer) { { this->createWinId(); auto hw = new HardwareRenderer(this); + rendererWindow = hw; connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit, Qt::QueuedConnection); current.reset(this->createWindowContainer(hw, this)); break; @@ -199,6 +201,7 @@ void RendererStack::switchRenderer(Renderer renderer) { { this->createWinId(); auto hw = new HardwareRenderer(this, HardwareRenderer::RenderType::OpenGLES); + rendererWindow = hw; connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit, Qt::QueuedConnection); current.reset(this->createWindowContainer(hw, this)); break; @@ -207,6 +210,7 @@ void RendererStack::switchRenderer(Renderer renderer) { { this->createWinId(); auto hw = new HardwareRenderer(this, HardwareRenderer::RenderType::OpenGL3); + rendererWindow = hw; connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit, Qt::QueuedConnection); current.reset(this->createWindowContainer(hw, this)); break; diff --git a/src/qt/qt_rendererstack.hpp b/src/qt/qt_rendererstack.hpp index 8ad1e39db..7a82fc527 100644 --- a/src/qt/qt_rendererstack.hpp +++ b/src/qt/qt_rendererstack.hpp @@ -13,6 +13,7 @@ namespace Ui { class RendererStack; } +class RendererCommon; class RendererStack : public QStackedWidget { Q_OBJECT @@ -43,6 +44,7 @@ public: }; void switchRenderer(Renderer renderer); + RendererCommon* rendererWindow{nullptr}; signals: void blitToRenderer(const std::unique_ptr* img, int, int, int, int, std::atomic_flag* in_use); From 17e657f0ee33767efcf295d61cdec7d39a8dfc10 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 31 Dec 2021 16:47:49 +0600 Subject: [PATCH 165/278] Add support for Qt6 --- CMakeLists.txt | 5 +++++ src/CMakeLists.txt | 19 ++++++++++++++----- src/qt/CMakeLists.txt | 15 ++++++++------- src/qt/cocoa_mouse.hpp | 8 +++++++- src/qt/macos_event_filter.mm | 2 +- src/qt/qt_hardwarerenderer.hpp | 2 +- src/qt/qt_mainwindow.cpp | 4 ++-- src/qt/qt_platform.cpp | 2 +- src/qt/qt_renderercomon.hpp | 1 + src/qt/qt_winrawinputfilter.hpp | 11 +++++++++-- 10 files changed, 49 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dc1472f15..f003bcb60 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -130,6 +130,11 @@ cmake_dependent_option(VGAWONDER "ATI VGA Wonder (ATI-18800)" cmake_dependent_option(VNC "VNC renderer" OFF "DEV_BRANCH" OFF) cmake_dependent_option(XL24 "ATI VGA Wonder XL24 (ATI-28800-6)" ON "DEV_BRANCH" OFF) +# Ditto but for Qt +if (QT) + option(USE_QT6 "Use Qt6 instead of Qt5" OFF) +endif() + # Determine the build type set(RELEASE_BUILD OFF) set(BETA_BUILD OFF) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a2a933454..765a714e6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -75,22 +75,31 @@ if(APPLE) # Force using the newest library if it's installed by homebrew set(CMAKE_FIND_FRAMEWORK LAST) - # setting our compilation target to macOS 10.13 High Sierra - set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13") + # setting our compilation target to macOS 10.15 Catalina if targetting Qt6, macOS 10.13 High Sierra otherwise + if (USE_QT6) + set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15") + else() + set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13") + endif() endif() if(QT) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) + if (USE_QT6) + set(QT_MAJOR 6) + else() + set(QT_MAJOR 5) + endif() # if we want to use qt5-static to eliminate need for bundling qt dlls (windows) #set(QT_STATIC ON) # needed to build with qt5-static if both qt5 and qt5-static are installed #set(CMAKE_PREFIX_PATH "path/to/qt5-static") - find_package(Qt5 COMPONENTS Core Widgets REQUIRED) - find_package(Qt5LinguistTools REQUIRED) + find_package(Qt${QT_MAJOR} COMPONENTS Core Widgets OpenGL REQUIRED) + find_package(Qt${QT_MAJOR}LinguistTools REQUIRED) endif() find_package(Freetype REQUIRED) @@ -178,7 +187,7 @@ if(APPLE) if (QT) # needed for Qt packaging # get the macdeployqt path - get_target_property(_qmake_executable Qt5::qmake IMPORTED_LOCATION) + get_target_property(_qmake_executable Qt${QT_MAJOR}::qmake IMPORTED_LOCATION) get_filename_component(_qt_bin_dir "${_qmake_executable}" DIRECTORY) find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${_qt_bin_dir}") diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index edfc2b198..53dabe65b 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -125,22 +125,23 @@ endif() target_link_libraries( plat PRIVATE - Qt5::Widgets - Qt5::Gui + Qt${QT_MAJOR}::Widgets + Qt${QT_MAJOR}::Gui Threads::Threads ) target_link_libraries( ui PRIVATE - Qt5::Widgets - Qt5::Gui + Qt${QT_MAJOR}::Widgets + Qt${QT_MAJOR}::Gui + Qt${QT_MAJOR}::OpenGL Threads::Threads ) # needed for static builds if (WIN32) - qt_import_plugins(plat INCLUDE Qt5::QWindowsIntegrationPlugin Qt5::QICOPlugin QWindowsVistaStylePlugin) + qt_import_plugins(plat INCLUDE Qt${QT_MAJOR}::QWindowsIntegrationPlugin Qt${QT_MAJOR}::QICOPlugin QWindowsVistaStylePlugin) endif() if (UNIX AND NOT APPLE) @@ -165,13 +166,13 @@ if (UNIX AND NOT APPLE) set(WL_SOURCE_VAR) ecm_add_wayland_client_protocol(WL_SOURCE_VAR PROTOCOL ${CMAKE_SOURCE_DIR}/wl_protocols/relative-pointer-unstable-v1.xml BASENAME relative-pointer-unstable-v1) ecm_add_wayland_client_protocol(WL_SOURCE_VAR PROTOCOL ${CMAKE_SOURCE_DIR}/wl_protocols/pointer-constraints-unstable-v1.xml BASENAME pointer-constraints-unstable-v1) - target_include_directories(ui PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ${Qt5Gui_PRIVATE_INCLUDE_DIRS}) + target_include_directories(ui PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ${Qt${QT_MAJOR}Gui_PRIVATE_INCLUDE_DIRS}) target_sources(ui PRIVATE ${WL_SOURCE_VAR} wl_mouse.cpp) target_compile_definitions(ui PRIVATE WAYLAND) endif() endif() endif() endif() -qt5_create_translation(QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} 86box_en.ts 86box_en-GB.ts 86box_de.ts 86box_es.ts 86box_fi.ts 86box_fr.ts 86box_hr.ts 86box_hu.ts 86box_it.ts 86box_ja.ts 86box_ko.ts 86box_pt-BR.ts 86box_pt-PT.ts 86box_ru.ts 86box_sl.ts 86box_tr.ts 86box_zh.ts) +qt_create_translation(QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} 86box_en.ts 86box_en-GB.ts 86box_de.ts 86box_es.ts 86box_fi.ts 86box_fr.ts 86box_hr.ts 86box_hu.ts 86box_it.ts 86box_ja.ts 86box_ko.ts 86box_pt-BR.ts 86box_pt-PT.ts 86box_ru.ts 86box_sl.ts 86box_tr.ts 86box_zh.ts) configure_file(qt_translations.qrc ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) target_sources(ui PRIVATE ${QM_FILES} ${CMAKE_CURRENT_BINARY_DIR}/qt_translations.qrc) diff --git a/src/qt/cocoa_mouse.hpp b/src/qt/cocoa_mouse.hpp index 6d481fd89..8db79d9e8 100644 --- a/src/qt/cocoa_mouse.hpp +++ b/src/qt/cocoa_mouse.hpp @@ -1,10 +1,16 @@ #include #include +#if QT_VERSION_MAJOR >= 6 +#define result_t qintptr +#else +#define result_t long +#endif + class CocoaEventFilter : public QAbstractNativeEventFilter { public: CocoaEventFilter() {}; ~CocoaEventFilter(); - virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) override; + virtual bool nativeEventFilter(const QByteArray &eventType, void *message, result_t *result) override; }; diff --git a/src/qt/macos_event_filter.mm b/src/qt/macos_event_filter.mm index a3200aa8e..0ea799f99 100644 --- a/src/qt/macos_event_filter.mm +++ b/src/qt/macos_event_filter.mm @@ -31,7 +31,7 @@ CocoaEventFilter::~CocoaEventFilter() } -bool CocoaEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *result) +bool CocoaEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, result_t *result) { if (mouse_capture) { diff --git a/src/qt/qt_hardwarerenderer.hpp b/src/qt/qt_hardwarerenderer.hpp index 4fb132da6..2a453ab49 100644 --- a/src/qt/qt_hardwarerenderer.hpp +++ b/src/qt/qt_hardwarerenderer.hpp @@ -2,7 +2,6 @@ #include #include -#include #include #include #include @@ -12,6 +11,7 @@ #include #include #include +#include #include #include diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 227029a91..d19f7fd7e 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -337,6 +337,7 @@ void MainWindow::showEvent(QShowEvent *event) { scrnsz_x = window_w; scrnsz_y = window_h; } + if (settings_only) QTimer::singleShot(0, this, [this] () { ui->actionSettings->trigger(); }); } void MainWindow::on_actionKeyboard_requires_capture_triggered() { @@ -1060,8 +1061,7 @@ void MainWindow::on_actionHardware_Renderer_OpenGL_ES_triggered() { void MainWindow::focusInEvent(QFocusEvent* event) { - if (settings_only) ui->actionSettings->trigger(); - else this->grabKeyboard(); + this->grabKeyboard(); } void MainWindow::focusOutEvent(QFocusEvent* event) diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index f94b13e86..70fbc1517 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -108,7 +108,7 @@ void plat_get_exe_name(char *s, int size) { QByteArray exepath_temp = QCoreApplication::applicationDirPath().toLocal8Bit(); - memcpy(s, exepath_temp.data(), std::min(exepath_temp.size(),size)); + memcpy(s, exepath_temp.data(), std::min((qsizetype)exepath_temp.size(),(qsizetype)size)); plat_path_slash(s); } diff --git a/src/qt/qt_renderercomon.hpp b/src/qt/qt_renderercomon.hpp index cf05a7321..063d6f1bc 100644 --- a/src/qt/qt_renderercomon.hpp +++ b/src/qt/qt_renderercomon.hpp @@ -2,6 +2,7 @@ #include #include +#include class QWidget; diff --git a/src/qt/qt_winrawinputfilter.hpp b/src/qt/qt_winrawinputfilter.hpp index 167b14912..7a73a2eca 100644 --- a/src/qt/qt_winrawinputfilter.hpp +++ b/src/qt/qt_winrawinputfilter.hpp @@ -40,6 +40,13 @@ #include +#if QT_VERSION_MAJOR >= 6 +#define result_t qintptr +#else +#define result_t long +#endif + + class WindowsRawInputFilter : public QObject, public QAbstractNativeEventFilter { Q_OBJECT @@ -47,7 +54,7 @@ class WindowsRawInputFilter : public QObject, public QAbstractNativeEventFilter public: static std::unique_ptr Register(QMainWindow *window); - bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) override; + bool nativeEventFilter(const QByteArray &eventType, void *message, result_t *result) override; ~WindowsRawInputFilter(); @@ -72,4 +79,4 @@ private: void keyboard_getkeymap(); }; -#endif \ No newline at end of file +#endif From 785e1961d64d34a7075ed61e7b9eec1e4c700e0e Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 1 Jan 2022 13:50:47 +0600 Subject: [PATCH 166/278] Fix selections being duplicated when machine type is changed --- src/qt/qt_settingsotherperipherals.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/qt/qt_settingsotherperipherals.cpp b/src/qt/qt_settingsotherperipherals.cpp index 8eb849497..7fa28f812 100644 --- a/src/qt/qt_settingsotherperipherals.cpp +++ b/src/qt/qt_settingsotherperipherals.cpp @@ -30,6 +30,12 @@ void SettingsOtherPeripherals::onCurrentMachineChanged(int machineId) ui->comboBoxRTC->setEnabled(machine_has_bus(machineId, MACHINE_BUS_ISA)); ui->pushButtonConfigureRTC->setEnabled(machine_has_bus(machineId, MACHINE_BUS_ISA)); + ui->comboBoxCard1->clear(); + ui->comboBoxCard2->clear(); + ui->comboBoxCard3->clear(); + ui->comboBoxCard4->clear(); + ui->comboBoxRTC->clear(); + auto* model = ui->comboBoxRTC->model(); int d = 0; int selectedRow = 0; From 5d76822d59bf695f57ac813443b71e47aea3421a Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 4 Jan 2022 01:24:10 +0600 Subject: [PATCH 167/278] Begin .po work --- src/qt/86box_de.ts | 1332 ------------------------------ src/qt/86box_en-GB.ts | 1332 ------------------------------ src/qt/86box_en.ts | 1332 ------------------------------ src/qt/86box_es.ts | 1332 ------------------------------ src/qt/86box_fi.ts | 1332 ------------------------------ src/qt/86box_fr.ts | 1332 ------------------------------ src/qt/86box_hr.ts | 1332 ------------------------------ src/qt/86box_hu.ts | 1332 ------------------------------ src/qt/86box_it.ts | 1332 ------------------------------ src/qt/86box_ja.ts | 1332 ------------------------------ src/qt/86box_ko.ts | 1332 ------------------------------ src/qt/86box_pt-BR.ts | 1332 ------------------------------ src/qt/86box_pt-PT.ts | 1332 ------------------------------ src/qt/86box_ru.ts | 1332 ------------------------------ src/qt/86box_sl.ts | 1332 ------------------------------ src/qt/86box_tr.ts | 1332 ------------------------------ src/qt/86box_zh.ts | 1332 ------------------------------ src/qt/CMakeLists.txt | 12 +- src/qt/languages/.ts | 1603 ++++++++++++++++++++++++++++++++++++ src/qt/languages/cs_CZ.po | 1173 ++++++++++++++++++++++++++ src/qt/languages/de_DE.po | 1173 ++++++++++++++++++++++++++ src/qt/languages/en_GB.po | 1173 ++++++++++++++++++++++++++ src/qt/languages/en_GB.ts | 1599 +++++++++++++++++++++++++++++++++++ src/qt/languages/es_ES.po | 1173 ++++++++++++++++++++++++++ src/qt/languages/fi_FI.po | 1173 ++++++++++++++++++++++++++ src/qt/languages/fr_FR.po | 1173 ++++++++++++++++++++++++++ src/qt/languages/hr_HR.po | 1173 ++++++++++++++++++++++++++ src/qt/languages/hu_HU.po | 1173 ++++++++++++++++++++++++++ src/qt/languages/it_IT.po | 1173 ++++++++++++++++++++++++++ src/qt/languages/ja_JP.po | 1176 ++++++++++++++++++++++++++ src/qt/languages/ko_KR.po | 1176 ++++++++++++++++++++++++++ src/qt/languages/pt_BR.po | 1173 ++++++++++++++++++++++++++ src/qt/languages/pt_PT.po | 1173 ++++++++++++++++++++++++++ src/qt/languages/ru_RU.po | 1173 ++++++++++++++++++++++++++ src/qt/languages/sl_SI.po | 1173 ++++++++++++++++++++++++++ src/qt/languages/tr_TR.po | 1173 ++++++++++++++++++++++++++ src/qt/languages/zh_CN.po | 1176 ++++++++++++++++++++++++++ src/qt/qt_main.cpp | 23 +- src/qt/qt_mainwindow.ui | 4 +- src/qt/qt_platform.cpp | 61 +- src/qt/qt_translations.qrc | 33 +- 41 files changed, 23241 insertions(+), 22688 deletions(-) delete mode 100644 src/qt/86box_de.ts delete mode 100644 src/qt/86box_en-GB.ts delete mode 100644 src/qt/86box_en.ts delete mode 100644 src/qt/86box_es.ts delete mode 100644 src/qt/86box_fi.ts delete mode 100644 src/qt/86box_fr.ts delete mode 100644 src/qt/86box_hr.ts delete mode 100644 src/qt/86box_hu.ts delete mode 100644 src/qt/86box_it.ts delete mode 100644 src/qt/86box_ja.ts delete mode 100644 src/qt/86box_ko.ts delete mode 100644 src/qt/86box_pt-BR.ts delete mode 100644 src/qt/86box_pt-PT.ts delete mode 100644 src/qt/86box_ru.ts delete mode 100644 src/qt/86box_sl.ts delete mode 100644 src/qt/86box_tr.ts delete mode 100644 src/qt/86box_zh.ts create mode 100644 src/qt/languages/.ts create mode 100644 src/qt/languages/cs_CZ.po create mode 100644 src/qt/languages/de_DE.po create mode 100644 src/qt/languages/en_GB.po create mode 100644 src/qt/languages/en_GB.ts create mode 100644 src/qt/languages/es_ES.po create mode 100644 src/qt/languages/fi_FI.po create mode 100644 src/qt/languages/fr_FR.po create mode 100644 src/qt/languages/hr_HR.po create mode 100644 src/qt/languages/hu_HU.po create mode 100644 src/qt/languages/it_IT.po create mode 100644 src/qt/languages/ja_JP.po create mode 100644 src/qt/languages/ko_KR.po create mode 100644 src/qt/languages/pt_BR.po create mode 100644 src/qt/languages/pt_PT.po create mode 100644 src/qt/languages/ru_RU.po create mode 100644 src/qt/languages/sl_SI.po create mode 100644 src/qt/languages/tr_TR.po create mode 100644 src/qt/languages/zh_CN.po diff --git a/src/qt/86box_de.ts b/src/qt/86box_de.ts deleted file mode 100644 index 010836b16..000000000 --- a/src/qt/86box_de.ts +++ /dev/null @@ -1,1332 +0,0 @@ - - - - - DeviceConfig - - - Dialog - - - - - FileField - - - Form - - - - - Browse - - - - - HarddiskDialog - - - Dialog - - - - - File name - - - - - Cylinders - - - - - Sectors - - - - - Size (MiB) - - - - - Heads - - - - - Type - - - - - Bus - - - - - Channel - - - - - Format - - - - - Block Size - - - - - JoystickConfiguration - - - Dialog - - - - - Device - - - - - MainWindow - - - 86Box - - - - - Action - - - - - Tools - - - - - View - - - - - Renderer - - - - - Window scale factor - - - - - Filter method - - - - - Fullscreen stretch mode - - - - - EGA/(S)VGA settings - - - - - VGA screen type - - - - - Grayscale conversion type - - - - - Media - - - - - Help - - - - - Keyboard requires capture - - - - - Right CTRL is left ALT - - - - - Hard Reset - - - - - Ctrl+Alt+Del - - - - - Ctrl+Alt+Esc - - - - - Pause - - - - - Exit - - - - - Settings - - - - - Fullscreen - - - - - Ctrl+Alt+PgUp - - - - - Software Renderer - - - - - Hardware Renderer (OpenGL) - - - - - Hardware Renderer (OpenGL ES) - - - - - Hide status bar - - - - - Resizable window - - - - - Remember size and position - - - - - Specify dimensions... - - - - - Force 4:3 display ratio - - - - - HiDPI scaling - - - - - CGA/PCjr/Tandy/EGA/(S)VGA overscan - - - - - Change contrast for monochrome display - - - - - 0.5x - - - - - 1x - - - - - 1.5x - - - - - 2x - - - - - Nearest - - - - - Linear - - - - - Full screen stretch - - - - - 4:3 - - - - - Square pixels (Keep ratio) - - - - - Integer scale - - - - - Inverted VGA monitor - - - - - RGB Color - - - - - RGB Grayscale - - - - - Amber monitor - - - - - Green monitor - - - - - White monitor - - - - - BT601 (NTSC/PAL) - - - - - BT709 (HDTV) - - - - - Average - - - - - About Qt... - - - - - About 86Box... - - - - - Documentation... - - - - - Update status bar icons - - - - - Take screenshot... - - - - - Sound gain... - - - - - OpenGL 3.0 Core - - - - - Program preferences... - - - - - MediaMenu - - - - - - New Image - - - - - - - - Existing Image - - - - - - - - Existing Image (Write Protected) - - - - - Record - - - - - Play - - - - - Rewind - - - - - Fast Forward - - - - - - - - - Eject - - - - - - Image - - - - - Export to 86F - - - - - Mute - - - - - Empty - - - - - - - Reload previous image - - - - - Create... - - - - - - - - - Open - - - - - Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) - - - - - Cassette: %1 - - - - - - - - - - (empty) - - - - - Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) - - - - - Cartridge %1: %2 - - - - - All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) - - - - - Save as 86f - - - - - Surface images (*.86f) - - - - - Unable to write file - - - - - Make sure the file is being saved to a writable directory - - - - - Floppy %1 (%2): %3 - - - - - CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) - - - - - - - Unknown Bus - - - - - CD-ROM %1 (%2): %3 - - - - - ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) - - - - - ZIP %1 %2 (%3): %4 - - - - - MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) - - - - - MO %1 (%2): %3 - - - - - NewFloppyDialog - - - New Image - - - - - File Name - - - - - Disk Size - - - - - RPM Mode - - - - - ProgSettings - - - Preferences - - - - - (Default) - - - - - Icon set: - - - - - Default - - - - - QObject - - - Click to capture mouse. - - - - - Press %1 to release mouse - - - - - Press %1 or middle button to release mouse - - - - - Failed to initialize FluidSynth - - - - - MFM/RLL or ESDI CD-ROM drives never existed - - - - - Failed to set up PCap - - - - - No PCap devices found - - - - - Unable to initialize FreeType - - - - - Unable to initialize SDL, libsdl2 is required - - - - - libfreetype is required for ESC/P printer emulation. - - - - - libgs is required for automatic conversion of PostScript files to PDF. - -Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. - - - - - %1 is required for FluidSynth MIDI output. - - - - - Make sure libpcap is installed and that you are on a libpcap-compatible network connection. - - - - - Unable to initialize Ghostscript - - - - - Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. - - - - - Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. - - - - - Hardware not available - - - - - No ROMs found. - - - - - 86Box could not find any usable ROM images. - -Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. - - - - - RendererStack - - - StackedWidget - - - - - Settings - - - 86Box Settings - - - - - SettingsDisplay - - - Form - - - - - Video - - - - - - Configure - - - - - Voodoo Graphics - - - - - SettingsFloppyCDROM - - - Form - - - - - Floppy Drives - - - - - Type - - - - - Turbo Timings - - - - - Check BPB - - - - - CD-ROM Drives - - - - - Channel - - - - - Speed - - - - - Bus - - - - - SettingsHarddisks - - - Form - - - - - Bus - - - - - ID - - - - - New - - - - - Existing - - - - - Remove - - - - - SettingsInput - - - Form - - - - - Mouse - - - - - Configure - - - - - Joystick - - - - - Joystick 1... - - - - - Joystick 2... - - - - - Joystick 3... - - - - - Joystick 4... - - - - - SettingsMachine - - - Form - - - - - Machine Type - - - - - Machine - - - - - CPU - - - - - FPU - - - - - Wait States - - - - - Memory - - - - - Speed - - - - - Configure - - - - - Dynamic Recompiler - - - - - Time Synchronization - - - - - Disabled - - - - - Enabled (Local Time) - - - - - Enabled (UTC) - - - - - SettingsNetwork - - - Form - - - - - PCap Device - - - - - Network Adapter - - - - - Network Type - - - - - Configure - - - - - SettingsOtherPeripherals - - - Form - - - - - ISA RTC - - - - - - - - - Configure - - - - - ISA Memory Expansion - - - - - Card 2 - - - - - Card 3 - - - - - Card 1 - - - - - Card 4 - - - - - ISABugger Device - - - - - POST card - - - - - SettingsOtherRemovable - - - Form - - - - - MO Drives - - - - - - Bus - - - - - - Channel - - - - - Type - - - - - ZIP Drives - - - - - ZIP 250 - - - - - SettingsPorts - - - Form - - - - - LPT1 Device - - - - - LPT2 Device - - - - - LPT3 Device - - - - - Serial Port 1 - - - - - Parallel Port 1 - - - - - Serial Port 2 - - - - - Parallel Port 2 - - - - - Serial Port 3 - - - - - Parallel Port 3 - - - - - Serial Port 4 - - - - - SettingsSound - - - Form - - - - - MIDI In - - - - - Innovation SSI-2001 - - - - - Gravis Ultrasound - - - - - Sound Card - - - - - - - - - - - Configure - - - - - MIDI Out - - - - - Standalone MPU-401 - - - - - CMS / Game Blaster - - - - - Use FLOAT32 sound - - - - - SettingsStorageControllers - - - Form - - - - - HD Controller - - - - - - - - - - - - Configure - - - - - FD Controller - - - - - Tertiary IDE Controller - - - - - Quaternary IDE Controller - - - - - SCSI - - - - - Controller 1 - - - - - Controller 4 - - - - - Controller 2 - - - - - Controller 3 - - - - - Cassette - - - - - SoundGain - - - Sound Gain - - - - - Gain: - - - - - SpecifyDimensions - - - Specify Main Window Dimensions - - - - - Width: - - - - - Lock to this size - - - - - Height: - - - - diff --git a/src/qt/86box_en-GB.ts b/src/qt/86box_en-GB.ts deleted file mode 100644 index 1d92557ca..000000000 --- a/src/qt/86box_en-GB.ts +++ /dev/null @@ -1,1332 +0,0 @@ - - - - - DeviceConfig - - - Dialog - - - - - FileField - - - Form - - - - - Browse - - - - - HarddiskDialog - - - Dialog - - - - - File name - - - - - Cylinders - - - - - Sectors - - - - - Size (MiB) - - - - - Heads - - - - - Type - - - - - Bus - - - - - Channel - - - - - Format - - - - - Block Size - - - - - JoystickConfiguration - - - Dialog - - - - - Device - - - - - MainWindow - - - 86Box - - - - - Action - - - - - Tools - - - - - View - - - - - Renderer - - - - - Window scale factor - - - - - Filter method - - - - - Fullscreen stretch mode - - - - - EGA/(S)VGA settings - - - - - VGA screen type - - - - - Grayscale conversion type - - - - - Media - - - - - Help - - - - - Keyboard requires capture - - - - - Right CTRL is left ALT - - - - - Hard Reset - - - - - Ctrl+Alt+Del - - - - - Ctrl+Alt+Esc - - - - - Pause - - - - - Exit - - - - - Settings - - - - - Fullscreen - - - - - Ctrl+Alt+PgUp - - - - - Software Renderer - - - - - Hardware Renderer (OpenGL) - - - - - Hardware Renderer (OpenGL ES) - - - - - Hide status bar - - - - - Resizable window - - - - - Remember size and position - - - - - Specify dimensions... - - - - - Force 4:3 display ratio - - - - - HiDPI scaling - - - - - CGA/PCjr/Tandy/EGA/(S)VGA overscan - - - - - Change contrast for monochrome display - - - - - 0.5x - - - - - 1x - - - - - 1.5x - - - - - 2x - - - - - Nearest - - - - - Linear - - - - - Full screen stretch - - - - - 4:3 - - - - - Square pixels (Keep ratio) - - - - - Integer scale - - - - - Inverted VGA monitor - - - - - RGB Color - - - - - RGB Grayscale - - - - - Amber monitor - - - - - Green monitor - - - - - White monitor - - - - - BT601 (NTSC/PAL) - - - - - BT709 (HDTV) - - - - - Average - - - - - About Qt... - - - - - About 86Box... - - - - - Documentation... - - - - - Update status bar icons - - - - - Take screenshot... - - - - - Sound gain... - - - - - OpenGL 3.0 Core - - - - - Program preferences... - - - - - MediaMenu - - - - - - New Image - - - - - - - - Existing Image - - - - - - - - Existing Image (Write Protected) - - - - - Record - - - - - Play - - - - - Rewind - - - - - Fast Forward - - - - - - - - - Eject - - - - - - Image - - - - - Export to 86F - - - - - Mute - - - - - Empty - - - - - - - Reload previous image - - - - - Create... - - - - - - - - - Open - - - - - Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) - - - - - Cassette: %1 - - - - - - - - - - (empty) - - - - - Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) - - - - - Cartridge %1: %2 - - - - - All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) - - - - - Save as 86f - - - - - Surface images (*.86f) - - - - - Unable to write file - - - - - Make sure the file is being saved to a writable directory - - - - - Floppy %1 (%2): %3 - - - - - CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) - - - - - - - Unknown Bus - - - - - CD-ROM %1 (%2): %3 - - - - - ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) - - - - - ZIP %1 %2 (%3): %4 - - - - - MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) - - - - - MO %1 (%2): %3 - - - - - NewFloppyDialog - - - New Image - - - - - File Name - - - - - Disk Size - - - - - RPM Mode - - - - - ProgSettings - - - Preferences - - - - - (Default) - - - - - Icon set: - - - - - Default - - - - - QObject - - - Click to capture mouse. - - - - - Press %1 to release mouse - - - - - Press %1 or middle button to release mouse - - - - - Failed to initialize FluidSynth - - - - - MFM/RLL or ESDI CD-ROM drives never existed - - - - - Failed to set up PCap - - - - - No PCap devices found - - - - - Unable to initialize FreeType - - - - - Unable to initialize SDL, libsdl2 is required - - - - - libfreetype is required for ESC/P printer emulation. - - - - - libgs is required for automatic conversion of PostScript files to PDF. - -Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. - - - - - %1 is required for FluidSynth MIDI output. - - - - - Make sure libpcap is installed and that you are on a libpcap-compatible network connection. - - - - - Unable to initialize Ghostscript - - - - - Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. - - - - - Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. - - - - - Hardware not available - - - - - No ROMs found. - - - - - 86Box could not find any usable ROM images. - -Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. - - - - - RendererStack - - - StackedWidget - - - - - Settings - - - 86Box Settings - - - - - SettingsDisplay - - - Form - - - - - Video - - - - - - Configure - - - - - Voodoo Graphics - - - - - SettingsFloppyCDROM - - - Form - - - - - Floppy Drives - - - - - Type - - - - - Turbo Timings - - - - - Check BPB - - - - - CD-ROM Drives - - - - - Channel - - - - - Speed - - - - - Bus - - - - - SettingsHarddisks - - - Form - - - - - Bus - - - - - ID - - - - - New - - - - - Existing - - - - - Remove - - - - - SettingsInput - - - Form - - - - - Mouse - - - - - Configure - - - - - Joystick - - - - - Joystick 1... - - - - - Joystick 2... - - - - - Joystick 3... - - - - - Joystick 4... - - - - - SettingsMachine - - - Form - - - - - Machine Type - - - - - Machine - - - - - CPU - - - - - FPU - - - - - Wait States - - - - - Memory - - - - - Speed - - - - - Configure - - - - - Dynamic Recompiler - - - - - Time Synchronization - - - - - Disabled - - - - - Enabled (Local Time) - - - - - Enabled (UTC) - - - - - SettingsNetwork - - - Form - - - - - PCap Device - - - - - Network Adapter - - - - - Network Type - - - - - Configure - - - - - SettingsOtherPeripherals - - - Form - - - - - ISA RTC - - - - - - - - - Configure - - - - - ISA Memory Expansion - - - - - Card 2 - - - - - Card 3 - - - - - Card 1 - - - - - Card 4 - - - - - ISABugger Device - - - - - POST card - - - - - SettingsOtherRemovable - - - Form - - - - - MO Drives - - - - - - Bus - - - - - - Channel - - - - - Type - - - - - ZIP Drives - - - - - ZIP 250 - - - - - SettingsPorts - - - Form - - - - - LPT1 Device - - - - - LPT2 Device - - - - - LPT3 Device - - - - - Serial Port 1 - - - - - Parallel Port 1 - - - - - Serial Port 2 - - - - - Parallel Port 2 - - - - - Serial Port 3 - - - - - Parallel Port 3 - - - - - Serial Port 4 - - - - - SettingsSound - - - Form - - - - - MIDI In - - - - - Innovation SSI-2001 - - - - - Gravis Ultrasound - - - - - Sound Card - - - - - - - - - - - Configure - - - - - MIDI Out - - - - - Standalone MPU-401 - - - - - CMS / Game Blaster - - - - - Use FLOAT32 sound - - - - - SettingsStorageControllers - - - Form - - - - - HD Controller - - - - - - - - - - - - Configure - - - - - FD Controller - - - - - Tertiary IDE Controller - - - - - Quaternary IDE Controller - - - - - SCSI - - - - - Controller 1 - - - - - Controller 4 - - - - - Controller 2 - - - - - Controller 3 - - - - - Cassette - - - - - SoundGain - - - Sound Gain - - - - - Gain: - - - - - SpecifyDimensions - - - Specify Main Window Dimensions - - - - - Width: - - - - - Lock to this size - - - - - Height: - - - - diff --git a/src/qt/86box_en.ts b/src/qt/86box_en.ts deleted file mode 100644 index 9694d0a32..000000000 --- a/src/qt/86box_en.ts +++ /dev/null @@ -1,1332 +0,0 @@ - - - - - DeviceConfig - - - Dialog - - - - - FileField - - - Form - - - - - Browse - - - - - HarddiskDialog - - - Dialog - - - - - File name - - - - - Cylinders - - - - - Sectors - - - - - Size (MiB) - - - - - Heads - - - - - Type - - - - - Bus - - - - - Channel - - - - - Format - - - - - Block Size - - - - - JoystickConfiguration - - - Dialog - - - - - Device - - - - - MainWindow - - - 86Box - - - - - Action - - - - - Tools - - - - - View - - - - - Renderer - - - - - Window scale factor - - - - - Filter method - - - - - Fullscreen stretch mode - - - - - EGA/(S)VGA settings - - - - - VGA screen type - - - - - Grayscale conversion type - - - - - Media - - - - - Help - - - - - Keyboard requires capture - - - - - Right CTRL is left ALT - - - - - Hard Reset - - - - - Ctrl+Alt+Del - - - - - Ctrl+Alt+Esc - - - - - Pause - - - - - Exit - - - - - Settings - - - - - Fullscreen - - - - - Ctrl+Alt+PgUp - - - - - Software Renderer - - - - - Hardware Renderer (OpenGL) - - - - - Hardware Renderer (OpenGL ES) - - - - - Hide status bar - - - - - Resizable window - - - - - Remember size and position - - - - - Specify dimensions... - - - - - Force 4:3 display ratio - - - - - HiDPI scaling - - - - - CGA/PCjr/Tandy/EGA/(S)VGA overscan - - - - - Change contrast for monochrome display - - - - - 0.5x - - - - - 1x - - - - - 1.5x - - - - - 2x - - - - - Nearest - - - - - Linear - - - - - Full screen stretch - - - - - 4:3 - - - - - Square pixels (Keep ratio) - - - - - Integer scale - - - - - Inverted VGA monitor - - - - - RGB Color - - - - - RGB Grayscale - - - - - Amber monitor - - - - - Green monitor - - - - - White monitor - - - - - BT601 (NTSC/PAL) - - - - - BT709 (HDTV) - - - - - Average - - - - - About Qt... - - - - - About 86Box... - - - - - Documentation... - - - - - Update status bar icons - - - - - Take screenshot... - - - - - Sound gain... - - - - - OpenGL 3.0 Core - - - - - Program preferences... - - - - - MediaMenu - - - - - - New Image - - - - - - - - Existing Image - - - - - - - - Existing Image (Write Protected) - - - - - Record - - - - - Play - - - - - Rewind - - - - - Fast Forward - - - - - - - - - Eject - - - - - - Image - - - - - Export to 86F - - - - - Mute - - - - - Empty - - - - - - - Reload previous image - - - - - Create... - - - - - - - - - Open - - - - - Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) - - - - - Cassette: %1 - - - - - - - - - - (empty) - - - - - Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) - - - - - Cartridge %1: %2 - - - - - All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) - - - - - Save as 86f - - - - - Surface images (*.86f) - - - - - Unable to write file - - - - - Make sure the file is being saved to a writable directory - - - - - Floppy %1 (%2): %3 - - - - - CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) - - - - - - - Unknown Bus - - - - - CD-ROM %1 (%2): %3 - - - - - ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) - - - - - ZIP %1 %2 (%3): %4 - - - - - MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) - - - - - MO %1 (%2): %3 - - - - - NewFloppyDialog - - - New Image - - - - - File Name - - - - - Disk Size - - - - - RPM Mode - - - - - ProgSettings - - - Preferences - - - - - (Default) - - - - - Icon set: - - - - - Default - - - - - QObject - - - Click to capture mouse. - - - - - Press %1 to release mouse - - - - - Press %1 or middle button to release mouse - - - - - Failed to initialize FluidSynth - - - - - MFM/RLL or ESDI CD-ROM drives never existed - - - - - Failed to set up PCap - - - - - No PCap devices found - - - - - Unable to initialize FreeType - - - - - Unable to initialize SDL, libsdl2 is required - - - - - libfreetype is required for ESC/P printer emulation. - - - - - libgs is required for automatic conversion of PostScript files to PDF. - -Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. - - - - - %1 is required for FluidSynth MIDI output. - - - - - Make sure libpcap is installed and that you are on a libpcap-compatible network connection. - - - - - Unable to initialize Ghostscript - - - - - Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. - - - - - Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. - - - - - Hardware not available - - - - - No ROMs found. - - - - - 86Box could not find any usable ROM images. - -Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. - - - - - RendererStack - - - StackedWidget - - - - - Settings - - - 86Box Settings - - - - - SettingsDisplay - - - Form - - - - - Video - - - - - - Configure - - - - - Voodoo Graphics - - - - - SettingsFloppyCDROM - - - Form - - - - - Floppy Drives - - - - - Type - - - - - Turbo Timings - - - - - Check BPB - - - - - CD-ROM Drives - - - - - Channel - - - - - Speed - - - - - Bus - - - - - SettingsHarddisks - - - Form - - - - - Bus - - - - - ID - - - - - New - - - - - Existing - - - - - Remove - - - - - SettingsInput - - - Form - - - - - Mouse - - - - - Configure - - - - - Joystick - - - - - Joystick 1... - - - - - Joystick 2... - - - - - Joystick 3... - - - - - Joystick 4... - - - - - SettingsMachine - - - Form - - - - - Machine Type - - - - - Machine - - - - - CPU - - - - - FPU - - - - - Wait States - - - - - Memory - - - - - Speed - - - - - Configure - - - - - Dynamic Recompiler - - - - - Time Synchronization - - - - - Disabled - - - - - Enabled (Local Time) - - - - - Enabled (UTC) - - - - - SettingsNetwork - - - Form - - - - - PCap Device - - - - - Network Adapter - - - - - Network Type - - - - - Configure - - - - - SettingsOtherPeripherals - - - Form - - - - - ISA RTC - - - - - - - - - Configure - - - - - ISA Memory Expansion - - - - - Card 2 - - - - - Card 3 - - - - - Card 1 - - - - - Card 4 - - - - - ISABugger Device - - - - - POST card - - - - - SettingsOtherRemovable - - - Form - - - - - MO Drives - - - - - - Bus - - - - - - Channel - - - - - Type - - - - - ZIP Drives - - - - - ZIP 250 - - - - - SettingsPorts - - - Form - - - - - LPT1 Device - - - - - LPT2 Device - - - - - LPT3 Device - - - - - Serial Port 1 - - - - - Parallel Port 1 - - - - - Serial Port 2 - - - - - Parallel Port 2 - - - - - Serial Port 3 - - - - - Parallel Port 3 - - - - - Serial Port 4 - - - - - SettingsSound - - - Form - - - - - MIDI In - - - - - Innovation SSI-2001 - - - - - Gravis Ultrasound - - - - - Sound Card - - - - - - - - - - - Configure - - - - - MIDI Out - - - - - Standalone MPU-401 - - - - - CMS / Game Blaster - - - - - Use FLOAT32 sound - - - - - SettingsStorageControllers - - - Form - - - - - HD Controller - - - - - - - - - - - - Configure - - - - - FD Controller - - - - - Tertiary IDE Controller - - - - - Quaternary IDE Controller - - - - - SCSI - - - - - Controller 1 - - - - - Controller 4 - - - - - Controller 2 - - - - - Controller 3 - - - - - Cassette - - - - - SoundGain - - - Sound Gain - - - - - Gain: - - - - - SpecifyDimensions - - - Specify Main Window Dimensions - - - - - Width: - - - - - Lock to this size - - - - - Height: - - - - diff --git a/src/qt/86box_es.ts b/src/qt/86box_es.ts deleted file mode 100644 index 9d15e64ed..000000000 --- a/src/qt/86box_es.ts +++ /dev/null @@ -1,1332 +0,0 @@ - - - - - DeviceConfig - - - Dialog - - - - - FileField - - - Form - - - - - Browse - - - - - HarddiskDialog - - - Dialog - - - - - File name - - - - - Cylinders - - - - - Sectors - - - - - Size (MiB) - - - - - Heads - - - - - Type - - - - - Bus - - - - - Channel - - - - - Format - - - - - Block Size - - - - - JoystickConfiguration - - - Dialog - - - - - Device - - - - - MainWindow - - - 86Box - - - - - Action - - - - - Tools - - - - - View - - - - - Renderer - - - - - Window scale factor - - - - - Filter method - - - - - Fullscreen stretch mode - - - - - EGA/(S)VGA settings - - - - - VGA screen type - - - - - Grayscale conversion type - - - - - Media - - - - - Help - - - - - Keyboard requires capture - - - - - Right CTRL is left ALT - - - - - Hard Reset - - - - - Ctrl+Alt+Del - - - - - Ctrl+Alt+Esc - - - - - Pause - - - - - Exit - - - - - Settings - - - - - Fullscreen - - - - - Ctrl+Alt+PgUp - - - - - Software Renderer - - - - - Hardware Renderer (OpenGL) - - - - - Hardware Renderer (OpenGL ES) - - - - - Hide status bar - - - - - Resizable window - - - - - Remember size and position - - - - - Specify dimensions... - - - - - Force 4:3 display ratio - - - - - HiDPI scaling - - - - - CGA/PCjr/Tandy/EGA/(S)VGA overscan - - - - - Change contrast for monochrome display - - - - - 0.5x - - - - - 1x - - - - - 1.5x - - - - - 2x - - - - - Nearest - - - - - Linear - - - - - Full screen stretch - - - - - 4:3 - - - - - Square pixels (Keep ratio) - - - - - Integer scale - - - - - Inverted VGA monitor - - - - - RGB Color - - - - - RGB Grayscale - - - - - Amber monitor - - - - - Green monitor - - - - - White monitor - - - - - BT601 (NTSC/PAL) - - - - - BT709 (HDTV) - - - - - Average - - - - - About Qt... - - - - - About 86Box... - - - - - Documentation... - - - - - Update status bar icons - - - - - Take screenshot... - - - - - Sound gain... - - - - - OpenGL 3.0 Core - - - - - Program preferences... - - - - - MediaMenu - - - - - - New Image - - - - - - - - Existing Image - - - - - - - - Existing Image (Write Protected) - - - - - Record - - - - - Play - - - - - Rewind - - - - - Fast Forward - - - - - - - - - Eject - - - - - - Image - - - - - Export to 86F - - - - - Mute - - - - - Empty - - - - - - - Reload previous image - - - - - Create... - - - - - - - - - Open - - - - - Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) - - - - - Cassette: %1 - - - - - - - - - - (empty) - - - - - Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) - - - - - Cartridge %1: %2 - - - - - All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) - - - - - Save as 86f - - - - - Surface images (*.86f) - - - - - Unable to write file - - - - - Make sure the file is being saved to a writable directory - - - - - Floppy %1 (%2): %3 - - - - - CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) - - - - - - - Unknown Bus - - - - - CD-ROM %1 (%2): %3 - - - - - ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) - - - - - ZIP %1 %2 (%3): %4 - - - - - MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) - - - - - MO %1 (%2): %3 - - - - - NewFloppyDialog - - - New Image - - - - - File Name - - - - - Disk Size - - - - - RPM Mode - - - - - ProgSettings - - - Preferences - - - - - (Default) - - - - - Icon set: - - - - - Default - - - - - QObject - - - Click to capture mouse. - - - - - Press %1 to release mouse - - - - - Press %1 or middle button to release mouse - - - - - Failed to initialize FluidSynth - - - - - MFM/RLL or ESDI CD-ROM drives never existed - - - - - Failed to set up PCap - - - - - No PCap devices found - - - - - Unable to initialize FreeType - - - - - Unable to initialize SDL, libsdl2 is required - - - - - libfreetype is required for ESC/P printer emulation. - - - - - libgs is required for automatic conversion of PostScript files to PDF. - -Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. - - - - - %1 is required for FluidSynth MIDI output. - - - - - Make sure libpcap is installed and that you are on a libpcap-compatible network connection. - - - - - Unable to initialize Ghostscript - - - - - Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. - - - - - Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. - - - - - Hardware not available - - - - - No ROMs found. - - - - - 86Box could not find any usable ROM images. - -Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. - - - - - RendererStack - - - StackedWidget - - - - - Settings - - - 86Box Settings - - - - - SettingsDisplay - - - Form - - - - - Video - - - - - - Configure - - - - - Voodoo Graphics - - - - - SettingsFloppyCDROM - - - Form - - - - - Floppy Drives - - - - - Type - - - - - Turbo Timings - - - - - Check BPB - - - - - CD-ROM Drives - - - - - Channel - - - - - Speed - - - - - Bus - - - - - SettingsHarddisks - - - Form - - - - - Bus - - - - - ID - - - - - New - - - - - Existing - - - - - Remove - - - - - SettingsInput - - - Form - - - - - Mouse - - - - - Configure - - - - - Joystick - - - - - Joystick 1... - - - - - Joystick 2... - - - - - Joystick 3... - - - - - Joystick 4... - - - - - SettingsMachine - - - Form - - - - - Machine Type - - - - - Machine - - - - - CPU - - - - - FPU - - - - - Wait States - - - - - Memory - - - - - Speed - - - - - Configure - - - - - Dynamic Recompiler - - - - - Time Synchronization - - - - - Disabled - - - - - Enabled (Local Time) - - - - - Enabled (UTC) - - - - - SettingsNetwork - - - Form - - - - - PCap Device - - - - - Network Adapter - - - - - Network Type - - - - - Configure - - - - - SettingsOtherPeripherals - - - Form - - - - - ISA RTC - - - - - - - - - Configure - - - - - ISA Memory Expansion - - - - - Card 2 - - - - - Card 3 - - - - - Card 1 - - - - - Card 4 - - - - - ISABugger Device - - - - - POST card - - - - - SettingsOtherRemovable - - - Form - - - - - MO Drives - - - - - - Bus - - - - - - Channel - - - - - Type - - - - - ZIP Drives - - - - - ZIP 250 - - - - - SettingsPorts - - - Form - - - - - LPT1 Device - - - - - LPT2 Device - - - - - LPT3 Device - - - - - Serial Port 1 - - - - - Parallel Port 1 - - - - - Serial Port 2 - - - - - Parallel Port 2 - - - - - Serial Port 3 - - - - - Parallel Port 3 - - - - - Serial Port 4 - - - - - SettingsSound - - - Form - - - - - MIDI In - - - - - Innovation SSI-2001 - - - - - Gravis Ultrasound - - - - - Sound Card - - - - - - - - - - - Configure - - - - - MIDI Out - - - - - Standalone MPU-401 - - - - - CMS / Game Blaster - - - - - Use FLOAT32 sound - - - - - SettingsStorageControllers - - - Form - - - - - HD Controller - - - - - - - - - - - - Configure - - - - - FD Controller - - - - - Tertiary IDE Controller - - - - - Quaternary IDE Controller - - - - - SCSI - - - - - Controller 1 - - - - - Controller 4 - - - - - Controller 2 - - - - - Controller 3 - - - - - Cassette - - - - - SoundGain - - - Sound Gain - - - - - Gain: - - - - - SpecifyDimensions - - - Specify Main Window Dimensions - - - - - Width: - - - - - Lock to this size - - - - - Height: - - - - diff --git a/src/qt/86box_fi.ts b/src/qt/86box_fi.ts deleted file mode 100644 index fb342f75f..000000000 --- a/src/qt/86box_fi.ts +++ /dev/null @@ -1,1332 +0,0 @@ - - - - - DeviceConfig - - - Dialog - - - - - FileField - - - Form - - - - - Browse - - - - - HarddiskDialog - - - Dialog - - - - - File name - - - - - Cylinders - - - - - Sectors - - - - - Size (MiB) - - - - - Heads - - - - - Type - - - - - Bus - - - - - Channel - - - - - Format - - - - - Block Size - - - - - JoystickConfiguration - - - Dialog - - - - - Device - - - - - MainWindow - - - 86Box - - - - - Action - - - - - Tools - - - - - View - - - - - Renderer - - - - - Window scale factor - - - - - Filter method - - - - - Fullscreen stretch mode - - - - - EGA/(S)VGA settings - - - - - VGA screen type - - - - - Grayscale conversion type - - - - - Media - - - - - Help - - - - - Keyboard requires capture - - - - - Right CTRL is left ALT - - - - - Hard Reset - - - - - Ctrl+Alt+Del - - - - - Ctrl+Alt+Esc - - - - - Pause - - - - - Exit - - - - - Settings - - - - - Fullscreen - - - - - Ctrl+Alt+PgUp - - - - - Software Renderer - - - - - Hardware Renderer (OpenGL) - - - - - Hardware Renderer (OpenGL ES) - - - - - Hide status bar - - - - - Resizable window - - - - - Remember size and position - - - - - Specify dimensions... - - - - - Force 4:3 display ratio - - - - - HiDPI scaling - - - - - CGA/PCjr/Tandy/EGA/(S)VGA overscan - - - - - Change contrast for monochrome display - - - - - 0.5x - - - - - 1x - - - - - 1.5x - - - - - 2x - - - - - Nearest - - - - - Linear - - - - - Full screen stretch - - - - - 4:3 - - - - - Square pixels (Keep ratio) - - - - - Integer scale - - - - - Inverted VGA monitor - - - - - RGB Color - - - - - RGB Grayscale - - - - - Amber monitor - - - - - Green monitor - - - - - White monitor - - - - - BT601 (NTSC/PAL) - - - - - BT709 (HDTV) - - - - - Average - - - - - About Qt... - - - - - About 86Box... - - - - - Documentation... - - - - - Update status bar icons - - - - - Take screenshot... - - - - - Sound gain... - - - - - OpenGL 3.0 Core - - - - - Program preferences... - - - - - MediaMenu - - - - - - New Image - - - - - - - - Existing Image - - - - - - - - Existing Image (Write Protected) - - - - - Record - - - - - Play - - - - - Rewind - - - - - Fast Forward - - - - - - - - - Eject - - - - - - Image - - - - - Export to 86F - - - - - Mute - - - - - Empty - - - - - - - Reload previous image - - - - - Create... - - - - - - - - - Open - - - - - Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) - - - - - Cassette: %1 - - - - - - - - - - (empty) - - - - - Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) - - - - - Cartridge %1: %2 - - - - - All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) - - - - - Save as 86f - - - - - Surface images (*.86f) - - - - - Unable to write file - - - - - Make sure the file is being saved to a writable directory - - - - - Floppy %1 (%2): %3 - - - - - CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) - - - - - - - Unknown Bus - - - - - CD-ROM %1 (%2): %3 - - - - - ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) - - - - - ZIP %1 %2 (%3): %4 - - - - - MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) - - - - - MO %1 (%2): %3 - - - - - NewFloppyDialog - - - New Image - - - - - File Name - - - - - Disk Size - - - - - RPM Mode - - - - - ProgSettings - - - Preferences - - - - - (Default) - - - - - Icon set: - - - - - Default - - - - - QObject - - - Click to capture mouse. - - - - - Press %1 to release mouse - - - - - Press %1 or middle button to release mouse - - - - - Failed to initialize FluidSynth - - - - - MFM/RLL or ESDI CD-ROM drives never existed - - - - - Failed to set up PCap - - - - - No PCap devices found - - - - - Unable to initialize FreeType - - - - - Unable to initialize SDL, libsdl2 is required - - - - - libfreetype is required for ESC/P printer emulation. - - - - - libgs is required for automatic conversion of PostScript files to PDF. - -Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. - - - - - %1 is required for FluidSynth MIDI output. - - - - - Make sure libpcap is installed and that you are on a libpcap-compatible network connection. - - - - - Unable to initialize Ghostscript - - - - - Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. - - - - - Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. - - - - - Hardware not available - - - - - No ROMs found. - - - - - 86Box could not find any usable ROM images. - -Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. - - - - - RendererStack - - - StackedWidget - - - - - Settings - - - 86Box Settings - - - - - SettingsDisplay - - - Form - - - - - Video - - - - - - Configure - - - - - Voodoo Graphics - - - - - SettingsFloppyCDROM - - - Form - - - - - Floppy Drives - - - - - Type - - - - - Turbo Timings - - - - - Check BPB - - - - - CD-ROM Drives - - - - - Channel - - - - - Speed - - - - - Bus - - - - - SettingsHarddisks - - - Form - - - - - Bus - - - - - ID - - - - - New - - - - - Existing - - - - - Remove - - - - - SettingsInput - - - Form - - - - - Mouse - - - - - Configure - - - - - Joystick - - - - - Joystick 1... - - - - - Joystick 2... - - - - - Joystick 3... - - - - - Joystick 4... - - - - - SettingsMachine - - - Form - - - - - Machine Type - - - - - Machine - - - - - CPU - - - - - FPU - - - - - Wait States - - - - - Memory - - - - - Speed - - - - - Configure - - - - - Dynamic Recompiler - - - - - Time Synchronization - - - - - Disabled - - - - - Enabled (Local Time) - - - - - Enabled (UTC) - - - - - SettingsNetwork - - - Form - - - - - PCap Device - - - - - Network Adapter - - - - - Network Type - - - - - Configure - - - - - SettingsOtherPeripherals - - - Form - - - - - ISA RTC - - - - - - - - - Configure - - - - - ISA Memory Expansion - - - - - Card 2 - - - - - Card 3 - - - - - Card 1 - - - - - Card 4 - - - - - ISABugger Device - - - - - POST card - - - - - SettingsOtherRemovable - - - Form - - - - - MO Drives - - - - - - Bus - - - - - - Channel - - - - - Type - - - - - ZIP Drives - - - - - ZIP 250 - - - - - SettingsPorts - - - Form - - - - - LPT1 Device - - - - - LPT2 Device - - - - - LPT3 Device - - - - - Serial Port 1 - - - - - Parallel Port 1 - - - - - Serial Port 2 - - - - - Parallel Port 2 - - - - - Serial Port 3 - - - - - Parallel Port 3 - - - - - Serial Port 4 - - - - - SettingsSound - - - Form - - - - - MIDI In - - - - - Innovation SSI-2001 - - - - - Gravis Ultrasound - - - - - Sound Card - - - - - - - - - - - Configure - - - - - MIDI Out - - - - - Standalone MPU-401 - - - - - CMS / Game Blaster - - - - - Use FLOAT32 sound - - - - - SettingsStorageControllers - - - Form - - - - - HD Controller - - - - - - - - - - - - Configure - - - - - FD Controller - - - - - Tertiary IDE Controller - - - - - Quaternary IDE Controller - - - - - SCSI - - - - - Controller 1 - - - - - Controller 4 - - - - - Controller 2 - - - - - Controller 3 - - - - - Cassette - - - - - SoundGain - - - Sound Gain - - - - - Gain: - - - - - SpecifyDimensions - - - Specify Main Window Dimensions - - - - - Width: - - - - - Lock to this size - - - - - Height: - - - - diff --git a/src/qt/86box_fr.ts b/src/qt/86box_fr.ts deleted file mode 100644 index a441da067..000000000 --- a/src/qt/86box_fr.ts +++ /dev/null @@ -1,1332 +0,0 @@ - - - - - DeviceConfig - - - Dialog - - - - - FileField - - - Form - - - - - Browse - - - - - HarddiskDialog - - - Dialog - - - - - File name - - - - - Cylinders - - - - - Sectors - - - - - Size (MiB) - - - - - Heads - - - - - Type - - - - - Bus - - - - - Channel - - - - - Format - - - - - Block Size - - - - - JoystickConfiguration - - - Dialog - - - - - Device - - - - - MainWindow - - - 86Box - - - - - Action - - - - - Tools - - - - - View - - - - - Renderer - - - - - Window scale factor - - - - - Filter method - - - - - Fullscreen stretch mode - - - - - EGA/(S)VGA settings - - - - - VGA screen type - - - - - Grayscale conversion type - - - - - Media - - - - - Help - - - - - Keyboard requires capture - - - - - Right CTRL is left ALT - - - - - Hard Reset - - - - - Ctrl+Alt+Del - - - - - Ctrl+Alt+Esc - - - - - Pause - - - - - Exit - - - - - Settings - - - - - Fullscreen - - - - - Ctrl+Alt+PgUp - - - - - Software Renderer - - - - - Hardware Renderer (OpenGL) - - - - - Hardware Renderer (OpenGL ES) - - - - - Hide status bar - - - - - Resizable window - - - - - Remember size and position - - - - - Specify dimensions... - - - - - Force 4:3 display ratio - - - - - HiDPI scaling - - - - - CGA/PCjr/Tandy/EGA/(S)VGA overscan - - - - - Change contrast for monochrome display - - - - - 0.5x - - - - - 1x - - - - - 1.5x - - - - - 2x - - - - - Nearest - - - - - Linear - - - - - Full screen stretch - - - - - 4:3 - - - - - Square pixels (Keep ratio) - - - - - Integer scale - - - - - Inverted VGA monitor - - - - - RGB Color - - - - - RGB Grayscale - - - - - Amber monitor - - - - - Green monitor - - - - - White monitor - - - - - BT601 (NTSC/PAL) - - - - - BT709 (HDTV) - - - - - Average - - - - - About Qt... - - - - - About 86Box... - - - - - Documentation... - - - - - Update status bar icons - - - - - Take screenshot... - - - - - Sound gain... - - - - - OpenGL 3.0 Core - - - - - Program preferences... - - - - - MediaMenu - - - - - - New Image - - - - - - - - Existing Image - - - - - - - - Existing Image (Write Protected) - - - - - Record - - - - - Play - - - - - Rewind - - - - - Fast Forward - - - - - - - - - Eject - - - - - - Image - - - - - Export to 86F - - - - - Mute - - - - - Empty - - - - - - - Reload previous image - - - - - Create... - - - - - - - - - Open - - - - - Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) - - - - - Cassette: %1 - - - - - - - - - - (empty) - - - - - Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) - - - - - Cartridge %1: %2 - - - - - All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) - - - - - Save as 86f - - - - - Surface images (*.86f) - - - - - Unable to write file - - - - - Make sure the file is being saved to a writable directory - - - - - Floppy %1 (%2): %3 - - - - - CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) - - - - - - - Unknown Bus - - - - - CD-ROM %1 (%2): %3 - - - - - ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) - - - - - ZIP %1 %2 (%3): %4 - - - - - MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) - - - - - MO %1 (%2): %3 - - - - - NewFloppyDialog - - - New Image - - - - - File Name - - - - - Disk Size - - - - - RPM Mode - - - - - ProgSettings - - - Preferences - - - - - (Default) - - - - - Icon set: - - - - - Default - - - - - QObject - - - Click to capture mouse. - - - - - Press %1 to release mouse - - - - - Press %1 or middle button to release mouse - - - - - Failed to initialize FluidSynth - - - - - MFM/RLL or ESDI CD-ROM drives never existed - - - - - Failed to set up PCap - - - - - No PCap devices found - - - - - Unable to initialize FreeType - - - - - Unable to initialize SDL, libsdl2 is required - - - - - libfreetype is required for ESC/P printer emulation. - - - - - libgs is required for automatic conversion of PostScript files to PDF. - -Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. - - - - - %1 is required for FluidSynth MIDI output. - - - - - Make sure libpcap is installed and that you are on a libpcap-compatible network connection. - - - - - Unable to initialize Ghostscript - - - - - Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. - - - - - Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. - - - - - Hardware not available - - - - - No ROMs found. - - - - - 86Box could not find any usable ROM images. - -Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. - - - - - RendererStack - - - StackedWidget - - - - - Settings - - - 86Box Settings - - - - - SettingsDisplay - - - Form - - - - - Video - - - - - - Configure - - - - - Voodoo Graphics - - - - - SettingsFloppyCDROM - - - Form - - - - - Floppy Drives - - - - - Type - - - - - Turbo Timings - - - - - Check BPB - - - - - CD-ROM Drives - - - - - Channel - - - - - Speed - - - - - Bus - - - - - SettingsHarddisks - - - Form - - - - - Bus - - - - - ID - - - - - New - - - - - Existing - - - - - Remove - - - - - SettingsInput - - - Form - - - - - Mouse - - - - - Configure - - - - - Joystick - - - - - Joystick 1... - - - - - Joystick 2... - - - - - Joystick 3... - - - - - Joystick 4... - - - - - SettingsMachine - - - Form - - - - - Machine Type - - - - - Machine - - - - - CPU - - - - - FPU - - - - - Wait States - - - - - Memory - - - - - Speed - - - - - Configure - - - - - Dynamic Recompiler - - - - - Time Synchronization - - - - - Disabled - - - - - Enabled (Local Time) - - - - - Enabled (UTC) - - - - - SettingsNetwork - - - Form - - - - - PCap Device - - - - - Network Adapter - - - - - Network Type - - - - - Configure - - - - - SettingsOtherPeripherals - - - Form - - - - - ISA RTC - - - - - - - - - Configure - - - - - ISA Memory Expansion - - - - - Card 2 - - - - - Card 3 - - - - - Card 1 - - - - - Card 4 - - - - - ISABugger Device - - - - - POST card - - - - - SettingsOtherRemovable - - - Form - - - - - MO Drives - - - - - - Bus - - - - - - Channel - - - - - Type - - - - - ZIP Drives - - - - - ZIP 250 - - - - - SettingsPorts - - - Form - - - - - LPT1 Device - - - - - LPT2 Device - - - - - LPT3 Device - - - - - Serial Port 1 - - - - - Parallel Port 1 - - - - - Serial Port 2 - - - - - Parallel Port 2 - - - - - Serial Port 3 - - - - - Parallel Port 3 - - - - - Serial Port 4 - - - - - SettingsSound - - - Form - - - - - MIDI In - - - - - Innovation SSI-2001 - - - - - Gravis Ultrasound - - - - - Sound Card - - - - - - - - - - - Configure - - - - - MIDI Out - - - - - Standalone MPU-401 - - - - - CMS / Game Blaster - - - - - Use FLOAT32 sound - - - - - SettingsStorageControllers - - - Form - - - - - HD Controller - - - - - - - - - - - - Configure - - - - - FD Controller - - - - - Tertiary IDE Controller - - - - - Quaternary IDE Controller - - - - - SCSI - - - - - Controller 1 - - - - - Controller 4 - - - - - Controller 2 - - - - - Controller 3 - - - - - Cassette - - - - - SoundGain - - - Sound Gain - - - - - Gain: - - - - - SpecifyDimensions - - - Specify Main Window Dimensions - - - - - Width: - - - - - Lock to this size - - - - - Height: - - - - diff --git a/src/qt/86box_hr.ts b/src/qt/86box_hr.ts deleted file mode 100644 index b9e83e2f0..000000000 --- a/src/qt/86box_hr.ts +++ /dev/null @@ -1,1332 +0,0 @@ - - - - - DeviceConfig - - - Dialog - - - - - FileField - - - Form - - - - - Browse - - - - - HarddiskDialog - - - Dialog - - - - - File name - - - - - Cylinders - - - - - Sectors - - - - - Size (MiB) - - - - - Heads - - - - - Type - - - - - Bus - - - - - Channel - - - - - Format - - - - - Block Size - - - - - JoystickConfiguration - - - Dialog - - - - - Device - - - - - MainWindow - - - 86Box - - - - - Action - - - - - Tools - - - - - View - - - - - Renderer - - - - - Window scale factor - - - - - Filter method - - - - - Fullscreen stretch mode - - - - - EGA/(S)VGA settings - - - - - VGA screen type - - - - - Grayscale conversion type - - - - - Media - - - - - Help - - - - - Keyboard requires capture - - - - - Right CTRL is left ALT - - - - - Hard Reset - - - - - Ctrl+Alt+Del - - - - - Ctrl+Alt+Esc - - - - - Pause - - - - - Exit - - - - - Settings - - - - - Fullscreen - - - - - Ctrl+Alt+PgUp - - - - - Software Renderer - - - - - Hardware Renderer (OpenGL) - - - - - Hardware Renderer (OpenGL ES) - - - - - Hide status bar - - - - - Resizable window - - - - - Remember size and position - - - - - Specify dimensions... - - - - - Force 4:3 display ratio - - - - - HiDPI scaling - - - - - CGA/PCjr/Tandy/EGA/(S)VGA overscan - - - - - Change contrast for monochrome display - - - - - 0.5x - - - - - 1x - - - - - 1.5x - - - - - 2x - - - - - Nearest - - - - - Linear - - - - - Full screen stretch - - - - - 4:3 - - - - - Square pixels (Keep ratio) - - - - - Integer scale - - - - - Inverted VGA monitor - - - - - RGB Color - - - - - RGB Grayscale - - - - - Amber monitor - - - - - Green monitor - - - - - White monitor - - - - - BT601 (NTSC/PAL) - - - - - BT709 (HDTV) - - - - - Average - - - - - About Qt... - - - - - About 86Box... - - - - - Documentation... - - - - - Update status bar icons - - - - - Take screenshot... - - - - - Sound gain... - - - - - OpenGL 3.0 Core - - - - - Program preferences... - - - - - MediaMenu - - - - - - New Image - - - - - - - - Existing Image - - - - - - - - Existing Image (Write Protected) - - - - - Record - - - - - Play - - - - - Rewind - - - - - Fast Forward - - - - - - - - - Eject - - - - - - Image - - - - - Export to 86F - - - - - Mute - - - - - Empty - - - - - - - Reload previous image - - - - - Create... - - - - - - - - - Open - - - - - Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) - - - - - Cassette: %1 - - - - - - - - - - (empty) - - - - - Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) - - - - - Cartridge %1: %2 - - - - - All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) - - - - - Save as 86f - - - - - Surface images (*.86f) - - - - - Unable to write file - - - - - Make sure the file is being saved to a writable directory - - - - - Floppy %1 (%2): %3 - - - - - CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) - - - - - - - Unknown Bus - - - - - CD-ROM %1 (%2): %3 - - - - - ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) - - - - - ZIP %1 %2 (%3): %4 - - - - - MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) - - - - - MO %1 (%2): %3 - - - - - NewFloppyDialog - - - New Image - - - - - File Name - - - - - Disk Size - - - - - RPM Mode - - - - - ProgSettings - - - Preferences - - - - - (Default) - - - - - Icon set: - - - - - Default - - - - - QObject - - - Click to capture mouse. - - - - - Press %1 to release mouse - - - - - Press %1 or middle button to release mouse - - - - - Failed to initialize FluidSynth - - - - - MFM/RLL or ESDI CD-ROM drives never existed - - - - - Failed to set up PCap - - - - - No PCap devices found - - - - - Unable to initialize FreeType - - - - - Unable to initialize SDL, libsdl2 is required - - - - - libfreetype is required for ESC/P printer emulation. - - - - - libgs is required for automatic conversion of PostScript files to PDF. - -Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. - - - - - %1 is required for FluidSynth MIDI output. - - - - - Make sure libpcap is installed and that you are on a libpcap-compatible network connection. - - - - - Unable to initialize Ghostscript - - - - - Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. - - - - - Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. - - - - - Hardware not available - - - - - No ROMs found. - - - - - 86Box could not find any usable ROM images. - -Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. - - - - - RendererStack - - - StackedWidget - - - - - Settings - - - 86Box Settings - - - - - SettingsDisplay - - - Form - - - - - Video - - - - - - Configure - - - - - Voodoo Graphics - - - - - SettingsFloppyCDROM - - - Form - - - - - Floppy Drives - - - - - Type - - - - - Turbo Timings - - - - - Check BPB - - - - - CD-ROM Drives - - - - - Channel - - - - - Speed - - - - - Bus - - - - - SettingsHarddisks - - - Form - - - - - Bus - - - - - ID - - - - - New - - - - - Existing - - - - - Remove - - - - - SettingsInput - - - Form - - - - - Mouse - - - - - Configure - - - - - Joystick - - - - - Joystick 1... - - - - - Joystick 2... - - - - - Joystick 3... - - - - - Joystick 4... - - - - - SettingsMachine - - - Form - - - - - Machine Type - - - - - Machine - - - - - CPU - - - - - FPU - - - - - Wait States - - - - - Memory - - - - - Speed - - - - - Configure - - - - - Dynamic Recompiler - - - - - Time Synchronization - - - - - Disabled - - - - - Enabled (Local Time) - - - - - Enabled (UTC) - - - - - SettingsNetwork - - - Form - - - - - PCap Device - - - - - Network Adapter - - - - - Network Type - - - - - Configure - - - - - SettingsOtherPeripherals - - - Form - - - - - ISA RTC - - - - - - - - - Configure - - - - - ISA Memory Expansion - - - - - Card 2 - - - - - Card 3 - - - - - Card 1 - - - - - Card 4 - - - - - ISABugger Device - - - - - POST card - - - - - SettingsOtherRemovable - - - Form - - - - - MO Drives - - - - - - Bus - - - - - - Channel - - - - - Type - - - - - ZIP Drives - - - - - ZIP 250 - - - - - SettingsPorts - - - Form - - - - - LPT1 Device - - - - - LPT2 Device - - - - - LPT3 Device - - - - - Serial Port 1 - - - - - Parallel Port 1 - - - - - Serial Port 2 - - - - - Parallel Port 2 - - - - - Serial Port 3 - - - - - Parallel Port 3 - - - - - Serial Port 4 - - - - - SettingsSound - - - Form - - - - - MIDI In - - - - - Innovation SSI-2001 - - - - - Gravis Ultrasound - - - - - Sound Card - - - - - - - - - - - Configure - - - - - MIDI Out - - - - - Standalone MPU-401 - - - - - CMS / Game Blaster - - - - - Use FLOAT32 sound - - - - - SettingsStorageControllers - - - Form - - - - - HD Controller - - - - - - - - - - - - Configure - - - - - FD Controller - - - - - Tertiary IDE Controller - - - - - Quaternary IDE Controller - - - - - SCSI - - - - - Controller 1 - - - - - Controller 4 - - - - - Controller 2 - - - - - Controller 3 - - - - - Cassette - - - - - SoundGain - - - Sound Gain - - - - - Gain: - - - - - SpecifyDimensions - - - Specify Main Window Dimensions - - - - - Width: - - - - - Lock to this size - - - - - Height: - - - - diff --git a/src/qt/86box_hu.ts b/src/qt/86box_hu.ts deleted file mode 100644 index 48f6600b5..000000000 --- a/src/qt/86box_hu.ts +++ /dev/null @@ -1,1332 +0,0 @@ - - - - - DeviceConfig - - - Dialog - - - - - FileField - - - Form - - - - - Browse - - - - - HarddiskDialog - - - Dialog - - - - - File name - - - - - Cylinders - - - - - Sectors - - - - - Size (MiB) - - - - - Heads - - - - - Type - - - - - Bus - - - - - Channel - - - - - Format - - - - - Block Size - - - - - JoystickConfiguration - - - Dialog - - - - - Device - - - - - MainWindow - - - 86Box - - - - - Action - - - - - Tools - - - - - View - - - - - Renderer - - - - - Window scale factor - - - - - Filter method - - - - - Fullscreen stretch mode - - - - - EGA/(S)VGA settings - - - - - VGA screen type - - - - - Grayscale conversion type - - - - - Media - - - - - Help - - - - - Keyboard requires capture - - - - - Right CTRL is left ALT - - - - - Hard Reset - - - - - Ctrl+Alt+Del - - - - - Ctrl+Alt+Esc - - - - - Pause - - - - - Exit - - - - - Settings - - - - - Fullscreen - - - - - Ctrl+Alt+PgUp - - - - - Software Renderer - - - - - Hardware Renderer (OpenGL) - - - - - Hardware Renderer (OpenGL ES) - - - - - Hide status bar - - - - - Resizable window - - - - - Remember size and position - - - - - Specify dimensions... - - - - - Force 4:3 display ratio - - - - - HiDPI scaling - - - - - CGA/PCjr/Tandy/EGA/(S)VGA overscan - - - - - Change contrast for monochrome display - - - - - 0.5x - - - - - 1x - - - - - 1.5x - - - - - 2x - - - - - Nearest - - - - - Linear - - - - - Full screen stretch - - - - - 4:3 - - - - - Square pixels (Keep ratio) - - - - - Integer scale - - - - - Inverted VGA monitor - - - - - RGB Color - - - - - RGB Grayscale - - - - - Amber monitor - - - - - Green monitor - - - - - White monitor - - - - - BT601 (NTSC/PAL) - - - - - BT709 (HDTV) - - - - - Average - - - - - About Qt... - - - - - About 86Box... - - - - - Documentation... - - - - - Update status bar icons - - - - - Take screenshot... - - - - - Sound gain... - - - - - OpenGL 3.0 Core - - - - - Program preferences... - - - - - MediaMenu - - - - - - New Image - - - - - - - - Existing Image - - - - - - - - Existing Image (Write Protected) - - - - - Record - - - - - Play - - - - - Rewind - - - - - Fast Forward - - - - - - - - - Eject - - - - - - Image - - - - - Export to 86F - - - - - Mute - - - - - Empty - - - - - - - Reload previous image - - - - - Create... - - - - - - - - - Open - - - - - Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) - - - - - Cassette: %1 - - - - - - - - - - (empty) - - - - - Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) - - - - - Cartridge %1: %2 - - - - - All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) - - - - - Save as 86f - - - - - Surface images (*.86f) - - - - - Unable to write file - - - - - Make sure the file is being saved to a writable directory - - - - - Floppy %1 (%2): %3 - - - - - CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) - - - - - - - Unknown Bus - - - - - CD-ROM %1 (%2): %3 - - - - - ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) - - - - - ZIP %1 %2 (%3): %4 - - - - - MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) - - - - - MO %1 (%2): %3 - - - - - NewFloppyDialog - - - New Image - - - - - File Name - - - - - Disk Size - - - - - RPM Mode - - - - - ProgSettings - - - Preferences - - - - - (Default) - - - - - Icon set: - - - - - Default - - - - - QObject - - - Click to capture mouse. - - - - - Press %1 to release mouse - - - - - Press %1 or middle button to release mouse - - - - - Failed to initialize FluidSynth - - - - - MFM/RLL or ESDI CD-ROM drives never existed - - - - - Failed to set up PCap - - - - - No PCap devices found - - - - - Unable to initialize FreeType - - - - - Unable to initialize SDL, libsdl2 is required - - - - - libfreetype is required for ESC/P printer emulation. - - - - - libgs is required for automatic conversion of PostScript files to PDF. - -Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. - - - - - %1 is required for FluidSynth MIDI output. - - - - - Make sure libpcap is installed and that you are on a libpcap-compatible network connection. - - - - - Unable to initialize Ghostscript - - - - - Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. - - - - - Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. - - - - - Hardware not available - - - - - No ROMs found. - - - - - 86Box could not find any usable ROM images. - -Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. - - - - - RendererStack - - - StackedWidget - - - - - Settings - - - 86Box Settings - - - - - SettingsDisplay - - - Form - - - - - Video - - - - - - Configure - - - - - Voodoo Graphics - - - - - SettingsFloppyCDROM - - - Form - - - - - Floppy Drives - - - - - Type - - - - - Turbo Timings - - - - - Check BPB - - - - - CD-ROM Drives - - - - - Channel - - - - - Speed - - - - - Bus - - - - - SettingsHarddisks - - - Form - - - - - Bus - - - - - ID - - - - - New - - - - - Existing - - - - - Remove - - - - - SettingsInput - - - Form - - - - - Mouse - - - - - Configure - - - - - Joystick - - - - - Joystick 1... - - - - - Joystick 2... - - - - - Joystick 3... - - - - - Joystick 4... - - - - - SettingsMachine - - - Form - - - - - Machine Type - - - - - Machine - - - - - CPU - - - - - FPU - - - - - Wait States - - - - - Memory - - - - - Speed - - - - - Configure - - - - - Dynamic Recompiler - - - - - Time Synchronization - - - - - Disabled - - - - - Enabled (Local Time) - - - - - Enabled (UTC) - - - - - SettingsNetwork - - - Form - - - - - PCap Device - - - - - Network Adapter - - - - - Network Type - - - - - Configure - - - - - SettingsOtherPeripherals - - - Form - - - - - ISA RTC - - - - - - - - - Configure - - - - - ISA Memory Expansion - - - - - Card 2 - - - - - Card 3 - - - - - Card 1 - - - - - Card 4 - - - - - ISABugger Device - - - - - POST card - - - - - SettingsOtherRemovable - - - Form - - - - - MO Drives - - - - - - Bus - - - - - - Channel - - - - - Type - - - - - ZIP Drives - - - - - ZIP 250 - - - - - SettingsPorts - - - Form - - - - - LPT1 Device - - - - - LPT2 Device - - - - - LPT3 Device - - - - - Serial Port 1 - - - - - Parallel Port 1 - - - - - Serial Port 2 - - - - - Parallel Port 2 - - - - - Serial Port 3 - - - - - Parallel Port 3 - - - - - Serial Port 4 - - - - - SettingsSound - - - Form - - - - - MIDI In - - - - - Innovation SSI-2001 - - - - - Gravis Ultrasound - - - - - Sound Card - - - - - - - - - - - Configure - - - - - MIDI Out - - - - - Standalone MPU-401 - - - - - CMS / Game Blaster - - - - - Use FLOAT32 sound - - - - - SettingsStorageControllers - - - Form - - - - - HD Controller - - - - - - - - - - - - Configure - - - - - FD Controller - - - - - Tertiary IDE Controller - - - - - Quaternary IDE Controller - - - - - SCSI - - - - - Controller 1 - - - - - Controller 4 - - - - - Controller 2 - - - - - Controller 3 - - - - - Cassette - - - - - SoundGain - - - Sound Gain - - - - - Gain: - - - - - SpecifyDimensions - - - Specify Main Window Dimensions - - - - - Width: - - - - - Lock to this size - - - - - Height: - - - - diff --git a/src/qt/86box_it.ts b/src/qt/86box_it.ts deleted file mode 100644 index 9de8be31a..000000000 --- a/src/qt/86box_it.ts +++ /dev/null @@ -1,1332 +0,0 @@ - - - - - DeviceConfig - - - Dialog - - - - - FileField - - - Form - - - - - Browse - - - - - HarddiskDialog - - - Dialog - - - - - File name - - - - - Cylinders - - - - - Sectors - - - - - Size (MiB) - - - - - Heads - - - - - Type - - - - - Bus - - - - - Channel - - - - - Format - - - - - Block Size - - - - - JoystickConfiguration - - - Dialog - - - - - Device - - - - - MainWindow - - - 86Box - - - - - Action - - - - - Tools - - - - - View - - - - - Renderer - - - - - Window scale factor - - - - - Filter method - - - - - Fullscreen stretch mode - - - - - EGA/(S)VGA settings - - - - - VGA screen type - - - - - Grayscale conversion type - - - - - Media - - - - - Help - - - - - Keyboard requires capture - - - - - Right CTRL is left ALT - - - - - Hard Reset - - - - - Ctrl+Alt+Del - - - - - Ctrl+Alt+Esc - - - - - Pause - - - - - Exit - - - - - Settings - - - - - Fullscreen - - - - - Ctrl+Alt+PgUp - - - - - Software Renderer - - - - - Hardware Renderer (OpenGL) - - - - - Hardware Renderer (OpenGL ES) - - - - - Hide status bar - - - - - Resizable window - - - - - Remember size and position - - - - - Specify dimensions... - - - - - Force 4:3 display ratio - - - - - HiDPI scaling - - - - - CGA/PCjr/Tandy/EGA/(S)VGA overscan - - - - - Change contrast for monochrome display - - - - - 0.5x - - - - - 1x - - - - - 1.5x - - - - - 2x - - - - - Nearest - - - - - Linear - - - - - Full screen stretch - - - - - 4:3 - - - - - Square pixels (Keep ratio) - - - - - Integer scale - - - - - Inverted VGA monitor - - - - - RGB Color - - - - - RGB Grayscale - - - - - Amber monitor - - - - - Green monitor - - - - - White monitor - - - - - BT601 (NTSC/PAL) - - - - - BT709 (HDTV) - - - - - Average - - - - - About Qt... - - - - - About 86Box... - - - - - Documentation... - - - - - Update status bar icons - - - - - Take screenshot... - - - - - Sound gain... - - - - - OpenGL 3.0 Core - - - - - Program preferences... - - - - - MediaMenu - - - - - - New Image - - - - - - - - Existing Image - - - - - - - - Existing Image (Write Protected) - - - - - Record - - - - - Play - - - - - Rewind - - - - - Fast Forward - - - - - - - - - Eject - - - - - - Image - - - - - Export to 86F - - - - - Mute - - - - - Empty - - - - - - - Reload previous image - - - - - Create... - - - - - - - - - Open - - - - - Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) - - - - - Cassette: %1 - - - - - - - - - - (empty) - - - - - Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) - - - - - Cartridge %1: %2 - - - - - All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) - - - - - Save as 86f - - - - - Surface images (*.86f) - - - - - Unable to write file - - - - - Make sure the file is being saved to a writable directory - - - - - Floppy %1 (%2): %3 - - - - - CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) - - - - - - - Unknown Bus - - - - - CD-ROM %1 (%2): %3 - - - - - ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) - - - - - ZIP %1 %2 (%3): %4 - - - - - MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) - - - - - MO %1 (%2): %3 - - - - - NewFloppyDialog - - - New Image - - - - - File Name - - - - - Disk Size - - - - - RPM Mode - - - - - ProgSettings - - - Preferences - - - - - (Default) - - - - - Icon set: - - - - - Default - - - - - QObject - - - Click to capture mouse. - - - - - Press %1 to release mouse - - - - - Press %1 or middle button to release mouse - - - - - Failed to initialize FluidSynth - - - - - MFM/RLL or ESDI CD-ROM drives never existed - - - - - Failed to set up PCap - - - - - No PCap devices found - - - - - Unable to initialize FreeType - - - - - Unable to initialize SDL, libsdl2 is required - - - - - libfreetype is required for ESC/P printer emulation. - - - - - libgs is required for automatic conversion of PostScript files to PDF. - -Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. - - - - - %1 is required for FluidSynth MIDI output. - - - - - Make sure libpcap is installed and that you are on a libpcap-compatible network connection. - - - - - Unable to initialize Ghostscript - - - - - Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. - - - - - Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. - - - - - Hardware not available - - - - - No ROMs found. - - - - - 86Box could not find any usable ROM images. - -Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. - - - - - RendererStack - - - StackedWidget - - - - - Settings - - - 86Box Settings - - - - - SettingsDisplay - - - Form - - - - - Video - - - - - - Configure - - - - - Voodoo Graphics - - - - - SettingsFloppyCDROM - - - Form - - - - - Floppy Drives - - - - - Type - - - - - Turbo Timings - - - - - Check BPB - - - - - CD-ROM Drives - - - - - Channel - - - - - Speed - - - - - Bus - - - - - SettingsHarddisks - - - Form - - - - - Bus - - - - - ID - - - - - New - - - - - Existing - - - - - Remove - - - - - SettingsInput - - - Form - - - - - Mouse - - - - - Configure - - - - - Joystick - - - - - Joystick 1... - - - - - Joystick 2... - - - - - Joystick 3... - - - - - Joystick 4... - - - - - SettingsMachine - - - Form - - - - - Machine Type - - - - - Machine - - - - - CPU - - - - - FPU - - - - - Wait States - - - - - Memory - - - - - Speed - - - - - Configure - - - - - Dynamic Recompiler - - - - - Time Synchronization - - - - - Disabled - - - - - Enabled (Local Time) - - - - - Enabled (UTC) - - - - - SettingsNetwork - - - Form - - - - - PCap Device - - - - - Network Adapter - - - - - Network Type - - - - - Configure - - - - - SettingsOtherPeripherals - - - Form - - - - - ISA RTC - - - - - - - - - Configure - - - - - ISA Memory Expansion - - - - - Card 2 - - - - - Card 3 - - - - - Card 1 - - - - - Card 4 - - - - - ISABugger Device - - - - - POST card - - - - - SettingsOtherRemovable - - - Form - - - - - MO Drives - - - - - - Bus - - - - - - Channel - - - - - Type - - - - - ZIP Drives - - - - - ZIP 250 - - - - - SettingsPorts - - - Form - - - - - LPT1 Device - - - - - LPT2 Device - - - - - LPT3 Device - - - - - Serial Port 1 - - - - - Parallel Port 1 - - - - - Serial Port 2 - - - - - Parallel Port 2 - - - - - Serial Port 3 - - - - - Parallel Port 3 - - - - - Serial Port 4 - - - - - SettingsSound - - - Form - - - - - MIDI In - - - - - Innovation SSI-2001 - - - - - Gravis Ultrasound - - - - - Sound Card - - - - - - - - - - - Configure - - - - - MIDI Out - - - - - Standalone MPU-401 - - - - - CMS / Game Blaster - - - - - Use FLOAT32 sound - - - - - SettingsStorageControllers - - - Form - - - - - HD Controller - - - - - - - - - - - - Configure - - - - - FD Controller - - - - - Tertiary IDE Controller - - - - - Quaternary IDE Controller - - - - - SCSI - - - - - Controller 1 - - - - - Controller 4 - - - - - Controller 2 - - - - - Controller 3 - - - - - Cassette - - - - - SoundGain - - - Sound Gain - - - - - Gain: - - - - - SpecifyDimensions - - - Specify Main Window Dimensions - - - - - Width: - - - - - Lock to this size - - - - - Height: - - - - diff --git a/src/qt/86box_ja.ts b/src/qt/86box_ja.ts deleted file mode 100644 index 1c83a743e..000000000 --- a/src/qt/86box_ja.ts +++ /dev/null @@ -1,1332 +0,0 @@ - - - - - DeviceConfig - - - Dialog - - - - - FileField - - - Form - - - - - Browse - - - - - HarddiskDialog - - - Dialog - - - - - File name - - - - - Cylinders - - - - - Sectors - - - - - Size (MiB) - - - - - Heads - - - - - Type - - - - - Bus - - - - - Channel - - - - - Format - - - - - Block Size - - - - - JoystickConfiguration - - - Dialog - - - - - Device - - - - - MainWindow - - - 86Box - - - - - Action - - - - - Tools - - - - - View - - - - - Renderer - - - - - Window scale factor - - - - - Filter method - - - - - Fullscreen stretch mode - - - - - EGA/(S)VGA settings - - - - - VGA screen type - - - - - Grayscale conversion type - - - - - Media - - - - - Help - - - - - Keyboard requires capture - - - - - Right CTRL is left ALT - - - - - Hard Reset - - - - - Ctrl+Alt+Del - - - - - Ctrl+Alt+Esc - - - - - Pause - - - - - Exit - - - - - Settings - - - - - Fullscreen - - - - - Ctrl+Alt+PgUp - - - - - Software Renderer - - - - - Hardware Renderer (OpenGL) - - - - - Hardware Renderer (OpenGL ES) - - - - - Hide status bar - - - - - Resizable window - - - - - Remember size and position - - - - - Specify dimensions... - - - - - Force 4:3 display ratio - - - - - HiDPI scaling - - - - - CGA/PCjr/Tandy/EGA/(S)VGA overscan - - - - - Change contrast for monochrome display - - - - - 0.5x - - - - - 1x - - - - - 1.5x - - - - - 2x - - - - - Nearest - - - - - Linear - - - - - Full screen stretch - - - - - 4:3 - - - - - Square pixels (Keep ratio) - - - - - Integer scale - - - - - Inverted VGA monitor - - - - - RGB Color - - - - - RGB Grayscale - - - - - Amber monitor - - - - - Green monitor - - - - - White monitor - - - - - BT601 (NTSC/PAL) - - - - - BT709 (HDTV) - - - - - Average - - - - - About Qt... - - - - - About 86Box... - - - - - Documentation... - - - - - Update status bar icons - - - - - Take screenshot... - - - - - Sound gain... - - - - - OpenGL 3.0 Core - - - - - Program preferences... - - - - - MediaMenu - - - - - - New Image - - - - - - - - Existing Image - - - - - - - - Existing Image (Write Protected) - - - - - Record - - - - - Play - - - - - Rewind - - - - - Fast Forward - - - - - - - - - Eject - - - - - - Image - - - - - Export to 86F - - - - - Mute - - - - - Empty - - - - - - - Reload previous image - - - - - Create... - - - - - - - - - Open - - - - - Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) - - - - - Cassette: %1 - - - - - - - - - - (empty) - - - - - Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) - - - - - Cartridge %1: %2 - - - - - All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) - - - - - Save as 86f - - - - - Surface images (*.86f) - - - - - Unable to write file - - - - - Make sure the file is being saved to a writable directory - - - - - Floppy %1 (%2): %3 - - - - - CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) - - - - - - - Unknown Bus - - - - - CD-ROM %1 (%2): %3 - - - - - ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) - - - - - ZIP %1 %2 (%3): %4 - - - - - MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) - - - - - MO %1 (%2): %3 - - - - - NewFloppyDialog - - - New Image - - - - - File Name - - - - - Disk Size - - - - - RPM Mode - - - - - ProgSettings - - - Preferences - - - - - (Default) - - - - - Icon set: - - - - - Default - - - - - QObject - - - Click to capture mouse. - - - - - Press %1 to release mouse - - - - - Press %1 or middle button to release mouse - - - - - Failed to initialize FluidSynth - - - - - MFM/RLL or ESDI CD-ROM drives never existed - - - - - Failed to set up PCap - - - - - No PCap devices found - - - - - Unable to initialize FreeType - - - - - Unable to initialize SDL, libsdl2 is required - - - - - libfreetype is required for ESC/P printer emulation. - - - - - libgs is required for automatic conversion of PostScript files to PDF. - -Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. - - - - - %1 is required for FluidSynth MIDI output. - - - - - Make sure libpcap is installed and that you are on a libpcap-compatible network connection. - - - - - Unable to initialize Ghostscript - - - - - Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. - - - - - Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. - - - - - Hardware not available - - - - - No ROMs found. - - - - - 86Box could not find any usable ROM images. - -Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. - - - - - RendererStack - - - StackedWidget - - - - - Settings - - - 86Box Settings - - - - - SettingsDisplay - - - Form - - - - - Video - - - - - - Configure - - - - - Voodoo Graphics - - - - - SettingsFloppyCDROM - - - Form - - - - - Floppy Drives - - - - - Type - - - - - Turbo Timings - - - - - Check BPB - - - - - CD-ROM Drives - - - - - Channel - - - - - Speed - - - - - Bus - - - - - SettingsHarddisks - - - Form - - - - - Bus - - - - - ID - - - - - New - - - - - Existing - - - - - Remove - - - - - SettingsInput - - - Form - - - - - Mouse - - - - - Configure - - - - - Joystick - - - - - Joystick 1... - - - - - Joystick 2... - - - - - Joystick 3... - - - - - Joystick 4... - - - - - SettingsMachine - - - Form - - - - - Machine Type - - - - - Machine - - - - - CPU - - - - - FPU - - - - - Wait States - - - - - Memory - - - - - Speed - - - - - Configure - - - - - Dynamic Recompiler - - - - - Time Synchronization - - - - - Disabled - - - - - Enabled (Local Time) - - - - - Enabled (UTC) - - - - - SettingsNetwork - - - Form - - - - - PCap Device - - - - - Network Adapter - - - - - Network Type - - - - - Configure - - - - - SettingsOtherPeripherals - - - Form - - - - - ISA RTC - - - - - - - - - Configure - - - - - ISA Memory Expansion - - - - - Card 2 - - - - - Card 3 - - - - - Card 1 - - - - - Card 4 - - - - - ISABugger Device - - - - - POST card - - - - - SettingsOtherRemovable - - - Form - - - - - MO Drives - - - - - - Bus - - - - - - Channel - - - - - Type - - - - - ZIP Drives - - - - - ZIP 250 - - - - - SettingsPorts - - - Form - - - - - LPT1 Device - - - - - LPT2 Device - - - - - LPT3 Device - - - - - Serial Port 1 - - - - - Parallel Port 1 - - - - - Serial Port 2 - - - - - Parallel Port 2 - - - - - Serial Port 3 - - - - - Parallel Port 3 - - - - - Serial Port 4 - - - - - SettingsSound - - - Form - - - - - MIDI In - - - - - Innovation SSI-2001 - - - - - Gravis Ultrasound - - - - - Sound Card - - - - - - - - - - - Configure - - - - - MIDI Out - - - - - Standalone MPU-401 - - - - - CMS / Game Blaster - - - - - Use FLOAT32 sound - - - - - SettingsStorageControllers - - - Form - - - - - HD Controller - - - - - - - - - - - - Configure - - - - - FD Controller - - - - - Tertiary IDE Controller - - - - - Quaternary IDE Controller - - - - - SCSI - - - - - Controller 1 - - - - - Controller 4 - - - - - Controller 2 - - - - - Controller 3 - - - - - Cassette - - - - - SoundGain - - - Sound Gain - - - - - Gain: - - - - - SpecifyDimensions - - - Specify Main Window Dimensions - - - - - Width: - - - - - Lock to this size - - - - - Height: - - - - diff --git a/src/qt/86box_ko.ts b/src/qt/86box_ko.ts deleted file mode 100644 index 4f6f72c43..000000000 --- a/src/qt/86box_ko.ts +++ /dev/null @@ -1,1332 +0,0 @@ - - - - - DeviceConfig - - - Dialog - - - - - FileField - - - Form - - - - - Browse - - - - - HarddiskDialog - - - Dialog - - - - - File name - - - - - Cylinders - - - - - Sectors - - - - - Size (MiB) - - - - - Heads - - - - - Type - - - - - Bus - - - - - Channel - - - - - Format - - - - - Block Size - - - - - JoystickConfiguration - - - Dialog - - - - - Device - - - - - MainWindow - - - 86Box - - - - - Action - - - - - Tools - - - - - View - - - - - Renderer - - - - - Window scale factor - - - - - Filter method - - - - - Fullscreen stretch mode - - - - - EGA/(S)VGA settings - - - - - VGA screen type - - - - - Grayscale conversion type - - - - - Media - - - - - Help - - - - - Keyboard requires capture - - - - - Right CTRL is left ALT - - - - - Hard Reset - - - - - Ctrl+Alt+Del - - - - - Ctrl+Alt+Esc - - - - - Pause - - - - - Exit - - - - - Settings - - - - - Fullscreen - - - - - Ctrl+Alt+PgUp - - - - - Software Renderer - - - - - Hardware Renderer (OpenGL) - - - - - Hardware Renderer (OpenGL ES) - - - - - Hide status bar - - - - - Resizable window - - - - - Remember size and position - - - - - Specify dimensions... - - - - - Force 4:3 display ratio - - - - - HiDPI scaling - - - - - CGA/PCjr/Tandy/EGA/(S)VGA overscan - - - - - Change contrast for monochrome display - - - - - 0.5x - - - - - 1x - - - - - 1.5x - - - - - 2x - - - - - Nearest - - - - - Linear - - - - - Full screen stretch - - - - - 4:3 - - - - - Square pixels (Keep ratio) - - - - - Integer scale - - - - - Inverted VGA monitor - - - - - RGB Color - - - - - RGB Grayscale - - - - - Amber monitor - - - - - Green monitor - - - - - White monitor - - - - - BT601 (NTSC/PAL) - - - - - BT709 (HDTV) - - - - - Average - - - - - About Qt... - - - - - About 86Box... - - - - - Documentation... - - - - - Update status bar icons - - - - - Take screenshot... - - - - - Sound gain... - - - - - OpenGL 3.0 Core - - - - - Program preferences... - - - - - MediaMenu - - - - - - New Image - - - - - - - - Existing Image - - - - - - - - Existing Image (Write Protected) - - - - - Record - - - - - Play - - - - - Rewind - - - - - Fast Forward - - - - - - - - - Eject - - - - - - Image - - - - - Export to 86F - - - - - Mute - - - - - Empty - - - - - - - Reload previous image - - - - - Create... - - - - - - - - - Open - - - - - Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) - - - - - Cassette: %1 - - - - - - - - - - (empty) - - - - - Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) - - - - - Cartridge %1: %2 - - - - - All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) - - - - - Save as 86f - - - - - Surface images (*.86f) - - - - - Unable to write file - - - - - Make sure the file is being saved to a writable directory - - - - - Floppy %1 (%2): %3 - - - - - CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) - - - - - - - Unknown Bus - - - - - CD-ROM %1 (%2): %3 - - - - - ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) - - - - - ZIP %1 %2 (%3): %4 - - - - - MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) - - - - - MO %1 (%2): %3 - - - - - NewFloppyDialog - - - New Image - - - - - File Name - - - - - Disk Size - - - - - RPM Mode - - - - - ProgSettings - - - Preferences - - - - - (Default) - - - - - Icon set: - - - - - Default - - - - - QObject - - - Click to capture mouse. - - - - - Press %1 to release mouse - - - - - Press %1 or middle button to release mouse - - - - - Failed to initialize FluidSynth - - - - - MFM/RLL or ESDI CD-ROM drives never existed - - - - - Failed to set up PCap - - - - - No PCap devices found - - - - - Unable to initialize FreeType - - - - - Unable to initialize SDL, libsdl2 is required - - - - - libfreetype is required for ESC/P printer emulation. - - - - - libgs is required for automatic conversion of PostScript files to PDF. - -Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. - - - - - %1 is required for FluidSynth MIDI output. - - - - - Make sure libpcap is installed and that you are on a libpcap-compatible network connection. - - - - - Unable to initialize Ghostscript - - - - - Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. - - - - - Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. - - - - - Hardware not available - - - - - No ROMs found. - - - - - 86Box could not find any usable ROM images. - -Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. - - - - - RendererStack - - - StackedWidget - - - - - Settings - - - 86Box Settings - - - - - SettingsDisplay - - - Form - - - - - Video - - - - - - Configure - - - - - Voodoo Graphics - - - - - SettingsFloppyCDROM - - - Form - - - - - Floppy Drives - - - - - Type - - - - - Turbo Timings - - - - - Check BPB - - - - - CD-ROM Drives - - - - - Channel - - - - - Speed - - - - - Bus - - - - - SettingsHarddisks - - - Form - - - - - Bus - - - - - ID - - - - - New - - - - - Existing - - - - - Remove - - - - - SettingsInput - - - Form - - - - - Mouse - - - - - Configure - - - - - Joystick - - - - - Joystick 1... - - - - - Joystick 2... - - - - - Joystick 3... - - - - - Joystick 4... - - - - - SettingsMachine - - - Form - - - - - Machine Type - - - - - Machine - - - - - CPU - - - - - FPU - - - - - Wait States - - - - - Memory - - - - - Speed - - - - - Configure - - - - - Dynamic Recompiler - - - - - Time Synchronization - - - - - Disabled - - - - - Enabled (Local Time) - - - - - Enabled (UTC) - - - - - SettingsNetwork - - - Form - - - - - PCap Device - - - - - Network Adapter - - - - - Network Type - - - - - Configure - - - - - SettingsOtherPeripherals - - - Form - - - - - ISA RTC - - - - - - - - - Configure - - - - - ISA Memory Expansion - - - - - Card 2 - - - - - Card 3 - - - - - Card 1 - - - - - Card 4 - - - - - ISABugger Device - - - - - POST card - - - - - SettingsOtherRemovable - - - Form - - - - - MO Drives - - - - - - Bus - - - - - - Channel - - - - - Type - - - - - ZIP Drives - - - - - ZIP 250 - - - - - SettingsPorts - - - Form - - - - - LPT1 Device - - - - - LPT2 Device - - - - - LPT3 Device - - - - - Serial Port 1 - - - - - Parallel Port 1 - - - - - Serial Port 2 - - - - - Parallel Port 2 - - - - - Serial Port 3 - - - - - Parallel Port 3 - - - - - Serial Port 4 - - - - - SettingsSound - - - Form - - - - - MIDI In - - - - - Innovation SSI-2001 - - - - - Gravis Ultrasound - - - - - Sound Card - - - - - - - - - - - Configure - - - - - MIDI Out - - - - - Standalone MPU-401 - - - - - CMS / Game Blaster - - - - - Use FLOAT32 sound - - - - - SettingsStorageControllers - - - Form - - - - - HD Controller - - - - - - - - - - - - Configure - - - - - FD Controller - - - - - Tertiary IDE Controller - - - - - Quaternary IDE Controller - - - - - SCSI - - - - - Controller 1 - - - - - Controller 4 - - - - - Controller 2 - - - - - Controller 3 - - - - - Cassette - - - - - SoundGain - - - Sound Gain - - - - - Gain: - - - - - SpecifyDimensions - - - Specify Main Window Dimensions - - - - - Width: - - - - - Lock to this size - - - - - Height: - - - - diff --git a/src/qt/86box_pt-BR.ts b/src/qt/86box_pt-BR.ts deleted file mode 100644 index f4e460942..000000000 --- a/src/qt/86box_pt-BR.ts +++ /dev/null @@ -1,1332 +0,0 @@ - - - - - DeviceConfig - - - Dialog - - - - - FileField - - - Form - - - - - Browse - - - - - HarddiskDialog - - - Dialog - - - - - File name - - - - - Cylinders - - - - - Sectors - - - - - Size (MiB) - - - - - Heads - - - - - Type - - - - - Bus - - - - - Channel - - - - - Format - - - - - Block Size - - - - - JoystickConfiguration - - - Dialog - - - - - Device - - - - - MainWindow - - - 86Box - - - - - Action - - - - - Tools - - - - - View - - - - - Renderer - - - - - Window scale factor - - - - - Filter method - - - - - Fullscreen stretch mode - - - - - EGA/(S)VGA settings - - - - - VGA screen type - - - - - Grayscale conversion type - - - - - Media - - - - - Help - - - - - Keyboard requires capture - - - - - Right CTRL is left ALT - - - - - Hard Reset - - - - - Ctrl+Alt+Del - - - - - Ctrl+Alt+Esc - - - - - Pause - - - - - Exit - - - - - Settings - - - - - Fullscreen - - - - - Ctrl+Alt+PgUp - - - - - Software Renderer - - - - - Hardware Renderer (OpenGL) - - - - - Hardware Renderer (OpenGL ES) - - - - - Hide status bar - - - - - Resizable window - - - - - Remember size and position - - - - - Specify dimensions... - - - - - Force 4:3 display ratio - - - - - HiDPI scaling - - - - - CGA/PCjr/Tandy/EGA/(S)VGA overscan - - - - - Change contrast for monochrome display - - - - - 0.5x - - - - - 1x - - - - - 1.5x - - - - - 2x - - - - - Nearest - - - - - Linear - - - - - Full screen stretch - - - - - 4:3 - - - - - Square pixels (Keep ratio) - - - - - Integer scale - - - - - Inverted VGA monitor - - - - - RGB Color - - - - - RGB Grayscale - - - - - Amber monitor - - - - - Green monitor - - - - - White monitor - - - - - BT601 (NTSC/PAL) - - - - - BT709 (HDTV) - - - - - Average - - - - - About Qt... - - - - - About 86Box... - - - - - Documentation... - - - - - Update status bar icons - - - - - Take screenshot... - - - - - Sound gain... - - - - - OpenGL 3.0 Core - - - - - Program preferences... - - - - - MediaMenu - - - - - - New Image - - - - - - - - Existing Image - - - - - - - - Existing Image (Write Protected) - - - - - Record - - - - - Play - - - - - Rewind - - - - - Fast Forward - - - - - - - - - Eject - - - - - - Image - - - - - Export to 86F - - - - - Mute - - - - - Empty - - - - - - - Reload previous image - - - - - Create... - - - - - - - - - Open - - - - - Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) - - - - - Cassette: %1 - - - - - - - - - - (empty) - - - - - Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) - - - - - Cartridge %1: %2 - - - - - All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) - - - - - Save as 86f - - - - - Surface images (*.86f) - - - - - Unable to write file - - - - - Make sure the file is being saved to a writable directory - - - - - Floppy %1 (%2): %3 - - - - - CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) - - - - - - - Unknown Bus - - - - - CD-ROM %1 (%2): %3 - - - - - ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) - - - - - ZIP %1 %2 (%3): %4 - - - - - MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) - - - - - MO %1 (%2): %3 - - - - - NewFloppyDialog - - - New Image - - - - - File Name - - - - - Disk Size - - - - - RPM Mode - - - - - ProgSettings - - - Preferences - - - - - (Default) - - - - - Icon set: - - - - - Default - - - - - QObject - - - Click to capture mouse. - - - - - Press %1 to release mouse - - - - - Press %1 or middle button to release mouse - - - - - Failed to initialize FluidSynth - - - - - MFM/RLL or ESDI CD-ROM drives never existed - - - - - Failed to set up PCap - - - - - No PCap devices found - - - - - Unable to initialize FreeType - - - - - Unable to initialize SDL, libsdl2 is required - - - - - libfreetype is required for ESC/P printer emulation. - - - - - libgs is required for automatic conversion of PostScript files to PDF. - -Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. - - - - - %1 is required for FluidSynth MIDI output. - - - - - Make sure libpcap is installed and that you are on a libpcap-compatible network connection. - - - - - Unable to initialize Ghostscript - - - - - Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. - - - - - Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. - - - - - Hardware not available - - - - - No ROMs found. - - - - - 86Box could not find any usable ROM images. - -Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. - - - - - RendererStack - - - StackedWidget - - - - - Settings - - - 86Box Settings - - - - - SettingsDisplay - - - Form - - - - - Video - - - - - - Configure - - - - - Voodoo Graphics - - - - - SettingsFloppyCDROM - - - Form - - - - - Floppy Drives - - - - - Type - - - - - Turbo Timings - - - - - Check BPB - - - - - CD-ROM Drives - - - - - Channel - - - - - Speed - - - - - Bus - - - - - SettingsHarddisks - - - Form - - - - - Bus - - - - - ID - - - - - New - - - - - Existing - - - - - Remove - - - - - SettingsInput - - - Form - - - - - Mouse - - - - - Configure - - - - - Joystick - - - - - Joystick 1... - - - - - Joystick 2... - - - - - Joystick 3... - - - - - Joystick 4... - - - - - SettingsMachine - - - Form - - - - - Machine Type - - - - - Machine - - - - - CPU - - - - - FPU - - - - - Wait States - - - - - Memory - - - - - Speed - - - - - Configure - - - - - Dynamic Recompiler - - - - - Time Synchronization - - - - - Disabled - - - - - Enabled (Local Time) - - - - - Enabled (UTC) - - - - - SettingsNetwork - - - Form - - - - - PCap Device - - - - - Network Adapter - - - - - Network Type - - - - - Configure - - - - - SettingsOtherPeripherals - - - Form - - - - - ISA RTC - - - - - - - - - Configure - - - - - ISA Memory Expansion - - - - - Card 2 - - - - - Card 3 - - - - - Card 1 - - - - - Card 4 - - - - - ISABugger Device - - - - - POST card - - - - - SettingsOtherRemovable - - - Form - - - - - MO Drives - - - - - - Bus - - - - - - Channel - - - - - Type - - - - - ZIP Drives - - - - - ZIP 250 - - - - - SettingsPorts - - - Form - - - - - LPT1 Device - - - - - LPT2 Device - - - - - LPT3 Device - - - - - Serial Port 1 - - - - - Parallel Port 1 - - - - - Serial Port 2 - - - - - Parallel Port 2 - - - - - Serial Port 3 - - - - - Parallel Port 3 - - - - - Serial Port 4 - - - - - SettingsSound - - - Form - - - - - MIDI In - - - - - Innovation SSI-2001 - - - - - Gravis Ultrasound - - - - - Sound Card - - - - - - - - - - - Configure - - - - - MIDI Out - - - - - Standalone MPU-401 - - - - - CMS / Game Blaster - - - - - Use FLOAT32 sound - - - - - SettingsStorageControllers - - - Form - - - - - HD Controller - - - - - - - - - - - - Configure - - - - - FD Controller - - - - - Tertiary IDE Controller - - - - - Quaternary IDE Controller - - - - - SCSI - - - - - Controller 1 - - - - - Controller 4 - - - - - Controller 2 - - - - - Controller 3 - - - - - Cassette - - - - - SoundGain - - - Sound Gain - - - - - Gain: - - - - - SpecifyDimensions - - - Specify Main Window Dimensions - - - - - Width: - - - - - Lock to this size - - - - - Height: - - - - diff --git a/src/qt/86box_pt-PT.ts b/src/qt/86box_pt-PT.ts deleted file mode 100644 index 363a99686..000000000 --- a/src/qt/86box_pt-PT.ts +++ /dev/null @@ -1,1332 +0,0 @@ - - - - - DeviceConfig - - - Dialog - - - - - FileField - - - Form - - - - - Browse - - - - - HarddiskDialog - - - Dialog - - - - - File name - - - - - Cylinders - - - - - Sectors - - - - - Size (MiB) - - - - - Heads - - - - - Type - - - - - Bus - - - - - Channel - - - - - Format - - - - - Block Size - - - - - JoystickConfiguration - - - Dialog - - - - - Device - - - - - MainWindow - - - 86Box - - - - - Action - - - - - Tools - - - - - View - - - - - Renderer - - - - - Window scale factor - - - - - Filter method - - - - - Fullscreen stretch mode - - - - - EGA/(S)VGA settings - - - - - VGA screen type - - - - - Grayscale conversion type - - - - - Media - - - - - Help - - - - - Keyboard requires capture - - - - - Right CTRL is left ALT - - - - - Hard Reset - - - - - Ctrl+Alt+Del - - - - - Ctrl+Alt+Esc - - - - - Pause - - - - - Exit - - - - - Settings - - - - - Fullscreen - - - - - Ctrl+Alt+PgUp - - - - - Software Renderer - - - - - Hardware Renderer (OpenGL) - - - - - Hardware Renderer (OpenGL ES) - - - - - Hide status bar - - - - - Resizable window - - - - - Remember size and position - - - - - Specify dimensions... - - - - - Force 4:3 display ratio - - - - - HiDPI scaling - - - - - CGA/PCjr/Tandy/EGA/(S)VGA overscan - - - - - Change contrast for monochrome display - - - - - 0.5x - - - - - 1x - - - - - 1.5x - - - - - 2x - - - - - Nearest - - - - - Linear - - - - - Full screen stretch - - - - - 4:3 - - - - - Square pixels (Keep ratio) - - - - - Integer scale - - - - - Inverted VGA monitor - - - - - RGB Color - - - - - RGB Grayscale - - - - - Amber monitor - - - - - Green monitor - - - - - White monitor - - - - - BT601 (NTSC/PAL) - - - - - BT709 (HDTV) - - - - - Average - - - - - About Qt... - - - - - About 86Box... - - - - - Documentation... - - - - - Update status bar icons - - - - - Take screenshot... - - - - - Sound gain... - - - - - OpenGL 3.0 Core - - - - - Program preferences... - - - - - MediaMenu - - - - - - New Image - - - - - - - - Existing Image - - - - - - - - Existing Image (Write Protected) - - - - - Record - - - - - Play - - - - - Rewind - - - - - Fast Forward - - - - - - - - - Eject - - - - - - Image - - - - - Export to 86F - - - - - Mute - - - - - Empty - - - - - - - Reload previous image - - - - - Create... - - - - - - - - - Open - - - - - Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) - - - - - Cassette: %1 - - - - - - - - - - (empty) - - - - - Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) - - - - - Cartridge %1: %2 - - - - - All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) - - - - - Save as 86f - - - - - Surface images (*.86f) - - - - - Unable to write file - - - - - Make sure the file is being saved to a writable directory - - - - - Floppy %1 (%2): %3 - - - - - CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) - - - - - - - Unknown Bus - - - - - CD-ROM %1 (%2): %3 - - - - - ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) - - - - - ZIP %1 %2 (%3): %4 - - - - - MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) - - - - - MO %1 (%2): %3 - - - - - NewFloppyDialog - - - New Image - - - - - File Name - - - - - Disk Size - - - - - RPM Mode - - - - - ProgSettings - - - Preferences - - - - - (Default) - - - - - Icon set: - - - - - Default - - - - - QObject - - - Click to capture mouse. - - - - - Press %1 to release mouse - - - - - Press %1 or middle button to release mouse - - - - - Failed to initialize FluidSynth - - - - - MFM/RLL or ESDI CD-ROM drives never existed - - - - - Failed to set up PCap - - - - - No PCap devices found - - - - - Unable to initialize FreeType - - - - - Unable to initialize SDL, libsdl2 is required - - - - - libfreetype is required for ESC/P printer emulation. - - - - - libgs is required for automatic conversion of PostScript files to PDF. - -Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. - - - - - %1 is required for FluidSynth MIDI output. - - - - - Make sure libpcap is installed and that you are on a libpcap-compatible network connection. - - - - - Unable to initialize Ghostscript - - - - - Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. - - - - - Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. - - - - - Hardware not available - - - - - No ROMs found. - - - - - 86Box could not find any usable ROM images. - -Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. - - - - - RendererStack - - - StackedWidget - - - - - Settings - - - 86Box Settings - - - - - SettingsDisplay - - - Form - - - - - Video - - - - - - Configure - - - - - Voodoo Graphics - - - - - SettingsFloppyCDROM - - - Form - - - - - Floppy Drives - - - - - Type - - - - - Turbo Timings - - - - - Check BPB - - - - - CD-ROM Drives - - - - - Channel - - - - - Speed - - - - - Bus - - - - - SettingsHarddisks - - - Form - - - - - Bus - - - - - ID - - - - - New - - - - - Existing - - - - - Remove - - - - - SettingsInput - - - Form - - - - - Mouse - - - - - Configure - - - - - Joystick - - - - - Joystick 1... - - - - - Joystick 2... - - - - - Joystick 3... - - - - - Joystick 4... - - - - - SettingsMachine - - - Form - - - - - Machine Type - - - - - Machine - - - - - CPU - - - - - FPU - - - - - Wait States - - - - - Memory - - - - - Speed - - - - - Configure - - - - - Dynamic Recompiler - - - - - Time Synchronization - - - - - Disabled - - - - - Enabled (Local Time) - - - - - Enabled (UTC) - - - - - SettingsNetwork - - - Form - - - - - PCap Device - - - - - Network Adapter - - - - - Network Type - - - - - Configure - - - - - SettingsOtherPeripherals - - - Form - - - - - ISA RTC - - - - - - - - - Configure - - - - - ISA Memory Expansion - - - - - Card 2 - - - - - Card 3 - - - - - Card 1 - - - - - Card 4 - - - - - ISABugger Device - - - - - POST card - - - - - SettingsOtherRemovable - - - Form - - - - - MO Drives - - - - - - Bus - - - - - - Channel - - - - - Type - - - - - ZIP Drives - - - - - ZIP 250 - - - - - SettingsPorts - - - Form - - - - - LPT1 Device - - - - - LPT2 Device - - - - - LPT3 Device - - - - - Serial Port 1 - - - - - Parallel Port 1 - - - - - Serial Port 2 - - - - - Parallel Port 2 - - - - - Serial Port 3 - - - - - Parallel Port 3 - - - - - Serial Port 4 - - - - - SettingsSound - - - Form - - - - - MIDI In - - - - - Innovation SSI-2001 - - - - - Gravis Ultrasound - - - - - Sound Card - - - - - - - - - - - Configure - - - - - MIDI Out - - - - - Standalone MPU-401 - - - - - CMS / Game Blaster - - - - - Use FLOAT32 sound - - - - - SettingsStorageControllers - - - Form - - - - - HD Controller - - - - - - - - - - - - Configure - - - - - FD Controller - - - - - Tertiary IDE Controller - - - - - Quaternary IDE Controller - - - - - SCSI - - - - - Controller 1 - - - - - Controller 4 - - - - - Controller 2 - - - - - Controller 3 - - - - - Cassette - - - - - SoundGain - - - Sound Gain - - - - - Gain: - - - - - SpecifyDimensions - - - Specify Main Window Dimensions - - - - - Width: - - - - - Lock to this size - - - - - Height: - - - - diff --git a/src/qt/86box_ru.ts b/src/qt/86box_ru.ts deleted file mode 100644 index 680acac99..000000000 --- a/src/qt/86box_ru.ts +++ /dev/null @@ -1,1332 +0,0 @@ - - - - - DeviceConfig - - - Dialog - - - - - FileField - - - Form - - - - - Browse - - - - - HarddiskDialog - - - Dialog - - - - - File name - - - - - Cylinders - - - - - Sectors - - - - - Size (MiB) - - - - - Heads - - - - - Type - - - - - Bus - - - - - Channel - - - - - Format - - - - - Block Size - - - - - JoystickConfiguration - - - Dialog - - - - - Device - - - - - MainWindow - - - 86Box - - - - - Action - - - - - Tools - - - - - View - - - - - Renderer - - - - - Window scale factor - - - - - Filter method - - - - - Fullscreen stretch mode - - - - - EGA/(S)VGA settings - - - - - VGA screen type - - - - - Grayscale conversion type - - - - - Media - - - - - Help - - - - - Keyboard requires capture - - - - - Right CTRL is left ALT - - - - - Hard Reset - - - - - Ctrl+Alt+Del - - - - - Ctrl+Alt+Esc - - - - - Pause - - - - - Exit - - - - - Settings - - - - - Fullscreen - - - - - Ctrl+Alt+PgUp - - - - - Software Renderer - - - - - Hardware Renderer (OpenGL) - - - - - Hardware Renderer (OpenGL ES) - - - - - Hide status bar - - - - - Resizable window - - - - - Remember size and position - - - - - Specify dimensions... - - - - - Force 4:3 display ratio - - - - - HiDPI scaling - - - - - CGA/PCjr/Tandy/EGA/(S)VGA overscan - - - - - Change contrast for monochrome display - - - - - 0.5x - - - - - 1x - - - - - 1.5x - - - - - 2x - - - - - Nearest - - - - - Linear - - - - - Full screen stretch - - - - - 4:3 - - - - - Square pixels (Keep ratio) - - - - - Integer scale - - - - - Inverted VGA monitor - - - - - RGB Color - - - - - RGB Grayscale - - - - - Amber monitor - - - - - Green monitor - - - - - White monitor - - - - - BT601 (NTSC/PAL) - - - - - BT709 (HDTV) - - - - - Average - - - - - About Qt... - - - - - About 86Box... - - - - - Documentation... - - - - - Update status bar icons - - - - - Take screenshot... - - - - - Sound gain... - - - - - OpenGL 3.0 Core - - - - - Program preferences... - - - - - MediaMenu - - - - - - New Image - - - - - - - - Existing Image - - - - - - - - Existing Image (Write Protected) - - - - - Record - - - - - Play - - - - - Rewind - - - - - Fast Forward - - - - - - - - - Eject - - - - - - Image - - - - - Export to 86F - - - - - Mute - - - - - Empty - - - - - - - Reload previous image - - - - - Create... - - - - - - - - - Open - - - - - Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) - - - - - Cassette: %1 - - - - - - - - - - (empty) - - - - - Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) - - - - - Cartridge %1: %2 - - - - - All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) - - - - - Save as 86f - - - - - Surface images (*.86f) - - - - - Unable to write file - - - - - Make sure the file is being saved to a writable directory - - - - - Floppy %1 (%2): %3 - - - - - CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) - - - - - - - Unknown Bus - - - - - CD-ROM %1 (%2): %3 - - - - - ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) - - - - - ZIP %1 %2 (%3): %4 - - - - - MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) - - - - - MO %1 (%2): %3 - - - - - NewFloppyDialog - - - New Image - - - - - File Name - - - - - Disk Size - - - - - RPM Mode - - - - - ProgSettings - - - Preferences - - - - - (Default) - - - - - Icon set: - - - - - Default - - - - - QObject - - - Click to capture mouse. - - - - - Press %1 to release mouse - - - - - Press %1 or middle button to release mouse - - - - - Failed to initialize FluidSynth - - - - - MFM/RLL or ESDI CD-ROM drives never existed - - - - - Failed to set up PCap - - - - - No PCap devices found - - - - - Unable to initialize FreeType - - - - - Unable to initialize SDL, libsdl2 is required - - - - - libfreetype is required for ESC/P printer emulation. - - - - - libgs is required for automatic conversion of PostScript files to PDF. - -Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. - - - - - %1 is required for FluidSynth MIDI output. - - - - - Make sure libpcap is installed and that you are on a libpcap-compatible network connection. - - - - - Unable to initialize Ghostscript - - - - - Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. - - - - - Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. - - - - - Hardware not available - - - - - No ROMs found. - - - - - 86Box could not find any usable ROM images. - -Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. - - - - - RendererStack - - - StackedWidget - - - - - Settings - - - 86Box Settings - - - - - SettingsDisplay - - - Form - - - - - Video - - - - - - Configure - - - - - Voodoo Graphics - - - - - SettingsFloppyCDROM - - - Form - - - - - Floppy Drives - - - - - Type - - - - - Turbo Timings - - - - - Check BPB - - - - - CD-ROM Drives - - - - - Channel - - - - - Speed - - - - - Bus - - - - - SettingsHarddisks - - - Form - - - - - Bus - - - - - ID - - - - - New - - - - - Existing - - - - - Remove - - - - - SettingsInput - - - Form - - - - - Mouse - - - - - Configure - - - - - Joystick - - - - - Joystick 1... - - - - - Joystick 2... - - - - - Joystick 3... - - - - - Joystick 4... - - - - - SettingsMachine - - - Form - - - - - Machine Type - - - - - Machine - - - - - CPU - - - - - FPU - - - - - Wait States - - - - - Memory - - - - - Speed - - - - - Configure - - - - - Dynamic Recompiler - - - - - Time Synchronization - - - - - Disabled - - - - - Enabled (Local Time) - - - - - Enabled (UTC) - - - - - SettingsNetwork - - - Form - - - - - PCap Device - - - - - Network Adapter - - - - - Network Type - - - - - Configure - - - - - SettingsOtherPeripherals - - - Form - - - - - ISA RTC - - - - - - - - - Configure - - - - - ISA Memory Expansion - - - - - Card 2 - - - - - Card 3 - - - - - Card 1 - - - - - Card 4 - - - - - ISABugger Device - - - - - POST card - - - - - SettingsOtherRemovable - - - Form - - - - - MO Drives - - - - - - Bus - - - - - - Channel - - - - - Type - - - - - ZIP Drives - - - - - ZIP 250 - - - - - SettingsPorts - - - Form - - - - - LPT1 Device - - - - - LPT2 Device - - - - - LPT3 Device - - - - - Serial Port 1 - - - - - Parallel Port 1 - - - - - Serial Port 2 - - - - - Parallel Port 2 - - - - - Serial Port 3 - - - - - Parallel Port 3 - - - - - Serial Port 4 - - - - - SettingsSound - - - Form - - - - - MIDI In - - - - - Innovation SSI-2001 - - - - - Gravis Ultrasound - - - - - Sound Card - - - - - - - - - - - Configure - - - - - MIDI Out - - - - - Standalone MPU-401 - - - - - CMS / Game Blaster - - - - - Use FLOAT32 sound - - - - - SettingsStorageControllers - - - Form - - - - - HD Controller - - - - - - - - - - - - Configure - - - - - FD Controller - - - - - Tertiary IDE Controller - - - - - Quaternary IDE Controller - - - - - SCSI - - - - - Controller 1 - - - - - Controller 4 - - - - - Controller 2 - - - - - Controller 3 - - - - - Cassette - - - - - SoundGain - - - Sound Gain - - - - - Gain: - - - - - SpecifyDimensions - - - Specify Main Window Dimensions - - - - - Width: - - - - - Lock to this size - - - - - Height: - - - - diff --git a/src/qt/86box_sl.ts b/src/qt/86box_sl.ts deleted file mode 100644 index 5cc93e09f..000000000 --- a/src/qt/86box_sl.ts +++ /dev/null @@ -1,1332 +0,0 @@ - - - - - DeviceConfig - - - Dialog - - - - - FileField - - - Form - - - - - Browse - - - - - HarddiskDialog - - - Dialog - - - - - File name - - - - - Cylinders - - - - - Sectors - - - - - Size (MiB) - - - - - Heads - - - - - Type - - - - - Bus - - - - - Channel - - - - - Format - - - - - Block Size - - - - - JoystickConfiguration - - - Dialog - - - - - Device - - - - - MainWindow - - - 86Box - - - - - Action - - - - - Tools - - - - - View - - - - - Renderer - - - - - Window scale factor - - - - - Filter method - - - - - Fullscreen stretch mode - - - - - EGA/(S)VGA settings - - - - - VGA screen type - - - - - Grayscale conversion type - - - - - Media - - - - - Help - - - - - Keyboard requires capture - - - - - Right CTRL is left ALT - - - - - Hard Reset - - - - - Ctrl+Alt+Del - - - - - Ctrl+Alt+Esc - - - - - Pause - - - - - Exit - - - - - Settings - - - - - Fullscreen - - - - - Ctrl+Alt+PgUp - - - - - Software Renderer - - - - - Hardware Renderer (OpenGL) - - - - - Hardware Renderer (OpenGL ES) - - - - - Hide status bar - - - - - Resizable window - - - - - Remember size and position - - - - - Specify dimensions... - - - - - Force 4:3 display ratio - - - - - HiDPI scaling - - - - - CGA/PCjr/Tandy/EGA/(S)VGA overscan - - - - - Change contrast for monochrome display - - - - - 0.5x - - - - - 1x - - - - - 1.5x - - - - - 2x - - - - - Nearest - - - - - Linear - - - - - Full screen stretch - - - - - 4:3 - - - - - Square pixels (Keep ratio) - - - - - Integer scale - - - - - Inverted VGA monitor - - - - - RGB Color - - - - - RGB Grayscale - - - - - Amber monitor - - - - - Green monitor - - - - - White monitor - - - - - BT601 (NTSC/PAL) - - - - - BT709 (HDTV) - - - - - Average - - - - - About Qt... - - - - - About 86Box... - - - - - Documentation... - - - - - Update status bar icons - - - - - Take screenshot... - - - - - Sound gain... - - - - - OpenGL 3.0 Core - - - - - Program preferences... - - - - - MediaMenu - - - - - - New Image - - - - - - - - Existing Image - - - - - - - - Existing Image (Write Protected) - - - - - Record - - - - - Play - - - - - Rewind - - - - - Fast Forward - - - - - - - - - Eject - - - - - - Image - - - - - Export to 86F - - - - - Mute - - - - - Empty - - - - - - - Reload previous image - - - - - Create... - - - - - - - - - Open - - - - - Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) - - - - - Cassette: %1 - - - - - - - - - - (empty) - - - - - Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) - - - - - Cartridge %1: %2 - - - - - All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) - - - - - Save as 86f - - - - - Surface images (*.86f) - - - - - Unable to write file - - - - - Make sure the file is being saved to a writable directory - - - - - Floppy %1 (%2): %3 - - - - - CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) - - - - - - - Unknown Bus - - - - - CD-ROM %1 (%2): %3 - - - - - ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) - - - - - ZIP %1 %2 (%3): %4 - - - - - MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) - - - - - MO %1 (%2): %3 - - - - - NewFloppyDialog - - - New Image - - - - - File Name - - - - - Disk Size - - - - - RPM Mode - - - - - ProgSettings - - - Preferences - - - - - (Default) - - - - - Icon set: - - - - - Default - - - - - QObject - - - Click to capture mouse. - - - - - Press %1 to release mouse - - - - - Press %1 or middle button to release mouse - - - - - Failed to initialize FluidSynth - - - - - MFM/RLL or ESDI CD-ROM drives never existed - - - - - Failed to set up PCap - - - - - No PCap devices found - - - - - Unable to initialize FreeType - - - - - Unable to initialize SDL, libsdl2 is required - - - - - libfreetype is required for ESC/P printer emulation. - - - - - libgs is required for automatic conversion of PostScript files to PDF. - -Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. - - - - - %1 is required for FluidSynth MIDI output. - - - - - Make sure libpcap is installed and that you are on a libpcap-compatible network connection. - - - - - Unable to initialize Ghostscript - - - - - Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. - - - - - Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. - - - - - Hardware not available - - - - - No ROMs found. - - - - - 86Box could not find any usable ROM images. - -Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. - - - - - RendererStack - - - StackedWidget - - - - - Settings - - - 86Box Settings - - - - - SettingsDisplay - - - Form - - - - - Video - - - - - - Configure - - - - - Voodoo Graphics - - - - - SettingsFloppyCDROM - - - Form - - - - - Floppy Drives - - - - - Type - - - - - Turbo Timings - - - - - Check BPB - - - - - CD-ROM Drives - - - - - Channel - - - - - Speed - - - - - Bus - - - - - SettingsHarddisks - - - Form - - - - - Bus - - - - - ID - - - - - New - - - - - Existing - - - - - Remove - - - - - SettingsInput - - - Form - - - - - Mouse - - - - - Configure - - - - - Joystick - - - - - Joystick 1... - - - - - Joystick 2... - - - - - Joystick 3... - - - - - Joystick 4... - - - - - SettingsMachine - - - Form - - - - - Machine Type - - - - - Machine - - - - - CPU - - - - - FPU - - - - - Wait States - - - - - Memory - - - - - Speed - - - - - Configure - - - - - Dynamic Recompiler - - - - - Time Synchronization - - - - - Disabled - - - - - Enabled (Local Time) - - - - - Enabled (UTC) - - - - - SettingsNetwork - - - Form - - - - - PCap Device - - - - - Network Adapter - - - - - Network Type - - - - - Configure - - - - - SettingsOtherPeripherals - - - Form - - - - - ISA RTC - - - - - - - - - Configure - - - - - ISA Memory Expansion - - - - - Card 2 - - - - - Card 3 - - - - - Card 1 - - - - - Card 4 - - - - - ISABugger Device - - - - - POST card - - - - - SettingsOtherRemovable - - - Form - - - - - MO Drives - - - - - - Bus - - - - - - Channel - - - - - Type - - - - - ZIP Drives - - - - - ZIP 250 - - - - - SettingsPorts - - - Form - - - - - LPT1 Device - - - - - LPT2 Device - - - - - LPT3 Device - - - - - Serial Port 1 - - - - - Parallel Port 1 - - - - - Serial Port 2 - - - - - Parallel Port 2 - - - - - Serial Port 3 - - - - - Parallel Port 3 - - - - - Serial Port 4 - - - - - SettingsSound - - - Form - - - - - MIDI In - - - - - Innovation SSI-2001 - - - - - Gravis Ultrasound - - - - - Sound Card - - - - - - - - - - - Configure - - - - - MIDI Out - - - - - Standalone MPU-401 - - - - - CMS / Game Blaster - - - - - Use FLOAT32 sound - - - - - SettingsStorageControllers - - - Form - - - - - HD Controller - - - - - - - - - - - - Configure - - - - - FD Controller - - - - - Tertiary IDE Controller - - - - - Quaternary IDE Controller - - - - - SCSI - - - - - Controller 1 - - - - - Controller 4 - - - - - Controller 2 - - - - - Controller 3 - - - - - Cassette - - - - - SoundGain - - - Sound Gain - - - - - Gain: - - - - - SpecifyDimensions - - - Specify Main Window Dimensions - - - - - Width: - - - - - Lock to this size - - - - - Height: - - - - diff --git a/src/qt/86box_tr.ts b/src/qt/86box_tr.ts deleted file mode 100644 index cb163220d..000000000 --- a/src/qt/86box_tr.ts +++ /dev/null @@ -1,1332 +0,0 @@ - - - - - DeviceConfig - - - Dialog - - - - - FileField - - - Form - - - - - Browse - - - - - HarddiskDialog - - - Dialog - - - - - File name - - - - - Cylinders - - - - - Sectors - - - - - Size (MiB) - - - - - Heads - - - - - Type - - - - - Bus - - - - - Channel - - - - - Format - - - - - Block Size - - - - - JoystickConfiguration - - - Dialog - - - - - Device - - - - - MainWindow - - - 86Box - - - - - Action - - - - - Tools - - - - - View - - - - - Renderer - - - - - Window scale factor - - - - - Filter method - - - - - Fullscreen stretch mode - - - - - EGA/(S)VGA settings - - - - - VGA screen type - - - - - Grayscale conversion type - - - - - Media - - - - - Help - - - - - Keyboard requires capture - - - - - Right CTRL is left ALT - - - - - Hard Reset - - - - - Ctrl+Alt+Del - - - - - Ctrl+Alt+Esc - - - - - Pause - - - - - Exit - - - - - Settings - - - - - Fullscreen - - - - - Ctrl+Alt+PgUp - - - - - Software Renderer - - - - - Hardware Renderer (OpenGL) - - - - - Hardware Renderer (OpenGL ES) - - - - - Hide status bar - - - - - Resizable window - - - - - Remember size and position - - - - - Specify dimensions... - - - - - Force 4:3 display ratio - - - - - HiDPI scaling - - - - - CGA/PCjr/Tandy/EGA/(S)VGA overscan - - - - - Change contrast for monochrome display - - - - - 0.5x - - - - - 1x - - - - - 1.5x - - - - - 2x - - - - - Nearest - - - - - Linear - - - - - Full screen stretch - - - - - 4:3 - - - - - Square pixels (Keep ratio) - - - - - Integer scale - - - - - Inverted VGA monitor - - - - - RGB Color - - - - - RGB Grayscale - - - - - Amber monitor - - - - - Green monitor - - - - - White monitor - - - - - BT601 (NTSC/PAL) - - - - - BT709 (HDTV) - - - - - Average - - - - - About Qt... - - - - - About 86Box... - - - - - Documentation... - - - - - Update status bar icons - - - - - Take screenshot... - - - - - Sound gain... - - - - - OpenGL 3.0 Core - - - - - Program preferences... - - - - - MediaMenu - - - - - - New Image - - - - - - - - Existing Image - - - - - - - - Existing Image (Write Protected) - - - - - Record - - - - - Play - - - - - Rewind - - - - - Fast Forward - - - - - - - - - Eject - - - - - - Image - - - - - Export to 86F - - - - - Mute - - - - - Empty - - - - - - - Reload previous image - - - - - Create... - - - - - - - - - Open - - - - - Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) - - - - - Cassette: %1 - - - - - - - - - - (empty) - - - - - Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) - - - - - Cartridge %1: %2 - - - - - All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) - - - - - Save as 86f - - - - - Surface images (*.86f) - - - - - Unable to write file - - - - - Make sure the file is being saved to a writable directory - - - - - Floppy %1 (%2): %3 - - - - - CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) - - - - - - - Unknown Bus - - - - - CD-ROM %1 (%2): %3 - - - - - ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) - - - - - ZIP %1 %2 (%3): %4 - - - - - MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) - - - - - MO %1 (%2): %3 - - - - - NewFloppyDialog - - - New Image - - - - - File Name - - - - - Disk Size - - - - - RPM Mode - - - - - ProgSettings - - - Preferences - - - - - (Default) - - - - - Icon set: - - - - - Default - - - - - QObject - - - Click to capture mouse. - - - - - Press %1 to release mouse - - - - - Press %1 or middle button to release mouse - - - - - Failed to initialize FluidSynth - - - - - MFM/RLL or ESDI CD-ROM drives never existed - - - - - Failed to set up PCap - - - - - No PCap devices found - - - - - Unable to initialize FreeType - - - - - Unable to initialize SDL, libsdl2 is required - - - - - libfreetype is required for ESC/P printer emulation. - - - - - libgs is required for automatic conversion of PostScript files to PDF. - -Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. - - - - - %1 is required for FluidSynth MIDI output. - - - - - Make sure libpcap is installed and that you are on a libpcap-compatible network connection. - - - - - Unable to initialize Ghostscript - - - - - Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. - - - - - Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. - - - - - Hardware not available - - - - - No ROMs found. - - - - - 86Box could not find any usable ROM images. - -Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. - - - - - RendererStack - - - StackedWidget - - - - - Settings - - - 86Box Settings - - - - - SettingsDisplay - - - Form - - - - - Video - - - - - - Configure - - - - - Voodoo Graphics - - - - - SettingsFloppyCDROM - - - Form - - - - - Floppy Drives - - - - - Type - - - - - Turbo Timings - - - - - Check BPB - - - - - CD-ROM Drives - - - - - Channel - - - - - Speed - - - - - Bus - - - - - SettingsHarddisks - - - Form - - - - - Bus - - - - - ID - - - - - New - - - - - Existing - - - - - Remove - - - - - SettingsInput - - - Form - - - - - Mouse - - - - - Configure - - - - - Joystick - - - - - Joystick 1... - - - - - Joystick 2... - - - - - Joystick 3... - - - - - Joystick 4... - - - - - SettingsMachine - - - Form - - - - - Machine Type - - - - - Machine - - - - - CPU - - - - - FPU - - - - - Wait States - - - - - Memory - - - - - Speed - - - - - Configure - - - - - Dynamic Recompiler - - - - - Time Synchronization - - - - - Disabled - - - - - Enabled (Local Time) - - - - - Enabled (UTC) - - - - - SettingsNetwork - - - Form - - - - - PCap Device - - - - - Network Adapter - - - - - Network Type - - - - - Configure - - - - - SettingsOtherPeripherals - - - Form - - - - - ISA RTC - - - - - - - - - Configure - - - - - ISA Memory Expansion - - - - - Card 2 - - - - - Card 3 - - - - - Card 1 - - - - - Card 4 - - - - - ISABugger Device - - - - - POST card - - - - - SettingsOtherRemovable - - - Form - - - - - MO Drives - - - - - - Bus - - - - - - Channel - - - - - Type - - - - - ZIP Drives - - - - - ZIP 250 - - - - - SettingsPorts - - - Form - - - - - LPT1 Device - - - - - LPT2 Device - - - - - LPT3 Device - - - - - Serial Port 1 - - - - - Parallel Port 1 - - - - - Serial Port 2 - - - - - Parallel Port 2 - - - - - Serial Port 3 - - - - - Parallel Port 3 - - - - - Serial Port 4 - - - - - SettingsSound - - - Form - - - - - MIDI In - - - - - Innovation SSI-2001 - - - - - Gravis Ultrasound - - - - - Sound Card - - - - - - - - - - - Configure - - - - - MIDI Out - - - - - Standalone MPU-401 - - - - - CMS / Game Blaster - - - - - Use FLOAT32 sound - - - - - SettingsStorageControllers - - - Form - - - - - HD Controller - - - - - - - - - - - - Configure - - - - - FD Controller - - - - - Tertiary IDE Controller - - - - - Quaternary IDE Controller - - - - - SCSI - - - - - Controller 1 - - - - - Controller 4 - - - - - Controller 2 - - - - - Controller 3 - - - - - Cassette - - - - - SoundGain - - - Sound Gain - - - - - Gain: - - - - - SpecifyDimensions - - - Specify Main Window Dimensions - - - - - Width: - - - - - Lock to this size - - - - - Height: - - - - diff --git a/src/qt/86box_zh.ts b/src/qt/86box_zh.ts deleted file mode 100644 index 1fb859578..000000000 --- a/src/qt/86box_zh.ts +++ /dev/null @@ -1,1332 +0,0 @@ - - - - - DeviceConfig - - - Dialog - - - - - FileField - - - Form - - - - - Browse - - - - - HarddiskDialog - - - Dialog - - - - - File name - - - - - Cylinders - - - - - Sectors - - - - - Size (MiB) - - - - - Heads - - - - - Type - - - - - Bus - - - - - Channel - - - - - Format - - - - - Block Size - - - - - JoystickConfiguration - - - Dialog - - - - - Device - - - - - MainWindow - - - 86Box - - - - - Action - - - - - Tools - - - - - View - - - - - Renderer - - - - - Window scale factor - - - - - Filter method - - - - - Fullscreen stretch mode - - - - - EGA/(S)VGA settings - - - - - VGA screen type - - - - - Grayscale conversion type - - - - - Media - - - - - Help - - - - - Keyboard requires capture - - - - - Right CTRL is left ALT - - - - - Hard Reset - - - - - Ctrl+Alt+Del - - - - - Ctrl+Alt+Esc - - - - - Pause - - - - - Exit - - - - - Settings - - - - - Fullscreen - - - - - Ctrl+Alt+PgUp - - - - - Software Renderer - - - - - Hardware Renderer (OpenGL) - - - - - Hardware Renderer (OpenGL ES) - - - - - Hide status bar - - - - - Resizable window - - - - - Remember size and position - - - - - Specify dimensions... - - - - - Force 4:3 display ratio - - - - - HiDPI scaling - - - - - CGA/PCjr/Tandy/EGA/(S)VGA overscan - - - - - Change contrast for monochrome display - - - - - 0.5x - - - - - 1x - - - - - 1.5x - - - - - 2x - - - - - Nearest - - - - - Linear - - - - - Full screen stretch - - - - - 4:3 - - - - - Square pixels (Keep ratio) - - - - - Integer scale - - - - - Inverted VGA monitor - - - - - RGB Color - - - - - RGB Grayscale - - - - - Amber monitor - - - - - Green monitor - - - - - White monitor - - - - - BT601 (NTSC/PAL) - - - - - BT709 (HDTV) - - - - - Average - - - - - About Qt... - - - - - About 86Box... - - - - - Documentation... - - - - - Update status bar icons - - - - - Take screenshot... - - - - - Sound gain... - - - - - OpenGL 3.0 Core - - - - - Program preferences... - - - - - MediaMenu - - - - - - New Image - - - - - - - - Existing Image - - - - - - - - Existing Image (Write Protected) - - - - - Record - - - - - Play - - - - - Rewind - - - - - Fast Forward - - - - - - - - - Eject - - - - - - Image - - - - - Export to 86F - - - - - Mute - - - - - Empty - - - - - - - Reload previous image - - - - - Create... - - - - - - - - - Open - - - - - Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*) - - - - - Cassette: %1 - - - - - - - - - - (empty) - - - - - Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*) - - - - - Cartridge %1: %2 - - - - - All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) - - - - - Save as 86f - - - - - Surface images (*.86f) - - - - - Unable to write file - - - - - Make sure the file is being saved to a writable directory - - - - - Floppy %1 (%2): %3 - - - - - CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*) - - - - - - - Unknown Bus - - - - - CD-ROM %1 (%2): %3 - - - - - ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*) - - - - - ZIP %1 %2 (%3): %4 - - - - - MO images (*.im? *.mdi *.IM? *.MDI);;All files (*) - - - - - MO %1 (%2): %3 - - - - - NewFloppyDialog - - - New Image - - - - - File Name - - - - - Disk Size - - - - - RPM Mode - - - - - ProgSettings - - - Preferences - - - - - (Default) - - - - - Icon set: - - - - - Default - - - - - QObject - - - Click to capture mouse. - - - - - Press %1 to release mouse - - - - - Press %1 or middle button to release mouse - - - - - Failed to initialize FluidSynth - - - - - MFM/RLL or ESDI CD-ROM drives never existed - - - - - Failed to set up PCap - - - - - No PCap devices found - - - - - Unable to initialize FreeType - - - - - Unable to initialize SDL, libsdl2 is required - - - - - libfreetype is required for ESC/P printer emulation. - - - - - libgs is required for automatic conversion of PostScript files to PDF. - -Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. - - - - - %1 is required for FluidSynth MIDI output. - - - - - Make sure libpcap is installed and that you are on a libpcap-compatible network connection. - - - - - Unable to initialize Ghostscript - - - - - Machine "%hs" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. - - - - - Video card "%hs" is not available due to missing ROMs in the roms/video directory. Switching to an available video card. - - - - - Hardware not available - - - - - No ROMs found. - - - - - 86Box could not find any usable ROM images. - -Please <a href='https://github.com/86Box/roms/releases/latest'>download</a> a ROM set and extract it into the "%1" directory. - - - - - RendererStack - - - StackedWidget - - - - - Settings - - - 86Box Settings - - - - - SettingsDisplay - - - Form - - - - - Video - - - - - - Configure - - - - - Voodoo Graphics - - - - - SettingsFloppyCDROM - - - Form - - - - - Floppy Drives - - - - - Type - - - - - Turbo Timings - - - - - Check BPB - - - - - CD-ROM Drives - - - - - Channel - - - - - Speed - - - - - Bus - - - - - SettingsHarddisks - - - Form - - - - - Bus - - - - - ID - - - - - New - - - - - Existing - - - - - Remove - - - - - SettingsInput - - - Form - - - - - Mouse - - - - - Configure - - - - - Joystick - - - - - Joystick 1... - - - - - Joystick 2... - - - - - Joystick 3... - - - - - Joystick 4... - - - - - SettingsMachine - - - Form - - - - - Machine Type - - - - - Machine - - - - - CPU - - - - - FPU - - - - - Wait States - - - - - Memory - - - - - Speed - - - - - Configure - - - - - Dynamic Recompiler - - - - - Time Synchronization - - - - - Disabled - - - - - Enabled (Local Time) - - - - - Enabled (UTC) - - - - - SettingsNetwork - - - Form - - - - - PCap Device - - - - - Network Adapter - - - - - Network Type - - - - - Configure - - - - - SettingsOtherPeripherals - - - Form - - - - - ISA RTC - - - - - - - - - Configure - - - - - ISA Memory Expansion - - - - - Card 2 - - - - - Card 3 - - - - - Card 1 - - - - - Card 4 - - - - - ISABugger Device - - - - - POST card - - - - - SettingsOtherRemovable - - - Form - - - - - MO Drives - - - - - - Bus - - - - - - Channel - - - - - Type - - - - - ZIP Drives - - - - - ZIP 250 - - - - - SettingsPorts - - - Form - - - - - LPT1 Device - - - - - LPT2 Device - - - - - LPT3 Device - - - - - Serial Port 1 - - - - - Parallel Port 1 - - - - - Serial Port 2 - - - - - Parallel Port 2 - - - - - Serial Port 3 - - - - - Parallel Port 3 - - - - - Serial Port 4 - - - - - SettingsSound - - - Form - - - - - MIDI In - - - - - Innovation SSI-2001 - - - - - Gravis Ultrasound - - - - - Sound Card - - - - - - - - - - - Configure - - - - - MIDI Out - - - - - Standalone MPU-401 - - - - - CMS / Game Blaster - - - - - Use FLOAT32 sound - - - - - SettingsStorageControllers - - - Form - - - - - HD Controller - - - - - - - - - - - - Configure - - - - - FD Controller - - - - - Tertiary IDE Controller - - - - - Quaternary IDE Controller - - - - - SCSI - - - - - Controller 1 - - - - - Controller 4 - - - - - Controller 2 - - - - - Controller 3 - - - - - Cassette - - - - - SoundGain - - - Sound Gain - - - - - Gain: - - - - - SpecifyDimensions - - - Specify Main Window Dimensions - - - - - Width: - - - - - Lock to this size - - - - - Height: - - - - diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 53dabe65b..78baf5701 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -173,6 +173,16 @@ if (UNIX AND NOT APPLE) endif() endif() endif() -qt_create_translation(QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} 86box_en.ts 86box_en-GB.ts 86box_de.ts 86box_es.ts 86box_fi.ts 86box_fr.ts 86box_hr.ts 86box_hu.ts 86box_it.ts 86box_ja.ts 86box_ko.ts 86box_pt-BR.ts 86box_pt-PT.ts 86box_ru.ts 86box_sl.ts 86box_tr.ts 86box_zh.ts) +set(QM_FILES) +file(GLOB po_files "${CMAKE_CURRENT_SOURCE_DIR}/languages/*.po") +foreach(po_file ${po_files}) + get_target_property(LCONVERT_EXECUTABLE Qt${QT_MAJOR}::lconvert IMPORTED_LOCATION) + + get_filename_component(PO_FILE_NAME ${po_file} NAME_WE) + add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/86box_${PO_FILE_NAME}.qm" + COMMAND ${LCONVERT_EXECUTABLE} -i ${po_file} -o ${CMAKE_CURRENT_BINARY_DIR}/86box_${PO_FILE_NAME}.qm + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") + list(APPEND QM_FILES "${CMAKE_CURRENT_BINARY_DIR}/86box_${PO_FILE_NAME}.qm") +endforeach() configure_file(qt_translations.qrc ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) target_sources(ui PRIVATE ${QM_FILES} ${CMAKE_CURRENT_BINARY_DIR}/qt_translations.qrc) diff --git a/src/qt/languages/.ts b/src/qt/languages/.ts new file mode 100644 index 000000000..085ec047d --- /dev/null +++ b/src/qt/languages/.ts @@ -0,0 +1,1603 @@ + + + + + + + Translated by + Unknown + + + &Action + 操作(&A) + + + &Keyboard requires capture + 键盘需要捕捉(&K) + + + &Right CTRL is left ALT + 将右 CTRL 键映射为左 ALT 键(&R) + + + &Hard Reset... + 硬重置(&H)... + + + &Ctrl+Alt+Del Ctrl+F12 + Ctrl+Alt+Del(&C) Ctrl+F12 + + + Ctrl+Alt+&Esc + Ctrl+Alt+Esc(&E) + + + &Pause + 暂停(&P) + + + E&xit... + 退出(&X)... + + + &View + 查看(&V) + + + &Hide status bar + 隐藏状态栏(&H) + + + &Resizeable window + 窗口大小可调(&R) + + + R&emember size && position + 记住窗口大小和位置(&E) + + + Re&nderer + 渲染器(&N) + + + &Qt (Software) + Qt (软件)(&Q) + + + Qt (&Hardware) + Qt (硬件)(&H) + + + Qt (&OpenGL) + Qt (OpenGL)(&O) + + + Qt (OpenGL &ES) + Qt (OpenGL ES)(&E) + + + Open&GL (3.0 Core) + OpenGL (3.0 核心)(&G) + + + &VNC + VNC(&V) + + + Specify dimensions... + 指定窗口大小... + + + F&orce 4:3 display ratio + 强制 4:3 显示比例(&O) + + + &Window scale factor + 窗口缩放系数(&W) + + + &0.5x + 0.5x(&0) + + + &1x + 1x(&1) + + + 1.&5x + 1.5x(&5) + + + &2x + 2x(&2) + + + Filter method + 过滤方式 + + + &Nearest + 邻近(&N) + + + &Linear + 线性(&L) + + + Hi&DPI scaling + HiDPI 缩放(&D) + + + &Fullscreen Ctrl+Alt+PageUP + 全屏(&F) Ctrl+Alt+PageUP + + + Fullscreen &stretch mode + 全屏拉伸模式(&S) + + + &Full screen stretch + 全屏拉伸(&F) + + + &4:3 + 4:3(&4) + + + &Square pixels (Keep ratio) + 保持比例(&S) + + + &Integer scale + 整数比例(&I) + + + E&GA/(S)VGA settings + EGA/(S)VGA 设置(&G) + + + &Inverted VGA monitor + VGA 显示器反色显示(&I) + + + VGA screen &type + VGA 屏幕类型(&T) + + + RGB &Color + RGB 彩色(&C) + + + &RGB Grayscale + RGB 灰度(&R) + + + &Amber monitor + 琥珀色单色显示器(&A) + + + &Green monitor + 绿色单色显示器(&G) + + + &White monitor + 白色单色显示器(&W) + + + Grayscale &conversion type + 灰度转换类型(&C) + + + BT&601 (NTSC/PAL) + BT601 (NTSC/PAL)(&6) + + + BT&709 (HDTV) + BT709 (HDTV)(&7) + + + &Average + 平均(&A) + + + CGA/PCjr/Tandy/E&GA/(S)VGA overscan + CGA/PCjr/Tandy/EGA/(S)VGA 过扫描(&G) + + + Change contrast for &monochrome display + 更改单色显示对比度(&M) + + + &Media + 介质(&M) + + + &Tools + 工具(&T) + + + &Settings... + 设置(&S)... + + + &Update status bar icons + 更新状态栏图标(&U) + + + Take s&creenshot Ctrl+F11 + 截图(&C) Ctrl+F11 + + + &Preferences... + 首选项(&P)... + + + Enable &Discord integration + 启用 Discord 集成(&D) + + + Sound &gain... + 音量增益(&G)... + + + Begin trace Ctrl+T + 开始追踪 Ctrl+T + + + End trace Ctrl+T + 结束追踪 Ctrl+T + + + &Logging + 记录日志(&L) + + + Enable BusLogic logs Ctrl+F4 + 启用 BusLogic 日志 Ctrl+F4 + + + Enable CD-ROM logs Ctrl+F5 + 启用 CD-ROM 日志 Ctrl+F5 + + + Enable floppy (86F) logs Ctrl+F6 + 启用软盘 (86F) 日志 Ctrl+F6 + + + Enable floppy controller logs Ctrl+F7 + 启用软盘控制器日志 Ctrl+F7 + + + Enable IDE logs Ctrl+F8 + 启用 IDE 日志 Ctrl+F8 + + + Enable Serial Port logs Ctrl+F3 + 启用串口日志 Ctrl+F3 + + + Enable Network logs Ctrl+F9 + 启用网络日志 Ctrl+F9 + + + &Log breakpoint Ctrl+F10 + 日志断点(&L) Ctrl+F10 + + + Dump &video RAM Ctrl+F1 + 创建显卡内存转储(&V) Ctrl+F1 + + + &Help + 帮助(&H) + + + &Documentation... + 文档(&D)... + + + &About 86Box... + 关于 86Box(&A)... + + + &New image... + 新建镜像(&N)... + + + &Existing image... + 打开已存在的镜像(&E)... + + + Existing image (&Write-protected)... + 打开已存在的镜像并写保护(&W)... + + + &Record + 录制(&R) + + + &Play + 播放(&P) + + + &Rewind to the beginning + 倒带至起点(&R) + + + &Fast forward to the end + 快进至终点(&F) + + + E&ject + 弹出(&J) + + + &Image... + 镜像(&I)... + + + E&xport to 86F... + 导出为 86F 格式(&x)... + + + &Mute + 静音(&M) + + + E&mpty + 空置驱动器(&M) + + + &Reload previous image + 载入上一个镜像(&R) + + + &Image + 镜像(&I) + + + Target &framerate + 目标帧率(&F) + + + &Sync with video + 与视频同步(&S) + + + &25 fps + 25 fps(&2) + + + &30 fps + 30 fps(&3) + + + &50 fps + 50 fps(&5) + + + &60 fps + 60 fps(&6) + + + &75 fps + 75 fps(&7) + + + &VSync + 垂直同步(&V) + + + &Select shader... + 选择着色器(&S)... + + + &Remove shader + 移除着色器(&R) + + + Preferences + 首选项 + + + Sound Gain + 音量增益 + + + New Image + 新建镜像 + + + Settings + 设置 + + + Specify Main Window Dimensions + 指定主窗口大小 + + + OK + 确定 + + + Cancel + 取消 + + + Save these settings as &global defaults + 将以上设置存储为全局默认值(&G) + + + &Default + 默认(&D) + + + Language: + 语言: + + + Icon set: + 图标集: + + + Gain + 增益 + + + File name: + 文件名: + + + Disk size: + 磁盘大小: + + + RPM mode: + 转速 (RPM) 模式: + + + Progress: + 进度: + + + Width: + 宽度: + + + Height: + 高度: + + + Lock to this size + 锁定此大小 + + + Machine type: + 机器类型: + + + Machine: + 机型: + + + Configure + 配置 + + + CPU type: + CPU 类型: + + + Speed: + 速度: + + + FPU: + 浮点处理器 (FPU): + + + Wait states: + 等待状态 (WS): + + + MB + MB + + + Memory: + 内存: + + + Time synchronization + 时间同步 + + + Disabled + 禁用 + + + Enabled (local time) + 启用 (本地时间) + + + Enabled (UTC) + 启用 (UTC) + + + Dynamic Recompiler + 动态重编译器 + + + Video: + 显卡: + + + Voodoo Graphics + Voodoo Graphics + + + Mouse: + 鼠标: + + + Joystick: + 操纵杆: + + + Joystick 1... + 操纵杆 1... + + + Joystick 2... + 操纵杆 2... + + + Joystick 3... + 操纵杆 3... + + + Joystick 4... + 操纵杆 4... + + + Sound card: + 声卡: + + + MIDI Out Device: + MIDI 输出设备: + + + MIDI In Device: + MIDI 输入设备: + + + Standalone MPU-401 + 独立 MPU-401 + + + Innovation SSI-2001 + Innovation SSI-2001 + + + CMS / Game Blaster + CMS / Game Blaster + + + Gravis Ultrasound + Gravis Ultrasound + + + Use FLOAT32 sound + 使用单精度浮点 (FLOAT32) + + + Network type: + 网络类型: + + + PCap device: + PCap 设备: + + + Network adapter: + 网络适配器: + + + LPT1 Device: + LPT1 设备: + + + LPT2 Device: + LPT2 设备: + + + LPT3 Device: + LPT3 设备: + + + Serial port 1 + 串口 1 + + + Serial port 2 + 串口 2 + + + Serial port 3 + 串口 3 + + + Serial port 4 + 串口 4 + + + Parallel port 1 + 并口 1 + + + Parallel port 2 + 并口 2 + + + Parallel port 3 + 并口 3 + + + HD Controller: + 硬盘控制器: + + + FD Controller: + 软盘控制器: + + + Tertiary IDE Controller + 第三 IDE 控制器 + + + Quaternary IDE Controller + 第四 IDE 控制器 + + + SCSI + SCSI + + + Controller 1: + 控制器 1: + + + Controller 2: + 控制器 2: + + + Controller 3: + 控制器 3: + + + Controller 4: + 控制器 4: + + + Cassette + 磁带 + + + Hard disks: + 硬盘: + + + &New... + 新建(&N)... + + + &Existing... + 已有镜像(&E)... + + + &Remove + 移除(&R) + + + Bus: + 总线: + + + Channel: + 通道: + + + ID: + ID: + + + &Specify... + 指定(&S)... + + + Sectors: + 扇区(S): + + + Heads: + 磁头(H): + + + Cylinders: + 柱面(C): + + + Size (MB): + 大小 (MB): + + + Type: + 类型: + + + Image Format: + 镜像格式: + + + Block Size: + 块大小: + + + Floppy drives: + 软盘驱动器: + + + Turbo timings + 加速时序 + + + Check BPB + 检查 BPB + + + CD-ROM drives: + 光盘驱动器: + + + MO drives: + 磁光盘驱动器: + + + ZIP drives: + ZIP 驱动器: + + + ZIP 250 + ZIP 250 + + + ISA RTC: + ISA 实时时钟: + + + ISA Memory Expansion + ISA 内存扩充 + + + Card 1: + 扩展卡 1: + + + Card 2: + 扩展卡 2: + + + Card 3: + 扩展卡 3: + + + Card 4: + 扩展卡 4: + + + ISABugger device + ISABugger 设备 + + + POST card + 自检 (POST) 卡 + + + Segoe UI + Microsoft YaHei + + + 86Box + 86Box + + + Error + 错误 + + + Fatal error + 致命错误 + + + <reserved> + <reserved> + + + Press CTRL+ALT+PAGE DOWN to return to windowed mode. + 按 CTRL+ALT+PAGE DOWN 组合键返回到窗口模式。 + + + Speed + 速度 + + + ZIP %03i %i (%s): %ls + ZIP %03i %i (%s): %ls + + + ZIP images (*.IM? *.im? *.ZDI *.zdi) + ZIP 镜像 (*.IM? *.im? *.ZDI *.zdi) + + + 86Box could not find any usable ROM images. + +Please <a href=https://github.com/86Box/roms/releases/latest>download</a> a ROM set and extract it into the roms directory. + 86Box 找不到任何可用的 ROM 镜像。 + +请<a href=https://github.com/86Box/roms/releases/latest>下载</a>ROM 包并将其解压到 roms 文件夹。 + + + (empty) + (空) + + + ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*) + ZIP 镜像 (*.IM? *.im? *.ZDI *.zdi);;所有文件 (*) + + + Turbo + 加速 + + + On + + + + Off + + + + All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f) + 所有镜像 (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;基本扇区镜像 (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;表面镜像 (*.86F *.86f) + + + Machine %hs is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. + 由于 roms/machines 文件夹中缺少合适的 ROM,机型 %hs 不可用。将切换到其他可用机型。 + + + Video card %hs is not available due to missing ROMs in the roms/video directory. Switching to an available video card. + 由于 roms/video 文件夹中缺少合适的 ROM,显卡 %hs 不可用。将切换到其他可用显卡。 + + + Machine + 机型 + + + Display + 显示 + + + Input devices + 输入设备 + + + Sound + 声音 + + + Network + 网络 + + + Ports (COM & LPT) + 端口 (COM 和 LPT) + + + Storage controllers + 存储控制器 + + + Hard disks + 硬盘 + + + Floppy & CD-ROM drives + 软盘/光盘驱动器 + + + Other removable devices + 其他可移动设备 + + + Other peripherals + 其他外围设备 + + + Surface images (*.86F *.86f) + 表面镜像 (*.86F *.86f) + + + Click to capture mouse + 单击窗口捕捉鼠标 + + + Press F8+F12 to release mouse + 按 F8+F12 释放鼠标 + + + Press F8+F12 or middle button to release mouse + 按 F8+F12 或鼠标中键释放鼠标 + + + Unable to initialize FluidSynth + 无法初始化 FluidSynth + + + Bus + 总线 + + + File + 文件 + + + C + C + + + H + H + + + S + S + + + KB + KB + + + Could not initialize the video renderer. + 无法初始化视频渲染器。 + + + Default + 默认 + + + %i Wait state(s) + %i 等待状态 (WS) + + + Type + 类型 + + + Failed to set up PCap + 设置 PCap 失败 + + + No PCap devices found + 未找到 PCap 设备 + + + Invalid PCap device + 无效 PCap 设备 + + + Standard 2-button joystick(s) + 标准 2 键操纵杆 + + + Standard 4-button joystick + 标准 4 键操纵杆 + + + Standard 6-button joystick + 标准 6 键操纵杆 + + + Standard 8-button joystick + 标准 8 键操纵杆 + + + CH Flightstick Pro + CH Flightstick Pro + + + Microsoft SideWinder Pad + Microsoft SideWinder Pad + + + Thrustmaster Flight Control System + Thrustmaster Flight Control System + + + None + + + + Unable to load keyboard accelerators. + 无法加载键盘加速器。 + + + Unable to register raw input. + 无法注册原始输入。 + + + %u + %u + + + %u MB (CHS: %i, %i, %i) + %u MB (CHS: %i, %i, %i) + + + Floppy %i (%s): %ls + 软盘 %i (%s): %ls + + + All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) + 所有镜像 (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;高级扇区镜像 (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;基本扇区镜像 (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux 镜像 (*.FDI *.fdi);;表面镜像 (*.86F *.86f *.MFM *.mfm);;所有文件 (*) + + + Unable to initialize FreeType + 无法初始化 FreeType + + + Unable to initialize SDL, SDL2.dll is required + 无法初始化 SDL,需要 SDL2.dll + + + Are you sure you want to hard reset the emulated machine? + 确定要硬重置模拟器吗? + + + Are you sure you want to exit 86Box? + 确定要退出 86Box 吗? + + + Unable to initialize Ghostscript + 无法初始化 Ghostscript + + + MO %i (%ls): %ls + 磁光盘 %i (%ls): %ls + + + MO images (*.IM? *.im? *.MDI *.mdi);;All files (*) + 磁光盘镜像 (*.IM? *.im? *.MDI *.mdi);;所有文件 (*) + + + Welcome to 86Box! + 欢迎使用 86Box! + + + Internal controller + 内部控制器 + + + Exit + 退出 + + + No ROMs found + 找不到 ROM + + + Do you want to save the settings? + 要保存设置吗? + + + This will hard reset the emulated machine. + 此操作将硬重置模拟器。 + + + Save + 保存 + + + About 86Box + 关于 86Box + + + 86Box v + 86Box v + + + An emulator of old computers + +Authors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others. + +Released under the GNU General Public License version 2 or later. See LICENSE for more information. + 一个旧式计算机模拟器 + +作者: Sarah Walker、Miran Grca、Fred N. van Kempen (waltje)、SA1988、Tiseno100、reenigne、leilei、JohnElliott、greatpsycho 等人。 + +本软件依据 GNU 通用公共许可证第二版或更新版本发布。详情见 LICENSE 文件。 + + + Hardware not available + 硬件不可用 + + + WinPcap + WinPcap + + + libpcap + libpcap + + + Make sure libpcap is installed and that you are on a libpcap-compatible network connection. + 请确认 libpcap 已安装且使用兼容 libpcap 的网络连接。 + + + Invalid configuration + 无效配置 + + + freetype.dll + freetype.dll + + + libfreetype + libfreetype + + + is required for ESC/P printer emulation. + ESC/P 打印机模拟需要 + + + gsdll32.dll + gsdll32.dll + + + libgs + libgs + + + is required for automatic conversion of PostScript files to PDF. + +Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. + 是将 PostScript 文件转换为 PDF 所需要的库。 + +使用通用 PostScript 打印机打印的文档将被保存为 PostScript (.ps) 文件。 + + + libfluidsynth.dll + libfluidsynth.dll + + + libfluidsynth + libfluidsynth + + + is required for FluidSynth MIDI output. + FluidSynth MIDI 输出需要 + + + Entering fullscreen mode + 正在进入全屏模式 + + + Don't show this message again + 不要再显示此消息 + + + Don't exit + 不退出 + + + Reset + 重置 + + + Don't reset + 不重置 + + + CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*) + 光盘镜像 (*.ISO *.iso *.CUE *.cue);;所有文件 (*) + + + %hs Device Configuration + %hs 设备配置 + + + Monitor in sleep mode + 显示器处在睡眠状态 + + + OpenGL Shaders (*.GLSL *.glsl);;All files (*) + OpenGL 着色器 (*.GLSL *.glsl);;所有文件 (*) + + + OpenGL options + OpenGL 选项 + + + You are loading an unsupported configuration + 正在载入一个不受支持的配置 + + + CPU type filtering based on selected machine is disabled for this emulated machine. + +This makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software. + +Enabling this setting is not officially supported and any bug reports filed may be closed as invalid. + 此模拟计算机禁用了基于选定计算机的 CPU 类型过滤。 + +能够选中与所选机器本不兼容的 CPU,但是可能会遇到与机器 BIOS 或其他软件不兼容的问题。 + +启用此设置不受官方支持,并且提交的任何错误报告可能会视为无效而关闭。 + + + Continue + 继续 + + + Cassette: %s + 磁带: %s + + + Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*) + 磁带镜像 (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;所有文件 (*) + + + Cartridge %i: %ls + 卡带 %i: %ls + + + Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*) + 卡带镜像 (*.A *.a *.B *.b *.JRC *.jrc);;所有文件 (*) + + + Error initializing renderer + 初始化渲染器时出错 + + + OpenGL (3.0 Core) renderer could not be initialized. Use another renderer. + 无法初始化 OpenGL (3.0 核心) 渲染器。请使用其他渲染器。 + + + Hard disk (%s) + 硬盘 (%s) + + + %01i:%01i + %01i:%01i + + + %01i + %01i + + + MFM/RLL or ESDI CD-ROM drives never existed + 不存在 MFM/RLL 或 ESDI CD-ROM 驱动器 + + + Custom... + 自定义... + + + Custom (large)... + 自定义 (大容量)... + + + Add New Hard Disk + 添加新硬盘 + + + Add Existing Hard Disk + 添加已存在的硬盘 + + + HDI disk images cannot be larger than 4 GB. + HDI 磁盘镜像不能超过 4 GB。 + + + Disk images cannot be larger than 127 GB. + 磁盘镜像不能超过 127 GB。 + + + Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*) + 硬盘镜像 (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;所有文件 (*) + + + Unable to read file + 无法读取文件 + + + Unable to write file + 无法写入文件 + + + HDI or HDX images with a sector size other than 512 are not supported. + 不支持非 512 字节扇区大小的 HDI 或 HDX 镜像。 + + + USB is not yet supported + 尚未支持 USB + + + Disk image file already exists + 磁盘镜像文件已存在 + + + Please specify a valid file name. + 请指定有效的文件名。 + + + Disk image created + 已创建磁盘镜像 + + + Make sure the file exists and is readable. + 请确定此文件已存在并可读取。 + + + Make sure the file is being saved to a writable directory. + 请确定此文件保存在可写目录中。 + + + Disk image too large + 磁盘镜像太大 + + + Remember to partition and format the newly-created drive. + 请记得为新创建的镜像分区并格式化。 + + + The selected file will be overwritten. Are you sure you want to use it? + 选定的文件将被覆盖。确定继续使用此文件吗? + + + Unsupported disk image + 不支持的磁盘镜像 + + + Overwrite + 覆盖 + + + Don't overwrite + 不覆盖 + + + Raw image (.img) + 原始镜像 (.img) + + + HDI image (.hdi) + HDI 镜像 (.hdi) + + + HDX image (.hdx) + HDX 镜像 (.hdx) + + + Fixed-size VHD (.vhd) + 固定大小 VHD (.vhd) + + + Dynamic-size VHD (.vhd) + 动态大小 VHD (.vhd) + + + Differencing VHD (.vhd) + 差分 VHD (.vhd) + + + Large blocks (2 MB) + 大块 (2 MB) + + + Small blocks (512 KB) + 小块 (512 KB) + + + VHD files (*.VHD *.vhd);;All files (*) + VHD 文件 (*.VHD *.vhd);;所有文件 (*) + + + Select the parent VHD + 选择父 VHD 文件 + + + This could mean that the parent image was modified after the differencing image was created. + +It can also happen if the image files were moved or copied, or by a bug in the program that created this disk. + +Do you want to fix the timestamps? + 父映像可能在创建差异镜像后被修改。 + +如果镜像文件被移动或复制,或创建此磁盘的程序中存在错误,也可能发生这种情况。 + +是否需要修复时间戳? + + + Parent and child disk timestamps do not match + 父盘与子盘的时间戳不匹配 + + + Could not fix VHD timestamp. + 无法修复 VHD 时间戳。 + + + %01i:%02i + %01i:%02i + + + MFM/RLL + MFM/RLL + + + XTA + XTA + + + ESDI + ESDI + + + IDE + IDE + + + ATAPI + ATAPI + + + MFM/RLL (%01i:%01i) + MFM/RLL (%01i:%01i) + + + XTA (%01i:%01i) + XTA (%01i:%01i) + + + ESDI (%01i:%01i) + ESDI (%01i:%01i) + + + IDE (%01i:%01i) + IDE (%01i:%01i) + + + ATAPI (%01i:%01i) + ATAPI (%01i:%01i) + + + SCSI (%01i:%02i) + SCSI (%01i:%02i) + + + CD-ROM %i (%s): %s + 光盘 %i (%s): %s + + + 160 kB + 160 kB + + + 180 kB + 180 kB + + + 320 kB + 320 kB + + + 360 kB + 360 kB + + + 640 kB + 640 kB + + + 720 kB + 720 kB + + + 1.2 MB + 1.2 MB + + + 1.25 MB + 1.25 MB + + + 1.44 MB + 1.44 MB + + + DMF (cluster 1024) + DMF (1024 簇) + + + DMF (cluster 2048) + DMF (2048 簇) + + + 2.88 MB + 2.88 MB + + + ZIP 100 + ZIP 100 + + + 3.5 128Mb M.O. (ISO 10090) + 3.5 英寸 128Mb 磁光盘 (ISO 10090) + + + 3.5 230Mb M.O. (ISO 13963) + 3.5 英寸 230Mb 磁光盘 (ISO 13963) + + + 3.5 540Mb M.O. (ISO 15498) + 3.5 英寸 540Mb 磁光盘 (ISO 15498) + + + 3.5 640Mb M.O. (ISO 15498) + 3.5 英寸 640Mb 磁光盘 (ISO 15498) + + + 3.5 1.3Gb M.O. (GigaMO) + 3.5 英寸 1.3Gb 磁光盘 (GigaMO) + + + 3.5 2.3Gb M.O. (GigaMO 2) + 3.5 英寸 2.3Gb 磁光盘 (GigaMO 2) + + + 5.25 600Mb M.O. + 5.25 英寸 600Mb 磁光盘 + + + 5.25 650Mb M.O. + 5.25 英寸 650Mb 磁光盘 + + + 5.25 1Gb M.O. + 5.25 英寸 1Gb 磁光盘 + + + 5.25 1.3Gb M.O. + 5.25 英寸 1.3Gb 磁光盘 + + + Perfect RPM + 标准转速 (RPM) + + + 1%% below perfect RPM + 低于标准转速的 1%% + + + 1.5%% below perfect RPM + 低于标准转速的 1.5%% + + + 2%% below perfect RPM + 低于标准转速的 2%% + + + (System Default) + (系统默认) + + + diff --git a/src/qt/languages/cs_CZ.po b/src/qt/languages/cs_CZ.po new file mode 100644 index 000000000..950bdec34 --- /dev/null +++ b/src/qt/languages/cs_CZ.po @@ -0,0 +1,1173 @@ +msgid "Translated by" +msgstr "Unknown" + +msgid "&Action" +msgstr "&Akce" + +msgid "&Keyboard requires capture" +msgstr "&Klávesnice vyžaduje záběr" + +msgid "&Right CTRL is left ALT" +msgstr "&Pravý Ctrl je levý Alt" + +msgid "&Hard Reset..." +msgstr "&Resetovat" + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "P&ozastavit" + +msgid "E&xit..." +msgstr "&Ukončit" + +msgid "&View" +msgstr "&Zobrazení" + +msgid "&Hide status bar" +msgstr "&Schovat stavový řádek" + +msgid "&Resizeable window" +msgstr "&Měnitelná velikost okna" + +msgid "R&emember size && position" +msgstr "&Pamatovat velikost a pozici" + +msgid "Re&nderer" +msgstr "&Renderer" + +msgid "&Qt (Software)" +msgstr "&Qt (Software)" + +msgid "Qt (&Hardware)" +msgstr "Qt (&Hardware)" + +msgid "Qt (&OpenGL)" +msgstr "Qt (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 Core)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "&Zadat velikost..." + +msgid "F&orce 4:3 display ratio" +msgstr "&Dodržovat poměr stran 4:3" + +msgid "&Window scale factor" +msgstr "&Násobek zvětšení okna" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Metoda &filtrování" + +msgid "&Nearest" +msgstr "&Nejbližší" + +msgid "&Linear" +msgstr "&Lineární" + +msgid "Hi&DPI scaling" +msgstr "Š&kálování HiDPI" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Celá obrazovka\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Režím roztá&hnutí při celé obrazovce" + +msgid "&Full screen stretch" +msgstr "&Roztáhnout" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Zachovat poměr stran" + +msgid "&Integer scale" +msgstr "&Celočíselné škálování" + +msgid "E&GA/(S)VGA settings" +msgstr "Nastavení pro E&GA a (S)VGA" + +msgid "&Inverted VGA monitor" +msgstr "&Převrátit barvy" + +msgid "VGA screen &type" +msgstr "&Typ VGA monitoru" + +msgid "RGB &Color" +msgstr "RGB &barevný" + +msgid "&RGB Grayscale" +msgstr "&Odstíny šedi" + +msgid "&Amber monitor" +msgstr "&Jantarová obrazovka" + +msgid "&Green monitor" +msgstr "&Zelená obrazovka" + +msgid "&White monitor" +msgstr "&Bílá obrazovka" + +msgid "Grayscale &conversion type" +msgstr "Převod na &odstíny šedi" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Průměr" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "Přesah obrazu CGA/PCjr/Tandy/E&GA/(S)VGA" + +msgid "Change contrast for &monochrome display" +msgstr "&Upravit kontrast černobílé obrazovky" + +msgid "&Media" +msgstr "&Média" + +msgid "&Tools" +msgstr "&Nástroje" + +msgid "&Settings..." +msgstr "&Nastavení..." + +msgid "&Update status bar icons" +msgstr "&Aktualizovat ikony stavového řádku" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Pořídit &screenshot\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Předvolby..." + +msgid "Enable &Discord integration" +msgstr "Povolit integraci s &Discordem" + +msgid "Sound &gain..." +msgstr "&Zesílení zvuku" + +msgid "Begin trace\tCtrl+T" +msgstr "Začít trace\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Zastavit trace\tCtrl+T" + +msgid "&Logging" +msgstr "&Záznamy" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Povolit záznamy BusLogic\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Povolit záznamy CD-ROM\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Povolit záznamy diskety (86F)\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Povolit záznamy disketového řadiče\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Povolit záznamy IDE\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Povolit záznamy sériového portu\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Povolit záznamy sítě\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "Zaznamenat do &logu zarážku\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "Zaznamenat obsah &video RAM\tCtrl+F1" + +msgid "&Help" +msgstr "Ná&pověda" + +msgid "&Documentation..." +msgstr "&Dokumentace" + +msgid "&About 86Box..." +msgstr "&O programu 86Box" + +msgid "" +msgstr "" + +msgid "&New image..." +msgstr "&Nový obraz..." + +msgid "&Existing image..." +msgstr "&Existující obraz..." + +msgid "Existing image (&Write-protected)..." +msgstr "Existující obraz (&ochrana proti zápisu)..." + +msgid "&Record" +msgstr "&Nahrávat" + +msgid "&Play" +msgstr "&Přehrát" + +msgid "&Rewind to the beginning" +msgstr "Přetočit na &začátek" + +msgid "&Fast forward to the end" +msgstr "Přetočit na &konec" + +msgid "E&ject" +msgstr "&Vyjmout" + +msgid "&Image..." +msgstr "&Obraz..." + +msgid "E&xport to 86F..." +msgstr "E&xportovat do 86F..." + +msgid "&Mute" +msgstr "&Ztišit" + +msgid "E&mpty" +msgstr "&Vyjmout" + +msgid "&Reload previous image" +msgstr "&Načíst znova předchozí obraz" + +msgid "&Image" +msgstr "&Obraz..." + +msgid "Target &framerate" +msgstr "&Cílová snímková frekvence" + +msgid "&Sync with video" +msgstr "&Synchronizovat s obrazem" + +msgid "&25 fps" +msgstr "&25 fps" + +msgid "&30 fps" +msgstr "&30 fps" + +msgid "&50 fps" +msgstr "&50 fps" + +msgid "&60 fps" +msgstr "&60 fps" + +msgid "&75 fps" +msgstr "&75 fps" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Zvolit shader..." + +msgid "&Remove shader" +msgstr "&Odebrat shader" + +msgid "Preferences" +msgstr "Předvolby" + +msgid "Sound Gain" +msgstr "Zesílení zvuku" + +msgid "New Image" +msgstr "Nový obraz" + +msgid "Settings" +msgstr "Nastavení" + +msgid "Specify Main Window Dimensions" +msgstr "Zadat rozměry hlavního okna" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Storno" + +msgid "Save these settings as &global defaults" +msgstr "Uložit toto nastavení jako &globální výchozí stav" + +msgid "&Default" +msgstr "&Výchozí" + +msgid "Language:" +msgstr "Jazyk:" + +msgid "Icon set:" +msgstr "Sada ikon:" + +msgid "Gain" +msgstr "Zesílení" + +msgid "File name:" +msgstr "Název souboru:" + +msgid "Disk size:" +msgstr "Velikost disku:" + +msgid "RPM mode:" +msgstr "Režím ot./m:" + +msgid "Progress:" +msgstr "Průběh:" + +msgid "Width:" +msgstr "Šířka:" + +msgid "Height:" +msgstr "Výška:" + +msgid "Lock to this size" +msgstr "Uzamknout na tyto rozměry" + +msgid "Machine type:" +msgstr "Typ počítače:" + +msgid "Machine:" +msgstr "Počítač:" + +msgid "Configure" +msgstr "Nastavit" + +msgid "CPU type:" +msgstr "Procesor:" + +msgid "Speed:" +msgstr "Rychlost:" + +msgid "FPU:" +msgstr "Koprocesor:" + +msgid "Wait states:" +msgstr "Čekací stavy:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Pamět:" + +msgid "Time synchronization" +msgstr "Synchronizace času" + +msgid "Disabled" +msgstr "Vypnuta" + +msgid "Enabled (local time)" +msgstr "Zapnuta (místní čas)" + +msgid "Enabled (UTC)" +msgstr "Zapnuta (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Dynamický překladač" + +msgid "Video:" +msgstr "Grafika:" + +msgid "Voodoo Graphics" +msgstr "Použít grafický akcelerátor Voodoo" + +msgid "Mouse:" +msgstr "Myš:" + +msgid "Joystick:" +msgstr "Joystick:" + +msgid "Joystick 1..." +msgstr "Joystick 1..." + +msgid "Joystick 2..." +msgstr "Joystick 2..." + +msgid "Joystick 3..." +msgstr "Joystick 3..." + +msgid "Joystick 4..." +msgstr "Joystick 4..." + +msgid "Sound card:" +msgstr "Zvuková karta:" + +msgid "MIDI Out Device:" +msgstr "MIDI výstup:" + +msgid "MIDI In Device:" +msgstr "MIDI vstup:" + +msgid "Standalone MPU-401" +msgstr "Samostatný MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Použít zvuk FLOAT32" + +msgid "Network type:" +msgstr "Druh sítě:" + +msgid "PCap device:" +msgstr "PCap zařízení:" + +msgid "Network adapter:" +msgstr "Síťový adaptér:" + +msgid "LPT1 Device:" +msgstr "Zařízení na LPT1" + +msgid "LPT2 Device:" +msgstr "Zařízení na LPT2" + +msgid "LPT3 Device:" +msgstr "Zařízení na LPT3" + +msgid "Serial port 1" +msgstr "Povolit port COM1" + +msgid "Serial port 2" +msgstr "Povolit port COM2" + +msgid "Serial port 3" +msgstr "Povolit port COM3" + +msgid "Serial port 4" +msgstr "Povolit port COM4" + +msgid "Parallel port 1" +msgstr "Povolit port LPT1" + +msgid "Parallel port 2" +msgstr "Povolit port LPT2" + +msgid "Parallel port 3" +msgstr "Povolit port LPT3" + +msgid "HD Controller:" +msgstr "Řadič disku:" + +msgid "FD Controller:" +msgstr "Disketový řadič:" + +msgid "Tertiary IDE Controller" +msgstr "Třetí řadič IDE" + +msgid "Quaternary IDE Controller" +msgstr "Čtvrtý řadič IDE" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Řadič 1:" + +msgid "Controller 2:" +msgstr "Řadič 2:" + +msgid "Controller 3:" +msgstr "Řadič 3:" + +msgid "Controller 4:" +msgstr "Řadič 4:" + +msgid "Cassette" +msgstr "Kazeta" + +msgid "Hard disks:" +msgstr "Pevné disky:" + +msgid "&New..." +msgstr "&Nový..." + +msgid "&Existing..." +msgstr "&Existující..." + +msgid "&Remove" +msgstr "&Odebrat" + +msgid "Bus:" +msgstr "Sběrnice:" + +msgid "Channel:" +msgstr "Kanál:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Zadat..." + +msgid "Sectors:" +msgstr "Sektory:" + +msgid "Heads:" +msgstr "Hlavy:" + +msgid "Cylinders:" +msgstr "Cylindry:" + +msgid "Size (MB):" +msgstr "Velikost (MB):" + +msgid "Type:" +msgstr "Typ:" + +msgid "Image Format:" +msgstr "Formát obrazu:" + +msgid "Block Size:" +msgstr "Velikost bloků:" + +msgid "Floppy drives:" +msgstr "Disketové mechaniky:" + +msgid "Turbo timings" +msgstr "Turbo časování" + +msgid "Check BPB" +msgstr "Kontrola BPB" + +msgid "CD-ROM drives:" +msgstr "Mechaniky CD-ROM:" + +msgid "MO drives:" +msgstr "Magnetooptické mechaniky:" + +msgid "ZIP drives:" +msgstr "Mechaniky ZIP:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA hodiny:" + +msgid "ISA Memory Expansion" +msgstr "ISA rozšíření paměti" + +msgid "Card 1:" +msgstr "Karta 1:" + +msgid "Card 2:" +msgstr "Karta 2:" + +msgid "Card 3:" +msgstr "Karta 3:" + +msgid "Card 4:" +msgstr "Karta 4:" + +msgid "ISABugger device" +msgstr "Zařízení ISABugger" + +msgid "POST card" +msgstr "Karta pro kódy POST" + +msgid "Segoe UI" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Chyba" + +msgid "Fatal error" +msgstr "Kritická chyba" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Stiskněte Ctrl+Alt+Page Down pro návrat z režimu celé obrazovky." + +msgid "Speed" +msgstr "Rychlost" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgstr "Obrazy ZIP disků (*.IM? *.im? *.ZDI *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." +msgstr "86Box nenalezl žádné použitelné image pamětí ROM.\n\nStáhněte sadu obrazů ROM a extrahujte ji do složky ""roms""." + +msgid "(empty)" +msgstr "(prázdné)" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" +msgstr "Obrazy ZIP disků (*.IM? *.im? *.ZDI *.zdi);;All files (*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Zap." + +msgid "Off" +msgstr "Vyp." + +msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" +msgstr "Všechny obrazy disků (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Základní sektorové obrazy (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Obrazy povrchu (*.86F *.86f)" + +msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Počítač ""%hs"" není dostupný, jelikož chybí obraz jeho paměti ROM ve složce ""roms/machines"". Konfigurace se přepne na jiný dostupný počítač." + +msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Video adaptér ""%hs"" není dostupný, jelikož chybí obraz jeho paměti ROM ve složce ""roms/video"". Konfigurace se přepne na jiný dostupný adaptér." + +msgid "Machine" +msgstr "Počítač" + +msgid "Display" +msgstr "Obraz" + +msgid "Input devices" +msgstr "Vstupní zařízení" + +msgid "Sound" +msgstr "Zvuk" + +msgid "Network" +msgstr "Síť" + +msgid "Ports (COM & LPT)" +msgstr "COM a LPT porty" + +msgid "Storage controllers" +msgstr "Řadiče úložiště" + +msgid "Hard disks" +msgstr "Pevné disky" + +msgid "Floppy & CD-ROM drives" +msgstr "Disketové a CD-ROM mechaniky" + +msgid "Other removable devices" +msgstr "Další vyměnitelná zařízení" + +msgid "Other peripherals" +msgstr "Jiné příslušenství" + +msgid "Surface images (*.86F *.86f)" +msgstr "Obrazy povrchu (*.86F *.86f)" + +msgid "Click to capture mouse" +msgstr "Klikněte pro zabraní myši" + +msgid "Press F8+F12 to release mouse" +msgstr "Stiskněte F8+F12 pro uvolnění myši" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Stiskněte F8+F12 nebo prostřední tlačítko pro uvolnění myši" + +msgid "Unable to initialize FluidSynth" +msgstr "Nastala chyba při inicializaci knihovny FluidSynth." + +msgid "Bus" +msgstr "Sběrnice" + +msgid "File" +msgstr "Soubor" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Nastala chyba při inicializaci video rendereru." + +msgid "Default" +msgstr "Výchozí" + +msgid "%i Wait state(s)" +msgstr "%i čekací stav(y)" + +msgid "Type" +msgstr "Typ" + +msgid "Failed to set up PCap" +msgstr "Nastala chyba při inicializaci knihovny PCap" + +msgid "No PCap devices found" +msgstr "Nebyla nalezena žádná PCap zařízení" + +msgid "Invalid PCap device" +msgstr "Neplatné PCap zařízení" + +msgid "Standard 2-button joystick(s)" +msgstr "Standardní 2tlačítkový joystick" + +msgid "Standard 4-button joystick" +msgstr "Standardní 4tlačítkový joystick" + +msgid "Standard 6-button joystick" +msgstr "Standardní 6tlačítkový joystick" + +msgid "Standard 8-button joystick" +msgstr "Standardní 8tlačítkový joystick" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Žadné" + +msgid "Unable to load keyboard accelerators." +msgstr "Nebylo možné nahrát klávesnicové zkratky." + +msgid "Unable to register raw input." +msgstr "Nebylo možné zaregistrovat raw input." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Disketová mechanika %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgstr "Všechny obrazy (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Rozšířené sektorové obrazy (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Základní sektorové obrazy (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Obrazy magnetického toku (*.FDI *.fdi);;Obrazy povrchu (*.86F *.86f *.MFM *.mfm);;Všechny soubory (*)" + +msgid "Unable to initialize FreeType" +msgstr "Nastala chyba při inicializaci knihovny FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Nastala chyba při inicializaci knihovny SDL, je potřeba SDL2.dll" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Opravdu chcete resetovat emulovaný počítač?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Opravdu chcete ukončit 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Nastala chyba při inicializaci knihovny Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgstr "Obrazy MO (*.IM? *.im? *.MDI *.mdi);;Všechny soubory (*)" + +msgid "Welcome to 86Box!" +msgstr "Vítejte v programu 86Box!" + +msgid "Internal controller" +msgstr "Vestavěný řadič" + +msgid "Exit" +msgstr "Ukončit" + +msgid "No ROMs found" +msgstr "Nebyly nalezeny žádné obrazy ROM" + +msgid "Do you want to save the settings?" +msgstr "Chcete uložit nastavení?" + +msgid "This will hard reset the emulated machine." +msgstr "Pokračováním se resetuje emulovaný počítač." + +msgid "Save" +msgstr "Uložit" + +msgid "About 86Box" +msgstr "O programu 86Box" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Emulátor starých počítačů\n\nAutoři: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nZveřejněno pod licencí GNU General Public License verze 2 nebo novější. Viz soubor LICENSE pro více informací." + +msgid "Hardware not available" +msgstr "Hardware není dostupný" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Ujistěte se, že je nainstalován libpcap a používáte síťové připojení s ním kompatibilní." + +msgid "Invalid configuration" +msgstr "Neplatná konfigurace" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " je potřeba pro emulaci ESC/P tiskáren." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " je potřeba pro automatický převod PostScript dokumentů do PDF.\n\nJakékoliv dokumenty vytisknuté přes obecnou PostScriptovou tiskárnu budou uloženy jako PostScript (.ps) soubory." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " je potřeba pro MIDI výstup přes knihovnu FluidSynth." + +msgid "Entering fullscreen mode" +msgstr "Vstup do režimu celé obrazovky" + +msgid "Don't show this message again" +msgstr "Nezobrazovat dále tuto zprávu" + +msgid "Don't exit" +msgstr "Neukončovat" + +msgid "Reset" +msgstr "Resetovat" + +msgid "Don't reset" +msgstr "Neresetovat" + +msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgstr "Obraz CD-ROM disku (*.ISO *.iso *.CUE *.cue);;Všechny soubory (*)" + +msgid "%hs Device Configuration" +msgstr "Konfigurace zařízení %hs" + +msgid "Monitor in sleep mode" +msgstr "Monitor je v režimu spánku" + +msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" +msgstr "Shadery OpenGL (*.GLSL *.glsl);;All files (*)" + +msgid "OpenGL options" +msgstr "Možnosti OpenGL" + +msgid "You are loading an unsupported configuration" +msgstr "Pokoušíte se spustit nepodporovanou konfiguraci" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "Pro tuto konfiguraci bylo vypnuto filtrování procesorů podle zvoleného počítače.\n\nToto umožňuje zvolit procesor, který by jinak se zvoleným počítačem nebyl kompatibilní. Můžou však nastat potíže s BIOSem nebo jiným softwarem.\n\nPovolení tohoto nastavení není oficiálně podporováno a jakákoliv hlášení o chybách mohou být uzavřeny jako neplatné." + +msgid "Continue" +msgstr "Pokračovat" + +msgid "Cassette: %s" +msgstr "Kazeta: %s" + +msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" +msgstr "Kazetové nahrávky (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Všechny soubory (*)" + +msgid "Cartridge %i: %ls" +msgstr "Cartridge %i: %ls" + +msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" +msgstr "Obrazy cartridge (*.A *.a *.B *.b *.JRC *.jrc);;Všechny soubory (*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Hard disk (%s)" +msgstr "Pevný disk (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "CD-ROM mechaniky pro rozhraní MFM/RLL nebo ESDI nikdy neexistovaly" + +msgid "Custom..." +msgstr "Vlastní..." + +msgid "Custom (large)..." +msgstr "Vlastní (velký)..." + +msgid "Add New Hard Disk" +msgstr "Přidat nový pevný disk" + +msgid "Add Existing Hard Disk" +msgstr "Přidat existující pevný disk" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "Obraz disku formátu HDI nemůžou být větší než 4 GB." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Obraz disku nemůžou být větší než 127 GB." + +msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" +msgstr "Obrazy pevného disku (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Všechny soubory (*)" + +msgid "Unable to read file" +msgstr "Nebylo možné přečíst soubor" + +msgid "Unable to write file" +msgstr "Nebylo možné zapisovat do souboru" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "Obraz disku ve formátu HDI nebo HDX s velikostí sektoru jinou než 512 bajtů nejsou podporovány." + +msgid "USB is not yet supported" +msgstr "USB zatím není podporováno." + +msgid "Disk image file already exists" +msgstr "Soubor obrazu disku již existuje" + +msgid "Please specify a valid file name." +msgstr "Zadejte platný název souboru." + +msgid "Disk image created" +msgstr "Obraz disku byl vytvořen" + +msgid "Make sure the file exists and is readable." +msgstr "Ujistěte se, že soubor existuje a lze jej přečíst." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Ujistěte se, že se do složky, kde se má soubor uložit, dá zapisovat." + +msgid "Disk image too large" +msgstr "Obraz disku je příliš velký" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Nezapomeňte nově vytvořený disk rozdělit a naformátovat." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Zvolený soubor bude přepsán. Opravdu jej chcete použít?" + +msgid "Unsupported disk image" +msgstr "Nepodporovaný obraz disku" + +msgid "Overwrite" +msgstr "Přepsat" + +msgid "Don't overwrite" +msgstr "Nepřepisovat" + +msgid "Raw image (.img)" +msgstr "Surový obraz (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDI obraz (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDX obraz (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD s pevnou velikostí (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD s dynamickou velikostí (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Rozdílový VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Velké bloky (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Malé bloky (512 KB)" + +msgid "VHD files (*.VHD *.vhd);;All files (*)" +msgstr "Soubory VHD (*.VHD *.vhd);;Všechny soubory (*)" + +msgid "Select the parent VHD" +msgstr "Vyberte nadřazený virtuální disk" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "To může znamenat, že se obsahy nadřazeného disku změnily po vytvoření rozdílového disku.\n\nTato chyba také může nastat, pokud byl obraz disku kopírován nebo přesunut, nebo kvůli chybě v programu, který jej vytvořil.\n\nChcete časová razítka opravit?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Časová razítka nadřazeného a podřazeného disku nesouhlasí" + +msgid "Could not fix VHD timestamp." +msgstr "Nebylo možné opravit časové razítko VHD." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (cluster 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (cluster 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5"" 128Mb M.O. (ISO 10090)" +msgstr "3.5"" 128Mb M.O. (ISO 10090)" + +msgid "3.5"" 230Mb M.O. (ISO 13963)" +msgstr "3.5"" 230Mb M.O. (ISO 13963)" + +msgid "3.5"" 540Mb M.O. (ISO 15498)" +msgstr "3.5"" 540Mb M.O. (ISO 15498)" + +msgid "3.5"" 640Mb M.O. (ISO 15498)" +msgstr "3.5"" 640Mb M.O. (ISO 15498)" + +msgid "3.5"" 1.3Gb M.O. (GigaMO)" +msgstr "3.5"" 1.3Gb M.O. (GigaMO)" + +msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25"" 600Mb M.O." +msgstr "5.25"" 600Mb M.O." + +msgid "5.25"" 650Mb M.O." +msgstr "5.25"" 650Mb M.O." + +msgid "5.25"" 1Gb M.O." +msgstr "5.25"" 1Gb M.O." + +msgid "5.25"" 1.3Gb M.O." +msgstr "5.25"" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "Dokonalé otáčky za minutu" + +msgid "1%% below perfect RPM" +msgstr "1%% pod dokonalými ot./m" + +msgid "1.5%% below perfect RPM" +msgstr "1.5%% pod dokonalými ot./m" + +msgid "2%% below perfect RPM" +msgstr "2%% pod dokonalými ot./m" + +msgid "(System Default)" +msgstr "(Výchozí nastavení systému)" + diff --git a/src/qt/languages/de_DE.po b/src/qt/languages/de_DE.po new file mode 100644 index 000000000..8a47369b9 --- /dev/null +++ b/src/qt/languages/de_DE.po @@ -0,0 +1,1173 @@ +msgid "Translated by" +msgstr "Unknown" + +msgid "&Action" +msgstr "&Aktionen" + +msgid "&Keyboard requires capture" +msgstr "&Tastatur benötigt das Einfangen des Mauszeigers" + +msgid "&Right CTRL is left ALT" +msgstr "&Die rechte Strg-Taste ist die Linke Alt-Taste" + +msgid "&Hard Reset..." +msgstr "&Hard-Reset..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Strg+Alt+Entf\tStrg+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Strg+Alt+&Esc" + +msgid "&Pause" +msgstr "&Pause" + +msgid "E&xit..." +msgstr "Be&enden..." + +msgid "&View" +msgstr "&Ansicht" + +msgid "&Hide status bar" +msgstr "&Statusleiste ausblenden" + +msgid "&Resizeable window" +msgstr "&Größenverstellbares Fenster" + +msgid "R&emember size && position" +msgstr "&Größe && Position merken" + +msgid "Re&nderer" +msgstr "Re&nderer" + +msgid "&Qt (Software)" +msgstr "&Qt (Software)" + +msgid "Qt (&Hardware)" +msgstr "Qt (&Hardware)" + +msgid "Qt (&OpenGL)" +msgstr "Qt (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0-Kern)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "Dimensionen spezifizieren..." + +msgid "F&orce 4:3 display ratio" +msgstr "&4:3-Seitenverhältnis erzwingen" + +msgid "&Window scale factor" +msgstr "&Fensterskalierungsfaktor" + +msgid "&0.5x" +msgstr "&0,5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1,&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Filteringmethode" + +msgid "&Nearest" +msgstr "&Nearest" + +msgid "&Linear" +msgstr "&Linear" + +msgid "Hi&DPI scaling" +msgstr "Hi&DPI-Skalierung" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Vollbild\tStrg+Alt+BildAuf" + +msgid "Fullscreen &stretch mode" +msgstr "&Stretching-Modus im Vollbildmodus" + +msgid "&Full screen stretch" +msgstr "&Vollbild-Stretching" + +msgid "&4:3" +msgstr "&4:3-Seitenverhältnis erzwingen" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Quadratische Pixel (Seitenverhältnis beibehalten)" + +msgid "&Integer scale" +msgstr "&Integer-Skalierung" + +msgid "E&GA/(S)VGA settings" +msgstr "E&GA/(S)VGA-Einstellungen" + +msgid "&Inverted VGA monitor" +msgstr "&Invertierte VGA-Anzeige" + +msgid "VGA screen &type" +msgstr "&VGA-Bildschirmtyp" + +msgid "RGB &Color" +msgstr "&RGB-Farbe" + +msgid "&RGB Grayscale" +msgstr "&RGB-Graustufen" + +msgid "&Amber monitor" +msgstr "&Bernstein-Monitor" + +msgid "&Green monitor" +msgstr "&Grüner Monitor" + +msgid "&White monitor" +msgstr "&Weißer Monitor" + +msgid "Grayscale &conversion type" +msgstr "Methode zur &Graustufenkonversion" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Durchschnittsmethode" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "Overscan für CGA/PCjr/Tandy/E&GA/(S)VGA-Displays" + +msgid "Change contrast for &monochrome display" +msgstr "Kontrast für &monochrome Displays ändern" + +msgid "&Media" +msgstr "&Medien" + +msgid "&Tools" +msgstr "&Werkzeuge" + +msgid "&Settings..." +msgstr "&Optionen..." + +msgid "&Update status bar icons" +msgstr "&Statusleistenicons aktualisieren" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "S&creenshot aufnehmen\tStrg+F11" + +msgid "&Preferences..." +msgstr "&Einstellungen..." + +msgid "Enable &Discord integration" +msgstr "&Discord-Integration aktivieren" + +msgid "Sound &gain..." +msgstr "&Schallverstärkung..." + +msgid "Begin trace\tCtrl+T" +msgstr "Tracing starten\tStrg+T" + +msgid "End trace\tCtrl+T" +msgstr "Tracing beenden\tStrg+T" + +msgid "&Logging" +msgstr "&Logging" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "BusLogic-Logs aktivieren\tStrg+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "CD-ROM-Logs aktivieren\tStrg+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Disketten (86F)-Logs aktivieren\tStrg+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Diskettencontroller-Logs aktivieren\tStrg+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "IDE-Logs aktivieren\tStrg+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Seriell-Port-Logs aktivieren\tStrg+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Netzwerk-Logs aktivieren\tStrg+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Breakpoint für die Log-Datei\tStrg+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "&Video-RAM dumpen\tStrg+F1" + +msgid "&Help" +msgstr "&Hilfe" + +msgid "&Documentation..." +msgstr "&Dokumentation..." + +msgid "&About 86Box..." +msgstr "&Über 86Box..." + +msgid "" +msgstr "" + +msgid "&New image..." +msgstr "&Neues Image..." + +msgid "&Existing image..." +msgstr "&Bestehendes Image..." + +msgid "Existing image (&Write-protected)..." +msgstr "Bestehendes Image (&schreibgeschützt)..." + +msgid "&Record" +msgstr "&Aufnehmen" + +msgid "&Play" +msgstr "&Abspielen" + +msgid "&Rewind to the beginning" +msgstr "&An den Anfang zurückspulen" + +msgid "&Fast forward to the end" +msgstr "&An das Ende vorspulen" + +msgid "E&ject" +msgstr "A&uswerfen" + +msgid "&Image..." +msgstr "&Cartridgeimage..." + +msgid "E&xport to 86F..." +msgstr "&In das 86F-Format e&xportieren..." + +msgid "&Mute" +msgstr "&Stummschalten" + +msgid "E&mpty" +msgstr "L&eer" + +msgid "&Reload previous image" +msgstr "&Voriges Image neu laden" + +msgid "&Image" +msgstr "&Image" + +msgid "Target &framerate" +msgstr "Ziel&framerate" + +msgid "&Sync with video" +msgstr "&Mit Videoausgabe synchronisieren" + +msgid "&25 fps" +msgstr "&25 fps" + +msgid "&30 fps" +msgstr "&30 fps" + +msgid "&50 fps" +msgstr "&50 fps" + +msgid "&60 fps" +msgstr "&60 fps" + +msgid "&75 fps" +msgstr "&75 fps" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Shader auswählen..." + +msgid "&Remove shader" +msgstr "&Shader entfernen" + +msgid "Preferences" +msgstr "Einstellungen" + +msgid "Sound Gain" +msgstr "Klangverstärkung" + +msgid "New Image" +msgstr "Neues Image" + +msgid "Settings" +msgstr "Optionen" + +msgid "Specify Main Window Dimensions" +msgstr "Abmessungen des Hauptfensters einstellen" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Abbrechen" + +msgid "Save these settings as &global defaults" +msgstr "Einstellungen als &globalen Standard speichern" + +msgid "&Default" +msgstr "&Standard" + +msgid "Language:" +msgstr "Sprache:" + +msgid "Icon set:" +msgstr "Icon-Satz:" + +msgid "Gain" +msgstr "Verstärkung" + +msgid "File name:" +msgstr "Dateiname:" + +msgid "Disk size:" +msgstr "Plattengröße:" + +msgid "RPM mode:" +msgstr "Drehzahlmodus:" + +msgid "Progress:" +msgstr "Fortschritt:" + +msgid "Width:" +msgstr "Breite:" + +msgid "Height:" +msgstr "Höhe:" + +msgid "Lock to this size" +msgstr "Auf diese Größe festlegen" + +msgid "Machine type:" +msgstr "Maschinentyp:" + +msgid "Machine:" +msgstr "Maschine:" + +msgid "Configure" +msgstr "Einstellen" + +msgid "CPU type:" +msgstr "CPU-Typ:" + +msgid "Speed:" +msgstr "Takt:" + +msgid "FPU:" +msgstr "FPU-Einheit:" + +msgid "Wait states:" +msgstr "Wartezustände:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Hauptspeicher:" + +msgid "Time synchronization" +msgstr "Zeitsynchronisierung" + +msgid "Disabled" +msgstr "Deaktiviert" + +msgid "Enabled (local time)" +msgstr "Aktiviert (Lokale Uhrzeit)" + +msgid "Enabled (UTC)" +msgstr "Aktiviert (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Dynamischer Recompiler" + +msgid "Video:" +msgstr "Videokarte:" + +msgid "Voodoo Graphics" +msgstr "Voodoo-Grafik" + +msgid "Mouse:" +msgstr "Maus:" + +msgid "Joystick:" +msgstr "Joystick:" + +msgid "Joystick 1..." +msgstr "Joystick 1..." + +msgid "Joystick 2..." +msgstr "Joystick 2..." + +msgid "Joystick 3..." +msgstr "Joystick 3..." + +msgid "Joystick 4..." +msgstr "Joystick 4..." + +msgid "Sound card:" +msgstr "Soundkarte:" + +msgid "MIDI Out Device:" +msgstr "MIDI Out-Gerät:" + +msgid "MIDI In Device:" +msgstr "MIDI In-Gerät:" + +msgid "Standalone MPU-401" +msgstr "Standalone-MPU-401-Gerät" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "FLOAT32-Wiedergabe benutzen" + +msgid "Network type:" +msgstr "Netzwerktyp:" + +msgid "PCap device:" +msgstr "PCap-Gerät:" + +msgid "Network adapter:" +msgstr "Netzwerkadapter:" + +msgid "LPT1 Device:" +msgstr "LPT1-Gerät" + +msgid "LPT2 Device:" +msgstr "LPT2-Gerät" + +msgid "LPT3 Device:" +msgstr "LPT3-Gerät" + +msgid "Serial port 1" +msgstr "Serielle Schnittstelle 1" + +msgid "Serial port 2" +msgstr "Serielle Schnittstelle 2" + +msgid "Serial port 3" +msgstr "Serielle Schnittstelle 3" + +msgid "Serial port 4" +msgstr "Serielle Schnittstelle 4" + +msgid "Parallel port 1" +msgstr "Parallelport 1" + +msgid "Parallel port 2" +msgstr "Parallelport 2" + +msgid "Parallel port 3" +msgstr "Parallelport 3" + +msgid "HD Controller:" +msgstr "HDD-Controller:" + +msgid "FD Controller:" +msgstr "FD-Controller:" + +msgid "Tertiary IDE Controller" +msgstr "Tertiärer IDE-Controller" + +msgid "Quaternary IDE Controller" +msgstr "Quartärer IDE-Controller" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Controller 1:" + +msgid "Controller 2:" +msgstr "Controller 2:" + +msgid "Controller 3:" +msgstr "Controller 3:" + +msgid "Controller 4:" +msgstr "Controller 4:" + +msgid "Cassette" +msgstr "Kassette" + +msgid "Hard disks:" +msgstr "Festplatten:" + +msgid "&New..." +msgstr "&Neu..." + +msgid "&Existing..." +msgstr "&Vorhanden..." + +msgid "&Remove" +msgstr "&Entfernen" + +msgid "Bus:" +msgstr "Bus:" + +msgid "Channel:" +msgstr "Kanal:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Festlegen..." + +msgid "Sectors:" +msgstr "Sektoren:" + +msgid "Heads:" +msgstr "Köpfe:" + +msgid "Cylinders:" +msgstr "Zylinder:" + +msgid "Size (MB):" +msgstr "Größe (MB):" + +msgid "Type:" +msgstr "Typ:" + +msgid "Image Format:" +msgstr "Imageformat:" + +msgid "Block Size:" +msgstr "Blockgröße:" + +msgid "Floppy drives:" +msgstr "Diskettenlaufwerke:" + +msgid "Turbo timings" +msgstr "Turbo-Timings" + +msgid "Check BPB" +msgstr "BPB überprüfen" + +msgid "CD-ROM drives:" +msgstr "CD-ROM-Laufwerke:" + +msgid "MO drives:" +msgstr "MO-Laufwerke:" + +msgid "ZIP drives:" +msgstr "ZIP-Laufwerke:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA-Echtzeituhr:" + +msgid "ISA Memory Expansion" +msgstr "ISA-Speichererweiterung" + +msgid "Card 1:" +msgstr "Steckkarte 1:" + +msgid "Card 2:" +msgstr "Steckkarte 2:" + +msgid "Card 3:" +msgstr "Steckkarte 3:" + +msgid "Card 4:" +msgstr "Steckkarte 4:" + +msgid "ISABugger device" +msgstr "ISABugger-Gerät" + +msgid "POST card" +msgstr "POST-Code-Karte" + +msgid "Segoe UI" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Fehler" + +msgid "Fatal error" +msgstr "Fataler Fehler" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Bitte Strg+Alt+Bild ab zur Rückkehr in den Fenstermodus drücken." + +msgid "Speed" +msgstr "Geschwindigkeit" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgstr "ZIP-Images (*.IM? *.im? *.ZDI *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." +msgstr "86Box konnte keine nutzbaren ROM-Dateien finden.\n\nBitte besuchen Sie download, laden ein ROM-Set herunter und extrahieren dies in das ""roms""-Verzeichnis." + +msgid "(empty)" +msgstr "(leer)" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" +msgstr "ZIP-Images (*.IM? *.im? *.ZDI *.zdi);;Alle Dateien (*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "An" + +msgid "Off" +msgstr "Aus" + +msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" +msgstr "Alle Images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basissektorimages (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Oberflächenimages (*.86F *.86f)" + +msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Die Maschine ""%hs"" ist aufgrund von fehlenden ROMs im Verzeichnis roms/machines nicht verfügbar. Es wird auf eine verfügbare Maschine gewechselt." + +msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Die Videokarte ""%hs"" ist aufgrund von fehlenden ROMs im Verzeichnis roms/video nicht verfügbar. Es wird auf eine verfügbare Videokarte gewechselt." + +msgid "Machine" +msgstr "Maschine" + +msgid "Display" +msgstr "Anzeige" + +msgid "Input devices" +msgstr "Eingabegeräte" + +msgid "Sound" +msgstr "Multimedia" + +msgid "Network" +msgstr "Netzwerk" + +msgid "Ports (COM & LPT)" +msgstr "Anschlüsse (COM & LPT)" + +msgid "Storage controllers" +msgstr "Speichercontroller" + +msgid "Hard disks" +msgstr "Festplatten" + +msgid "Floppy & CD-ROM drives" +msgstr "Disketten- & CD-ROM-Laufwerke" + +msgid "Other removable devices" +msgstr "Andere Wechsellaufwerke" + +msgid "Other peripherals" +msgstr "Andere Peripheriegeräte" + +msgid "Surface images (*.86F *.86f)" +msgstr "Oberflächenimages (*.86F *.86f)" + +msgid "Click to capture mouse" +msgstr "Zum Einfangen des Mauszeigers bitte klicken" + +msgid "Press F8+F12 to release mouse" +msgstr "Bitte F8+F12 zur Mausfreigabe drücken" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Bitte F8+F12 oder die mittlere Maustaste zur Mausfreigabe drücken" + +msgid "Unable to initialize FluidSynth" +msgstr "FluidSynth konnte nicht initialisiert werden" + +msgid "Bus" +msgstr "Bus" + +msgid "File" +msgstr "Datei" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Der Videorenderer konnte nicht initialisiert werden." + +msgid "Default" +msgstr "Standard" + +msgid "%i Wait state(s)" +msgstr "%i Wartezustände" + +msgid "Type" +msgstr "Typ" + +msgid "Failed to set up PCap" +msgstr "PCap konnte nicht eingerichtet werden" + +msgid "No PCap devices found" +msgstr "Keine PCap-Geräte gefunden" + +msgid "Invalid PCap device" +msgstr "Ungültiges PCap-Gerät" + +msgid "Standard 2-button joystick(s)" +msgstr "Standard 2-Tasten-Joystick(s)" + +msgid "Standard 4-button joystick" +msgstr "Standard 4-Tasten-Joystick" + +msgid "Standard 6-button joystick" +msgstr "Standard 6-Tasten-Joystick" + +msgid "Standard 8-button joystick" +msgstr "Standard 8-Tasten-Joystick" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Ohne" + +msgid "Unable to load keyboard accelerators." +msgstr "Tastaturbeschleuniger konnten nicht geladen werden." + +msgid "Unable to register raw input." +msgstr "Roheingaben konnten nicht registriert werden." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (ZKS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Diskette %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgstr "Alle Images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Fortgeschrittene Sektorimages (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basissektorimages (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Fluximages (*.FDI *.fdi);;Oberflächenimages (*.86F *.86f *.MFM *.mfm);;Alle Dateien (*)" + +msgid "Unable to initialize FreeType" +msgstr "FreeType konnte nicht initialisiert werden" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "SDL konnte nicht initialisiert werden, die Datei SDL2.dll wird benötigt" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Sind Sie sich sicher, dass Sie einen Hard-Reset für die emulierte Maschine durchführen wollen?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Sind Sie sich sicher, dass Sie 86Box beenden wollen?" + +msgid "Unable to initialize Ghostscript" +msgstr "Ghostscript konnte nicht initialisiert werden" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgstr "MO-Images (*.IM? *.im? *.MDI *.mdi);;Alle Dateien (*)" + +msgid "Welcome to 86Box!" +msgstr "Willkommen bei 86Box!" + +msgid "Internal controller" +msgstr "Interner Controller" + +msgid "Exit" +msgstr "Beenden" + +msgid "No ROMs found" +msgstr "Keine ROMs gefunden" + +msgid "Do you want to save the settings?" +msgstr "Möchten Sie die Einstellungen speichern?" + +msgid "This will hard reset the emulated machine." +msgstr "Dies wird zu einem Hard-Reset der emulierten Maschine führen." + +msgid "Save" +msgstr "Speichern" + +msgid "About 86Box" +msgstr "Über 86Box" + +msgid "86Box v" +msgstr "86Box Version " + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Ein Emulator für alte Computer\n\nAutoren: Sarah Walker, Miran Grča, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho sowie andere.\n\nÜbersetzt von: dob205\n\nVeröffentlicht unter der GNU General Public License in der Version 2 oder neuer. Siehe LICENSE für mehr Informationen." + +msgid "Hardware not available" +msgstr "Hardware nicht verfügbar" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Bitte stellen Sie sicher, dass libpcap installiert ist und sie eine libpcap-kompatible Netzwerkverbindung nutzen." + +msgid "Invalid configuration" +msgstr "Ungültige Konfiguration" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " wird für die ESC/P-Druckeremulation benötigt." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " wird zur automatischen Konversion von PostScript-Dateien in das PDF-Format benötigt.\n\nSämtliche an den generischen PostScript-Drucker gesendete Dateien werden als PostScript (.ps)-Dateien gesichert." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " wird für die FluidSynth-MIDI-Ausgabe benötigt." + +msgid "Entering fullscreen mode" +msgstr "Vollbildmodus wird aktiviert" + +msgid "Don't show this message again" +msgstr "Diese Nachricht nicht mehr anzeigen" + +msgid "Don't exit" +msgstr "Nicht beenden" + +msgid "Reset" +msgstr "Zurücksetzen" + +msgid "Don't reset" +msgstr "Nicht zurücksetzen" + +msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgstr "CD-ROM-Images (*.ISO *.iso *.CUE *.cue);;Alle Dateien (*)" + +msgid "%hs Device Configuration" +msgstr "%hs-Gerätekonfiguration" + +msgid "Monitor in sleep mode" +msgstr "Monitor im Standbymodus" + +msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" +msgstr "OpenGL-Shader (*.GLSL *.glsl);;Alle Dateien (*)" + +msgid "OpenGL options" +msgstr "OpenGL-Optionen" + +msgid "You are loading an unsupported configuration" +msgstr "Sie laden gerade eine nicht unterstützte Konfiguration" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "Das Filtern der CPU-Typen basierend auf der ausgewählten Maschine ist für diese Maschine deaktiviert.\n\nDies ermöglicht es, dass man eine sonst nicht mit der ausgewählten Maschine inkompatible CPU auswählen kann. Allerdings kann dies zu Inkompatiblilitäten mit dem BIOS der Maschine oder anderen Programmen kommen.\n\nDas Aktivieren dieser Einstellung wird nicht unterstützt und sämtliche Bugreports können als ""invalid"" geschlossen werden." + +msgid "Continue" +msgstr "Fortfahren" + +msgid "Cassette: %s" +msgstr "Kassette: %s" + +msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" +msgstr "Kassettenimages (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Alle Dateien (*)" + +msgid "Cartridge %i: %ls" +msgstr "Cartridge %i: %ls" + +msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" +msgstr "Cartridgeimages (*.A *.a *.B *.b *.JRC *.jrc);;Alle Dateien (*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Hard disk (%s)" +msgstr "Festplatte (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL- oder ESDI CD-ROM-Laufwerke hat es niemals gegeben" + +msgid "Custom..." +msgstr "Angepasst..." + +msgid "Custom (large)..." +msgstr "Angepasst (Groß)..." + +msgid "Add New Hard Disk" +msgstr "Neue Festplatte hinzufügen" + +msgid "Add Existing Hard Disk" +msgstr "Bestehende Festplatte hinzufügen" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "HDI-Diskimages können nicht größer als 4 GB groß sein." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Festplattenimages können nicht größer als 127 GB groß sein." + +msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" +msgstr "Festplattenimages (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Alle Dateien (*)" + +msgid "Unable to read file" +msgstr "Die Datei konnte nicht gelesen werden" + +msgid "Unable to write file" +msgstr "Die Datei konnte nicht beschrieben werden" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "HDI- oder HDX-Images mit einer Sektorgröße größer als 512 kB werden nicht unterstützt." + +msgid "USB is not yet supported" +msgstr "USB wird noch nicht unterstützt" + +msgid "Disk image file already exists" +msgstr "Die Festplattenimagedatei existiert bereits" + +msgid "Please specify a valid file name." +msgstr "Bitte geben Sie einen gültigen Dateinamen ein." + +msgid "Disk image created" +msgstr "Disk-Image wurde erstellt" + +msgid "Make sure the file exists and is readable." +msgstr "Bitte stellen Sie sicher, dass die Datei existiert und lesbar ist." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Bitte stellen Sie sicher, dass die Datei in ein Verzeichnis mit Schreibberechtigungen gespeichert wird." + +msgid "Disk image too large" +msgstr "Festplattenimage ist zu groß" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Bitte denken Sie an das Partitionieren und Formatieren des neu erstellten Laufwerks." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Die ausgewählte Datei wird überschrieben. Möchten Sie diese Datei nutzen?" + +msgid "Unsupported disk image" +msgstr "Nicht unterstütztes Festplattenimage" + +msgid "Overwrite" +msgstr "Überschreiben" + +msgid "Don't overwrite" +msgstr "Nicht überschreiben" + +msgid "Raw image (.img)" +msgstr "Rohdatenimages (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDI-Images (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDX-Images (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD mit fester Größe (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD mit dynamischer Größe (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Differenzierende VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Große Blöcke (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Kleine Blöcke (512 KB)" + +msgid "VHD files (*.VHD *.vhd);;All files (*)" +msgstr "VHD-Dateien (*.VHD *.vhd);;Alle Dateien (*)" + +msgid "Select the parent VHD" +msgstr "Eltern-VHD-Datei bitte auswählen" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Dies bedeutet, dass das Elternimage nach der Erstellung des differenzierenden Images erzeugt wurde.\n\nDies kann auch passieren, falls die Image-Dateien verschoben oder kopiert wurden. Ebenso kann auch dies durch einen Bug im Programm, welches das Image erstellt hat, passieren.\n\nMöchten Sie die Zeitstempel korrigieren?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Die Zeitstempel der Eltern- und der Kindesplatte stimmen nicht überein" + +msgid "Could not fix VHD timestamp." +msgstr "Der Zeitstempel der VHD konnte nicht korrigiert werden." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1,2 MB" + +msgid "1.25 MB" +msgstr "1,25 MB" + +msgid "1.44 MB" +msgstr "1,44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (1024 Cluster)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (2048 Cluster)" + +msgid "2.88 MB" +msgstr "2,88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5"" 128Mb M.O. (ISO 10090)" +msgstr "3,5-Zoll 128 MB M.O. (ISO 10090)" + +msgid "3.5"" 230Mb M.O. (ISO 13963)" +msgstr "3,5-Zoll 230 MB M.O. (ISO 13963)" + +msgid "3.5"" 540Mb M.O. (ISO 15498)" +msgstr "3,5-Zoll 540 MB M.O. (ISO 15498)" + +msgid "3.5"" 640Mb M.O. (ISO 15498)" +msgstr "3,5-Zoll 640 MB M.O. (ISO 15498)" + +msgid "3.5"" 1.3Gb M.O. (GigaMO)" +msgstr "3,5-Zoll 1,3 GB M.O. (GigaMO)" + +msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgstr "3,5-Zoll 2,3 GB M.O. (GigaMO 2)" + +msgid "5.25"" 600Mb M.O." +msgstr "5,25-Zoll 600 MB M.O." + +msgid "5.25"" 650Mb M.O." +msgstr "5,25-Zoll 650 MB M.O." + +msgid "5.25"" 1Gb M.O." +msgstr "5,25-Zoll 1 GB M.O." + +msgid "5.25"" 1.3Gb M.O." +msgstr "5,25-Zoll 1,3 GB M.O." + +msgid "Perfect RPM" +msgstr "Perfekte Drehzahl" + +msgid "1%% below perfect RPM" +msgstr "1%% unterhalb der perfekten Drehzahl" + +msgid "1.5%% below perfect RPM" +msgstr "1,5%% unterhalb der perfekten Drehzahl" + +msgid "2%% below perfect RPM" +msgstr "2%% unterhalb der perfekten Drehzahl" + +msgid "(System Default)" +msgstr "(Systemstandard)" + diff --git a/src/qt/languages/en_GB.po b/src/qt/languages/en_GB.po new file mode 100644 index 000000000..35f55f71a --- /dev/null +++ b/src/qt/languages/en_GB.po @@ -0,0 +1,1173 @@ +msgid "Translated by" +msgstr "Unknown" + +msgid "&Action" +msgstr "&Action" + +msgid "&Keyboard requires capture" +msgstr "&Keyboard requires capture" + +msgid "&Right CTRL is left ALT" +msgstr "&Right CTRL is left ALT" + +msgid "&Hard Reset..." +msgstr "&Hard Reset..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Pause" + +msgid "E&xit..." +msgstr "E&xit..." + +msgid "&View" +msgstr "&View" + +msgid "&Hide status bar" +msgstr "&Hide status bar" + +msgid "&Resizeable window" +msgstr "&Resizeable window" + +msgid "R&emember size && position" +msgstr "R&emember size && position" + +msgid "Re&nderer" +msgstr "Re&nderer" + +msgid "&Qt (Software)" +msgstr "&Qt (Software)" + +msgid "Qt (&Hardware)" +msgstr "Qt (&Hardware)" + +msgid "Qt (&OpenGL)" +msgstr "Qt (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 Core)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "Specify dimensions..." + +msgid "F&orce 4:3 display ratio" +msgstr "F&orce 4:3 display ratio" + +msgid "&Window scale factor" +msgstr "&Window scale factor" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Filter method" + +msgid "&Nearest" +msgstr "&Nearest" + +msgid "&Linear" +msgstr "&Linear" + +msgid "Hi&DPI scaling" +msgstr "Hi&DPI scaling" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Fullscreen\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Fullscreen &stretch mode" + +msgid "&Full screen stretch" +msgstr "&Full screen stretch" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Square pixels (Keep ratio)" + +msgid "&Integer scale" +msgstr "&Integer scale" + +msgid "E&GA/(S)VGA settings" +msgstr "E&GA/(S)VGA settings" + +msgid "&Inverted VGA monitor" +msgstr "&Inverted VGA monitor" + +msgid "VGA screen &type" +msgstr "VGA screen &type" + +msgid "RGB &Color" +msgstr "RGB &Colour" + +msgid "&RGB Grayscale" +msgstr "&RGB Greyscale" + +msgid "&Amber monitor" +msgstr "&Amber monitor" + +msgid "&Green monitor" +msgstr "&Green monitor" + +msgid "&White monitor" +msgstr "&White monitor" + +msgid "Grayscale &conversion type" +msgstr "Grayscale &conversion type" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Average" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" + +msgid "Change contrast for &monochrome display" +msgstr "Change contrast for &monochrome display" + +msgid "&Media" +msgstr "&Media" + +msgid "&Tools" +msgstr "&Tools" + +msgid "&Settings..." +msgstr "&Settings..." + +msgid "&Update status bar icons" +msgstr "&Update status bar icons" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Take s&creenshot\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Preferences..." + +msgid "Enable &Discord integration" +msgstr "Enable &Discord integration" + +msgid "Sound &gain..." +msgstr "Sound &gain..." + +msgid "Begin trace\tCtrl+T" +msgstr "Begin trace\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "End trace\tCtrl+T" + +msgid "&Logging" +msgstr "&Logging" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Enable BusLogic logs\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Enable CD-ROM logs\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Enable floppy (86F) logs\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Enable floppy controller logs\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Enable IDE logs\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Enable Serial Port logs\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Enable Network logs\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Log breakpoint\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "Dump &video RAM\tCtrl+F1" + +msgid "&Help" +msgstr "&Help" + +msgid "&Documentation..." +msgstr "&Documentation..." + +msgid "&About 86Box..." +msgstr "&About 86Box..." + +msgid "" +msgstr "" + +msgid "&New image..." +msgstr "&New image..." + +msgid "&Existing image..." +msgstr "&Existing image..." + +msgid "Existing image (&Write-protected)..." +msgstr "Existing image (&Write-protected)..." + +msgid "&Record" +msgstr "&Record" + +msgid "&Play" +msgstr "&Play" + +msgid "&Rewind to the beginning" +msgstr "&Rewind to the beginning" + +msgid "&Fast forward to the end" +msgstr "&Fast forward to the end" + +msgid "E&ject" +msgstr "E&ject" + +msgid "&Image..." +msgstr "&Image..." + +msgid "E&xport to 86F..." +msgstr "E&xport to 86F..." + +msgid "&Mute" +msgstr "&Mute" + +msgid "E&mpty" +msgstr "E&mpty" + +msgid "&Reload previous image" +msgstr "&Reload previous image" + +msgid "&Image" +msgstr "&Image" + +msgid "Target &framerate" +msgstr "Target &framerate" + +msgid "&Sync with video" +msgstr "&Sync with video" + +msgid "&25 fps" +msgstr "&25 fps" + +msgid "&30 fps" +msgstr "&30 fps" + +msgid "&50 fps" +msgstr "&50 fps" + +msgid "&60 fps" +msgstr "&60 fps" + +msgid "&75 fps" +msgstr "&75 fps" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Select shader..." + +msgid "&Remove shader" +msgstr "&Remove shader" + +msgid "Preferences" +msgstr "Preferences" + +msgid "Sound Gain" +msgstr "Sound Gain" + +msgid "New Image" +msgstr "New Image" + +msgid "Settings" +msgstr "Settings" + +msgid "Specify Main Window Dimensions" +msgstr "Specify Main Window Dimensions" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Cancel" + +msgid "Save these settings as &global defaults" +msgstr "Save these settings as &global defaults" + +msgid "&Default" +msgstr "&Default" + +msgid "Language:" +msgstr "Language:" + +msgid "Icon set:" +msgstr "Icon set:" + +msgid "Gain" +msgstr "Gain" + +msgid "File name:" +msgstr "File name:" + +msgid "Disk size:" +msgstr "Disk size:" + +msgid "RPM mode:" +msgstr "RPM mode:" + +msgid "Progress:" +msgstr "Progress:" + +msgid "Width:" +msgstr "Width:" + +msgid "Height:" +msgstr "Height:" + +msgid "Lock to this size" +msgstr "Lock to this size" + +msgid "Machine type:" +msgstr "Machine type:" + +msgid "Machine:" +msgstr "Machine:" + +msgid "Configure" +msgstr "Configure" + +msgid "CPU type:" +msgstr "CPU type:" + +msgid "Speed:" +msgstr "Speed:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "Wait states:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Memory:" + +msgid "Time synchronization" +msgstr "Time synchronization" + +msgid "Disabled" +msgstr "Disabled" + +msgid "Enabled (local time)" +msgstr "Enabled (local time)" + +msgid "Enabled (UTC)" +msgstr "Enabled (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Dynamic Recompiler" + +msgid "Video:" +msgstr "Video:" + +msgid "Voodoo Graphics" +msgstr "Voodoo Graphics" + +msgid "Mouse:" +msgstr "Mouse:" + +msgid "Joystick:" +msgstr "Joystick:" + +msgid "Joystick 1..." +msgstr "Joystick 1..." + +msgid "Joystick 2..." +msgstr "Joystick 2..." + +msgid "Joystick 3..." +msgstr "Joystick 3..." + +msgid "Joystick 4..." +msgstr "Joystick 4..." + +msgid "Sound card:" +msgstr "Sound card:" + +msgid "MIDI Out Device:" +msgstr "MIDI Out Device:" + +msgid "MIDI In Device:" +msgstr "MIDI In Device:" + +msgid "Standalone MPU-401" +msgstr "Standalone MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Use FLOAT32 sound" + +msgid "Network type:" +msgstr "Network type:" + +msgid "PCap device:" +msgstr "PCap device:" + +msgid "Network adapter:" +msgstr "Network adapter:" + +msgid "LPT1 Device:" +msgstr "LPT1 Device:" + +msgid "LPT2 Device:" +msgstr "LPT2 Device:" + +msgid "LPT3 Device:" +msgstr "LPT3 Device:" + +msgid "Serial port 1" +msgstr "Serial port 1" + +msgid "Serial port 2" +msgstr "Serial port 2" + +msgid "Serial port 3" +msgstr "Serial port 3" + +msgid "Serial port 4" +msgstr "Serial port 4" + +msgid "Parallel port 1" +msgstr "Parallel port 1" + +msgid "Parallel port 2" +msgstr "Parallel port 2" + +msgid "Parallel port 3" +msgstr "Parallel port 3" + +msgid "HD Controller:" +msgstr "HD Controller:" + +msgid "FD Controller:" +msgstr "FD Controller:" + +msgid "Tertiary IDE Controller" +msgstr "Tertiary IDE Controller" + +msgid "Quaternary IDE Controller" +msgstr "Quaternary IDE Controller" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Controller 1:" + +msgid "Controller 2:" +msgstr "Controller 2:" + +msgid "Controller 3:" +msgstr "Controller 3:" + +msgid "Controller 4:" +msgstr "Controller 4:" + +msgid "Cassette" +msgstr "Cassette" + +msgid "Hard disks:" +msgstr "Hard disks:" + +msgid "&New..." +msgstr "&New..." + +msgid "&Existing..." +msgstr "&Existing..." + +msgid "&Remove" +msgstr "&Remove" + +msgid "Bus:" +msgstr "Bus:" + +msgid "Channel:" +msgstr "Channel:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Specify..." + +msgid "Sectors:" +msgstr "Sectors:" + +msgid "Heads:" +msgstr "Heads:" + +msgid "Cylinders:" +msgstr "Cylinders:" + +msgid "Size (MB):" +msgstr "Size (MB):" + +msgid "Type:" +msgstr "Type:" + +msgid "Image Format:" +msgstr "Image Format:" + +msgid "Block Size:" +msgstr "Block Size:" + +msgid "Floppy drives:" +msgstr "Floppy drives:" + +msgid "Turbo timings" +msgstr "Turbo timings" + +msgid "Check BPB" +msgstr "Check BPB" + +msgid "CD-ROM drives:" +msgstr "CD-ROM drives:" + +msgid "MO drives:" +msgstr "MO drives:" + +msgid "ZIP drives:" +msgstr "ZIP drives:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA RTC:" + +msgid "ISA Memory Expansion" +msgstr "ISA Memory Expansion" + +msgid "Card 1:" +msgstr "Card 1:" + +msgid "Card 2:" +msgstr "Card 2:" + +msgid "Card 3:" +msgstr "Card 3:" + +msgid "Card 4:" +msgstr "Card 4:" + +msgid "ISABugger device" +msgstr "ISABugger device" + +msgid "POST card" +msgstr "POST card" + +msgid "Segoe UI" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Error" + +msgid "Fatal error" +msgstr "Fatal error" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Press CTRL+ALT+PAGE DOWN to return to windowed mode." + +msgid "Speed" +msgstr "Speed" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgstr "ZIP images (*.IM? *.im? *.ZDI *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." +msgstr "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." + +msgid "(empty)" +msgstr "(empty)" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" +msgstr "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "On" + +msgid "Off" +msgstr "Off" + +msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" +msgstr "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" + +msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." + +msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." + +msgid "Machine" +msgstr "Machine" + +msgid "Display" +msgstr "Display" + +msgid "Input devices" +msgstr "Input devices" + +msgid "Sound" +msgstr "Sound" + +msgid "Network" +msgstr "Network" + +msgid "Ports (COM & LPT)" +msgstr "Ports (COM & LPT)" + +msgid "Storage controllers" +msgstr "Storage controllers" + +msgid "Hard disks" +msgstr "Hard disks" + +msgid "Floppy & CD-ROM drives" +msgstr "Floppy & CD-ROM drives" + +msgid "Other removable devices" +msgstr "Other removable devices" + +msgid "Other peripherals" +msgstr "Other peripherals" + +msgid "Surface images (*.86F *.86f)" +msgstr "Surface images (*.86F *.86f)" + +msgid "Click to capture mouse" +msgstr "Click to capture mouse" + +msgid "Press F8+F12 to release mouse" +msgstr "Press F8+F12 to release mouse" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Press F8+F12 or middle button to release mouse" + +msgid "Unable to initialize FluidSynth" +msgstr "Unable to initialize FluidSynth" + +msgid "Bus" +msgstr "Bus" + +msgid "File" +msgstr "File" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Could not initialize the video renderer." + +msgid "Default" +msgstr "Default" + +msgid "%i Wait state(s)" +msgstr "%i Wait state(s)" + +msgid "Type" +msgstr "Type" + +msgid "Failed to set up PCap" +msgstr "Failed to set up PCap" + +msgid "No PCap devices found" +msgstr "No PCap devices found" + +msgid "Invalid PCap device" +msgstr "Invalid PCap device" + +msgid "Standard 2-button joystick(s)" +msgstr "Standard 2-button joystick(s)" + +msgid "Standard 4-button joystick" +msgstr "Standard 4-button joystick" + +msgid "Standard 6-button joystick" +msgstr "Standard 6-button joystick" + +msgid "Standard 8-button joystick" +msgstr "Standard 8-button joystick" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "None" + +msgid "Unable to load keyboard accelerators." +msgstr "Unable to load keyboard accelerators." + +msgid "Unable to register raw input." +msgstr "Unable to register raw input." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Floppy %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgstr "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" + +msgid "Unable to initialize FreeType" +msgstr "Unable to initialize FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Unable to initialize SDL, SDL2.dll is required" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Are you sure you want to hard reset the emulated machine?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Are you sure you want to exit 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Unable to initialize Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgstr "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" + +msgid "Welcome to 86Box!" +msgstr "Welcome to 86Box!" + +msgid "Internal controller" +msgstr "Internal controller" + +msgid "Exit" +msgstr "Exit" + +msgid "No ROMs found" +msgstr "No ROMs found" + +msgid "Do you want to save the settings?" +msgstr "Do you want to save the settings?" + +msgid "This will hard reset the emulated machine." +msgstr "This will hard reset the emulated machine." + +msgid "Save" +msgstr "Save" + +msgid "About 86Box" +msgstr "About 86Box" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." + +msgid "Hardware not available" +msgstr "Hardware not available" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." + +msgid "Invalid configuration" +msgstr "Invalid configuration" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " is required for ESC/P printer emulation." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " is required for FluidSynth MIDI output." + +msgid "Entering fullscreen mode" +msgstr "Entering fullscreen mode" + +msgid "Don't show this message again" +msgstr "Don't show this message again" + +msgid "Don't exit" +msgstr "Don't exit" + +msgid "Reset" +msgstr "Reset" + +msgid "Don't reset" +msgstr "Don't reset" + +msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgstr "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" + +msgid "%hs Device Configuration" +msgstr "%hs Device Configuration" + +msgid "Monitor in sleep mode" +msgstr "Monitor in sleep mode" + +msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" +msgstr "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" + +msgid "OpenGL options" +msgstr "OpenGL options" + +msgid "You are loading an unsupported configuration" +msgstr "You are loading an unsupported configuration" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." + +msgid "Continue" +msgstr "Continue" + +msgid "Cassette: %s" +msgstr "Cassette: %s" + +msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" +msgstr "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" + +msgid "Cartridge %i: %ls" +msgstr "Cartridge %i: %ls" + +msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" +msgstr "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Hard disk (%s)" +msgstr "Hard disk (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL or ESDI CD-ROM drives never existed" + +msgid "Custom..." +msgstr "Custom..." + +msgid "Custom (large)..." +msgstr "Custom (large)..." + +msgid "Add New Hard Disk" +msgstr "Add New Hard Disk" + +msgid "Add Existing Hard Disk" +msgstr "Add Existing Hard Disk" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "HDI disk images cannot be larger than 4 GB." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Disk images cannot be larger than 127 GB." + +msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" +msgstr "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" + +msgid "Unable to read file" +msgstr "Unable to read file" + +msgid "Unable to write file" +msgstr "Unable to write file" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "HDI or HDX images with a sector size other than 512 are not supported." + +msgid "USB is not yet supported" +msgstr "USB is not yet supported" + +msgid "Disk image file already exists" +msgstr "Disk image file already exists" + +msgid "Please specify a valid file name." +msgstr "Please specify a valid file name." + +msgid "Disk image created" +msgstr "Disk image created" + +msgid "Make sure the file exists and is readable." +msgstr "Make sure the file exists and is readable." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Make sure the file is being saved to a writable directory." + +msgid "Disk image too large" +msgstr "Disk image too large" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Remember to partition and format the newly-created drive." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "The selected file will be overwritten. Are you sure you want to use it?" + +msgid "Unsupported disk image" +msgstr "Unsupported disk image" + +msgid "Overwrite" +msgstr "Overwrite" + +msgid "Don't overwrite" +msgstr "Don't overwrite" + +msgid "Raw image (.img)" +msgstr "Raw image (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDI image (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDX image (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "Fixed-size VHD (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "Dynamic-size VHD (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Differencing VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Large blocks (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Small blocks (512 KB)" + +msgid "VHD files (*.VHD *.vhd);;All files (*)" +msgstr "VHD files (*.VHD *.vhd);;All files (*)" + +msgid "Select the parent VHD" +msgstr "Select the parent VHD" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Parent and child disk timestamps do not match" + +msgid "Could not fix VHD timestamp." +msgstr "Could not fix VHD timestamp." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (cluster 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (cluster 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5"" 128Mb M.O. (ISO 10090)" +msgstr "3.5"" 128Mb M.O. (ISO 10090)" + +msgid "3.5"" 230Mb M.O. (ISO 13963)" +msgstr "3.5"" 230Mb M.O. (ISO 13963)" + +msgid "3.5"" 540Mb M.O. (ISO 15498)" +msgstr "3.5"" 540Mb M.O. (ISO 15498)" + +msgid "3.5"" 640Mb M.O. (ISO 15498)" +msgstr "3.5"" 640Mb M.O. (ISO 15498)" + +msgid "3.5"" 1.3Gb M.O. (GigaMO)" +msgstr "3.5"" 1.3Gb M.O. (GigaMO)" + +msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25"" 600Mb M.O." +msgstr "5.25"" 600Mb M.O." + +msgid "5.25"" 650Mb M.O." +msgstr "5.25"" 650Mb M.O." + +msgid "5.25"" 1Gb M.O." +msgstr "5.25"" 1Gb M.O." + +msgid "5.25"" 1.3Gb M.O." +msgstr "5.25"" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "Perfect RPM" + +msgid "1%% below perfect RPM" +msgstr "1%% below perfect RPM" + +msgid "1.5%% below perfect RPM" +msgstr "1.5%% below perfect RPM" + +msgid "2%% below perfect RPM" +msgstr "2%% below perfect RPM" + +msgid "(System Default)" +msgstr "(System Default)" + diff --git a/src/qt/languages/en_GB.ts b/src/qt/languages/en_GB.ts new file mode 100644 index 000000000..4641a7ead --- /dev/null +++ b/src/qt/languages/en_GB.ts @@ -0,0 +1,1599 @@ + + + + + + + Translated by + Unknown + + + &Action + &Action + + + &Keyboard requires capture + &Keyboard requires capture + + + &Right CTRL is left ALT + &Right CTRL is left ALT + + + &Hard Reset... + &Hard Reset... + + + &Ctrl+Alt+Del Ctrl+F12 + &Ctrl+Alt+Del Ctrl+F12 + + + Ctrl+Alt+&Esc + Ctrl+Alt+&Esc + + + &Pause + &Pause + + + E&xit... + E&xit... + + + &View + &View + + + &Hide status bar + &Hide status bar + + + &Resizeable window + &Resizeable window + + + R&emember size && position + R&emember size && position + + + Re&nderer + Re&nderer + + + &Qt (Software) + &Qt (Software) + + + Qt (&Hardware) + Qt (&Hardware) + + + Qt (&OpenGL) + Qt (&OpenGL) + + + Open&GL (3.0 Core) + Open&GL (3.0 Core) + + + &VNC + &VNC + + + Specify dimensions... + Specify dimensions... + + + F&orce 4:3 display ratio + F&orce 4:3 display ratio + + + &Window scale factor + &Window scale factor + + + &0.5x + &0.5x + + + &1x + &1x + + + 1.&5x + 1.&5x + + + &2x + &2x + + + Filter method + Filter method + + + &Nearest + &Nearest + + + &Linear + &Linear + + + Hi&DPI scaling + Hi&DPI scaling + + + &Fullscreen Ctrl+Alt+PageUP + &Fullscreen Ctrl+Alt+PageUP + + + Fullscreen &stretch mode + Fullscreen &stretch mode + + + &Full screen stretch + &Full screen stretch + + + &4:3 + &4:3 + + + &Square pixels (Keep ratio) + &Square pixels (Keep ratio) + + + &Integer scale + &Integer scale + + + E&GA/(S)VGA settings + E&GA/(S)VGA settings + + + &Inverted VGA monitor + &Inverted VGA monitor + + + VGA screen &type + VGA screen &type + + + RGB &Color + RGB &Colour + + + &RGB Grayscale + &RGB Greyscale + + + &Amber monitor + &Amber monitor + + + &Green monitor + &Green monitor + + + &White monitor + &White monitor + + + Grayscale &conversion type + Grayscale &conversion type + + + BT&601 (NTSC/PAL) + BT&601 (NTSC/PAL) + + + BT&709 (HDTV) + BT&709 (HDTV) + + + &Average + &Average + + + CGA/PCjr/Tandy/E&GA/(S)VGA overscan + CGA/PCjr/Tandy/E&GA/(S)VGA overscan + + + Change contrast for &monochrome display + Change contrast for &monochrome display + + + &Media + &Media + + + &Tools + &Tools + + + &Settings... + &Settings... + + + &Update status bar icons + &Update status bar icons + + + Take s&creenshot Ctrl+F11 + Take s&creenshot Ctrl+F11 + + + &Preferences... + &Preferences... + + + Enable &Discord integration + Enable &Discord integration + + + Sound &gain... + Sound &gain... + + + Begin trace Ctrl+T + Begin trace Ctrl+T + + + End trace Ctrl+T + End trace Ctrl+T + + + &Logging + &Logging + + + Enable BusLogic logs Ctrl+F4 + Enable BusLogic logs Ctrl+F4 + + + Enable CD-ROM logs Ctrl+F5 + Enable CD-ROM logs Ctrl+F5 + + + Enable floppy (86F) logs Ctrl+F6 + Enable floppy (86F) logs Ctrl+F6 + + + Enable floppy controller logs Ctrl+F7 + Enable floppy controller logs Ctrl+F7 + + + Enable IDE logs Ctrl+F8 + Enable IDE logs Ctrl+F8 + + + Enable Serial Port logs Ctrl+F3 + Enable Serial Port logs Ctrl+F3 + + + Enable Network logs Ctrl+F9 + Enable Network logs Ctrl+F9 + + + &Log breakpoint Ctrl+F10 + &Log breakpoint Ctrl+F10 + + + Dump &video RAM Ctrl+F1 + Dump &video RAM Ctrl+F1 + + + &Help + &Help + + + &Documentation... + &Documentation... + + + &About 86Box... + &About 86Box... + + + &New image... + &New image... + + + &Existing image... + &Existing image... + + + Existing image (&Write-protected)... + Existing image (&Write-protected)... + + + &Record + &Record + + + &Play + &Play + + + &Rewind to the beginning + &Rewind to the beginning + + + &Fast forward to the end + &Fast forward to the end + + + E&ject + E&ject + + + &Image... + &Image... + + + E&xport to 86F... + E&xport to 86F... + + + &Mute + &Mute + + + E&mpty + E&mpty + + + &Reload previous image + &Reload previous image + + + &Image + &Image + + + Target &framerate + Target &framerate + + + &Sync with video + &Sync with video + + + &25 fps + &25 fps + + + &30 fps + &30 fps + + + &50 fps + &50 fps + + + &60 fps + &60 fps + + + &75 fps + &75 fps + + + &VSync + &VSync + + + &Select shader... + &Select shader... + + + &Remove shader + &Remove shader + + + Preferences + Preferences + + + Sound Gain + Sound Gain + + + New Image + New Image + + + Settings + Settings + + + Specify Main Window Dimensions + Specify Main Window Dimensions + + + OK + OK + + + Cancel + Cancel + + + Save these settings as &global defaults + Save these settings as &global defaults + + + &Default + &Default + + + Language: + Language: + + + Icon set: + Icon set: + + + Gain + Gain + + + File name: + File name: + + + Disk size: + Disk size: + + + RPM mode: + RPM mode: + + + Progress: + Progress: + + + Width: + Width: + + + Height: + Height: + + + Lock to this size + Lock to this size + + + Machine type: + Machine type: + + + Machine: + Machine: + + + Configure + Configure + + + CPU type: + CPU type: + + + Speed: + Speed: + + + FPU: + FPU: + + + Wait states: + Wait states: + + + MB + MB + + + Memory: + Memory: + + + Time synchronization + Time synchronization + + + Disabled + Disabled + + + Enabled (local time) + Enabled (local time) + + + Enabled (UTC) + Enabled (UTC) + + + Dynamic Recompiler + Dynamic Recompiler + + + Video: + Video: + + + Voodoo Graphics + Voodoo Graphics + + + Mouse: + Mouse: + + + Joystick: + Joystick: + + + Joystick 1... + Joystick 1... + + + Joystick 2... + Joystick 2... + + + Joystick 3... + Joystick 3... + + + Joystick 4... + Joystick 4... + + + Sound card: + Sound card: + + + MIDI Out Device: + MIDI Out Device: + + + MIDI In Device: + MIDI In Device: + + + Standalone MPU-401 + Standalone MPU-401 + + + Innovation SSI-2001 + Innovation SSI-2001 + + + CMS / Game Blaster + CMS / Game Blaster + + + Gravis Ultrasound + Gravis Ultrasound + + + Use FLOAT32 sound + Use FLOAT32 sound + + + Network type: + Network type: + + + PCap device: + PCap device: + + + Network adapter: + Network adapter: + + + LPT1 Device: + LPT1 Device: + + + LPT2 Device: + LPT2 Device: + + + LPT3 Device: + LPT3 Device: + + + Serial port 1 + Serial port 1 + + + Serial port 2 + Serial port 2 + + + Serial port 3 + Serial port 3 + + + Serial port 4 + Serial port 4 + + + Parallel port 1 + Parallel port 1 + + + Parallel port 2 + Parallel port 2 + + + Parallel port 3 + Parallel port 3 + + + HD Controller: + HD Controller: + + + FD Controller: + FD Controller: + + + Tertiary IDE Controller + Tertiary IDE Controller + + + Quaternary IDE Controller + Quaternary IDE Controller + + + SCSI + SCSI + + + Controller 1: + Controller 1: + + + Controller 2: + Controller 2: + + + Controller 3: + Controller 3: + + + Controller 4: + Controller 4: + + + Cassette + Cassette + + + Hard disks: + Hard disks: + + + &New... + &New... + + + &Existing... + &Existing... + + + &Remove + &Remove + + + Bus: + Bus: + + + Channel: + Channel: + + + ID: + ID: + + + &Specify... + &Specify... + + + Sectors: + Sectors: + + + Heads: + Heads: + + + Cylinders: + Cylinders: + + + Size (MB): + Size (MB): + + + Type: + Type: + + + Image Format: + Image Format: + + + Block Size: + Block Size: + + + Floppy drives: + Floppy drives: + + + Turbo timings + Turbo timings + + + Check BPB + Check BPB + + + CD-ROM drives: + CD-ROM drives: + + + MO drives: + MO drives: + + + ZIP drives: + ZIP drives: + + + ZIP 250 + ZIP 250 + + + ISA RTC: + ISA RTC: + + + ISA Memory Expansion + ISA Memory Expansion + + + Card 1: + Card 1: + + + Card 2: + Card 2: + + + Card 3: + Card 3: + + + Card 4: + Card 4: + + + ISABugger device + ISABugger device + + + POST card + POST card + + + Segoe UI + Segoe UI + + + 86Box + 86Box + + + Error + Error + + + Fatal error + Fatal error + + + <reserved> + <reserved> + + + Press CTRL+ALT+PAGE DOWN to return to windowed mode. + Press CTRL+ALT+PAGE DOWN to return to windowed mode. + + + Speed + Speed + + + ZIP %03i %i (%s): %ls + ZIP %03i %i (%s): %ls + + + ZIP images (*.IM? *.im? *.ZDI *.zdi) + ZIP images (*.IM? *.im? *.ZDI *.zdi) + + + 86Box could not find any usable ROM images. + +Please <a href=https://github.com/86Box/roms/releases/latest>download</a> a ROM set and extract it into the roms directory. + 86Box could not find any usable ROM images. + +Please <a href=https://github.com/86Box/roms/releases/latest>download</a> a ROM set and extract it into the roms directory. + + + (empty) + (empty) + + + ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*) + ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*) + + + Turbo + Turbo + + + On + On + + + Off + Off + + + All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f) + All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f) + + + Machine %hs is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. + Machine %hs is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. + + + Video card %hs is not available due to missing ROMs in the roms/video directory. Switching to an available video card. + Video card %hs is not available due to missing ROMs in the roms/video directory. Switching to an available video card. + + + Machine + Machine + + + Display + Display + + + Input devices + Input devices + + + Sound + Sound + + + Network + Network + + + Ports (COM & LPT) + Ports (COM & LPT) + + + Storage controllers + Storage controllers + + + Hard disks + Hard disks + + + Floppy & CD-ROM drives + Floppy & CD-ROM drives + + + Other removable devices + Other removable devices + + + Other peripherals + Other peripherals + + + Surface images (*.86F *.86f) + Surface images (*.86F *.86f) + + + Click to capture mouse + Click to capture mouse + + + Press F8+F12 to release mouse + Press F8+F12 to release mouse + + + Press F8+F12 or middle button to release mouse + Press F8+F12 or middle button to release mouse + + + Unable to initialize FluidSynth + Unable to initialize FluidSynth + + + Bus + Bus + + + File + File + + + C + C + + + H + H + + + S + S + + + KB + KB + + + Could not initialize the video renderer. + Could not initialize the video renderer. + + + Default + Default + + + %i Wait state(s) + %i Wait state(s) + + + Type + Type + + + Failed to set up PCap + Failed to set up PCap + + + No PCap devices found + No PCap devices found + + + Invalid PCap device + Invalid PCap device + + + Standard 2-button joystick(s) + Standard 2-button joystick(s) + + + Standard 4-button joystick + Standard 4-button joystick + + + Standard 6-button joystick + Standard 6-button joystick + + + Standard 8-button joystick + Standard 8-button joystick + + + CH Flightstick Pro + CH Flightstick Pro + + + Microsoft SideWinder Pad + Microsoft SideWinder Pad + + + Thrustmaster Flight Control System + Thrustmaster Flight Control System + + + None + None + + + Unable to load keyboard accelerators. + Unable to load keyboard accelerators. + + + Unable to register raw input. + Unable to register raw input. + + + %u + %u + + + %u MB (CHS: %i, %i, %i) + %u MB (CHS: %i, %i, %i) + + + Floppy %i (%s): %ls + Floppy %i (%s): %ls + + + All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) + All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) + + + Unable to initialize FreeType + Unable to initialize FreeType + + + Unable to initialize SDL, SDL2.dll is required + Unable to initialize SDL, SDL2.dll is required + + + Are you sure you want to hard reset the emulated machine? + Are you sure you want to hard reset the emulated machine? + + + Are you sure you want to exit 86Box? + Are you sure you want to exit 86Box? + + + Unable to initialize Ghostscript + Unable to initialize Ghostscript + + + MO %i (%ls): %ls + MO %i (%ls): %ls + + + MO images (*.IM? *.im? *.MDI *.mdi);;All files (*) + MO images (*.IM? *.im? *.MDI *.mdi);;All files (*) + + + Welcome to 86Box! + Welcome to 86Box! + + + Internal controller + Internal controller + + + Exit + Exit + + + No ROMs found + No ROMs found + + + Do you want to save the settings? + Do you want to save the settings? + + + This will hard reset the emulated machine. + This will hard reset the emulated machine. + + + Save + Save + + + About 86Box + About 86Box + + + 86Box v + 86Box v + + + An emulator of old computers + +Authors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others. + +Released under the GNU General Public License version 2 or later. See LICENSE for more information. + An emulator of old computers + +Authors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others. + +Released under the GNU General Public License version 2 or later. See LICENSE for more information. + + + Hardware not available + Hardware not available + + + WinPcap + WinPcap + + + libpcap + libpcap + + + Make sure libpcap is installed and that you are on a libpcap-compatible network connection. + Make sure libpcap is installed and that you are on a libpcap-compatible network connection. + + + Invalid configuration + Invalid configuration + + + freetype.dll + freetype.dll + + + libfreetype + libfreetype + + + is required for ESC/P printer emulation. + is required for ESC/P printer emulation. + + + gsdll32.dll + gsdll32.dll + + + libgs + libgs + + + is required for automatic conversion of PostScript files to PDF. + +Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. + is required for automatic conversion of PostScript files to PDF. + +Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. + + + libfluidsynth.dll + libfluidsynth.dll + + + libfluidsynth + libfluidsynth + + + is required for FluidSynth MIDI output. + is required for FluidSynth MIDI output. + + + Entering fullscreen mode + Entering fullscreen mode + + + Don't show this message again + Don't show this message again + + + Don't exit + Don't exit + + + Reset + Reset + + + Don't reset + Don't reset + + + CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*) + CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*) + + + %hs Device Configuration + %hs Device Configuration + + + Monitor in sleep mode + Monitor in sleep mode + + + OpenGL Shaders (*.GLSL *.glsl);;All files (*) + OpenGL Shaders (*.GLSL *.glsl);;All files (*) + + + OpenGL options + OpenGL options + + + You are loading an unsupported configuration + You are loading an unsupported configuration + + + CPU type filtering based on selected machine is disabled for this emulated machine. + +This makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software. + +Enabling this setting is not officially supported and any bug reports filed may be closed as invalid. + CPU type filtering based on selected machine is disabled for this emulated machine. + +This makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software. + +Enabling this setting is not officially supported and any bug reports filed may be closed as invalid. + + + Continue + Continue + + + Cassette: %s + Cassette: %s + + + Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*) + Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*) + + + Cartridge %i: %ls + Cartridge %i: %ls + + + Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*) + Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*) + + + Error initializing renderer + Error initializing renderer + + + OpenGL (3.0 Core) renderer could not be initialized. Use another renderer. + OpenGL (3.0 Core) renderer could not be initialized. Use another renderer. + + + Hard disk (%s) + Hard disk (%s) + + + %01i:%01i + %01i:%01i + + + %01i + %01i + + + MFM/RLL or ESDI CD-ROM drives never existed + MFM/RLL or ESDI CD-ROM drives never existed + + + Custom... + Custom... + + + Custom (large)... + Custom (large)... + + + Add New Hard Disk + Add New Hard Disk + + + Add Existing Hard Disk + Add Existing Hard Disk + + + HDI disk images cannot be larger than 4 GB. + HDI disk images cannot be larger than 4 GB. + + + Disk images cannot be larger than 127 GB. + Disk images cannot be larger than 127 GB. + + + Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*) + Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*) + + + Unable to read file + Unable to read file + + + Unable to write file + Unable to write file + + + HDI or HDX images with a sector size other than 512 are not supported. + HDI or HDX images with a sector size other than 512 are not supported. + + + USB is not yet supported + USB is not yet supported + + + Disk image file already exists + Disk image file already exists + + + Please specify a valid file name. + Please specify a valid file name. + + + Disk image created + Disk image created + + + Make sure the file exists and is readable. + Make sure the file exists and is readable. + + + Make sure the file is being saved to a writable directory. + Make sure the file is being saved to a writable directory. + + + Disk image too large + Disk image too large + + + Remember to partition and format the newly-created drive. + Remember to partition and format the newly-created drive. + + + The selected file will be overwritten. Are you sure you want to use it? + The selected file will be overwritten. Are you sure you want to use it? + + + Unsupported disk image + Unsupported disk image + + + Overwrite + Overwrite + + + Don't overwrite + Don't overwrite + + + Raw image (.img) + Raw image (.img) + + + HDI image (.hdi) + HDI image (.hdi) + + + HDX image (.hdx) + HDX image (.hdx) + + + Fixed-size VHD (.vhd) + Fixed-size VHD (.vhd) + + + Dynamic-size VHD (.vhd) + Dynamic-size VHD (.vhd) + + + Differencing VHD (.vhd) + Differencing VHD (.vhd) + + + Large blocks (2 MB) + Large blocks (2 MB) + + + Small blocks (512 KB) + Small blocks (512 KB) + + + VHD files (*.VHD *.vhd);;All files (*) + VHD files (*.VHD *.vhd);;All files (*) + + + Select the parent VHD + Select the parent VHD + + + This could mean that the parent image was modified after the differencing image was created. + +It can also happen if the image files were moved or copied, or by a bug in the program that created this disk. + +Do you want to fix the timestamps? + This could mean that the parent image was modified after the differencing image was created. + +It can also happen if the image files were moved or copied, or by a bug in the program that created this disk. + +Do you want to fix the timestamps? + + + Parent and child disk timestamps do not match + Parent and child disk timestamps do not match + + + Could not fix VHD timestamp. + Could not fix VHD timestamp. + + + %01i:%02i + %01i:%02i + + + MFM/RLL + MFM/RLL + + + XTA + XTA + + + ESDI + ESDI + + + IDE + IDE + + + ATAPI + ATAPI + + + MFM/RLL (%01i:%01i) + MFM/RLL (%01i:%01i) + + + XTA (%01i:%01i) + XTA (%01i:%01i) + + + ESDI (%01i:%01i) + ESDI (%01i:%01i) + + + IDE (%01i:%01i) + IDE (%01i:%01i) + + + ATAPI (%01i:%01i) + ATAPI (%01i:%01i) + + + SCSI (%01i:%02i) + SCSI (%01i:%02i) + + + CD-ROM %i (%s): %s + CD-ROM %i (%s): %s + + + 160 kB + 160 kB + + + 180 kB + 180 kB + + + 320 kB + 320 kB + + + 360 kB + 360 kB + + + 640 kB + 640 kB + + + 720 kB + 720 kB + + + 1.2 MB + 1.2 MB + + + 1.25 MB + 1.25 MB + + + 1.44 MB + 1.44 MB + + + DMF (cluster 1024) + DMF (cluster 1024) + + + DMF (cluster 2048) + DMF (cluster 2048) + + + 2.88 MB + 2.88 MB + + + ZIP 100 + ZIP 100 + + + 3.5 128Mb M.O. (ISO 10090) + 3.5 128Mb M.O. (ISO 10090) + + + 3.5 230Mb M.O. (ISO 13963) + 3.5 230Mb M.O. (ISO 13963) + + + 3.5 540Mb M.O. (ISO 15498) + 3.5 540Mb M.O. (ISO 15498) + + + 3.5 640Mb M.O. (ISO 15498) + 3.5 640Mb M.O. (ISO 15498) + + + 3.5 1.3Gb M.O. (GigaMO) + 3.5 1.3Gb M.O. (GigaMO) + + + 3.5 2.3Gb M.O. (GigaMO 2) + 3.5 2.3Gb M.O. (GigaMO 2) + + + 5.25 600Mb M.O. + 5.25 600Mb M.O. + + + 5.25 650Mb M.O. + 5.25 650Mb M.O. + + + 5.25 1Gb M.O. + 5.25 1Gb M.O. + + + 5.25 1.3Gb M.O. + 5.25 1.3Gb M.O. + + + Perfect RPM + Perfect RPM + + + 1%% below perfect RPM + 1%% below perfect RPM + + + 1.5%% below perfect RPM + 1.5%% below perfect RPM + + + 2%% below perfect RPM + 2%% below perfect RPM + + + (System Default) + (System Default) + + + diff --git a/src/qt/languages/es_ES.po b/src/qt/languages/es_ES.po new file mode 100644 index 000000000..4f3cc2c99 --- /dev/null +++ b/src/qt/languages/es_ES.po @@ -0,0 +1,1173 @@ +msgid "Translated by" +msgstr "Unknown" + +msgid "&Action" +msgstr "&Acción" + +msgid "&Keyboard requires capture" +msgstr "&Teclado requiere captura" + +msgid "&Right CTRL is left ALT" +msgstr "CTRL &derecho es ALT izquierdo" + +msgid "&Hard Reset..." +msgstr "&Hard Reset..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Pausa" + +msgid "E&xit..." +msgstr "&Salir..." + +msgid "&View" +msgstr "&Vista" + +msgid "&Hide status bar" +msgstr "&Ocultar barra de estado" + +msgid "&Resizeable window" +msgstr "&Ventana redimensionable" + +msgid "R&emember size && position" +msgstr "&Recordar tamaño y posición" + +msgid "Re&nderer" +msgstr "Re&nderizador" + +msgid "&Qt (Software)" +msgstr "&Qt (Software)" + +msgid "Qt (&Hardware)" +msgstr "Qt (&Hardware)" + +msgid "Qt (&OpenGL)" +msgstr "Qt (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 Core)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "E&specificar dimensiones..." + +msgid "F&orce 4:3 display ratio" +msgstr "F&orzar ratio 4:3" + +msgid "&Window scale factor" +msgstr "&Factor de escalado de ventana" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "&Método de filtrado" + +msgid "&Nearest" +msgstr "&Más cercano" + +msgid "&Linear" +msgstr "&Lineal" + +msgid "Hi&DPI scaling" +msgstr "&Escalado alta densidad" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Pantalla completa\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Escalado pantalla completa" + +msgid "&Full screen stretch" +msgstr "&Estirar" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Píxeles cuadrados (Mant. aspecto)" + +msgid "&Integer scale" +msgstr "&Escalado valor entero" + +msgid "E&GA/(S)VGA settings" +msgstr "&Ajustes EGA/(S)VGA" + +msgid "&Inverted VGA monitor" +msgstr "&Monitor VGA invertido" + +msgid "VGA screen &type" +msgstr "&Tipo de pantalla VGA" + +msgid "RGB &Color" +msgstr "RGB &Color" + +msgid "&RGB Grayscale" +msgstr "RGB &Grises" + +msgid "&Amber monitor" +msgstr "Monitor &Ámbar" + +msgid "&Green monitor" +msgstr "Monitor &Verde" + +msgid "&White monitor" +msgstr "Monitor &Blanco" + +msgid "Grayscale &conversion type" +msgstr "&Conversión a grises" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Media" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "&Overscan CGA/PCjr/Tandy/EGA/(S)VGA" + +msgid "Change contrast for &monochrome display" +msgstr "Cambiar contraste para pantalla &monocroma" + +msgid "&Media" +msgstr "&Medios" + +msgid "&Tools" +msgstr "&Herramientas" + +msgid "&Settings..." +msgstr "&Ajustes..." + +msgid "&Update status bar icons" +msgstr "&Actualizar iconos en barra de estado" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Tomar c&aptura\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Preferencias..." + +msgid "Enable &Discord integration" +msgstr "Habilitar integración con &Discord" + +msgid "Sound &gain..." +msgstr "&Ganancia de sonido..." + +msgid "Begin trace\tCtrl+T" +msgstr "Comenzar traza\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Terminar traza\tCtrl+T" + +msgid "&Logging" +msgstr "&Trazas" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Habilitar trazas de BusLogic\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Habilitar trazas de CD-ROM\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Habilitar trazas de disquete (86F)\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Habilitar trazas de controladora de disquete\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Habilitar trazas de IDE\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Habilitar trazas de Puerto Serie\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Habilitar trazas de Red\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Punto de ruptura de traza\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "Volcar RAM de &video\tCtrl+F1" + +msgid "&Help" +msgstr "&Ayuda" + +msgid "&Documentation..." +msgstr "&Documentación..." + +msgid "&About 86Box..." +msgstr "&Acerca de 86Box..." + +msgid "" +msgstr "" + +msgid "&New image..." +msgstr "&Nueva imagen..." + +msgid "&Existing image..." +msgstr "Imagen &Existente..." + +msgid "Existing image (&Write-protected)..." +msgstr "Imagen Existente (&Sólo-lectura)..." + +msgid "&Record" +msgstr "&Grabar" + +msgid "&Play" +msgstr "&Reproducir" + +msgid "&Rewind to the beginning" +msgstr "&Rebobinar al inicio" + +msgid "&Fast forward to the end" +msgstr "&Avance rápido al final" + +msgid "E&ject" +msgstr "E&xtraer" + +msgid "&Image..." +msgstr "&Imagen..." + +msgid "E&xport to 86F..." +msgstr "E&xportar a 86F..." + +msgid "&Mute" +msgstr "&Silenciar" + +msgid "E&mpty" +msgstr "E&xtraer disco" + +msgid "&Reload previous image" +msgstr "&Recargar imagen previa" + +msgid "&Image" +msgstr "&Imagen..." + +msgid "Target &framerate" +msgstr "&Tasa de refresco objetivo" + +msgid "&Sync with video" +msgstr "&Sincronizar con vídeo" + +msgid "&25 fps" +msgstr "&25 fps" + +msgid "&30 fps" +msgstr "&30 fps" + +msgid "&50 fps" +msgstr "&50 fps" + +msgid "&60 fps" +msgstr "&60 fps" + +msgid "&75 fps" +msgstr "&75 fps" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Seleccionar shader..." + +msgid "&Remove shader" +msgstr "&Eliminar shader" + +msgid "Preferences" +msgstr "Preferencias" + +msgid "Sound Gain" +msgstr "Ganancia de Sonido" + +msgid "New Image" +msgstr "Nueva Imagen" + +msgid "Settings" +msgstr "Ajustes" + +msgid "Specify Main Window Dimensions" +msgstr "Especificar Dimensiones de la Ventana Principal" + +msgid "OK" +msgstr "Aceptar" + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Save these settings as &global defaults" +msgstr "Salvar estos ajustes como por &defecto globalmente" + +msgid "&Default" +msgstr "&Por defecto" + +msgid "Language:" +msgstr "Idioma:" + +msgid "Icon set:" +msgstr "Juego de iconos:" + +msgid "Gain" +msgstr "Ganancia" + +msgid "File name:" +msgstr "Nombre de archivo:" + +msgid "Disk size:" +msgstr "Tamaño de disco:" + +msgid "RPM mode:" +msgstr "Modo RPM:" + +msgid "Progress:" +msgstr "Progreso:" + +msgid "Width:" +msgstr "Ancho:" + +msgid "Height:" +msgstr "Alto:" + +msgid "Lock to this size" +msgstr "Bloquear a este tamaño" + +msgid "Machine type:" +msgstr "Tipo de máquina:" + +msgid "Machine:" +msgstr "Máquina:" + +msgid "Configure" +msgstr "Configurar" + +msgid "CPU type:" +msgstr "Tipo de CPU:" + +msgid "Speed:" +msgstr "Velocidad:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "Estados en espera:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Memoria:" + +msgid "Time synchronization" +msgstr "Sincronización horaria" + +msgid "Disabled" +msgstr "Deshabilitado" + +msgid "Enabled (local time)" +msgstr "Habilitado (hora local)" + +msgid "Enabled (UTC)" +msgstr "Habilitado (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Recompilador Dinámico" + +msgid "Video:" +msgstr "Vídeo:" + +msgid "Voodoo Graphics" +msgstr "Voodoo Graphics" + +msgid "Mouse:" +msgstr "Ratón:" + +msgid "Joystick:" +msgstr "Mando:" + +msgid "Joystick 1..." +msgstr "Mando 1..." + +msgid "Joystick 2..." +msgstr "Mando 2..." + +msgid "Joystick 3..." +msgstr "Mando 3..." + +msgid "Joystick 4..." +msgstr "Mando 4..." + +msgid "Sound card:" +msgstr "Tarjeta de sonido:" + +msgid "MIDI Out Device:" +msgstr "Dispositivo MIDI de salida:" + +msgid "MIDI In Device:" +msgstr "Dispositivo MIDI de entrada:" + +msgid "Standalone MPU-401" +msgstr "MPU-401 independiente" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Usar sonido FLOAT32" + +msgid "Network type:" +msgstr "Tipo de red:" + +msgid "PCap device:" +msgstr "Dispositivo PCap:" + +msgid "Network adapter:" +msgstr "Adaptador de red:" + +msgid "LPT1 Device:" +msgstr "Dispositivo LPT1:" + +msgid "LPT2 Device:" +msgstr "Dispositivo LPT2:" + +msgid "LPT3 Device:" +msgstr "Dispositivo LPT3:" + +msgid "Serial port 1" +msgstr "Puerto serie 1" + +msgid "Serial port 2" +msgstr "Puerto serie 2" + +msgid "Serial port 3" +msgstr "Puerto serie 3" + +msgid "Serial port 4" +msgstr "Puerto serie 4" + +msgid "Parallel port 1" +msgstr "Puerto paralelo 1" + +msgid "Parallel port 2" +msgstr "Puerto paralelo 2" + +msgid "Parallel port 3" +msgstr "Puerto paralelo 3" + +msgid "HD Controller:" +msgstr "Controladora HD:" + +msgid "FD Controller:" +msgstr "Controladora FD:" + +msgid "Tertiary IDE Controller" +msgstr "Tercera controladora IDE" + +msgid "Quaternary IDE Controller" +msgstr "Cuarta controladora IDE" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Controladora 1:" + +msgid "Controller 2:" +msgstr "Controladora 2:" + +msgid "Controller 3:" +msgstr "Controladora 3:" + +msgid "Controller 4:" +msgstr "Controladora 4:" + +msgid "Cassette" +msgstr "Cassette" + +msgid "Hard disks:" +msgstr "Discos duros:" + +msgid "&New..." +msgstr "&Nuevo..." + +msgid "&Existing..." +msgstr "&Existente..." + +msgid "&Remove" +msgstr "E&liminar" + +msgid "Bus:" +msgstr "Bus:" + +msgid "Channel:" +msgstr "Canal:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "E&specificar..." + +msgid "Sectors:" +msgstr "Sectores:" + +msgid "Heads:" +msgstr "Cabezas:" + +msgid "Cylinders:" +msgstr "Cilindros:" + +msgid "Size (MB):" +msgstr "Tamaño (MB):" + +msgid "Type:" +msgstr "Tipo:" + +msgid "Image Format:" +msgstr "Formato de imagen:" + +msgid "Block Size:" +msgstr "Tamaño de bloque:" + +msgid "Floppy drives:" +msgstr "Unidades de disquete:" + +msgid "Turbo timings" +msgstr "Temporizaciones Turbo" + +msgid "Check BPB" +msgstr "Chequear BPB" + +msgid "CD-ROM drives:" +msgstr "Unidades de CD-ROM:" + +msgid "MO drives:" +msgstr "Unidades MO:" + +msgid "ZIP drives:" +msgstr "Unidades ZIP:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA RTC:" + +msgid "ISA Memory Expansion" +msgstr "Expansión de Memoria ISA" + +msgid "Card 1:" +msgstr "Tarjeta 1:" + +msgid "Card 2:" +msgstr "Tarjeta 2:" + +msgid "Card 3:" +msgstr "Tarjeta 3:" + +msgid "Card 4:" +msgstr "Tarjeta 4:" + +msgid "ISABugger device" +msgstr "Dispositivo ISABugger" + +msgid "POST card" +msgstr "Tarjeta POST" + +msgid "Segoe UI" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Error" + +msgid "Fatal error" +msgstr "Error fatal" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Pulsa CTRL+ALT+AVPÁG para volver a modo ventana." + +msgid "Speed" +msgstr "Velocidad" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgstr "Imagenes ZIP (*.IM? *.im? *.ZDI *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." +msgstr "86Box no pudo encontrar ninguna imagen ROM usable.\n\nPor favor descarga un grupo de imágenes y extráelas en el directorio ""roms""." + +msgid "(empty)" +msgstr "(vacío)" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" +msgstr "Imagenes ZIP (*.IM? *.im? *.ZDI *.zdi);;All files (*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "On" + +msgid "Off" +msgstr "Off" + +msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" +msgstr "Todas las imagenes (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" + +msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "La máquina ""%hs"" no está disponible debido a ROMs faltantes en el directorio roms/machines. Cambiando a una máquina disponible." + +msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "La tarjeta de vídeo ""%hs"" no está disponible debido a ROMs faltantes en el directorio roms/machines. Cambiando a una tarjeta de vídeo disponible." + +msgid "Machine" +msgstr "Máquina" + +msgid "Display" +msgstr "Vídeo" + +msgid "Input devices" +msgstr "Dispositivos de Entrada" + +msgid "Sound" +msgstr "Sonido" + +msgid "Network" +msgstr "Red" + +msgid "Ports (COM & LPT)" +msgstr "Puertos (COM y LPT)" + +msgid "Storage controllers" +msgstr "Controladoras de Almacenamiento" + +msgid "Hard disks" +msgstr "Discos Duros" + +msgid "Floppy & CD-ROM drives" +msgstr "Disquetes y unidades de CD-ROM" + +msgid "Other removable devices" +msgstr "Otros dispositivos extraíbles" + +msgid "Other peripherals" +msgstr "Otros periféricos" + +msgid "Surface images (*.86F *.86f)" +msgstr "Imágenes de superficie (*.86F *.86f)" + +msgid "Click to capture mouse" +msgstr "Haz click para capturar el ratón" + +msgid "Press F8+F12 to release mouse" +msgstr "Pulsa F8+F12 para liberar el ratón" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Pulsa F8+F12 o el botón central para liberar el ratón" + +msgid "Unable to initialize FluidSynth" +msgstr "Incapaz de inicializar FluidSynth" + +msgid "Bus" +msgstr "Bus" + +msgid "File" +msgstr "Archivo" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Incapaz de inicializar el renderizador de vídeo." + +msgid "Default" +msgstr "Por defecto" + +msgid "%i Wait state(s)" +msgstr "%i estado(s) de Espera" + +msgid "Type" +msgstr "Tipo" + +msgid "Failed to set up PCap" +msgstr "Incapaz de configurar PCap" + +msgid "No PCap devices found" +msgstr "No se encontraron dispositivos PCap" + +msgid "Invalid PCap device" +msgstr "Dispositivo PCap inválido" + +msgid "Standard 2-button joystick(s)" +msgstr "Mando(s) de 2 botones estándar" + +msgid "Standard 4-button joystick" +msgstr "Mando de 4 botones estándar" + +msgid "Standard 6-button joystick" +msgstr "Mando de 6 botones estándar" + +msgid "Standard 8-button joystick" +msgstr "Mando de 8 botones estándar" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Ninguno" + +msgid "Unable to load keyboard accelerators." +msgstr "Incapaz de cargar aceleradores de teclado." + +msgid "Unable to register raw input." +msgstr "Incapaz de registrar entrada directa." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Disquete %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgstr "Todas las Imágenes (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" + +msgid "Unable to initialize FreeType" +msgstr "Incapaz de inicializar FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Incapaz de inicializar SDL, se requiere SDL2.dll" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "¿Seguro que quieres resetear la máquina emulada?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "¿Seguro que quieres cerrar 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Incapaz de inicializar Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgstr "Imágenes de MO (*.IM? *.im? *.MDI *.mdi);;All files (*)" + +msgid "Welcome to 86Box!" +msgstr "¡Bienvenido a 86Box!" + +msgid "Internal controller" +msgstr "Controladora interna" + +msgid "Exit" +msgstr "Salir" + +msgid "No ROMs found" +msgstr "No se encontraron ROMs" + +msgid "Do you want to save the settings?" +msgstr "¿Quieres guardar los ajustes?" + +msgid "This will hard reset the emulated machine." +msgstr "Se hará hard reset de la máquina emulada." + +msgid "Save" +msgstr "Guardar" + +msgid "About 86Box" +msgstr "Acerca de 86Box" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Un emulador de ordenadores antigüos\n\nAutores: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, y otros.\n\nLiberado bajo la GNU General Public License versión 2 o posterior. Ver LICENSE para más información." + +msgid "Hardware not available" +msgstr "Hardware no disponible" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Asegúrate de que libpcap está instalado y de que estás en una conexión de red compatible con libpcap." + +msgid "Invalid configuration" +msgstr "Configuración inválida" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " es necesaria para emulación de impresión ESC/P." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " es necesaria para la conversión automática de archivos PostScript a PDF.\n\nCualquier documento enviado a la impresora genérica postScript se guardará como archivo PostScript (.ps)." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " es necesario para salida MIDI FluidSynth." + +msgid "Entering fullscreen mode" +msgstr "Entrando en modo pantalla completa" + +msgid "Don't show this message again" +msgstr "No mostrar más este mensaje" + +msgid "Don't exit" +msgstr "No salir" + +msgid "Reset" +msgstr "Resetear" + +msgid "Don't reset" +msgstr "No resetear" + +msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgstr "Imágenes de CD-ROM (*.ISO *.iso *.CUE *.cue);;All files (*)" + +msgid "%hs Device Configuration" +msgstr "%hs Configuración de Dispositivo" + +msgid "Monitor in sleep mode" +msgstr "Monitor en modo ahorro" + +msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" +msgstr "Shaders OpenGL (*.GLSL *.glsl);;All files (*)" + +msgid "OpenGL options" +msgstr "Opciones OpenGL" + +msgid "You are loading an unsupported configuration" +msgstr "Estás cargando una configuración no soportada" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "El Filtrado de tipo de CPU basado en máquina seleccionada está deshabilitado para la esta máquina.\n\nEsto hace posible seleccionar una CPU que sea incompatible con esta máquina. Por ello, pueden aparecer incompatibilidader con la BIOS de la máquina u otro software.\n\nActivar este ajuste no está oficialmente soportado y cualquier reporte de fallo puede ser cerrado como inválido." + +msgid "Continue" +msgstr "Continuar" + +msgid "Cassette: %s" +msgstr "Cassette: %s" + +msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" +msgstr "Imágenes de Cassette (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" + +msgid "Cartridge %i: %ls" +msgstr "Cartucho %i: %ls" + +msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" +msgstr "Imágenes de Cartucho (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Hard disk (%s)" +msgstr "Disco duro (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "Nunca hubo unidades de CD-ROM MFM/RLL o ESDI" + +msgid "Custom..." +msgstr "A medida..." + +msgid "Custom (large)..." +msgstr "A medida (grande)..." + +msgid "Add New Hard Disk" +msgstr "Añadir Nuevo Disco Duro" + +msgid "Add Existing Hard Disk" +msgstr "Añadir Disco Duro Existente" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "Las imágenes de disco HDI no pueden superar los 4 GB." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Las imágenes de disco no pueden superar los 127 GB." + +msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" +msgstr "Imágenes de Disco Duro (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" + +msgid "Unable to read file" +msgstr "No se pudo leer el archivo" + +msgid "Unable to write file" +msgstr "No se pudo escribir el archivo" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "No se soportan las imágenes HDI o HDX con un tamaño de sector diferente a 512." + +msgid "USB is not yet supported" +msgstr "No se soporta aún el USB" + +msgid "Disk image file already exists" +msgstr "La imagen de disco ya existe" + +msgid "Please specify a valid file name." +msgstr "Por favor especifique un nombre de archivo válido." + +msgid "Disk image created" +msgstr "Imagen de disco creada" + +msgid "Make sure the file exists and is readable." +msgstr "Asegúrese de que el archivo existe y es leíble." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Asegúrese de que el archivo en un directorio con permiso de escritura." + +msgid "Disk image too large" +msgstr "Imagen de disco demasiado grande" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Recuerde particionar y formatear la nueva unidad." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "El archivo selecionado será sobreescrito. ¿Está seguro de querer usarlo?" + +msgid "Unsupported disk image" +msgstr "Imagen de disco no soportada" + +msgid "Overwrite" +msgstr "Sobreescribir" + +msgid "Don't overwrite" +msgstr "No sobreescribir" + +msgid "Raw image (.img)" +msgstr "Imagen plana (.img)" + +msgid "HDI image (.hdi)" +msgstr "Imagen HDI (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "Imagen HDX (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD de tamaño fijo (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD de tamaño dinámico (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "VHD diferencial (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Bloques grandes (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Bloques pequeños (512 KB)" + +msgid "VHD files (*.VHD *.vhd);;All files (*)" +msgstr "Archivos VHD (*.VHD *.vhd);;All files (*)" + +msgid "Select the parent VHD" +msgstr "Seleccione el VHD padre" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Esto puede deberse a que la imagen padre se modificó después de que la imagen diferencial se crease.\n\nTambién puede ocurrir si las imágenes fueron movidas o copiadas, o por un fallo en el programa que creó este disco.\n\n¿Quiere corregir los registros de tiempo?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Las marcas de tiempo del padre e hijo no coinciden" + +msgid "Could not fix VHD timestamp." +msgstr "No se pudo corregir la marca de tiempo del VHD." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (cluster 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (cluster 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5"" 128Mb M.O. (ISO 10090)" +msgstr "3.5"" 128Mb M.O. (ISO 10090)" + +msgid "3.5"" 230Mb M.O. (ISO 13963)" +msgstr "3.5"" 230Mb M.O. (ISO 13963)" + +msgid "3.5"" 540Mb M.O. (ISO 15498)" +msgstr "3.5"" 540Mb M.O. (ISO 15498)" + +msgid "3.5"" 640Mb M.O. (ISO 15498)" +msgstr "3.5"" 640Mb M.O. (ISO 15498)" + +msgid "3.5"" 1.3Gb M.O. (GigaMO)" +msgstr "3.5"" 1.3Gb M.O. (GigaMO)" + +msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25"" 600Mb M.O." +msgstr "5.25"" 600Mb M.O." + +msgid "5.25"" 650Mb M.O." +msgstr "5.25"" 650Mb M.O." + +msgid "5.25"" 1Gb M.O." +msgstr "5.25"" 1Gb M.O." + +msgid "5.25"" 1.3Gb M.O." +msgstr "5.25"" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "RPM perfectas" + +msgid "1%% below perfect RPM" +msgstr "1%% por debajo de RPM perfectas" + +msgid "1.5%% below perfect RPM" +msgstr "1.5%% por debajo de RPM perfectas" + +msgid "2%% below perfect RPM" +msgstr "2%% por debajo de RPM perfectas" + +msgid "(System Default)" +msgstr "(Por defecto del sistema)" + diff --git a/src/qt/languages/fi_FI.po b/src/qt/languages/fi_FI.po new file mode 100644 index 000000000..9617ce8a2 --- /dev/null +++ b/src/qt/languages/fi_FI.po @@ -0,0 +1,1173 @@ +msgid "Translated by" +msgstr "Unknown" + +msgid "&Action" +msgstr "&Toiminto" + +msgid "&Keyboard requires capture" +msgstr "&Vaadi näppäimistön kaappaus" + +msgid "&Right CTRL is left ALT" +msgstr "&Oikea CTRL on vasen ALT" + +msgid "&Hard Reset..." +msgstr "&Uudelleenkäynnistys (kylmä)..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Tauko" + +msgid "E&xit..." +msgstr "&Poistu..." + +msgid "&View" +msgstr "&Näytä" + +msgid "&Hide status bar" +msgstr "&Piilota tilapalkki" + +msgid "&Resizeable window" +msgstr "&Salli koon muuttaminen" + +msgid "R&emember size && position" +msgstr "&Muista koko ja sijainti" + +msgid "Re&nderer" +msgstr "&Renderöijä" + +msgid "&Qt (Software)" +msgstr "&Qt (ohjelmistopohjainen)" + +msgid "Qt (&Hardware)" +msgstr "Qt (&laitteistokiihdytetty)" + +msgid "Qt (&OpenGL)" +msgstr "Qt (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 Core)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "&Määritä koko..." + +msgid "F&orce 4:3 display ratio" +msgstr "Pakota 4:3 näyttösuhde" + +msgid "&Window scale factor" +msgstr "&Ikkunan kokokerroin" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "&Suodatusmetodi" + +msgid "&Nearest" +msgstr "&Lähin naapuri" + +msgid "&Linear" +msgstr "Li&neaarinen interpolaatio" + +msgid "Hi&DPI scaling" +msgstr "&Suuri DPI-skaalaus" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Koko näytön tila\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Koko näytön &skaalaustila" + +msgid "&Full screen stretch" +msgstr "&Venytä koko näyttöön" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Tasasivuiset kuvapisteet (säilytä kuvasuhde)" + +msgid "&Integer scale" +msgstr "&Kokonaislukuskaalaus" + +msgid "E&GA/(S)VGA settings" +msgstr "&EGA/(S)VGA asetukset" + +msgid "&Inverted VGA monitor" +msgstr "&VGA näyttö käänteisillä väreillä" + +msgid "VGA screen &type" +msgstr "VGA näytön &tyyppi" + +msgid "RGB &Color" +msgstr "RGB &värit" + +msgid "&RGB Grayscale" +msgstr "&RGB harmaasävyinen" + +msgid "&Amber monitor" +msgstr "&Meripihkanvärinen" + +msgid "&Green monitor" +msgstr "V&ihreä" + +msgid "&White monitor" +msgstr "V&alkoinen" + +msgid "Grayscale &conversion type" +msgstr "&Harmaasävymuunnoksen tyyppi" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Keskiarvo" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "CGA/PCjr/Tandy/E&GA/(S)VGA &yliskannaus" + +msgid "Change contrast for &monochrome display" +msgstr "&Muuta harmaavärinäytön kontrastia" + +msgid "&Media" +msgstr "&Media" + +msgid "&Tools" +msgstr "&Työkalut" + +msgid "&Settings..." +msgstr "&Kokoonpano..." + +msgid "&Update status bar icons" +msgstr "&Päivitä tilapalkin kuvakkeita" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Ota &kuvakaappaus\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Sovellusasetukset..." + +msgid "Enable &Discord integration" +msgstr "Käytä &Discord integraatiota" + +msgid "Sound &gain..." +msgstr "&Äänen tulotaso..." + +msgid "Begin trace\tCtrl+T" +msgstr "Aloita jäljitys\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Lopeta jäljitys\tCtrl+T" + +msgid "&Logging" +msgstr "&Lokitus" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "BusLogic-lokitus päällä\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "CD-ROM-lokitus päällä\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Levykelokitus (86F) päällä\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Levykekontrollerin lokitus päällä\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "IDE-lokitus päällä\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Sarjaporttilokitus päällä\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Verkkolokitus päällä\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Kirjaa keskeytyskohdat\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "Tallenna &videomuistin vedos\tCtrl+F1" + +msgid "&Help" +msgstr "&Ohje" + +msgid "&Documentation..." +msgstr "&Dokumentaatio..." + +msgid "&About 86Box..." +msgstr "&Tietoja 86Box:sta..." + +msgid "" +msgstr "" + +msgid "&New image..." +msgstr "&Uusi kasettikuva..." + +msgid "&Existing image..." +msgstr "&Olemassaoleva kasettikuva..." + +msgid "Existing image (&Write-protected)..." +msgstr "Olemassaoleva kasettikuva (&kirjoitussuojattu)..." + +msgid "&Record" +msgstr "&Nauhoita" + +msgid "&Play" +msgstr "&Toista" + +msgid "&Rewind to the beginning" +msgstr "Kelaa &alkuun" + +msgid "&Fast forward to the end" +msgstr "Kelaa &loppuun" + +msgid "E&ject" +msgstr "&Poista kasettipesästä" + +msgid "&Image..." +msgstr "&ROM-moduulikuva..." + +msgid "E&xport to 86F..." +msgstr "&Vie 86F-tiedostoon..." + +msgid "&Mute" +msgstr "&Mykistä" + +msgid "E&mpty" +msgstr "&Tyhjä" + +msgid "&Reload previous image" +msgstr "&Lataa edellinen levykuva uudelleen" + +msgid "&Image" +msgstr "L&evykuva" + +msgid "Target &framerate" +msgstr "&Kuvataajuustavoite" + +msgid "&Sync with video" +msgstr "&Synkronisoi videoon" + +msgid "&25 fps" +msgstr "&25 ruutua/s" + +msgid "&30 fps" +msgstr "&30 ruutua/s" + +msgid "&50 fps" +msgstr "&50 ruutua/s" + +msgid "&60 fps" +msgstr "&60 ruutua/s" + +msgid "&75 fps" +msgstr "&75 ruutua/s" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "Valitse varjostin&ohjelma..." + +msgid "&Remove shader" +msgstr "&Poista varjostinohjelma" + +msgid "Preferences" +msgstr "Sovellusasetukset" + +msgid "Sound Gain" +msgstr "Äänen tulotaso" + +msgid "New Image" +msgstr "Uusi levykuva" + +msgid "Settings" +msgstr "Kokoonpano" + +msgid "Specify Main Window Dimensions" +msgstr "Määritä pääikkunan koko" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Peruuta" + +msgid "Save these settings as &global defaults" +msgstr "Tallenna nämä asetukset &globaaleiksi oletuksiksi" + +msgid "&Default" +msgstr "&Oletus" + +msgid "Language:" +msgstr "Kieli:" + +msgid "Icon set:" +msgstr "Kuvakkeet:" + +msgid "Gain" +msgstr "Taso" + +msgid "File name:" +msgstr "Tiedostonimi:" + +msgid "Disk size:" +msgstr "Levyn koko:" + +msgid "RPM mode:" +msgstr "RPM tila:" + +msgid "Progress:" +msgstr "Edistyminen:" + +msgid "Width:" +msgstr "Leveys:" + +msgid "Height:" +msgstr "Korkeus:" + +msgid "Lock to this size" +msgstr "Lukitse tähän kokoon" + +msgid "Machine type:" +msgstr "Tietokoneen tyyppi:" + +msgid "Machine:" +msgstr "Tietokone:" + +msgid "Configure" +msgstr "Määritys" + +msgid "CPU type:" +msgstr "Suorittimen tyyppi:" + +msgid "Speed:" +msgstr "Nopeus:" + +msgid "FPU:" +msgstr "Apusuoritin:" + +msgid "Wait states:" +msgstr "Odotustilat:" + +msgid "MB" +msgstr "Mt" + +msgid "Memory:" +msgstr "Muisti:" + +msgid "Time synchronization" +msgstr "Kellon synkronointi" + +msgid "Disabled" +msgstr "Ei käytössä" + +msgid "Enabled (local time)" +msgstr "Käytössä (paikallinen)" + +msgid "Enabled (UTC)" +msgstr "Käytössä (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Dynaaminen uudelleenkääntäjä" + +msgid "Video:" +msgstr "Näytönohjain:" + +msgid "Voodoo Graphics" +msgstr "Voodoo-grafiikkasuoritin" + +msgid "Mouse:" +msgstr "Hiiri:" + +msgid "Joystick:" +msgstr "Peliohjain:" + +msgid "Joystick 1..." +msgstr "Peliohjain 1..." + +msgid "Joystick 2..." +msgstr "Peliohjain 2..." + +msgid "Joystick 3..." +msgstr "Peliohjain 3..." + +msgid "Joystick 4..." +msgstr "Peliohjain 4..." + +msgid "Sound card:" +msgstr "Äänikortti:" + +msgid "MIDI Out Device:" +msgstr "MIDI-ulostulo:" + +msgid "MIDI In Device:" +msgstr "MIDI-sisääntulo:" + +msgid "Standalone MPU-401" +msgstr "Erillinen MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Käytä FLOAT32-ääntä" + +msgid "Network type:" +msgstr "Verkon tyyppi:" + +msgid "PCap device:" +msgstr "PCap-laite:" + +msgid "Network adapter:" +msgstr "Verkkokortti:" + +msgid "LPT1 Device:" +msgstr "LPT1-laite:" + +msgid "LPT2 Device:" +msgstr "LPT2-laite:" + +msgid "LPT3 Device:" +msgstr "LPT3-laite:" + +msgid "Serial port 1" +msgstr "Sarjaportti 1" + +msgid "Serial port 2" +msgstr "Sarjaportti 2" + +msgid "Serial port 3" +msgstr "Sarjaportti 3" + +msgid "Serial port 4" +msgstr "Sarjaportti 4" + +msgid "Parallel port 1" +msgstr "Rinnakkaisportti 1" + +msgid "Parallel port 2" +msgstr "Rinnakkaisportti 2" + +msgid "Parallel port 3" +msgstr "Rinnakkaisportti 3" + +msgid "HD Controller:" +msgstr "Kiintolevyohjain:" + +msgid "FD Controller:" +msgstr "Levykeohjain:" + +msgid "Tertiary IDE Controller" +msgstr "Tertinäärinen IDE-ohjain" + +msgid "Quaternary IDE Controller" +msgstr "Kvaternaarinen IDE-ohjain" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Ohjain 1:" + +msgid "Controller 2:" +msgstr "Ohjain 2:" + +msgid "Controller 3:" +msgstr "Ohjain 3:" + +msgid "Controller 4:" +msgstr "Ohjain 4:" + +msgid "Cassette" +msgstr "Kasettiasema" + +msgid "Hard disks:" +msgstr "Kiintolevyt:" + +msgid "&New..." +msgstr "&Uusi..." + +msgid "&Existing..." +msgstr "&Olemassaoleva..." + +msgid "&Remove" +msgstr "&Poista" + +msgid "Bus:" +msgstr "Väylä:" + +msgid "Channel:" +msgstr "Kanava:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Määritä..." + +msgid "Sectors:" +msgstr "Sektorit:" + +msgid "Heads:" +msgstr "Päät:" + +msgid "Cylinders:" +msgstr "Sylinterit:" + +msgid "Size (MB):" +msgstr "Koko (Mt):" + +msgid "Type:" +msgstr "Tyyppi:" + +msgid "Image Format:" +msgstr "Tiedostomuoto:" + +msgid "Block Size:" +msgstr "Lohkon koko:" + +msgid "Floppy drives:" +msgstr "Levykeasemat:" + +msgid "Turbo timings" +msgstr "Turbo-ajoitukset" + +msgid "Check BPB" +msgstr "Tarkista BPB" + +msgid "CD-ROM drives:" +msgstr "CD-ROM-asemat:" + +msgid "MO drives:" +msgstr "Magneettisoptiset asemat (MO):" + +msgid "ZIP drives:" +msgstr "ZIP-asemat:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA-RTC (kello):" + +msgid "ISA Memory Expansion" +msgstr "ISA-muistilaajennus" + +msgid "Card 1:" +msgstr "Kortti 1:" + +msgid "Card 2:" +msgstr "Kortti 2:" + +msgid "Card 3:" +msgstr "Kortti 3:" + +msgid "Card 4:" +msgstr "Kortti 4:" + +msgid "ISABugger device" +msgstr "ISABugger-laite" + +msgid "POST card" +msgstr "POST-kortti" + +msgid "Segoe UI" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Virhe" + +msgid "Fatal error" +msgstr "Vakava virhe" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Paina CTRL+ALT+PAGE DOWN palataksesi ikkunoituun tilaan." + +msgid "Speed" +msgstr "Nopeus" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgstr "ZIP-levykuvat (*.IM? *.im? *.ZDI *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." +msgstr "86Box ei löytänyt käyttökelpoisia ROM-tiedostoja.\n\nVoit ladata ROM-paketin ja purkaa sen ""roms"" hakemistoon." + +msgid "(empty)" +msgstr "(tyhjä)" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" +msgstr "ZIP-levykuvat (*.IM? *.im? *.ZDI *.zdi);;Kaikki tiedostot (*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Päällä" + +msgid "Off" +msgstr "Pois" + +msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" +msgstr "Kaikki levykuvat (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Perussektorilevykuvat (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Pintalevykuvat (*.86F *.86f)" + +msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Konetta ""%hs"" ei voi käyttää puuttuvien ROM-tiedostojen vuoksi. Vaihdetaan käyttökelpoiseen koneeseen." + +msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Näytönohjainta ""%hs"" ei voi käyttää puuttuvien ROM-tiedostojen vuoksi. Vaihdetaan käyttökelpoiseen näytönohjaimeen." + +msgid "Machine" +msgstr "Tietokone" + +msgid "Display" +msgstr "Näyttö" + +msgid "Input devices" +msgstr "Syöttölaitteet" + +msgid "Sound" +msgstr "Ääni" + +msgid "Network" +msgstr "Verkko" + +msgid "Ports (COM & LPT)" +msgstr "Portit (COM & LPT)" + +msgid "Storage controllers" +msgstr "Tallennusohjaimet" + +msgid "Hard disks" +msgstr "Kiintolevyt" + +msgid "Floppy & CD-ROM drives" +msgstr "Levyke ja CD-ROM" + +msgid "Other removable devices" +msgstr "Muut tallennuslaitteet" + +msgid "Other peripherals" +msgstr "Muut oheislaitteet" + +msgid "Surface images (*.86F *.86f)" +msgstr "Pintalevykuvat (*.86F *.86f)" + +msgid "Click to capture mouse" +msgstr "Kaappaa hiiri klikkaamalla" + +msgid "Press F8+F12 to release mouse" +msgstr "Paina F8+F12 vapauttaaksesi hiiren" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Paina F8+F12 tai keskipainiketta vapauttaaksesi hiiren" + +msgid "Unable to initialize FluidSynth" +msgstr "FluidSynth:in alustus epäonnistui" + +msgid "Bus" +msgstr "Väylä" + +msgid "File" +msgstr "Tiedosto" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "kt" + +msgid "Could not initialize the video renderer." +msgstr "Video-renderöijän alustus epäonnistui" + +msgid "Default" +msgstr "Oletus" + +msgid "%i Wait state(s)" +msgstr "%i odotustilaa" + +msgid "Type" +msgstr "Tyyppi" + +msgid "Failed to set up PCap" +msgstr "PCap-asennus epäonnistui" + +msgid "No PCap devices found" +msgstr "PCap-laitteita ei löytynyt" + +msgid "Invalid PCap device" +msgstr "Virheellinen PCap-laite" + +msgid "Standard 2-button joystick(s)" +msgstr "Standardi 2-painikkeinen peliohjain/-ohjaimet" + +msgid "Standard 4-button joystick" +msgstr "Standardi 4-painikkeinen peliohjain" + +msgid "Standard 6-button joystick" +msgstr "Standardi 6-painikkeinen peliohjain" + +msgid "Standard 8-button joystick" +msgstr "Standardi 8-painikkeinen peliohjain" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Ei mikään" + +msgid "Unable to load keyboard accelerators." +msgstr "Näppäinkiihdyttimien lataus epäonnistui" + +msgid "Unable to register raw input." +msgstr "Raakasyötteen rekisteröinti epäonnistui" + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u Mt (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Levyke %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgstr "Kaikki levykuvat (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Kehittyneet sektorilevykuvat (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Perussektorilevykuvat (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux-levykuvat (*.FDI *.fdi);;Pintalevykuvat (*.86F *.86f *.MFM *.mfm);;Kaikki tiedostot (*)" + +msgid "Unable to initialize FreeType" +msgstr "FreeType:n alustus epäonnistui" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "SDL:n alustus epäonnistui. Tarvitaan SDL2.dll" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Oletko varma, että haluat käynnistää emuloidun tietokoneen uudelleen?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Haluatko varmasti sulkea 86Box:in?" + +msgid "Unable to initialize Ghostscript" +msgstr "Ghostscript:in alustus epäonnistui" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgstr "MO-levykuvat (*.IM? *.im? *.MDI *.mdi);;Kaikki tiedostot (*)" + +msgid "Welcome to 86Box!" +msgstr "Tervetuloa 86Box:iin!" + +msgid "Internal controller" +msgstr "Sisäinen ohjain" + +msgid "Exit" +msgstr "Poistu" + +msgid "No ROMs found" +msgstr "ROM-tiedostoja ei löytynyt" + +msgid "Do you want to save the settings?" +msgstr "Tallennetaanko asetukset?" + +msgid "This will hard reset the emulated machine." +msgstr "Tämä käynnistää emuloidun tietokoneen uudelleen." + +msgid "Save" +msgstr "Tallenna" + +msgid "About 86Box" +msgstr "Tietoja 86Box:sta" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Vanhojen tietokoneiden emulaattori\n\nTekijät: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho ja muut.\n\nJulkaistu GNU General Public License 2. version tai myöhemmän alaisena. Tarkempia tietoja LICENSE-tiedostossa." + +msgid "Hardware not available" +msgstr "Laitteisto ei ole saatavilla" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Varmista, että libpcap on asennettu ja että verkkoyhteytesi on libpcap-yhteensopiva." + +msgid "Invalid configuration" +msgstr "Virheelliset määritykset" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " vaaditaan ESC/P-tulostimen emuloimiseksi." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " vaaditaan PostScript-tiedostojen automaattiseen muuntamiseen PDF-tiedostoiksi.\n\nKaikki geneeriselle PostScript-tulostimelle lähetetyt asiakirjat tallennetaan PostScript (.ps) -tiedostoina." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " vaaditaan FluidSynth MIDI-ulostuloa varten." + +msgid "Entering fullscreen mode" +msgstr "Siirrytään koko näytön tilaan" + +msgid "Don't show this message again" +msgstr "Älä näytä tätä viestiä uudelleen" + +msgid "Don't exit" +msgstr "Älä poistu" + +msgid "Reset" +msgstr "Käynnistä uudelleen" + +msgid "Don't reset" +msgstr "Älä käynnistä uudelleen" + +msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgstr "CD-ROM-levykuvat (*.ISO *.iso *.CUE *.cue);;Kaikki tiedostot (*)" + +msgid "%hs Device Configuration" +msgstr "%hs - Laitteen määritykset" + +msgid "Monitor in sleep mode" +msgstr "Näyttö lepotilassa" + +msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" +msgstr "OpenGL-varjostinohjelmat (*.GLSL *.glsl);;Kaikki tiedostot (*)" + +msgid "OpenGL options" +msgstr "OpenGL-asetukset" + +msgid "You are loading an unsupported configuration" +msgstr "Olet lataamassa ei-tuettuja määrittelyjä" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "Valittuun tietokoneeseen perustuva suoritintyypin suodatus ei ole käytössä tällä emuloidulla koneella.\n\nTämä mahdollistaa muutoin yhteensopimattoman suorittimen valinnan kyseisen tietokoneen kanssa. Voit kuitenkin kohdata ongelmia tietokoneen BIOS:in tai muun ohjelmiston kanssa.\n\nTämän asetuksen käyttö ei ole virallisesti tuettua ja kaikki tehdyt virheraportit voidaan sulkea epäpätevinä." + +msgid "Continue" +msgstr "Jatka" + +msgid "Cassette: %s" +msgstr "Kasetti: %s" + +msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" +msgstr "Kasetti-tiedostot (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Kaikki tiedostot (*)" + +msgid "Cartridge %i: %ls" +msgstr "ROM-moduuli %i: %ls" + +msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" +msgstr "ROM-moduulikuvat (*.A *.a *.B *.b *.JRC *.jrc);;Kaikki tiedostot (*)" + +msgid "Error initializing renderer" +msgstr "Virhe renderöijän alustuksessa" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderöijän alustus epäonnistui. Käytä toista renderöijää." + +msgid "Hard disk (%s)" +msgstr "Kiintolevy (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL tai ESDI CD-ROM asemia ei ole koskaan ollut olemassa" + +msgid "Custom..." +msgstr "Mukautettu..." + +msgid "Custom (large)..." +msgstr "Mukautettu (suuri)..." + +msgid "Add New Hard Disk" +msgstr "Lisää uusi kiintolevy" + +msgid "Add Existing Hard Disk" +msgstr "Lisää olemassaoleva kiintolevy" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "HDI levykuvan suurin mahdollinen koko on 4 Gt." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Levykuvien suurin mahdollinen koko on 127 Gt." + +msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" +msgstr "Kiintolevykuvat (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Kaikki tiedostot (*)" + +msgid "Unable to read file" +msgstr "Tiedostoa ei voi lukea" + +msgid "Unable to write file" +msgstr "Tiedostoon ei voi kirjoittaa" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "HDI- ja HDX-levykuvien ainoa tuettu sektorikoko on 512" + +msgid "USB is not yet supported" +msgstr "USB-tukea ei vielä ole" + +msgid "Disk image file already exists" +msgstr "Levykuva on jo olemassa" + +msgid "Please specify a valid file name." +msgstr "Anna kelvollinen tiedostonimi." + +msgid "Disk image created" +msgstr "Levykuva luotu" + +msgid "Make sure the file exists and is readable." +msgstr "Varmista, että tiedosto on olemassa ja lukukelpoinen" + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Varmista, että tiedoston tallennuskansioon on kirjoitusoikeus" + +msgid "Disk image too large" +msgstr "Liian suuri levykuva" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Muista osioida ja alustaa juuri luomasi asema." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Valittu tiedosto ylikirjoitetaan. Oletko varma, että haluat käyttää sitä?" + +msgid "Unsupported disk image" +msgstr "Levynkuvaa ei tueta" + +msgid "Overwrite" +msgstr "Ylikirjoita" + +msgid "Don't overwrite" +msgstr "Älä ylikirjoita" + +msgid "Raw image (.img)" +msgstr "Raaka levykuva (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDI-levykuva (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDX-levykuva (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "Kiinteä VHD (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "Dynaaminen VHD (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Differentiaalinen VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Suuret lohkot (2 Mt)" + +msgid "Small blocks (512 KB)" +msgstr "Pienet lohkot (512 kt)" + +msgid "VHD files (*.VHD *.vhd);;All files (*)" +msgstr "VHD-tiedostot (*.VHD *.vhd);;Kaikki tiedostot (*)" + +msgid "Select the parent VHD" +msgstr "Valitse ylätason VHD" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Tämä saattaa tarkoittaa, että ylätason levykuvaa on muokattu differentiaalisen levykuvan luonnin jälkeen.\n\nNäin voi käydä myös, jos levykuvatiedostoja on siirretty tai kopioitu. Lisäksi syynä voi olla levyn luoneessa sovelluksessa oleva ohjelmistovirhe.\n\nKorjataanko aikaleimat?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Ylä- ja alatason levyjen aikaleimat eivät täsmää" + +msgid "Could not fix VHD timestamp." +msgstr "VHD aikaleimaa ei pystytty korjaamaan." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kt" + +msgid "180 kB" +msgstr "180 kt" + +msgid "320 kB" +msgstr "320 kt" + +msgid "360 kB" +msgstr "360 kt" + +msgid "640 kB" +msgstr "640 kt" + +msgid "720 kB" +msgstr "720 kt" + +msgid "1.2 MB" +msgstr "1.2 Mt" + +msgid "1.25 MB" +msgstr "1.25 Mt" + +msgid "1.44 MB" +msgstr "1.44 Mt" + +msgid "DMF (cluster 1024)" +msgstr "DMF (lohko 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (lohko 2048)" + +msgid "2.88 MB" +msgstr "2.88 Mt" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5"" 128Mb M.O. (ISO 10090)" +msgstr "3.5"" 128Mt M.O. (ISO 10090)" + +msgid "3.5"" 230Mb M.O. (ISO 13963)" +msgstr "3.5"" 230Mt M.O. (ISO 13963)" + +msgid "3.5"" 540Mb M.O. (ISO 15498)" +msgstr "3.5"" 540Mt M.O. (ISO 15498)" + +msgid "3.5"" 640Mb M.O. (ISO 15498)" +msgstr "3.5"" 640Mt M.O. (ISO 15498)" + +msgid "3.5"" 1.3Gb M.O. (GigaMO)" +msgstr "3.5"" 1.3Gt M.O. (GigaMO)" + +msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5"" 2.3Gt M.O. (GigaMO 2)" + +msgid "5.25"" 600Mb M.O." +msgstr "5.25"" 600Mt M.O." + +msgid "5.25"" 650Mb M.O." +msgstr "5.25"" 650Mt M.O." + +msgid "5.25"" 1Gb M.O." +msgstr "5.25"" 1Gt M.O." + +msgid "5.25"" 1.3Gb M.O." +msgstr "5.25"" 1.3Gt M.O." + +msgid "Perfect RPM" +msgstr "Täydellinen RPM" + +msgid "1%% below perfect RPM" +msgstr "1%% alle täydellisen RPM:n" + +msgid "1.5%% below perfect RPM" +msgstr "1.5%% alle täydellisen RPM:n" + +msgid "2%% below perfect RPM" +msgstr "2%% alle täydellisen RPM:n" + +msgid "(System Default)" +msgstr "(Järjestelmän oletus)" + diff --git a/src/qt/languages/fr_FR.po b/src/qt/languages/fr_FR.po new file mode 100644 index 000000000..2eb53967f --- /dev/null +++ b/src/qt/languages/fr_FR.po @@ -0,0 +1,1173 @@ +msgid "Translated by" +msgstr "Unknown" + +msgid "&Action" +msgstr "&Action" + +msgid "&Keyboard requires capture" +msgstr "&Capturer le clavier" + +msgid "&Right CTRL is left ALT" +msgstr "CTRL &Droite devient ALT Gauche" + +msgid "&Hard Reset..." +msgstr "&Hard Reset..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Pause" + +msgid "E&xit..." +msgstr "&Quitter..." + +msgid "&View" +msgstr "&Vue" + +msgid "&Hide status bar" +msgstr "&Masquer la barre de status" + +msgid "&Resizeable window" +msgstr "Fenètre &Retaillable" + +msgid "R&emember size && position" +msgstr "S&auvegarder taille && position" + +msgid "Re&nderer" +msgstr "Moteur de &rendu vidéo" + +msgid "&Qt (Software)" +msgstr "&Qt (Logiciel)" + +msgid "Qt (&Hardware)" +msgstr "Qt (&Materiel)" + +msgid "Qt (&OpenGL)" +msgstr "Qt (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 Core)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "Specifier dimensions..." + +msgid "F&orce 4:3 display ratio" +msgstr "F&orcer 4:3" + +msgid "&Window scale factor" +msgstr "&Echelle facteur" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Methode Filtre" + +msgid "&Nearest" +msgstr "&Plus proche" + +msgid "&Linear" +msgstr "&Lineaire" + +msgid "Hi&DPI scaling" +msgstr "Mise à l'échelle Hi&DPI" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Plein Ecran\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Mode &Elargi plein écran" + +msgid "&Full screen stretch" +msgstr "&Plein écran étiré" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "pixels &Carrés(Keep ratio)" + +msgid "&Integer scale" +msgstr "Echelle &Entière" + +msgid "E&GA/(S)VGA settings" +msgstr "Réglages E&GA/(S)VGA" + +msgid "&Inverted VGA monitor" +msgstr "Moniteur VGA &Inversé" + +msgid "VGA screen &type" +msgstr "&Type Ecran VGA" + +msgid "RGB &Color" +msgstr "RGB &Couleur" + +msgid "&RGB Grayscale" +msgstr "&RGB Ton de Gris" + +msgid "&Amber monitor" +msgstr "Moniteur &Ambre" + +msgid "&Green monitor" +msgstr "Moniteur &Vert" + +msgid "&White monitor" +msgstr "Moniteur &Blanc" + +msgid "Grayscale &conversion type" +msgstr "Grayscale &conversion type" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Moyenne" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" + +msgid "Change contrast for &monochrome display" +msgstr "Modifier contraste affichage &monochrome" + +msgid "&Media" +msgstr "&Media" + +msgid "&Tools" +msgstr "Ou&tils" + +msgid "&Settings..." +msgstr "&Réglages..." + +msgid "&Update status bar icons" +msgstr "Mettre à jour la barre de stat&us" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Copie &Ecran\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Préférences..." + +msgid "Enable &Discord integration" +msgstr "Activer intégration &Discord" + +msgid "Sound &gain..." +msgstr "&Gain Son..." + +msgid "Begin trace\tCtrl+T" +msgstr "Démarrer traces\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Finir traces\tCtrl+T" + +msgid "&Logging" +msgstr "&Journalisation" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Activer journaux de BusLogic\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Activer journaux du CD-ROM\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Activer journaux des disquettes (86F)s\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Activer journaux du contrôleur de disquettes\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Activer journaux de IDE\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Activer journaux de port série\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Activer journaux du réseau\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Point d'arrêt du journal\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "Vidage de la mémoire &vidéo\tCtrl+F1" + +msgid "&Help" +msgstr "&Aide" + +msgid "&Documentation..." +msgstr "&Documentation..." + +msgid "&About 86Box..." +msgstr "&A Propos de 86Box..." + +msgid "" +msgstr "" + +msgid "&New image..." +msgstr "&Nouvelle image..." + +msgid "&Existing image..." +msgstr "Image &Existante..." + +msgid "Existing image (&Write-protected)..." +msgstr "Image Existante(&Lecture seule)..." + +msgid "&Record" +msgstr "En®istrer" + +msgid "&Play" +msgstr "&Jouer" + +msgid "&Rewind to the beginning" +msgstr "&Revenir au debut" + +msgid "&Fast forward to the end" +msgstr "Aller à la &Fin" + +msgid "E&ject" +msgstr "E&jecter" + +msgid "&Image..." +msgstr "&Image..." + +msgid "E&xport to 86F..." +msgstr "E&xport vers 86F..." + +msgid "&Mute" +msgstr "&Couper" + +msgid "E&mpty" +msgstr "E&jecter" + +msgid "&Reload previous image" +msgstr "&Recharger image précedente" + +msgid "&Image" +msgstr "&Image" + +msgid "Target &framerate" +msgstr "&Taux de rafraîchissement cible" + +msgid "&Sync with video" +msgstr "&Synchronisation avec la vidéo" + +msgid "&25 fps" +msgstr "&25 images par seconde" + +msgid "&30 fps" +msgstr "&30 images par seconde" + +msgid "&50 fps" +msgstr "&50 images par seconde" + +msgid "&60 fps" +msgstr "&60 images par seconde" + +msgid "&75 fps" +msgstr "&75 images par seconde" + +msgid "&VSync" +msgstr "Synchronisation &verticale" + +msgid "&Select shader..." +msgstr "Sé&lectionnez le shader..." + +msgid "&Remove shader" +msgstr "S&upprimer le shader" + +msgid "Preferences" +msgstr "Préférences" + +msgid "Sound Gain" +msgstr "Gain son" + +msgid "New Image" +msgstr "Nouvelle image" + +msgid "Settings" +msgstr "Réglages" + +msgid "Specify Main Window Dimensions" +msgstr "Spécifier le détournement de la fenêtre principale" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Annuler" + +msgid "Save these settings as &global defaults" +msgstr "Sauvegarder ces paramètres comme valeurs par défaut &globales" + +msgid "&Default" +msgstr "&Défaut" + +msgid "Language:" +msgstr "Langue:" + +msgid "Icon set:" +msgstr "Ensemble d'icônes:" + +msgid "Gain" +msgstr "Gain" + +msgid "File name:" +msgstr "Nom fichier:" + +msgid "Disk size:" +msgstr "Taille disque:" + +msgid "RPM mode:" +msgstr "Mode RPM:" + +msgid "Progress:" +msgstr "Progrès:" + +msgid "Width:" +msgstr "Largeur:" + +msgid "Height:" +msgstr "Hauteur:" + +msgid "Lock to this size" +msgstr "Verrouiller à cette taille" + +msgid "Machine type:" +msgstr "Type de machine:" + +msgid "Machine:" +msgstr "Machine:" + +msgid "Configure" +msgstr "Configurer" + +msgid "CPU type:" +msgstr "Type du processeur:" + +msgid "Speed:" +msgstr "Vitesse:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "États d'attente:" + +msgid "MB" +msgstr "Mo" + +msgid "Memory:" +msgstr "Mémoire:" + +msgid "Time synchronization" +msgstr "Synchronisation du temps" + +msgid "Disabled" +msgstr "Désactivé" + +msgid "Enabled (local time)" +msgstr "Activé (heure locale)" + +msgid "Enabled (UTC)" +msgstr "Activé (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Recompilateur dynamique" + +msgid "Video:" +msgstr "Vidéo:" + +msgid "Voodoo Graphics" +msgstr "Graphique Voodoo" + +msgid "Mouse:" +msgstr "Souris:" + +msgid "Joystick:" +msgstr "Manette de commande:" + +msgid "Joystick 1..." +msgstr "Manette 1..." + +msgid "Joystick 2..." +msgstr "Manette 2..." + +msgid "Joystick 3..." +msgstr "Manette 3..." + +msgid "Joystick 4..." +msgstr "Manette 4..." + +msgid "Sound card:" +msgstr "Carte son:" + +msgid "MIDI Out Device:" +msgstr "Sortie MIDI:" + +msgid "MIDI In Device:" +msgstr "Entrée MIDI:" + +msgid "Standalone MPU-401" +msgstr "MPU-401 autonome" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Utiliser le son FLOAT32" + +msgid "Network type:" +msgstr "Type de réseau:" + +msgid "PCap device:" +msgstr "Dispositif PCap:" + +msgid "Network adapter:" +msgstr "Adaptateur de réseau:" + +msgid "LPT1 Device:" +msgstr "Dispositif LPT1:" + +msgid "LPT2 Device:" +msgstr "Dispositif LPT2:" + +msgid "LPT3 Device:" +msgstr "Dispositif LPT3:" + +msgid "Serial port 1" +msgstr "Port série 1" + +msgid "Serial port 2" +msgstr "Port série 2" + +msgid "Serial port 3" +msgstr "Port série 3" + +msgid "Serial port 4" +msgstr "Port série 4" + +msgid "Parallel port 1" +msgstr "Port parallèle 1" + +msgid "Parallel port 2" +msgstr "Port parallèle 2" + +msgid "Parallel port 3" +msgstr "Port parallèle 3" + +msgid "HD Controller:" +msgstr "Contrôleur HD:" + +msgid "FD Controller:" +msgstr "Contrôleur FD:" + +msgid "Tertiary IDE Controller" +msgstr "Contrôleur IDE tertiaire" + +msgid "Quaternary IDE Controller" +msgstr "Contrôleur IDE quaternair" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Contrôleur 1:" + +msgid "Controller 2:" +msgstr "Contrôleur 2:" + +msgid "Controller 3:" +msgstr "Contrôleur 3:" + +msgid "Controller 4:" +msgstr "Contrôleur 4:" + +msgid "Cassette" +msgstr "Cassette" + +msgid "Hard disks:" +msgstr "Disques durs:" + +msgid "&New..." +msgstr "&Nouveau..." + +msgid "&Existing..." +msgstr "&Existant..." + +msgid "&Remove" +msgstr "&Supprimer" + +msgid "Bus:" +msgstr "Bus:" + +msgid "Channel:" +msgstr "Canal:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Spécifier..." + +msgid "Sectors:" +msgstr "Secteurs:" + +msgid "Heads:" +msgstr "Têtes:" + +msgid "Cylinders:" +msgstr "Cylindres:" + +msgid "Size (MB):" +msgstr "Taille (Mo):" + +msgid "Type:" +msgstr "Type:" + +msgid "Image Format:" +msgstr "Format Image:" + +msgid "Block Size:" +msgstr "Taille du bloc:" + +msgid "Floppy drives:" +msgstr "Lecteurs de disquettes:" + +msgid "Turbo timings" +msgstr "Turbo" + +msgid "Check BPB" +msgstr "Vérifier BPB" + +msgid "CD-ROM drives:" +msgstr "Lecterus CD-ROM:" + +msgid "MO drives:" +msgstr "Lecteurs magnéto-optiques:" + +msgid "ZIP drives:" +msgstr "Lecteurs ZIP:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "Horloge temps réel ISA:" + +msgid "ISA Memory Expansion" +msgstr "Expansion de la mémoire ISA" + +msgid "Card 1:" +msgstr "Carte 1:" + +msgid "Card 2:" +msgstr "Carte 2:" + +msgid "Card 3:" +msgstr "Carte 3:" + +msgid "Card 4:" +msgstr "Carte 4:" + +msgid "ISABugger device" +msgstr "Dispositif ISABugger" + +msgid "POST card" +msgstr "Carte POST" + +msgid "Segoe UI" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Erreur" + +msgid "Fatal error" +msgstr "Erreur fatale" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Appuyez sur CTRL+ALT+PAGE ↓ pour revenir au mode fenêtré." + +msgid "Speed" +msgstr "Vitesse" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgstr "Images ZIP (*.IM? *.im? *.ZDI *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." +msgstr "86Box n'a pas pu trouver d'images ROM utilisables.\n\nS'il vous plait, téléchargez un ensemble ROM et extrayez-le dans le répertoire ""roms""." + +msgid "(empty)" +msgstr "(vide)" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" +msgstr "Images ZIP (*.IM? *.im? *.ZDI *.zdi);;Tous les fichiers (*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Activé" + +msgid "Off" +msgstr "Désactivé" + +msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" +msgstr "Tous les images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Images basiques du secteur (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Images de la surface (*.86F *.86f)" + +msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "La machine ""%hs"" n'est pas disponible en raison de l'absence de ROMs dans le répertoire roms/machines. Basculer vers une machine disponible." + +msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "La carte vidéo ""%hs"" n'est pas disponible en raison de l'absence de ROMs dans le répertoire roms/video. Basculer vers une carte vidéo disponible." + +msgid "Machine" +msgstr "Machine" + +msgid "Display" +msgstr "Affichage" + +msgid "Input devices" +msgstr "Dispositifs d'entrée" + +msgid "Sound" +msgstr "Son" + +msgid "Network" +msgstr "Réseau" + +msgid "Ports (COM & LPT)" +msgstr "Ports (COM et LPT)" + +msgid "Storage controllers" +msgstr "Contrôleurs de stockage" + +msgid "Hard disks" +msgstr "Disques durs" + +msgid "Floppy & CD-ROM drives" +msgstr "Lecteurs de disquette et CD-ROM" + +msgid "Other removable devices" +msgstr "Autres dispositifs amovibles" + +msgid "Other peripherals" +msgstr "Autres périfériques" + +msgid "Surface images (*.86F *.86f)" +msgstr "Images de surface (*.86F *.86f)" + +msgid "Click to capture mouse" +msgstr "Cliquer pour capturer la souris" + +msgid "Press F8+F12 to release mouse" +msgstr "Appuyer sur F8+F12 pour libérer la souris" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Appuyer sur F8+F12 ou le bouton central pour libérer la souris" + +msgid "Unable to initialize FluidSynth" +msgstr "Impossible d'initialiser FluidSynth" + +msgid "Bus" +msgstr "Bus" + +msgid "File" +msgstr "File" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "T" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "Ko" + +msgid "Could not initialize the video renderer." +msgstr "Impossible d'initialiser le moteur de rendu vidéo." + +msgid "Default" +msgstr "Défaut" + +msgid "%i Wait state(s)" +msgstr "%i état(s) d'attente" + +msgid "Type" +msgstr "Type" + +msgid "Failed to set up PCap" +msgstr "Impossible d'initialiser PCap" + +msgid "No PCap devices found" +msgstr "Aucun dispositif PCap trouvé" + +msgid "Invalid PCap device" +msgstr "Dispositif PCap non valide" + +msgid "Standard 2-button joystick(s)" +msgstr "Manette(s) standard avec 2 boutons" + +msgid "Standard 4-button joystick" +msgstr "Manette standard avec 4 boutons" + +msgid "Standard 6-button joystick" +msgstr "Manette standard avec 6 boutons" + +msgid "Standard 8-button joystick" +msgstr "Manette standard avec 6 boutons" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Système de contrôle de vol Thrustmaster" + +msgid "None" +msgstr "Aucun" + +msgid "Unable to load keyboard accelerators." +msgstr "Impossible de charger les accélérateurs de clavier." + +msgid "Unable to register raw input." +msgstr "Impossible de charger l'entrée raw." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u Mo (CTS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Disquette %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgstr "Toutes les images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Images du secteur avancés (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Images du secteur basiques (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Images du flux (*.FDI *.fdi);;Images de surface (*.86F *.86f *.MFM *.mfm);;Tous les fichiers (*)" + +msgid "Unable to initialize FreeType" +msgstr "Impossible d'initialiser FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Impossible d'initialiser SDL, SDL2.dll est nécessaire" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Etes-vous sûr de vouloir réinitialiser la machine émulée ?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Etes-vous sûr de vouloir quitter 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Impossible d'initialiser Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "Magnéto-optique %i (%ls): %ls" + +msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgstr "Images magnéto-optiques (*.IM? *.im? *.MDI *.mdi);;Tous les fichiers (*)" + +msgid "Welcome to 86Box!" +msgstr "Bienvenue dans 86Box !" + +msgid "Internal controller" +msgstr "Côntrolleur interne" + +msgid "Exit" +msgstr "Sortir" + +msgid "No ROMs found" +msgstr "Pas de ROMs trouvées" + +msgid "Do you want to save the settings?" +msgstr "Voulez-vous sauvegarder les paramètres ?" + +msgid "This will hard reset the emulated machine." +msgstr "Cela entraînera la réinitialisation complète de la machine émulée." + +msgid "Save" +msgstr "Sauvegarder" + +msgid "About 86Box" +msgstr "À propos de 86Box" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Un émulateur de vieux ordinateurs\n\nAuteurs: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nLibéré sous la licence GNU General Public License version 2 ou ultérieure. Pour plus d'informations, voir le fichier LICENSE." + +msgid "Hardware not available" +msgstr "Matériel non disponible" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Assurez-vous que libpcap est installé et que vou utilisez une connexion réseau compatible avec libpcap." + +msgid "Invalid configuration" +msgstr "Configuration non valide" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " est nécessaire pour l'émulation de l'imprimante ESC/P." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " est nécessair pour la conversion automatique des fichiers PostScript dans PDF.\n\nTous les documents envoyés à l'imprimante générique PostScript seront sauvés comme des fichiers PostScript (.ps)." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " est nécessaire pour la sortie MIDI FluidSynth." + +msgid "Entering fullscreen mode" +msgstr "Entrer en mode plein écran" + +msgid "Don't show this message again" +msgstr "Ne pas montrer ce message à nouveau" + +msgid "Don't exit" +msgstr "Ne pas sortir" + +msgid "Reset" +msgstr "Réinitialiser" + +msgid "Don't reset" +msgstr "Ne pas réinitialiser" + +msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgstr "Images CD-ROM (*.ISO *.iso *.CUE *.cue);;Tous les fichiers (*)" + +msgid "%hs Device Configuration" +msgstr "Configuration du dispositif %hs" + +msgid "Monitor in sleep mode" +msgstr "Moniteur en mode veille" + +msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" +msgstr "Shaders OpenGL (*.GLSL *.glsl);;Tous les fichiers (*)" + +msgid "OpenGL options" +msgstr "Options OpenGL" + +msgid "You are loading an unsupported configuration" +msgstr "Vous chargez une configuration non prise en charge" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "La filtrage du type du processeur sur la base de la machine sélectionné est désactivé pur cette machine émulée.\n\nCela permet de sélectionner une processeur que est sinon incompatible avec la machine sélectionné. Cependant, il pourrait y avoir des incompatibilités avec le BIOS de la machine ou autres logiciels.\n\nL'activatione de cette configuration non est officiellement prise en charge et tout rapport de bogue peut être fermé comme étant invalide." + +msgid "Continue" +msgstr "Continuer" + +msgid "Cassette: %s" +msgstr "Cassette: %s" + +msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" +msgstr "Images cassette (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Tous les fichiers (*)" + +msgid "Cartridge %i: %ls" +msgstr "Cartouche %i: %ls" + +msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" +msgstr "Images cartouche (*.A *.a *.B *.b *.JRC *.jrc);;Tous les fichiers (*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Hard disk (%s)" +msgstr "Disque dur (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "Les lecteurs de CD-ROM MFM/RLL ou ESDI n'ont jamais existé" + +msgid "Custom..." +msgstr "Personnalisé..." + +msgid "Custom (large)..." +msgstr "Personnalisé (grand)..." + +msgid "Add New Hard Disk" +msgstr "Ajouter un nouveau disque dur" + +msgid "Add Existing Hard Disk" +msgstr "Ajouter un disque dur existant" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "Les images de disque HDI ne peuvent pas avoir une taille supériure à Go." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Les images de disque ne peuvent pas avoir un taille supérieure à 127 Go." + +msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" +msgstr "Images de dique dur (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Tous les fichiers (*)" + +msgid "Unable to read file" +msgstr "Impossible de lire le fichier" + +msgid "Unable to write file" +msgstr "Impossible d'écrire le fichier" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "Les images HDI ou HDX avec une taille de secteur différente de 512 non sont pas prises en charge." + +msgid "USB is not yet supported" +msgstr "USB n'est pas encore pris en charge." + +msgid "Disk image file already exists" +msgstr "Le fichier de l'image disque existe déjà." + +msgid "Please specify a valid file name." +msgstr "Veuillez spécifier un nom de fichier valide." + +msgid "Disk image created" +msgstr "Image de disque créée" + +msgid "Make sure the file exists and is readable." +msgstr "Assurez-vous que le fichier existe et est lisible." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Assurez-vous que le fichier en cours d'enregistrement se trouve dans un répertoire accessible en écriture." + +msgid "Disk image too large" +msgstr "Image disque trop grande" + +msgid "Remember to partition and format the newly-created drive." +msgstr "N'oubliez pas de partitionner et de formater le nouveau disque créé." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Le fichier sélectionné sera écrasé. Etes-vous sûr de vouloir l'utiliser?" + +msgid "Unsupported disk image" +msgstr "Image disque non prise en charge" + +msgid "Overwrite" +msgstr "Écraser" + +msgid "Don't overwrite" +msgstr "Ne pas écraser" + +msgid "Raw image (.img)" +msgstr "Image brute (.img)" + +msgid "HDI image (.hdi)" +msgstr "Image HDI (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "Image HDX (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD à taille fixe (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD à taille dynamique (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "VHD à différenciation (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Blocs grands (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Blocs petits (512 KB)" + +msgid "VHD files (*.VHD *.vhd);;All files (*)" +msgstr "Fichiers VHD (*.VHD *.vhd);;Tous les fichiers (*)" + +msgid "Select the parent VHD" +msgstr "Sélectionnez le VHD parent" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Il est possible que l'image parente a été modifié après la création de l'image à différenciation.\n\nIl est même possible que les fichiers de l'mage ont été déplacés ou copiés ou il existe un bogue dans le programme que a créé ce disque.\n\nVoulez-vous réparer l'horodatage?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Les horodatages des disques parent et enfant ne correspondent pas" + +msgid "Could not fix VHD timestamp." +msgstr "Impossible de réparer l'horodatage du VHD." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (cluster 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (cluster 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5"" 128Mb M.O. (ISO 10090)" +msgstr "3.5"" 128Mb M.O. (ISO 10090)" + +msgid "3.5"" 230Mb M.O. (ISO 13963)" +msgstr "3.5"" 230Mb M.O. (ISO 13963)" + +msgid "3.5"" 540Mb M.O. (ISO 15498)" +msgstr "3.5"" 540Mb M.O. (ISO 15498)" + +msgid "3.5"" 640Mb M.O. (ISO 15498)" +msgstr "3.5"" 640Mb M.O. (ISO 15498)" + +msgid "3.5"" 1.3Gb M.O. (GigaMO)" +msgstr "3.5"" 1.3Gb M.O. (GigaMO)" + +msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25"" 600Mb M.O." +msgstr "5.25"" 600Mb M.O." + +msgid "5.25"" 650Mb M.O." +msgstr "5.25"" 650Mb M.O." + +msgid "5.25"" 1Gb M.O." +msgstr "5.25"" 1Gb M.O." + +msgid "5.25"" 1.3Gb M.O." +msgstr "5.25"" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "RPM précis" + +msgid "1%% below perfect RPM" +msgstr "Précision RPM de moins 1%" + +msgid "1.5%% below perfect RPM" +msgstr "Précision RPM de moins 1.5%" + +msgid "2%% below perfect RPM" +msgstr "Précision RPM de moins 2%" + +msgid "(System Default)" +msgstr "(Défaut du système)" + diff --git a/src/qt/languages/hr_HR.po b/src/qt/languages/hr_HR.po new file mode 100644 index 000000000..d06dba88d --- /dev/null +++ b/src/qt/languages/hr_HR.po @@ -0,0 +1,1173 @@ +msgid "Translated by" +msgstr "Unknown" + +msgid "&Action" +msgstr "&Radnje" + +msgid "&Keyboard requires capture" +msgstr "&Tipkovnica zahtijeva hvatanje miša" + +msgid "&Right CTRL is left ALT" +msgstr "&Desni CTRL je lijevi ALT" + +msgid "&Hard Reset..." +msgstr "&Ponovno pokretanje..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Pauza" + +msgid "E&xit..." +msgstr "Iz&laz..." + +msgid "&View" +msgstr "&Pogled" + +msgid "&Hide status bar" +msgstr "&Sakrij statusni redak" + +msgid "&Resizeable window" +msgstr "&Prozor s promjenjivim veličinama" + +msgid "R&emember size && position" +msgstr "&Zapamtite veličinu i položaj" + +msgid "Re&nderer" +msgstr "&Renderer" + +msgid "&Qt (Software)" +msgstr "&Qt (Softver)" + +msgid "Qt (&Hardware)" +msgstr "Qt (&Hardver)" + +msgid "Qt (&OpenGL)" +msgstr "Qt (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 jezgra)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "Odrediti veličinu..." + +msgid "F&orce 4:3 display ratio" +msgstr "&4:3 omjer prikaza" + +msgid "&Window scale factor" +msgstr "&Faktor skaliranja prozora" + +msgid "&0.5x" +msgstr "&0,5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1,&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Metoda filtriranja" + +msgid "&Nearest" +msgstr "&Najbliža" + +msgid "&Linear" +msgstr "&Linearna" + +msgid "Hi&DPI scaling" +msgstr "&HiDPI skaliranje" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Cijelozaslonski način\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "&Način cijelozaslonskog rastezanja" + +msgid "&Full screen stretch" +msgstr "&Razvuci na cijeli zaslona" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Kvadratni pikseli (zadrži omjer)" + +msgid "&Integer scale" +msgstr "&Cijelobrojno skaliranje" + +msgid "E&GA/(S)VGA settings" +msgstr "E&GA/(S)VGA postavke" + +msgid "&Inverted VGA monitor" +msgstr "&Obrni boje zaslona VGA" + +msgid "VGA screen &type" +msgstr "&Tip zaslona VGA" + +msgid "RGB &Color" +msgstr "RGB u &boji" + +msgid "&RGB Grayscale" +msgstr "&RGB u nijansama sive boje" + +msgid "&Amber monitor" +msgstr "&Jantarni zaslon" + +msgid "&Green monitor" +msgstr "&Zeleni zaslon" + +msgid "&White monitor" +msgstr "&Bijeli zaslon" + +msgid "Grayscale &conversion type" +msgstr "&Vrsta konverzije nijansa sive boje" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Prosjek" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "&Višak slike CGA/PCjr/Tandy/EGA/(S)VGA" + +msgid "Change contrast for &monochrome display" +msgstr "&Promjeni kontrast za crno-bijeli zaslon" + +msgid "&Media" +msgstr "&Mediji" + +msgid "&Tools" +msgstr "&Alati" + +msgid "&Settings..." +msgstr "&Opcije..." + +msgid "&Update status bar icons" +msgstr "&Ažuriraj ikone statusnog redka" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Napravi &snimku zaslona\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Postavke..." + +msgid "Enable &Discord integration" +msgstr "Omogući integraciju sa programom &Discord" + +msgid "Sound &gain..." +msgstr "&Pojačanje zvuka..." + +msgid "Begin trace\tCtrl+T" +msgstr "Z&apočni praćenje\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "&Svrši praćenje\tCtrl+T" + +msgid "&Logging" +msgstr "&Logging" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Omogući bilježenje za BusLogic\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Omogući bilježenje za CD-ROM\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Omogući bilježenje za diskete (86F)\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Omogući bilježenje za disketni krmilnik\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Omogući bilježenje za IDE\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Omogući bilježenje za serijska vrata\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Omogući bilježenje za omrežje\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Zabilježi prekidnu točku\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "&Ispiši memoriju zaslona\tCtrl+F1" + +msgid "&Help" +msgstr "&Pomoć" + +msgid "&Documentation..." +msgstr "&Dokumentacija..." + +msgid "&About 86Box..." +msgstr "&O programu 86Box..." + +msgid "" +msgstr "" + +msgid "&New image..." +msgstr "&Nova slika..." + +msgid "&Existing image..." +msgstr "&Postojeća slika..." + +msgid "Existing image (&Write-protected)..." +msgstr "Postojeća slika (&zaštićena od pisanja)..." + +msgid "&Record" +msgstr "&Snimi" + +msgid "&Play" +msgstr "&Pokreni" + +msgid "&Rewind to the beginning" +msgstr "P&remotaj na početak" + +msgid "&Fast forward to the end" +msgstr "&Preskoči do kraja" + +msgid "E&ject" +msgstr "&Izbaci" + +msgid "&Image..." +msgstr "&Slika..." + +msgid "E&xport to 86F..." +msgstr "&Izvozi u 86F..." + +msgid "&Mute" +msgstr "&Isključi zvuk" + +msgid "E&mpty" +msgstr "&Prazno" + +msgid "&Reload previous image" +msgstr "&Ponovo učitaj prethodnu sliku" + +msgid "&Image" +msgstr "&Slika" + +msgid "Target &framerate" +msgstr "&Ciljni broj okvira u sekundi" + +msgid "&Sync with video" +msgstr "&Sinkroniziraj s videom" + +msgid "&25 fps" +msgstr "&25 fps" + +msgid "&30 fps" +msgstr "&30 fps" + +msgid "&50 fps" +msgstr "&50 fps" + +msgid "&60 fps" +msgstr "&60 fps" + +msgid "&75 fps" +msgstr "&75 fps" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Odaberi shader..." + +msgid "&Remove shader" +msgstr "&Ukloni shader" + +msgid "Preferences" +msgstr "Postavke" + +msgid "Sound Gain" +msgstr "Pojačavanje zvuka" + +msgid "New Image" +msgstr "Nova slika" + +msgid "Settings" +msgstr "Opcije" + +msgid "Specify Main Window Dimensions" +msgstr "Odredite glavne dimenzije prozora" + +msgid "OK" +msgstr "U redu" + +msgid "Cancel" +msgstr "Otkaži" + +msgid "Save these settings as &global defaults" +msgstr "Spremite ove postavke kao &globalne zadane postavke" + +msgid "&Default" +msgstr "Zadano" + +msgid "Language:" +msgstr "Jezik:" + +msgid "Icon set:" +msgstr "Paket ikona:" + +msgid "Gain" +msgstr "Pojačavanje" + +msgid "File name:" +msgstr "Ime datoteke:" + +msgid "Disk size:" +msgstr "Veličina diska:" + +msgid "RPM mode:" +msgstr "Način broja okretaja:" + +msgid "Progress:" +msgstr "Napredak:" + +msgid "Width:" +msgstr "Širina:" + +msgid "Height:" +msgstr "Visina:" + +msgid "Lock to this size" +msgstr "Zaključajte na ovu veličinu" + +msgid "Machine type:" +msgstr "Tip sistema:" + +msgid "Machine:" +msgstr "Sistem:" + +msgid "Configure" +msgstr "Namjesti" + +msgid "CPU type:" +msgstr "Tip procesora:" + +msgid "Speed:" +msgstr "Brzina:" + +msgid "FPU:" +msgstr "FPU uređaj:" + +msgid "Wait states:" +msgstr "Stanja čekanja:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Memorija:" + +msgid "Time synchronization" +msgstr "Sinkronizacija vremena" + +msgid "Disabled" +msgstr "Isključeno" + +msgid "Enabled (local time)" +msgstr "Uključeno (lokalno vrijeme)" + +msgid "Enabled (UTC)" +msgstr "Uključeno (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Dinamički rekompilator" + +msgid "Video:" +msgstr "Video:" + +msgid "Voodoo Graphics" +msgstr "Voodoo grafika" + +msgid "Mouse:" +msgstr "Miš:" + +msgid "Joystick:" +msgstr "Palica za igru:" + +msgid "Joystick 1..." +msgstr "Palica za igru 1..." + +msgid "Joystick 2..." +msgstr "Palica za igru 2..." + +msgid "Joystick 3..." +msgstr "Palica za igru 3..." + +msgid "Joystick 4..." +msgstr "Palica za igru 4..." + +msgid "Sound card:" +msgstr "Zvučna kartica:" + +msgid "MIDI Out Device:" +msgstr "Izlazni uređaj MIDI:" + +msgid "MIDI In Device:" +msgstr "Ulazni uređaj MIDI:" + +msgid "Standalone MPU-401" +msgstr "Samostalni MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Koristi FLOAT32 za zvuk" + +msgid "Network type:" +msgstr "Tip mreže:" + +msgid "PCap device:" +msgstr "Uređaj PCap:" + +msgid "Network adapter:" +msgstr "Mrežna kartica:" + +msgid "LPT1 Device:" +msgstr "Uređaj LPT1:" + +msgid "LPT2 Device:" +msgstr "Uređaj LPT2:" + +msgid "LPT3 Device:" +msgstr "Uređaj LPT3:" + +msgid "Serial port 1" +msgstr "Serijska vrata 1" + +msgid "Serial port 2" +msgstr "Serijska vrata 2" + +msgid "Serial port 3" +msgstr "Serijska vrata 3" + +msgid "Serial port 4" +msgstr "Serijska vrata 4" + +msgid "Parallel port 1" +msgstr "Paralelna vrata 1" + +msgid "Parallel port 2" +msgstr "Paralelna vrata 2" + +msgid "Parallel port 3" +msgstr "Paralelna vrata 3" + +msgid "HD Controller:" +msgstr "Kontroler tvrdog diska:" + +msgid "FD Controller:" +msgstr "Kontroler diskete:" + +msgid "Tertiary IDE Controller" +msgstr "Tercijarni IDE kontroler" + +msgid "Quaternary IDE Controller" +msgstr "Kvaternarni IDE kontroler" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Kontroler 1:" + +msgid "Controller 2:" +msgstr "Kontroler 2:" + +msgid "Controller 3:" +msgstr "Kontroler 3:" + +msgid "Controller 4:" +msgstr "Kontroler 4:" + +msgid "Cassette" +msgstr "Audio kaseta" + +msgid "Hard disks:" +msgstr "Tvrdi diskovi:" + +msgid "&New..." +msgstr "&Novi..." + +msgid "&Existing..." +msgstr "&Postojeći..." + +msgid "&Remove" +msgstr "&Ukloni" + +msgid "Bus:" +msgstr "Sabirnica:" + +msgid "Channel:" +msgstr "Kanal:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Odredi..." + +msgid "Sectors:" +msgstr "Sektori:" + +msgid "Heads:" +msgstr "Glave:" + +msgid "Cylinders:" +msgstr "Cilindri:" + +msgid "Size (MB):" +msgstr "Veličina (MB):" + +msgid "Type:" +msgstr "Tip:" + +msgid "Image Format:" +msgstr "Format slike:" + +msgid "Block Size:" +msgstr "Veličina slike:" + +msgid "Floppy drives:" +msgstr "Disketni pogoni:" + +msgid "Turbo timings" +msgstr "Turbo vrijemena" + +msgid "Check BPB" +msgstr "Provjeraj BPB" + +msgid "CD-ROM drives:" +msgstr "CD-ROM pogoni:" + +msgid "MO drives:" +msgstr "MO pogoni:" + +msgid "ZIP drives:" +msgstr "ZIP pogoni:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "Ura u stvarnom vrijemenu RTC:" + +msgid "ISA Memory Expansion" +msgstr "Proširenje memorije ISA" + +msgid "Card 1:" +msgstr "Kartica 1:" + +msgid "Card 2:" +msgstr "Kartica 2:" + +msgid "Card 3:" +msgstr "Kartica 3:" + +msgid "Card 4:" +msgstr "Kartica 4:" + +msgid "ISABugger device" +msgstr "Uređaj ISABugger" + +msgid "POST card" +msgstr "Kartica POST" + +msgid "Segoe UI" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Greška" + +msgid "Fatal error" +msgstr "Fatalna greška" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Pritisnite CTRL+ALT+PAGE DOWN za povratak u prozorski način rada." + +msgid "Speed" +msgstr "Brzina" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgstr "ZIP slike (*.IM? *.im? *.ZDI *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." +msgstr "86Box nije mogao pronaći upotrebljive ROM datoteke.\n\nMolimte posjetite sknite paket s ROM datotekama i ekstrahirajte paket u ""roms"" mapu." + +msgid "(empty)" +msgstr "(prazno)" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" +msgstr "ZIP slike (*.IM? *.im? *.ZDI *.zdi);;Sve datoteke (*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Uključeno" + +msgid "Off" +msgstr "Isključeno" + +msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" +msgstr "Sve slike (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;BOsnovne sektorske slike (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Površinske slike (*.86F *.86f)" + +msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Sistem ""%hs"" nije dostupan jer ne postoje potrebni ROM-ovi u mapu roms/machines. Prebacivanje na dostupno računalo." + +msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Video kartica ""%hs"" nije dostupna jer ne postoje potrebni ROM-ovi u mapu roms/video. Prebacivanje na dostupnu video karticu." + +msgid "Machine" +msgstr "Sistem" + +msgid "Display" +msgstr "Video" + +msgid "Input devices" +msgstr "Ulazni uređaji" + +msgid "Sound" +msgstr "Zvuk" + +msgid "Network" +msgstr "Mreža" + +msgid "Ports (COM & LPT)" +msgstr "Vrata (COM & LPT)" + +msgid "Storage controllers" +msgstr "Kontroleri za diskove" + +msgid "Hard disks" +msgstr "Tvrdi diskovi" + +msgid "Floppy & CD-ROM drives" +msgstr "Floppy & CD-ROM pogoni" + +msgid "Other removable devices" +msgstr "Ostali uklonjivi uređaji" + +msgid "Other peripherals" +msgstr "Ostali periferni uređaji" + +msgid "Surface images (*.86F *.86f)" +msgstr "Površinske slike (*.86F *.86f)" + +msgid "Click to capture mouse" +msgstr "Kliknite da uhvatite miš" + +msgid "Press F8+F12 to release mouse" +msgstr "Pritisnite F8+F12 za otpustanje miša" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Pritisnite F8+F12 ili srednji gumb miša za otpuštanje miša" + +msgid "Unable to initialize FluidSynth" +msgstr "Nije moguće inicijalizirati FluidSynth" + +msgid "Bus" +msgstr "Bus" + +msgid "File" +msgstr "Datoteka" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Nije moguće inicijalizirati renderer." + +msgid "Default" +msgstr "Standard" + +msgid "%i Wait state(s)" +msgstr "%i stanje čekanja" + +msgid "Type" +msgstr "Tip" + +msgid "Failed to set up PCap" +msgstr "Postavljanje PCap-a nije uspjelo" + +msgid "No PCap devices found" +msgstr "Nema PCap uređaja" + +msgid "Invalid PCap device" +msgstr "Nevažeći PCap uređaj" + +msgid "Standard 2-button joystick(s)" +msgstr "Standardna palica za igru s 2 tipke" + +msgid "Standard 4-button joystick" +msgstr "Standardna palica za igru s 4 tipke" + +msgid "Standard 6-button joystick" +msgstr "Standardna palica za igru s 6 tipke" + +msgid "Standard 8-button joystick" +msgstr "Standardna palica za igru s 8 tipke" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Bez" + +msgid "Unable to load keyboard accelerators." +msgstr "Nije moguće učitati ubrzivače tipkovnice." + +msgid "Unable to register raw input." +msgstr "Nije moguće registrirati neobrađeni unos." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Disketa %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgstr "Sve slike (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Napredne sektorske slike (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Osnovne sektorske slike (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux slike (*.FDI *.fdi);;Površinske slike (*.86F *.86f *.MFM *.mfm);;Sve datoteke (*)" + +msgid "Unable to initialize FreeType" +msgstr "Nije moguće inicijalizirati FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Nije moguće inicijalizirati SDL, SDL2.dll je potrebno" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Jeste li sigurni da želite hard resetirati emulirani sistem?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Jeste li sigurni da želite zatvoriti 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Nije moguće inicijalizirati GhostScript" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgstr "MO slike (*.IM? *.im? *.MDI *.mdi);;Svi datoteke (*)" + +msgid "Welcome to 86Box!" +msgstr "Dobrodošli u 86Box!" + +msgid "Internal controller" +msgstr "Uunutarnji kontroler" + +msgid "Exit" +msgstr "Izlazi" + +msgid "No ROMs found" +msgstr "Nisu pronađene ROM datoteke" + +msgid "Do you want to save the settings?" +msgstr "Želite li spremiti postavke?" + +msgid "This will hard reset the emulated machine." +msgstr "Ovo će napraviti hard resetiranje emuliranog sistema." + +msgid "Save" +msgstr "Spremaj" + +msgid "About 86Box" +msgstr "O programu 86Box" + +msgid "86Box v" +msgstr "86Box verzija " + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Emulator starih računala\n\nAutori: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, i drugi.\n\nPreveo: dob205\n\nObjavljeno pod licencom GNU General Public License, verzija 2 ili novije. Za više informacija pogledajte datoteku LICENCE." + +msgid "Hardware not available" +msgstr "Hardver nije dostupan" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Provjerite je li libpcap instaliran i jeste li na mreži, kompadibilnoj s libpcap." + +msgid "Invalid configuration" +msgstr "Nevažeća konfiguracija" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " je potrebno za emuliranje ESC/P pisača." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " je potrebno za automatsku konverziju PostScript datoteke u PDF datoteke.\n\nSvi dokumenti poslani na generički PostScript pisač bit će spremljeni kao PostScript (.ps) datoteke." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " je potrebno za FluidSynth MIDI izlaz." + +msgid "Entering fullscreen mode" +msgstr "Ulazim u cijelozaslonski način" + +msgid "Don't show this message again" +msgstr "Ne pokazi više ovu poruku" + +msgid "Don't exit" +msgstr "Ne izlazi" + +msgid "Reset" +msgstr "Resetiraj" + +msgid "Don't reset" +msgstr "Ne resetiraj" + +msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgstr "CD-ROM slike (*.ISO *.iso *.CUE *.cue);;Sve datoteke (*)" + +msgid "%hs Device Configuration" +msgstr "Konfiguracija uređaja %hs " + +msgid "Monitor in sleep mode" +msgstr "Ekran u stanju mirovanja" + +msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" +msgstr "OpenGL shaderi (*.GLSL *.glsl);;Sve datoteke (*)" + +msgid "OpenGL options" +msgstr "OpenGL opcije" + +msgid "You are loading an unsupported configuration" +msgstr "Učitavate nepodržanu konfiguraciju" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "Filtriranje tipa CPU-a na temelju odabranog sistema onemogućeno je za ovaj emulirani sistem.\n\nOvo omogućuje odabir procesora koji inače nisu kompatibilne s odabranog sistem. Međutim, možete naići na na nekompatibilnosti s BIOS-om sustava ili drugim softverom.\n\nOmogućavanje ove postavke nije službeno podržano i sva prijava o greškama mogu biti zatvorena kao ""invalid""." + +msgid "Continue" +msgstr "Nastavi" + +msgid "Cassette: %s" +msgstr "Audio kaseta: %s" + +msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" +msgstr "Slike audio kasete (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Sve datoteke (*)" + +msgid "Cartridge %i: %ls" +msgstr "Kaseta %i: %ls" + +msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" +msgstr "Slike kasete (*.A *.a *.B *.b *.JRC *.jrc);;Sve datoteke (*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Hard disk (%s)" +msgstr "Tvrdi disk (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL ili ESDI CD-ROM pogoni nisu nikada postojali" + +msgid "Custom..." +msgstr "Prilagođeno..." + +msgid "Custom (large)..." +msgstr "Prilagođeno (veliko)..." + +msgid "Add New Hard Disk" +msgstr "Dodajte novi tvrdi disk" + +msgid "Add Existing Hard Disk" +msgstr "Dodajte postojeći tvrdi disk" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "HDI disk image datoteke ne mogu biti veće od 4 GB." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Slike tvrdog diska ne mogu biti veće od 127 GB." + +msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" +msgstr "Slike za tvrde diskove (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Sve datoteke (*)" + +msgid "Unable to read file" +msgstr "Nije moguće pročitati datoteku" + +msgid "Unable to write file" +msgstr "Nije moguće napisati datoteku" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "HDI ili HDX slike s veličinom sektora koja nije 512 kB nisu podržane." + +msgid "USB is not yet supported" +msgstr "USB nije još podržano" + +msgid "Disk image file already exists" +msgstr "Slika diska već postoji" + +msgid "Please specify a valid file name." +msgstr "Molimte unesite važeći naziv datoteke." + +msgid "Disk image created" +msgstr "Slika je stvorena" + +msgid "Make sure the file exists and is readable." +msgstr "Provjerite je li postoji datoteka i je li čitljiva." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Provjerite je li se datoteka sprema u mapu s dopuštenjima za pisanje." + +msgid "Disk image too large" +msgstr "Slika diska je prevelika" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Ne zaboravite stvoriti particije i formatirati ih na novom disku." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Odabrana datoteka bit će prebrisana. Jeste li sigurni da želite koristiti ovu daoteku?" + +msgid "Unsupported disk image" +msgstr "Nepodržana slika diska" + +msgid "Overwrite" +msgstr "Prepiši" + +msgid "Don't overwrite" +msgstr "Ne prepiši" + +msgid "Raw image (.img)" +msgstr "Slika neobrađenih podataka (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDI slika (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDX slika (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD fiksne veličine (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD dinamičke veličine (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Različiti VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Veliki blokovi (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Mali blokovi (512 KB)" + +msgid "VHD files (*.VHD *.vhd);;All files (*)" +msgstr "VHD slike (*.VHD *.vhd);;Sve datoteke (*)" + +msgid "Select the parent VHD" +msgstr "Izaberi matičnu sliku VHD" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "To bi moglo značiti da je matična slika promijenjena nakon što je stvorena različita slika.\n\nTo se također može dogoditi ako su slike premještene ili kopirane, ili greška u programu koji je stvorio ovaj disk.\n\nŽelite li popraviti vremenske oznake?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Vremenske ozanke matične i poređenog diska ne odgovaraju." + +msgid "Could not fix VHD timestamp." +msgstr "Ne mogu popraviti vremensku oznaku slike VHD." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1,2 MB" + +msgid "1.25 MB" +msgstr "1,25 MB" + +msgid "1.44 MB" +msgstr "1,44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (1024 clusteri)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (2048 clusteri)" + +msgid "2.88 MB" +msgstr "2,88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5"" 128Mb M.O. (ISO 10090)" +msgstr "3,5"" 128Mb M.O. (ISO 10090)" + +msgid "3.5"" 230Mb M.O. (ISO 13963)" +msgstr "3,5"" 230Mb M.O. (ISO 13963)" + +msgid "3.5"" 540Mb M.O. (ISO 15498)" +msgstr "3,5"" 540Mb M.O. (ISO 15498)" + +msgid "3.5"" 640Mb M.O. (ISO 15498)" +msgstr "3,5"" 640Mb M.O. (ISO 15498)" + +msgid "3.5"" 1.3Gb M.O. (GigaMO)" +msgstr "3,5"" 1.3Gb M.O. (GigaMO)" + +msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgstr "3,5"" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25"" 600Mb M.O." +msgstr "5,25"" 600Mb M.O." + +msgid "5.25"" 650Mb M.O." +msgstr "5,25"" 650Mb M.O." + +msgid "5.25"" 1Gb M.O." +msgstr "5,25"" 1Gb M.O." + +msgid "5.25"" 1.3Gb M.O." +msgstr "5,25"" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "Savršeni broj okretaja u minuti" + +msgid "1%% below perfect RPM" +msgstr "1%% ispod savršenog broja okretaja" + +msgid "1.5%% below perfect RPM" +msgstr "1,5%% ispod savršenog broja okretaja" + +msgid "2%% below perfect RPM" +msgstr "2%% ispod savršenog broja okretaja" + +msgid "(System Default)" +msgstr "(Zadana postavka operativnog sustava)" + diff --git a/src/qt/languages/hu_HU.po b/src/qt/languages/hu_HU.po new file mode 100644 index 000000000..933c342da --- /dev/null +++ b/src/qt/languages/hu_HU.po @@ -0,0 +1,1173 @@ +msgid "Translated by" +msgstr "Laci bá'" + +msgid "&Action" +msgstr "&Művelet" + +msgid "&Keyboard requires capture" +msgstr "A &billentyűzet elfogást igényel" + +msgid "&Right CTRL is left ALT" +msgstr "A &jobb oldali CTRL a bal ALT" + +msgid "&Hard Reset..." +msgstr "Hardveres &újraindítás..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Szüneteltetés" + +msgid "E&xit..." +msgstr "&Kilépés..." + +msgid "&View" +msgstr "&Nézet" + +msgid "&Hide status bar" +msgstr "Állapotsor &elrejtése" + +msgid "&Resizeable window" +msgstr "&Átméretezhető ablak" + +msgid "R&emember size && position" +msgstr "Méret és pozíció &megjegyzése" + +msgid "Re&nderer" +msgstr "&Megjelenítő" + +msgid "&Qt (Software)" +msgstr "&Qt (Szoftveres)" + +msgid "Qt (&Hardware)" +msgstr "Qt (&Hardveres)" + +msgid "Qt (&OpenGL)" +msgstr "Qt (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 Core)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "Méretek kézi megadása..." + +msgid "F&orce 4:3 display ratio" +msgstr "&Rögzített 4:3 képarány" + +msgid "&Window scale factor" +msgstr "&Ablak méretezési tényező" + +msgid "&0.5x" +msgstr "&0,5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1,&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Szűrési mód" + +msgid "&Nearest" +msgstr "&Szomszédos" + +msgid "&Linear" +msgstr "&Lineáris" + +msgid "Hi&DPI scaling" +msgstr "Hi&DPI méretezés" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Teljes képernyő\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Teljes képernyős &méretezés" + +msgid "&Full screen stretch" +msgstr "&Nyújtás a teljes képernyőre" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Négyzetes képpontok (aránytartás)" + +msgid "&Integer scale" +msgstr "&Egész tényezős nagyítás" + +msgid "E&GA/(S)VGA settings" +msgstr "E&GA/(S)VGA beállítások" + +msgid "&Inverted VGA monitor" +msgstr "&Invertált VGA kijelző" + +msgid "VGA screen &type" +msgstr "VGA képernyő &típusa" + +msgid "RGB &Color" +msgstr "RGB &színes" + +msgid "&RGB Grayscale" +msgstr "&RGB szürkeárnyalatos" + +msgid "&Amber monitor" +msgstr "&Gyömbér kijelző" + +msgid "&Green monitor" +msgstr "&Zöld kijelző" + +msgid "&White monitor" +msgstr "&Fehér kijelző" + +msgid "Grayscale &conversion type" +msgstr "Szürkéskála &konzerziós eljárás" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Átlag szerint" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "CGA/PCjr/Tandy/E&GA/(S)VGA túlpásztázás" + +msgid "Change contrast for &monochrome display" +msgstr "Kontraszt illesztése &monokróm kijelzőhöz" + +msgid "&Media" +msgstr "&Média" + +msgid "&Tools" +msgstr "&Eszközök" + +msgid "&Settings..." +msgstr "&Konfigurálás..." + +msgid "&Update status bar icons" +msgstr "Állapotsori ikonok &frissítése" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "&Képernyőkép készítése\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Beállítások..." + +msgid "Enable &Discord integration" +msgstr "&Discord integráció engedélyezése" + +msgid "Sound &gain..." +msgstr "&Hangerőszabályzó..." + +msgid "Begin trace\tCtrl+T" +msgstr "Nyomkövetés megkezdése\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Nyomkövetés befejezése\tCtrl+T" + +msgid "&Logging" +msgstr "&Naplózás" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "BusLogic naplók engedélyezése\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "CD-ROM naplók engedélyezése\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Hajlékonylemez (86F) naplók engedélyezése\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Hajlékonylemez-vezérlő naplók engedélyezése\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "IDE naplók engedélyezése\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Soros port naplók engedélyezése\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Hálózati naplók engedélyezése\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "Töréspontok &naplózása\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "&Videómemória lementése\tCtrl+F1" + +msgid "&Help" +msgstr "&Súgó" + +msgid "&Documentation..." +msgstr "&Dokumentáció..." + +msgid "&About 86Box..." +msgstr "A 86Box &névjegye..." + +msgid "" +msgstr "" + +msgid "&New image..." +msgstr "&Új képfájl létrehozása..." + +msgid "&Existing image..." +msgstr "Meglévő képfájl &megnyitása..." + +msgid "Existing image (&Write-protected)..." +msgstr "Meglévő képfájl megnyitása (&írásvédett)..." + +msgid "&Record" +msgstr "&Felvétel" + +msgid "&Play" +msgstr "&Lejátszás" + +msgid "&Rewind to the beginning" +msgstr "&Visszatekerés az elejére" + +msgid "&Fast forward to the end" +msgstr "&Előretekerés a végére" + +msgid "E&ject" +msgstr "&Kiadás" + +msgid "&Image..." +msgstr "Kép&fájl..." + +msgid "E&xport to 86F..." +msgstr "E&xportálás 86F formátumba..." + +msgid "&Mute" +msgstr "&Némítás" + +msgid "E&mpty" +msgstr "&Kiadás" + +msgid "&Reload previous image" +msgstr "Előző képfájl &újratöltése" + +msgid "&Image" +msgstr "&Meglévő képfájl &megnyitása..." + +msgid "Target &framerate" +msgstr "Cél &képkockasebesség" + +msgid "&Sync with video" +msgstr "&Szinkronizálás a videóval " + +msgid "&25 fps" +msgstr "&25 fps" + +msgid "&30 fps" +msgstr "&30 fps" + +msgid "&50 fps" +msgstr "&50 fps" + +msgid "&60 fps" +msgstr "&60 fps" + +msgid "&75 fps" +msgstr "&75 fps" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "Shader &kiválasztása..." + +msgid "&Remove shader" +msgstr "Shader &eltávolítása" + +msgid "Preferences" +msgstr "Beállítások" + +msgid "Sound Gain" +msgstr "Hangerőszabályzó" + +msgid "New Image" +msgstr "Új képfájl létrehozása" + +msgid "Settings" +msgstr "Konfigurálás" + +msgid "Specify Main Window Dimensions" +msgstr "Főablak méreteinek megadása" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Mégse" + +msgid "Save these settings as &global defaults" +msgstr "Beállítások mentése &globális alapértékként" + +msgid "&Default" +msgstr "&Alapértelmezett" + +msgid "Language:" +msgstr "Nyelv:" + +msgid "Icon set:" +msgstr "Ikonkészlet:" + +msgid "Gain" +msgstr "Hangerő" + +msgid "File name:" +msgstr "Fájlnév:" + +msgid "Disk size:" +msgstr "Méret:" + +msgid "RPM mode:" +msgstr "RPM-mód:" + +msgid "Progress:" +msgstr "Folyamat:" + +msgid "Width:" +msgstr "Szélesség:" + +msgid "Height:" +msgstr "Magasság:" + +msgid "Lock to this size" +msgstr "Rögzítés a megadott méretre" + +msgid "Machine type:" +msgstr "Géptípus:" + +msgid "Machine:" +msgstr "Számítógép:" + +msgid "Configure" +msgstr "Beállítások..." + +msgid "CPU type:" +msgstr "Processzor:" + +msgid "Speed:" +msgstr "Seb.:" + +msgid "FPU:" +msgstr "FPU-egység:" + +msgid "Wait states:" +msgstr "Várak. ciklusok:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Memória:" + +msgid "Time synchronization" +msgstr "Idő szinkronizáció" + +msgid "Disabled" +msgstr "Letiltva" + +msgid "Enabled (local time)" +msgstr "Engedélyezve (helyi idő)" + +msgid "Enabled (UTC)" +msgstr "Engedélyezve (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Dinamikus újrafordítás" + +msgid "Video:" +msgstr "Videokártya:" + +msgid "Voodoo Graphics" +msgstr "Voodoo-gyorsítókártya" + +msgid "Mouse:" +msgstr "Egér:" + +msgid "Joystick:" +msgstr "Játékvezérlő:" + +msgid "Joystick 1..." +msgstr "Játékvez. 1..." + +msgid "Joystick 2..." +msgstr "Játékvez. 2..." + +msgid "Joystick 3..." +msgstr "Játékvez. 3..." + +msgid "Joystick 4..." +msgstr "Játékvez. 4..." + +msgid "Sound card:" +msgstr "Hangkártya:" + +msgid "MIDI Out Device:" +msgstr "MIDI-kimenet:" + +msgid "MIDI In Device:" +msgstr "MIDI-bemenet:" + +msgid "Standalone MPU-401" +msgstr "Különálló MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "FLOAT32 használata" + +msgid "Network type:" +msgstr "Hálózati típusa:" + +msgid "PCap device:" +msgstr "PCap eszköz:" + +msgid "Network adapter:" +msgstr "Hálózati kártya:" + +msgid "LPT1 Device:" +msgstr "LPT1 eszköz:" + +msgid "LPT2 Device:" +msgstr "LPT2 eszköz:" + +msgid "LPT3 Device:" +msgstr "LPT3 eszköz:" + +msgid "Serial port 1" +msgstr "Soros port 1" + +msgid "Serial port 2" +msgstr "Soros port 2" + +msgid "Serial port 3" +msgstr "Soros port 3" + +msgid "Serial port 4" +msgstr "Soros port 4" + +msgid "Parallel port 1" +msgstr "Párhuzamos port 1" + +msgid "Parallel port 2" +msgstr "Párhuzamos port 2" + +msgid "Parallel port 3" +msgstr "Párhuzamos port 3" + +msgid "HD Controller:" +msgstr "Merevl.-vezérlő:" + +msgid "FD Controller:" +msgstr "Floppy-vezérlő:" + +msgid "Tertiary IDE Controller" +msgstr "Harmadlagos IDE-vezérlő" + +msgid "Quaternary IDE Controller" +msgstr "Negyedleges IDE-vezérlő" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Gazdaadapt. 1:" + +msgid "Controller 2:" +msgstr "Gazdaadapt. 2:" + +msgid "Controller 3:" +msgstr "Gazdaadapt. 3:" + +msgid "Controller 4:" +msgstr "Gazdaadapt. 4:" + +msgid "Cassette" +msgstr "Magnókazetta" + +msgid "Hard disks:" +msgstr "Merevlemezek:" + +msgid "&New..." +msgstr "&Új..." + +msgid "&Existing..." +msgstr "&Megnyitás..." + +msgid "&Remove" +msgstr "&Eltávolítás" + +msgid "Bus:" +msgstr "Busz:" + +msgid "Channel:" +msgstr "Csatorna:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Kiválasztás..." + +msgid "Sectors:" +msgstr "Szektor:" + +msgid "Heads:" +msgstr "Fej:" + +msgid "Cylinders:" +msgstr "Cilinder:" + +msgid "Size (MB):" +msgstr "Méret (MB):" + +msgid "Type:" +msgstr "Típus:" + +msgid "Image Format:" +msgstr "Formátum:" + +msgid "Block Size:" +msgstr "Blokkméret:" + +msgid "Floppy drives:" +msgstr "Floppy-meghajtók:" + +msgid "Turbo timings" +msgstr "Turbó időzítés" + +msgid "Check BPB" +msgstr "BPB ellenőrzés" + +msgid "CD-ROM drives:" +msgstr "CD-ROM meghajtók:" + +msgid "MO drives:" +msgstr "MO-meghajtók:" + +msgid "ZIP drives:" +msgstr "ZIP-meghajtók:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA RTC (óra):" + +msgid "ISA Memory Expansion" +msgstr "ISA memóriabővítők" + +msgid "Card 1:" +msgstr "Kártya 1:" + +msgid "Card 2:" +msgstr "Kártya 2:" + +msgid "Card 3:" +msgstr "Kártya 3:" + +msgid "Card 4:" +msgstr "Kártya 4:" + +msgid "ISABugger device" +msgstr "ISABugger eszköz" + +msgid "POST card" +msgstr "POST kártya" + +msgid "Segoe UI" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Hiba" + +msgid "Fatal error" +msgstr "Végzetes hiba" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Használja a CTRL+ALT+PAGE DOWN gombokat az ablakhoz való visszatéréshez." + +msgid "Speed" +msgstr "Sebesség" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgstr "ZIP-lemezképek (*.IM? *.im? *.ZDI *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." +msgstr "A 86Box nem talált használható ROM-képeket\n\nKérem töltse le a ROM készletet és bontsa ki a ""roms"" könyvtárba." + +msgid "(empty)" +msgstr "(üres)" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" +msgstr "ZIP-lemezképek (*.IM? *.im? *.ZDI *.zdi);;Minden fájl (*)" + +msgid "Turbo" +msgstr "Turbó" + +msgid "On" +msgstr "Bekapcsolva" + +msgid "Off" +msgstr "Kikapcsolva" + +msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" +msgstr "Minden képfájl (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Alapvető szektor képfájlok (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Felületi képfájlok (*.86F *.86f)" + +msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "A számítógép ""%hs"" nem elérhető a ""roms/machines"" mappából hiányzó ROM-képek miatt. Ehelyett egy másik gép kerül futtatásra." + +msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "A videokártya ""%hs"" nem elérhető a ""roms/video"" mappából hiányzó ROM-képek miatt. Ehelyett egy másik kártya kerül futtatásra." + +msgid "Machine" +msgstr "Számítógép" + +msgid "Display" +msgstr "Megjelenítő" + +msgid "Input devices" +msgstr "Beviteli eszközök" + +msgid "Sound" +msgstr "Hang" + +msgid "Network" +msgstr "Hálózat" + +msgid "Ports (COM & LPT)" +msgstr "Portok (COM és LPT)" + +msgid "Storage controllers" +msgstr "Tárolóvezérlők" + +msgid "Hard disks" +msgstr "Merevlemezek" + +msgid "Floppy & CD-ROM drives" +msgstr "Floppy és CD-ROM meghajtók" + +msgid "Other removable devices" +msgstr "Egyéb cserélhető tárolók" + +msgid "Other peripherals" +msgstr "Egyéb perifériák" + +msgid "Surface images (*.86F *.86f)" +msgstr "Felületi képfájlok (*.86F *.86f)" + +msgid "Click to capture mouse" +msgstr "Kattintson az egér elfogásához" + +msgid "Press F8+F12 to release mouse" +msgstr "Nyomja meg az F8+F12-t az egér elengédéséhez" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Nyomja meg az F8+F12-t vagy a középső gombot az egér elengédéséhez" + +msgid "Unable to initialize FluidSynth" +msgstr "Nem sikerült a FluidSynth inicializálása" + +msgid "Bus" +msgstr "Busz" + +msgid "File" +msgstr "Fájl" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Nem sikerült inicializálni a videó megjelenítőt." + +msgid "Default" +msgstr "Alapértelmezett" + +msgid "%i Wait state(s)" +msgstr "%i várakozási ciklus(ok)" + +msgid "Type" +msgstr "Típus" + +msgid "Failed to set up PCap" +msgstr "Nem sikerült a PCap beállítása" + +msgid "No PCap devices found" +msgstr "Nem találhatóak PCap eszközök" + +msgid "Invalid PCap device" +msgstr "Érvénytelen PCap eszköz" + +msgid "Standard 2-button joystick(s)" +msgstr "Szabványos 2-gombos játékvezérlő(k)" + +msgid "Standard 4-button joystick" +msgstr "Szabványos 4-gombos játékvezérlő" + +msgid "Standard 6-button joystick" +msgstr "Szabványos 6-gombos játékvezérlő" + +msgid "Standard 8-button joystick" +msgstr "Szabványos 8-gombos játékvezérlő" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Nincs" + +msgid "Unable to load keyboard accelerators." +msgstr "Nem lehet betölteni a billentyűzetgyorsítókat." + +msgid "Unable to register raw input." +msgstr "A közvetlen nyers bevitel regisztrálása nem sikerült." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Floppy %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgstr "Minden képfájl (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Továbbfejlesztett szektor képek (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Alapvető szektor képek (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux képekfájlok (*.FDI *.fdi);;Felületi képfájlok (*.86F *.86f *.MFM *.mfm);;Minden fájl (*)" + +msgid "Unable to initialize FreeType" +msgstr "A FreeType inicializálása nem lehetséges" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Az SDL inicializálása nem lehetséges, az SDL2.dll fájl szükséges" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Biztosan szeretné újraindítani az emulált gépet?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Biztos benne, hogy ki szeretne lépni a 86Box-ból?" + +msgid "Unable to initialize Ghostscript" +msgstr "Nem sikerült inicializálni a Ghostscript-et" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgstr "MO-képfájlok (*.IM? *.im? *.MDI *.mdi);;Minden fájl (*)" + +msgid "Welcome to 86Box!" +msgstr "Üdvözli önt az 86Box!" + +msgid "Internal controller" +msgstr "Integrált vezérlő" + +msgid "Exit" +msgstr "Kilépés" + +msgid "No ROMs found" +msgstr "Nem találhatóak meg a ROM-képek" + +msgid "Do you want to save the settings?" +msgstr "Szeretné menteni a beállításokat?" + +msgid "This will hard reset the emulated machine." +msgstr "Ezzel hardveresen újraindítja az emulált gépet." + +msgid "Save" +msgstr "Mentés" + +msgid "About 86Box" +msgstr "A 86Box névjegye" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Régi számítógépek emulátora\n\nFejlesztők: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nFordította: Laci bá'\n\nMegjelent a GNU General Public License v2 vagy újabb alatt. További információért lásd a LICENSE fájlt." + +msgid "Hardware not available" +msgstr "Hardver nem elérhető" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Győződjön meg hogy a(z) libpcap telepítve van és jelenleg a libpcap-kompatibilis kapcsolatot használja." + +msgid "Invalid configuration" +msgstr "Érvénytelen konfiguráció" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " szükséges az ESC/P nyomtató emulációhoz." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " szükséges a PostScript fájlok PDF formátumba való automatikus konvertálásához.\n\nAz általános PostScript nyomtatóra küldött dokumentumok PostScript (.ps) fájlként kerülnek mentésre." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " szükséges a FluidSynth MIDI kimenethez." + +msgid "Entering fullscreen mode" +msgstr "Teljes képernyős módra váltás" + +msgid "Don't show this message again" +msgstr "Ne jelenítse meg újra ezt az üzenetet " + +msgid "Don't exit" +msgstr "Ne lépjen ki" + +msgid "Reset" +msgstr "Újraindítás" + +msgid "Don't reset" +msgstr "Ne indítsa újra" + +msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgstr "CD-ROM-képek (*.ISO *.iso *.CUE *.cue);;Minden fájl (*)" + +msgid "%hs Device Configuration" +msgstr "%hs eszközkonfiguráció" + +msgid "Monitor in sleep mode" +msgstr "Képernyő alvó módban" + +msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" +msgstr "OpenGL Shaderek (*.GLSL *.glsl);;Minden fájl (*)" + +msgid "OpenGL options" +msgstr "OpenGL beállítások" + +msgid "You are loading an unsupported configuration" +msgstr "Egy nem támogatott konfigurációt tölt be" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "A kiválasztott gépen alapuló CPU-típusszűrés le van tiltva ezen az emulált gépen.\n\nEz lehetővé teszi olyan CPU kiválasztását, amely egyébként nem kompatibilis a kiválasztott géppel. Előfordulhat azonban, hogy nem kompatibilis a gép BIOS-ával vagy más szoftverekkel.\n\nA beállítás engedélyezése hivatalosan nem támogatott, és a benyújtott hibajelentéseket érvénytelenként lezárhatjuk." + +msgid "Continue" +msgstr "Folytatás" + +msgid "Cassette: %s" +msgstr "Magnókazetta: %s" + +msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" +msgstr "Magnókazetta-képek (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Minden fájl (*)" + +msgid "Cartridge %i: %ls" +msgstr "ROM-kazetta %i: %ls" + +msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" +msgstr "ROM-kazetta képek (*.A *.a *.B *.b *.JRC *.jrc);;Minden fájl (*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Hard disk (%s)" +msgstr "Merevlemez (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL vagy ESDI CD-ROM meghajtók soha nem léteztek" + +msgid "Custom..." +msgstr "Egyéni..." + +msgid "Custom (large)..." +msgstr "Egyéni (nagy)..." + +msgid "Add New Hard Disk" +msgstr "Új merevlemez hozzáadása" + +msgid "Add Existing Hard Disk" +msgstr "Meglévő merevlemez hozzáadása" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "A HDI lemezképek nem lehetnek nagyobbak 4 GB-nál." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "A lemezképek mérete nem haladhatja meg a 127 GB-ot." + +msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" +msgstr "Merevlemez-képfájlok (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Minden fájl (*)" + +msgid "Unable to read file" +msgstr "A fájl nem olvasható" + +msgid "Unable to write file" +msgstr "A fájl nem írható" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "Az 512-től eltérő szektorméretű HDI vagy HDX képek nem támogatottak." + +msgid "USB is not yet supported" +msgstr "Az USB még nem támogatott" + +msgid "Disk image file already exists" +msgstr "A lemezképfájl már létezik" + +msgid "Please specify a valid file name." +msgstr "Adjon meg egy érvényes fájlnevet." + +msgid "Disk image created" +msgstr "A lemezképfájl létrehozásra került" + +msgid "Make sure the file exists and is readable." +msgstr "Győződjön meg arról, hogy a fájl létezik és olvasható." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Győződjön meg arról, hogy a fájlt egy írható könyvtárba menti." + +msgid "Disk image too large" +msgstr "A lemezképfájl túl nagy" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Ne felejtse el particionálni és formázni az újonnan létrehozott meghajtót." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "A kiválasztott fájl felülírásra kerül. Biztos, hogy ezt kívánja használni?" + +msgid "Unsupported disk image" +msgstr "Nem támogatott lemezkép" + +msgid "Overwrite" +msgstr "Felülírás" + +msgid "Don't overwrite" +msgstr "Ne írja felül" + +msgid "Raw image (.img)" +msgstr "Nyers lemezkép (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDI-lemezkép (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDX-lemezkép (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "Rögzített méretű VHD (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "Dinamikusan bővülő VHD (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Különbség-VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Nagy blokkméret (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Kis blokkméret (512 KB)" + +msgid "VHD files (*.VHD *.vhd);;All files (*)" +msgstr "VHD fájlok (*.VHD *.vhd);;Minden fájl (*)" + +msgid "Select the parent VHD" +msgstr "Válassza ki a szülő VHD-t" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Ez azt jelentheti, hogy a szülőkép módosult az eltérő kép létrehozása után.\n\nEz akkor is előfordulhat, ha a képfájlokat áthelyezték vagy másolták, vagy a lemezt létrehozó program hibája miatt.\n\nSzeretné kijavítani az időbélyegeket?" + +msgid "Parent and child disk timestamps do not match" +msgstr "A szülő- és a gyermeklemez időbélyegei nem egyeznek" + +msgid "Could not fix VHD timestamp." +msgstr "Nem sikerült kijavítani a VHD időbélyegét." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (1024 klaszter)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (2048 klaszter)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5"" 128Mb M.O. (ISO 10090)" +msgstr "3.5"" 128Mb M.O. (ISO 10090)" + +msgid "3.5"" 230Mb M.O. (ISO 13963)" +msgstr "3.5"" 230Mb M.O. (ISO 13963)" + +msgid "3.5"" 540Mb M.O. (ISO 15498)" +msgstr "3.5"" 540Mb M.O. (ISO 15498)" + +msgid "3.5"" 640Mb M.O. (ISO 15498)" +msgstr "3.5"" 640Mb M.O. (ISO 15498)" + +msgid "3.5"" 1.3Gb M.O. (GigaMO)" +msgstr "3.5"" 1.3Gb M.O. (GigaMO)" + +msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25"" 600Mb M.O." +msgstr "5.25"" 600Mb M.O." + +msgid "5.25"" 650Mb M.O." +msgstr "5.25"" 650Mb M.O." + +msgid "5.25"" 1Gb M.O." +msgstr "5.25"" 1Gb M.O." + +msgid "5.25"" 1.3Gb M.O." +msgstr "5.25"" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "Tökéletes RPM" + +msgid "1%% below perfect RPM" +msgstr "1%%-kal a tökéletes RPM alatt" + +msgid "1.5%% below perfect RPM" +msgstr "1.5%%-kal a tökéletes RPM alatt" + +msgid "2%% below perfect RPM" +msgstr "2%%-kal a tökéletes RPM alatt" + +msgid "(System Default)" +msgstr "(A rendszer nyelve)" + diff --git a/src/qt/languages/it_IT.po b/src/qt/languages/it_IT.po new file mode 100644 index 000000000..cd0ceaad7 --- /dev/null +++ b/src/qt/languages/it_IT.po @@ -0,0 +1,1173 @@ +msgid "Translated by" +msgstr "Unknown" + +msgid "&Action" +msgstr "&Azione" + +msgid "&Keyboard requires capture" +msgstr "&Tastiera richiede la cattura" + +msgid "&Right CTRL is left ALT" +msgstr "&CTRL destro è ALT sinistro" + +msgid "&Hard Reset..." +msgstr "&Riavvia..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Pausa" + +msgid "E&xit..." +msgstr "E&sci..." + +msgid "&View" +msgstr "&Visualizza" + +msgid "&Hide status bar" +msgstr "&Nascondi barra di stato" + +msgid "&Resizeable window" +msgstr "&Finestra ridimensionabile" + +msgid "R&emember size && position" +msgstr "R&icorda dimensioni e posizione" + +msgid "Re&nderer" +msgstr "Re&nderer" + +msgid "&Qt (Software)" +msgstr "&Qt (Software)" + +msgid "Qt (&Hardware)" +msgstr "Qt (&Hardware)" + +msgid "Qt (&OpenGL)" +msgstr "Qt (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 Core)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "Specifica dimensioni..." + +msgid "F&orce 4:3 display ratio" +msgstr "F&orza display 4:3" + +msgid "&Window scale factor" +msgstr "&Fattore scalare della finestra" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Metodo filtro" + +msgid "&Nearest" +msgstr "&Dal più vicino" + +msgid "&Linear" +msgstr "&Lineare" + +msgid "Hi&DPI scaling" +msgstr "Scala Hi&DPI" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Schermo intero\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Modalità adattamento &schermo intero" + +msgid "&Full screen stretch" +msgstr "&Adatta a schermo intero" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Pixel quadrati (mantiene l'aspetto)" + +msgid "&Integer scale" +msgstr "&Scala intera" + +msgid "E&GA/(S)VGA settings" +msgstr "Impostazioni E&GA/(S)VGA" + +msgid "&Inverted VGA monitor" +msgstr "&Invertire monitor VGA" + +msgid "VGA screen &type" +msgstr "Schermi VGA &" + +msgid "RGB &Color" +msgstr "RGB &Color" + +msgid "&RGB Grayscale" +msgstr "&RGB Monocroma" + +msgid "&Amber monitor" +msgstr "&Monitor ambra" + +msgid "&Green monitor" +msgstr "&Monitor verde" + +msgid "&White monitor" +msgstr "&Monitor bianco" + +msgid "Grayscale &conversion type" +msgstr "Conversione &scala grigia" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&AMedia" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "Sovrascansione CGA/PCjr/Tandy/E&GA/(S)VGA" + +msgid "Change contrast for &monochrome display" +msgstr "Cambia il contrasto per &display monocromatici" + +msgid "&Media" +msgstr "&Dispositivi" + +msgid "&Tools" +msgstr "&Strumenti" + +msgid "&Settings..." +msgstr "&Impostazioni..." + +msgid "&Update status bar icons" +msgstr "&Aggiorna icone della barra di stato" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Cattura schermata\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Preferenze..." + +msgid "Enable &Discord integration" +msgstr "Abilita &integrazione Discord" + +msgid "Sound &gain..." +msgstr "Guadagno &suono..." + +msgid "Begin trace\tCtrl+T" +msgstr "Inizia traccia\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Ferma traccia\tCtrl+T" + +msgid "&Logging" +msgstr "&Registra" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Attiva registrazione di BusLogic\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Attiva registrazione del CD-ROM\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Attiva registrazione del floppy (86F)\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Attiva registrazione del controller floppy\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Attiva registrazione di IDE\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Attiva registrazione della porta seriale\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Attiva registrazione della rete\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Punto di interruzione del registro\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "Scarica &la RAM video\tCtrl+F1" + +msgid "&Help" +msgstr "&?" + +msgid "&Documentation..." +msgstr "&Documentazione..." + +msgid "&About 86Box..." +msgstr "&Informazioni su 86Box..." + +msgid "" +msgstr "" + +msgid "&New image..." +msgstr "&Nuova immagine..." + +msgid "&Existing image..." +msgstr "&Immagine esistente..." + +msgid "Existing image (&Write-protected)..." +msgstr "Immagine esistente (&protezione contro scrittura)..." + +msgid "&Record" +msgstr "&Registra" + +msgid "&Play" +msgstr "R&iproduci" + +msgid "&Rewind to the beginning" +msgstr "Ri&avvolgi all'inizio" + +msgid "&Fast forward to the end" +msgstr "A&vanti veloce alla fine" + +msgid "E&ject" +msgstr "&Espelli" + +msgid "&Image..." +msgstr "&Immagine..." + +msgid "E&xport to 86F..." +msgstr "E&sporta in 86F..." + +msgid "&Mute" +msgstr "&Muto" + +msgid "E&mpty" +msgstr "&Espelli" + +msgid "&Reload previous image" +msgstr "&Ricarica l'immagine precedente" + +msgid "&Image" +msgstr "&Immagine" + +msgid "Target &framerate" +msgstr "Imposta obiettivo &fotogrammi" + +msgid "&Sync with video" +msgstr "&Sincronizza col video" + +msgid "&25 fps" +msgstr "&25 FPS" + +msgid "&30 fps" +msgstr "&30 FPS" + +msgid "&50 fps" +msgstr "&50 FPS" + +msgid "&60 fps" +msgstr "&60 FPS" + +msgid "&75 fps" +msgstr "&75 FPS" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Seleziona shader..." + +msgid "&Remove shader" +msgstr "&Rimuovi shader" + +msgid "Preferences" +msgstr "Preferenze" + +msgid "Sound Gain" +msgstr "Guadagno del suono" + +msgid "New Image" +msgstr "Nuova immagine" + +msgid "Settings" +msgstr "Impostazioni" + +msgid "Specify Main Window Dimensions" +msgstr "Specifica dimensioni della finestra principale" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Annulla" + +msgid "Save these settings as &global defaults" +msgstr "Salva queste impostazioni come &predefinite globali" + +msgid "&Default" +msgstr "&Predefinito" + +msgid "Language:" +msgstr "Lingua:" + +msgid "Icon set:" +msgstr "Pacchetto di icone:" + +msgid "Gain" +msgstr "Guadagno" + +msgid "File name:" +msgstr "Nome file:" + +msgid "Disk size:" +msgstr "Dimensioni disco:" + +msgid "RPM mode:" +msgstr "Modalità RPM:" + +msgid "Progress:" +msgstr "Progresso:" + +msgid "Width:" +msgstr "Larghezza:" + +msgid "Height:" +msgstr "Altezza:" + +msgid "Lock to this size" +msgstr "Blocca in queste dimensioni" + +msgid "Machine type:" +msgstr "Tipo di piastra madre:" + +msgid "Machine:" +msgstr "Piastra madre:" + +msgid "Configure" +msgstr "Configura" + +msgid "CPU type:" +msgstr "Tipo del CPU:" + +msgid "Speed:" +msgstr "Veloc.:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "Stati di attesa:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Memoria:" + +msgid "Time synchronization" +msgstr "Sincronizzazione dell'ora" + +msgid "Disabled" +msgstr "Disabilitata" + +msgid "Enabled (local time)" +msgstr "Abilitata (ora locale)" + +msgid "Enabled (UTC)" +msgstr "Abilitata (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Ricompilatore dinamico" + +msgid "Video:" +msgstr "Video:" + +msgid "Voodoo Graphics" +msgstr "Grafica Voodoo" + +msgid "Mouse:" +msgstr "Mouse:" + +msgid "Joystick:" +msgstr "Joystick:" + +msgid "Joystick 1..." +msgstr "Joystick 1..." + +msgid "Joystick 2..." +msgstr "Joystick 2..." + +msgid "Joystick 3..." +msgstr "Joystick 3..." + +msgid "Joystick 4..." +msgstr "Joystick 4..." + +msgid "Sound card:" +msgstr "Scheda audio:" + +msgid "MIDI Out Device:" +msgstr "Uscita MIDI:" + +msgid "MIDI In Device:" +msgstr "Entrata MIDI:" + +msgid "Standalone MPU-401" +msgstr "MPU-401 autonomo" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Usa suono FLOAT32" + +msgid "Network type:" +msgstr "Tipo di rete:" + +msgid "PCap device:" +msgstr "Dispositivo PCap:" + +msgid "Network adapter:" +msgstr "Scheda di rete:" + +msgid "LPT1 Device:" +msgstr "Dispositivo LPT1:" + +msgid "LPT2 Device:" +msgstr "Dispositivo LPT2:" + +msgid "LPT3 Device:" +msgstr "Dispositivo LPT3:" + +msgid "Serial port 1" +msgstr "Porta seriale 1" + +msgid "Serial port 2" +msgstr "Porta seriale 2" + +msgid "Serial port 3" +msgstr "Porta seriale 3" + +msgid "Serial port 4" +msgstr "Porta seriale 4" + +msgid "Parallel port 1" +msgstr "Porta parallela 1" + +msgid "Parallel port 2" +msgstr "Porta parallela 2" + +msgid "Parallel port 3" +msgstr "Porta parallela 3" + +msgid "HD Controller:" +msgstr "Controller HD:" + +msgid "FD Controller:" +msgstr "Controller FD:" + +msgid "Tertiary IDE Controller" +msgstr "Controller IDE terziario" + +msgid "Quaternary IDE Controller" +msgstr "Controller IDE quaternario" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Controller 1:" + +msgid "Controller 2:" +msgstr "Controller 2:" + +msgid "Controller 3:" +msgstr "Controller 3:" + +msgid "Controller 4:" +msgstr "Controller 4:" + +msgid "Cassette" +msgstr "Cassetta" + +msgid "Hard disks:" +msgstr "Hard disk:" + +msgid "&New..." +msgstr "&Nuovo..." + +msgid "&Existing..." +msgstr "&Esistente..." + +msgid "&Remove" +msgstr "&Rimouvi" + +msgid "Bus:" +msgstr "Bus:" + +msgid "Channel:" +msgstr "Canale:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Specifica..." + +msgid "Sectors:" +msgstr "Settori:" + +msgid "Heads:" +msgstr "Testine:" + +msgid "Cylinders:" +msgstr "Cilindri:" + +msgid "Size (MB):" +msgstr "Dimensioni (MB):" + +msgid "Type:" +msgstr "Tipo:" + +msgid "Image Format:" +msgstr "Formato immagine:" + +msgid "Block Size:" +msgstr "Dimensioni blocco:" + +msgid "Floppy drives:" +msgstr "Unità floppy:" + +msgid "Turbo timings" +msgstr "Turbo" + +msgid "Check BPB" +msgstr "Verifica BPB" + +msgid "CD-ROM drives:" +msgstr "Unità CD-ROM:" + +msgid "MO drives:" +msgstr "Unità magneto-ottiche:" + +msgid "ZIP drives:" +msgstr "Unità ZIP:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "RTC ISA:" + +msgid "ISA Memory Expansion" +msgstr "Espansione memoria ISA" + +msgid "Card 1:" +msgstr "Scheda 1:" + +msgid "Card 2:" +msgstr "Scheda 2:" + +msgid "Card 3:" +msgstr "Scheda 3:" + +msgid "Card 4:" +msgstr "Scheda 4:" + +msgid "ISABugger device" +msgstr "Dispositivo ISABugger" + +msgid "POST card" +msgstr "Scheda POST" + +msgid "Segoe UI" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Errore" + +msgid "Fatal error" +msgstr "Errore fatale" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Usa CTRL+ALT+PAGE DOWN per tornare alla modalità finestra." + +msgid "Speed" +msgstr "Velocità" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgstr "Immagini ZIP (*.IM? *.im? *.ZDI *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." +msgstr "86Box non può trovare immagini ROM utilizzabili.\n\nPlease download a ROM set and extract it into the ""roms"" directory." + +msgid "(empty)" +msgstr "(empty)" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" +msgstr "Immagini ZIP (*.IM? *.im? *.ZDI *.zdi);;Tutti i file (*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Acceso" + +msgid "Off" +msgstr "Spento" + +msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" +msgstr "Tutte le immagini (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Immagini di settori base (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Immagini di superficie (*.86F *.86f)" + +msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "La macchina ""%hs"" non è disponibile a causa di immagini ROM mancanti nella directory roms/machines. Cambiando ad una macchina disponibile." + +msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "La scheda video ""%hs"" non è disponibile a causa di immagini ROM mancanti nella directory roms/video. Cambiando ad una scheda video disponibile." + +msgid "Machine" +msgstr "Piastra madre" + +msgid "Display" +msgstr "Schermo" + +msgid "Input devices" +msgstr "Dispositivi di entrata" + +msgid "Sound" +msgstr "Audio" + +msgid "Network" +msgstr "Rete" + +msgid "Ports (COM & LPT)" +msgstr "Porte (COM & LPT)" + +msgid "Storage controllers" +msgstr "Controller memoria" + +msgid "Hard disks" +msgstr "Hard disk" + +msgid "Floppy & CD-ROM drives" +msgstr "Unità CD-ROM e Floppy" + +msgid "Other removable devices" +msgstr "Altri dispositivi rimuovibili" + +msgid "Other peripherals" +msgstr "Altre periferiche" + +msgid "Surface images (*.86F *.86f)" +msgstr "Immagini di superficie (*.86F *.86f)" + +msgid "Click to capture mouse" +msgstr "Fare clic per catturare mouse" + +msgid "Press F8+F12 to release mouse" +msgstr "Premi F8+F12 per rilasciare il mouse" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Premi F8+F12 o pulsante centrale per rilasciare il mouse" + +msgid "Unable to initialize FluidSynth" +msgstr "Impossibile inizializzare FluidSynth" + +msgid "Bus" +msgstr "Bus" + +msgid "File" +msgstr "File" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Impossibile inizializzare il renderer video." + +msgid "Default" +msgstr "Predefinito" + +msgid "%i Wait state(s)" +msgstr "%i stati d'attesa" + +msgid "Type" +msgstr "Tipo" + +msgid "Failed to set up PCap" +msgstr "Impossibile impostare PCap" + +msgid "No PCap devices found" +msgstr "Nessun dispositivo PCap trovato" + +msgid "Invalid PCap device" +msgstr "Dispositivo PCap invalido" + +msgid "Standard 2-button joystick(s)" +msgstr "Joystick comune da 2 pulsanti" + +msgid "Standard 4-button joystick" +msgstr "Joystick comune da 4 pulsanti" + +msgid "Standard 6-button joystick" +msgstr "Joystick comune da 6 pulsanti" + +msgid "Standard 8-button joystick" +msgstr "Joystick comune da 8 pulsanti" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Nessuno" + +msgid "Unable to load keyboard accelerators." +msgstr "Impossibile caricare gli acceleratori da tastiera." + +msgid "Unable to register raw input." +msgstr "Impossibile registrare input raw." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Floppy %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgstr "Tutte le immagini (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Immagini da settori avanzati (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Imagini da settori basilari (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Immagini flusso (*.FDI *.fdi);;Immagini da superficie (*.86F *.86f *.MFM *.mfm);;Tutti i file (*)" + +msgid "Unable to initialize FreeType" +msgstr "Impossibile inizializzare FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Impossibile inizializzare SDL, SDL2.dll è necessario" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Sei sicuro di voler riavviare la macchina emulata?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Sei sicuro di voler uscire da 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Impossibile inizializzare Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgstr "Immagini MO (*.IM? *.im? *.MDI *.mdi);;Tutti i file (*)" + +msgid "Welcome to 86Box!" +msgstr "Benvenuti in 86Box!" + +msgid "Internal controller" +msgstr "Controller interno" + +msgid "Exit" +msgstr "Esci" + +msgid "No ROMs found" +msgstr "Nessune immagini ROM trovate" + +msgid "Do you want to save the settings?" +msgstr "Vuole salvare queste impostazioni?" + +msgid "This will hard reset the emulated machine." +msgstr "Questo riavvierà la macchina emulata." + +msgid "Save" +msgstr "Salva" + +msgid "About 86Box" +msgstr "Informazioni su 86Box" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Un emulatore di computer vecchi\n\nAutori: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nTradotto da: explorerdotexe\n\nRilasciato sotto la Licenza Pubblica GNU versione 2 o dopo. Vedi LICENSE per maggior informazioni." + +msgid "Hardware not available" +msgstr "Hardware non disponibile" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Controlla se libpcap è installato e che tu sia connesso ad una connessione libpcap compatibile." + +msgid "Invalid configuration" +msgstr "Configurazione invalida" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " è richesto per l'emuazione di stampanti ESC/P." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " è richiesto per la conversione automatica di file PostScript a file PDF.\n\nQualsiasi documento mandato alla stampante generica PostScript sarà salvato come file PostScript. (.ps)" + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " è richiesto per l'output FluidSynth MIDI." + +msgid "Entering fullscreen mode" +msgstr "Entrando nella modalità schermo intero" + +msgid "Don't show this message again" +msgstr "Non mostrare più questo messaggio" + +msgid "Don't exit" +msgstr "Non uscire" + +msgid "Reset" +msgstr "Riavvia" + +msgid "Don't reset" +msgstr "Non riavviare" + +msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgstr "Immagini CD-ROM (*.ISO *.iso *.CUE *.cue);;Tutti i file (*)" + +msgid "%hs Device Configuration" +msgstr "Configurazione del dispositivo %hs" + +msgid "Monitor in sleep mode" +msgstr "Monitor in modalità riposo" + +msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" +msgstr "Shader OpenGL (*.GLSL *.glsl);;Tutti i file (*)" + +msgid "OpenGL options" +msgstr "Impostazioni OpenGL" + +msgid "You are loading an unsupported configuration" +msgstr "Stai caricando una configurazione non supportata" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "Il filtraggio della tipologia di CPU è disabilitato per la macchina selezionata.\n\nQuesto lo rende possibile scegliere un CPU che è altrimenti incompatibile con la macchina selezionata. Tuttavia, portresti incorrere in incompatibilità con il BIOS della macchina o altri programmi. \n\nL'abilitare di questa impostazione non è ufficialmente supportato e tutte le segnalazioni di errori saranno considerate invalide." + +msgid "Continue" +msgstr "Continua" + +msgid "Cassette: %s" +msgstr "Cassetta: %s" + +msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" +msgstr "Immagini cassetta (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Tutti i file (*)" + +msgid "Cartridge %i: %ls" +msgstr "Cartuccia %i: %ls" + +msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" +msgstr "Immagini cartuccia (*.A *.a *.B *.b *.JRC *.jrc);;Tutti i file (*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Hard disk (%s)" +msgstr "Hard disk (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "Le unità CD-ROM MFM/RLL o ESDI non sono mai esistite." + +msgid "Custom..." +msgstr "Personalizzata..." + +msgid "Custom (large)..." +msgstr "Personalizzata (grande)..." + +msgid "Add New Hard Disk" +msgstr "Aggiungi un nuovo disco rigido" + +msgid "Add Existing Hard Disk" +msgstr "Aggiungi un disco rigido esistente" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "Le immagini HDI non possono essere più grandi di 4 GB." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Le immmagini disco non possono essere più grandi di 127 GB." + +msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" +msgstr "Immagini disco rigido (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Tutti i file (*)" + +msgid "Unable to read file" +msgstr "Impossibile leggere il file" + +msgid "Unable to write file" +msgstr "Impossibile scrivere al file" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "Le immagini HDI o HDX con settori di dimensioni diverse da 512 non sono supportati." + +msgid "USB is not yet supported" +msgstr "USB non è ancora supportato" + +msgid "Disk image file already exists" +msgstr "Immagine disco già esiste" + +msgid "Please specify a valid file name." +msgstr "Specifica un nome file valido." + +msgid "Disk image created" +msgstr "Immagine disco creata" + +msgid "Make sure the file exists and is readable." +msgstr "Controlla che il file esiste e che sia leggibile." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Controlla che il file viene salvato ad un percorso con diritti di scrittura" + +msgid "Disk image too large" +msgstr "Immagine disco troppo grande" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Ricordati di partizionare e formattare il disco appena creato." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Il file selezionato sarà sovrascritto, sei sicuro di volerlo usare?" + +msgid "Unsupported disk image" +msgstr "Immagine disco non supportata" + +msgid "Overwrite" +msgstr "Sovrascrivi" + +msgid "Don't overwrite" +msgstr "Non sovrascrivere" + +msgid "Raw image (.img)" +msgstr "Immagine raw (.img)" + +msgid "HDI image (.hdi)" +msgstr "Immagine HDI (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "Immagine HDX (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD di dimensioni fisse (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD di dimensioni dinamiche (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "VHD differenziato (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Blocchi larghi (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Blocchi piccoli (512 KB)" + +msgid "VHD files (*.VHD *.vhd);;All files (*)" +msgstr "File VHD (*.VHD *.vhd);;Tutti i file (*)" + +msgid "Select the parent VHD" +msgstr "Seleziona il VHD padre." + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Questo potrebbe significare che l'immagine padre sia stata modificata dopo la creazione dell'immagine di differenziazione.\n\nPuò anche succedere se i file immagini sono stati spostati o copiati, o da un errore nel programma che ha creato questo disco.\n\nVuoi aggiustare le marcature di tempo?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Le marcature di tempo padre e figlio non corrispondono" + +msgid "Could not fix VHD timestamp." +msgstr "Impossibile aggiustare marcature di tempo VHD." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (cluster 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (cluster 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5"" 128Mb M.O. (ISO 10090)" +msgstr "3.5"" 128Mb M.O. (ISO 10090)" + +msgid "3.5"" 230Mb M.O. (ISO 13963)" +msgstr "3.5"" 230Mb M.O. (ISO 13963)" + +msgid "3.5"" 540Mb M.O. (ISO 15498)" +msgstr "3.5"" 540Mb M.O. (ISO 15498)" + +msgid "3.5"" 640Mb M.O. (ISO 15498)" +msgstr "3.5"" 640Mb M.O. (ISO 15498)" + +msgid "3.5"" 1.3Gb M.O. (GigaMO)" +msgstr "3.5"" 1.3Gb M.O. (GigaMO)" + +msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25"" 600Mb M.O." +msgstr "5.25"" 600Mb M.O." + +msgid "5.25"" 650Mb M.O." +msgstr "5.25"" 650Mb M.O." + +msgid "5.25"" 1Gb M.O." +msgstr "5.25"" 1Gb M.O." + +msgid "5.25"" 1.3Gb M.O." +msgstr "5.25"" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "RPM perfette" + +msgid "1%% below perfect RPM" +msgstr "RPM 1%% sotto perfezione" + +msgid "1.5%% below perfect RPM" +msgstr "RPM 1.5%% sotto perfezione" + +msgid "2%% below perfect RPM" +msgstr "RPM 2%% sotto perfezione" + +msgid "(System Default)" +msgstr "(Predefinito del sistema)" + diff --git a/src/qt/languages/ja_JP.po b/src/qt/languages/ja_JP.po new file mode 100644 index 000000000..c954cef32 --- /dev/null +++ b/src/qt/languages/ja_JP.po @@ -0,0 +1,1176 @@ +msgid "Translated by" +msgstr "Unknown" + +msgid "&Action" +msgstr "動作(&A)" + +msgid "&Keyboard requires capture" +msgstr "キーボードはキャプチャが必要(&K)" + +msgid "&Right CTRL is left ALT" +msgstr "右CTRLを左ALTへ(&R)" + +msgid "&Hard Reset..." +msgstr "再起動(&H)..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "Ctrl+Alt+Del(&C)\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+Esc(&E)" + +msgid "&Pause" +msgstr "一時停止(&P)" + +msgid "E&xit..." +msgstr "終了(&X)..." + +msgid "&View" +msgstr "表示(&V)" + +msgid "&Hide status bar" +msgstr "ステータスバーを隠す(&H)" + +msgid "&Resizeable window" +msgstr "ウィンドウのサイズを変更可能にする(&R)" + +msgid "R&emember size && position" +msgstr "ウィンドウのサイズと位置を記憶する(&E)" + +msgid "Re&nderer" +msgstr "レンダラー(&N)" + +msgid "&Qt (Software)" +msgstr "Qt (ソフトウェア)(&Q)" + +msgid "Qt (&Hardware)" +msgstr "Qt (ハードウェア)(&H)" + +msgid "Qt (&OpenGL)" +msgstr "Qt (OpenGL)(&O)" + +msgid "Qt (OpenGL &ES)" +msgstr "Qt (OpenGL ES)(&E)" + +msgid "Open&GL (3.0 Core)" +msgstr "OpenGL (3.0コア)(&G)" + +msgid "&VNC" +msgstr "VNC(&V)" + +msgid "Specify dimensions..." +msgstr "ウィンドウのサイズを指定する..." + +msgid "F&orce 4:3 display ratio" +msgstr "画面比率を4:3に合わせる(&O)" + +msgid "&Window scale factor" +msgstr "ウィンドウの倍率(&W)" + +msgid "&0.5x" +msgstr "0.5x(&0)" + +msgid "&1x" +msgstr "1x(&1)" + +msgid "1.&5x" +msgstr "1.5x(&5)" + +msgid "&2x" +msgstr "2x(&2)" + +msgid "Filter method" +msgstr "フィルター方式" + +msgid "&Nearest" +msgstr "ニアレストネイバー(&N)" + +msgid "&Linear" +msgstr "リニア補間(&L)" + +msgid "Hi&DPI scaling" +msgstr "高DPIスケール(&D)" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "フルスクリーン(&F)\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "フルスクリーンの比率(&S)" + +msgid "&Full screen stretch" +msgstr "フルスクリーンに拡大(&F)" + +msgid "&4:3" +msgstr "4:3(&4)" + +msgid "&Square pixels (Keep ratio)" +msgstr "正方形のピクセル(維持率)(&S)" + +msgid "&Integer scale" +msgstr "定数倍(&I)" + +msgid "E&GA/(S)VGA settings" +msgstr "E&GA/(S)VGAの設定" + +msgid "&Inverted VGA monitor" +msgstr "色反転VGAモニター(&I)" + +msgid "VGA screen &type" +msgstr "VGA画面タイプ(&T)" + +msgid "RGB &Color" +msgstr "RGBカラー(&C)" + +msgid "&RGB Grayscale" +msgstr "RGBグレースケール(&R)" + +msgid "&Amber monitor" +msgstr "橙色モニター(&A)" + +msgid "&Green monitor" +msgstr "緑色モニター(&G)" + +msgid "&White monitor" +msgstr "白色モニター(&W)" + +msgid "Grayscale &conversion type" +msgstr "グレースケール表示方式(&C)" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT601 (NTSC/PAL)(&6)" + +msgid "BT&709 (HDTV)" +msgstr "BT709 (HDTV)(&7)" + +msgid "&Average" +msgstr "平均値(&A)" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "CGA/PCjr/Tandy/EGA/(S)VGAオーバースキャン(&G)" + +msgid "Change contrast for &monochrome display" +msgstr "単色モニター用対比転換(&M)" + +msgid "&Media" +msgstr "メディア(&M)" + +msgid "&Tools" +msgstr "ツール(&T)" + +msgid "&Settings..." +msgstr "設定(&S)..." + +msgid "&Update status bar icons" +msgstr "ステータスバーのアイコンを更新する(&U)" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "スクリーンショットを撮る(&C)\tCtrl+F11" + +msgid "&Preferences..." +msgstr "環境設定(&P)..." + +msgid "Enable &Discord integration" +msgstr "Discordとの連携を可能にする(&D)" + +msgid "Sound &gain..." +msgstr "音量ゲイン(&G)..." + +msgid "Begin trace\tCtrl+T" +msgstr "トレース開始\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "トレース終了\tCtrl+T" + +msgid "&Logging" +msgstr "ログ(&L)" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "BusLogicのログを有効にする\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "CD-ROMのログを有効にする\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "フロッピー(86F)のログを有効にする\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "フロッピーコントローラーのログを有効にする\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "IDEのログを有効にする\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "シリアルポートのログを有効にする\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "ネットワークのログを有効にする\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "ブレークポイントのログを有効にする(&L)\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "ビデオRAMのダンプを有効にする(&V)\tCtrl+F1" + +msgid "&Help" +msgstr "ヘルプ(&H)" + +msgid "&Documentation..." +msgstr "ドキュメント(&D)..." + +msgid "&About 86Box..." +msgstr "86Boxについて(&A)..." + +msgid "" +msgstr "" + +msgid "&New image..." +msgstr "新規のイメージ(&N)..." + +msgid "&Existing image..." +msgstr "既存のイメージ(&E)..." + +msgid "Existing image (&Write-protected)..." +msgstr "既存のイメージ(ライトプロテクト付き) (&W)..." + +msgid "&Record" +msgstr "録音する(&R)" + +msgid "&Play" +msgstr "再生する(&P)" + +msgid "&Rewind to the beginning" +msgstr "冒頭に巻き戻す(&R)" + +msgid "&Fast forward to the end" +msgstr "最後まで早送りする(&F)" + +msgid "E&ject" +msgstr "取り出す(&J)" + +msgid "&Image..." +msgstr "イメージ(&I)..." + +msgid "E&xport to 86F..." +msgstr "86Fへのエクスポート(&X)..." + +msgid "&Mute" +msgstr "ミュート(&M)" + +msgid "E&mpty" +msgstr "空(&M)" + +msgid "&Reload previous image" +msgstr "前のイメージを再読み込み (&R)" + +msgid "&Image" +msgstr "イメージ(&I)" + +msgid "Target &framerate" +msgstr "目標フレームレート(&F)" + +msgid "&Sync with video" +msgstr "ビデオとの同期(&S)" + +msgid "&25 fps" +msgstr "25 fps(&2)" + +msgid "&30 fps" +msgstr "30 fps(&3)" + +msgid "&50 fps" +msgstr "50 fps(&5)" + +msgid "&60 fps" +msgstr "60 fps(&6)" + +msgid "&75 fps" +msgstr "75 fps(&7)" + +msgid "&VSync" +msgstr "VSync(&V)" + +msgid "&Select shader..." +msgstr "シェーダの選択(&S)..." + +msgid "&Remove shader" +msgstr "シェーダの削除(&R)" + +msgid "Preferences" +msgstr "環境設定" + +msgid "Sound Gain" +msgstr "音量ゲイン" + +msgid "New Image" +msgstr "新規のイメージ" + +msgid "Settings" +msgstr "設定" + +msgid "Specify Main Window Dimensions" +msgstr "メインウィンドウのサイズ指定" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "キャンセル" + +msgid "Save these settings as &global defaults" +msgstr "これらの設定をグローバル既定値として保存する(&G)" + +msgid "&Default" +msgstr "既定値(&D)" + +msgid "Language:" +msgstr "言語:" + +msgid "Icon set:" +msgstr "アイコンセット:" + +msgid "Gain" +msgstr "ゲイン値" + +msgid "File name:" +msgstr "ファイル名:" + +msgid "Disk size:" +msgstr "ディスクの容量:" + +msgid "RPM mode:" +msgstr "RPMモード:" + +msgid "Progress:" +msgstr "進行:" + +msgid "Width:" +msgstr "幅:" + +msgid "Height:" +msgstr "高さ:" + +msgid "Lock to this size" +msgstr "このサイズをロックする" + +msgid "Machine type:" +msgstr "マシンタイプ:" + +msgid "Machine:" +msgstr "マシン:" + +msgid "Configure" +msgstr "設定" + +msgid "CPU type:" +msgstr "CPUタイプ:" + +msgid "Speed:" +msgstr "速度:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "待機状態:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "メモリ:" + +msgid "Time synchronization" +msgstr "時刻同期化" + +msgid "Disabled" +msgstr "使用しない" + +msgid "Enabled (local time)" +msgstr "使用する (現地時間)" + +msgid "Enabled (UTC)" +msgstr "使用する (UTC)" + +msgid "Dynamic Recompiler" +msgstr "動的再コンパイル" + +msgid "Video:" +msgstr "ビデオカード:" + +msgid "Voodoo Graphics" +msgstr "Voodooグラフィック" + +msgid "Mouse:" +msgstr "マウス:" + +msgid "Joystick:" +msgstr "ジョイスティック:" + +msgid "Joystick 1..." +msgstr "ジョイスティック1..." + +msgid "Joystick 2..." +msgstr "ジョイスティック2..." + +msgid "Joystick 3..." +msgstr "ジョイスティック3..." + +msgid "Joystick 4..." +msgstr "ジョイスティック4..." + +msgid "Sound card:" +msgstr "サウンドカード:" + +msgid "MIDI Out Device:" +msgstr "MIDI出力デバイス:" + +msgid "MIDI In Device:" +msgstr "MIDI入力デバイス:" + +msgid "Standalone MPU-401" +msgstr "MPU-401を単独使用" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "FLOAT32サウンドを使用" + +msgid "Network type:" +msgstr "ネットワークタイプ:" + +msgid "PCap device:" +msgstr "PCapデバイス:" + +msgid "Network adapter:" +msgstr "ネットワークカード:" + +msgid "LPT1 Device:" +msgstr "LPT1デバイス:" + +msgid "LPT2 Device:" +msgstr "LPT2デバイス:" + +msgid "LPT3 Device:" +msgstr "LPT3デバイス:" + +msgid "Serial port 1" +msgstr "シリアルポート1" + +msgid "Serial port 2" +msgstr "シリアルポート2" + +msgid "Serial port 3" +msgstr "シリアルポート3" + +msgid "Serial port 4" +msgstr "シリアルポート4" + +msgid "Parallel port 1" +msgstr "パラレルポート1" + +msgid "Parallel port 2" +msgstr "パラレルポート2" + +msgid "Parallel port 3" +msgstr "パラレルポート3" + +msgid "HD Controller:" +msgstr "HDコントローラー:" + +msgid "FD Controller:" +msgstr "FDコントローラー:" + +msgid "Tertiary IDE Controller" +msgstr "第三のIDEコントローラー" + +msgid "Quaternary IDE Controller" +msgstr "第四のIDEコントローラー" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "コントローラー1:" + +msgid "Controller 2:" +msgstr "コントローラー2:" + +msgid "Controller 3:" +msgstr "コントローラー3:" + +msgid "Controller 4:" +msgstr "コントローラー4:" + +msgid "Cassette" +msgstr "カセット" + +msgid "Hard disks:" +msgstr "ハードディスク:" + +msgid "&New..." +msgstr "新規(&N)..." + +msgid "&Existing..." +msgstr "既定(&E)..." + +msgid "&Remove" +msgstr "除去(&R)" + +msgid "Bus:" +msgstr "バス:" + +msgid "Channel:" +msgstr "チャンネル:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "参照(&S)..." + +msgid "Sectors:" +msgstr "セクター:" + +msgid "Heads:" +msgstr "ヘッド:" + +msgid "Cylinders:" +msgstr "シリンダー:" + +msgid "Size (MB):" +msgstr "容量(MB):" + +msgid "Type:" +msgstr "形式:" + +msgid "Image Format:" +msgstr "イメージ形式:" + +msgid "Block Size:" +msgstr "ブロックサイズ:" + +msgid "Floppy drives:" +msgstr "フロッピードライブ:" + +msgid "Turbo timings" +msgstr "高速タイミング" + +msgid "Check BPB" +msgstr "BPBをチェック" + +msgid "CD-ROM drives:" +msgstr "CD-ROMドライブ:" + +msgid "MO drives:" +msgstr "光磁気ドライブ:" + +msgid "ZIP drives:" +msgstr "ZIPドライブ:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA RTCカード:" + +msgid "ISA Memory Expansion" +msgstr "ISAメモリー拡張カード" + +msgid "Card 1:" +msgstr "カード1:" + +msgid "Card 2:" +msgstr "カード2:" + +msgid "Card 3:" +msgstr "カード3:" + +msgid "Card 4:" +msgstr "カード4:" + +msgid "ISABugger device" +msgstr "ISABuggerデバイス" + +msgid "POST card" +msgstr "POSTカード" + +msgid "Segoe UI" +msgstr "Meiryo UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "エラー" + +msgid "Fatal error" +msgstr "致命的なエラー" + +msgid "" +msgstr "<予約済み>" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "CTRL+ALT+PAGE DOWNでウィンドウモードに戻ります。" + +msgid "Speed" +msgstr "速度" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgstr "ZIPイメージ (*.IM? *.im? *.ZDI *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." +msgstr "86Boxで使用可能なROMイメージが見つかりませんでした。\n\nROMセットをダウンロードして、《roms》ディレクトリに解凍してください。" + +msgid "(empty)" +msgstr "(空)" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" +msgstr "ZIPイメージ (*.IM? *.im? *.ZDI *.zdi);;すべてのファイル (*)" + +msgid "Turbo" +msgstr "高速" + +msgid "On" +msgstr "オン" + +msgid "Off" +msgstr "オフ" + +msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" +msgstr "すべてのイメージ (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;基本的なセクターイメージ (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;表面イメージ (*.86F *.86f)" + +msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "roms/machinesディレクトリにROMがないため、マシン《%hs》は使用できません。使用可能なマシンに切り替えます。" + +msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "roms/videoディレクトリにROMがないため、ビデオカード《%hs》は使用できません。使用可能なビデオカードに切り替えます。" + +msgid "Machine" +msgstr "マシン" + +msgid "Display" +msgstr "画面表示" + +msgid "Input devices" +msgstr "入力デバイス" + +msgid "Sound" +msgstr "サウンド" + +msgid "Network" +msgstr "ネットワーク" + +msgid "Ports (COM & LPT)" +msgstr "ポート (COM & LPT)" + +msgid "Storage controllers" +msgstr "ストレージコントローラ" + +msgid "Hard disks" +msgstr "ハードディスク" + +msgid "Floppy & CD-ROM drives" +msgstr "フロッピー/CD-ROMドライブ" + +msgid "Other removable devices" +msgstr "その他のリムーバブルデバイス" + +msgid "Other peripherals" +msgstr "その他の周辺機器" + +msgid "Surface images (*.86F *.86f)" +msgstr "表面イメージ (*.86F *.86f)" + +msgid "Click to capture mouse" +msgstr "クリックするとマウスを直接入力します" + +msgid "Press F8+F12 to release mouse" +msgstr "F12+F8キーでマウスの直接入力を解除します" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "F12+F8キーまたは中クリックでマウスの直接入力を解除します" + +msgid "Unable to initialize FluidSynth" +msgstr "FluidSynthが初期化できません" + +msgid "Bus" +msgstr "バス" + +msgid "File" +msgstr "ファイル" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "ビデオレンダラーが初期化できません。" + +msgid "Default" +msgstr "既定値" + +msgid "%i Wait state(s)" +msgstr "%iつの待機状態" + +msgid "Type" +msgstr "形式" + +msgid "Failed to set up PCap" +msgstr "PCapのセットアップに失敗しました" + +msgid "No PCap devices found" +msgstr "PCapデバイスがありません" + +msgid "Invalid PCap device" +msgstr "不正なPCapデバイスです" + +msgid "Standard 2-button joystick(s)" +msgstr "標準2ボタンジョイスティック" + +msgid "Standard 4-button joystick" +msgstr "標準4ボタンジョイスティック" + +msgid "Standard 6-button joystick" +msgstr "標準6ボタンジョイスティック" + +msgid "Standard 8-button joystick" +msgstr "標準8ボタンジョイスティック" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "なし" + +msgid "Unable to load keyboard accelerators." +msgstr "キーボードアクセラレーターを読み込めません。" + +msgid "Unable to register raw input." +msgstr "Raw入力が登録できません。" + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "フロッピー %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgstr "すべてのイメージ (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;アドバンスドセクターイメージ (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;基本セクターイメージ (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;フラックスイメージ (*.FDI *.fdi);;表面イメージ (*.86F *.86f *.MFM *.mfm);;すべてのファイル (*)" + +msgid "Unable to initialize FreeType" +msgstr "FreeTypeが初期化できません" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "SDLが初期化できません。SDL2.dllが必要です" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "起動中のマシンを再起動しますか?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "86Boxを終了しますか?" + +msgid "Unable to initialize Ghostscript" +msgstr "Ghostscriptが初期化できません" + +msgid "MO %i (%ls): %ls" +msgstr "光磁気 %i (%ls): %ls" + +msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgstr "光磁気イメージ (*.IM? *.im? *.MDI *.mdi);;すべてのファイル (*)" + +msgid "Welcome to 86Box!" +msgstr "86Boxへようこそ!" + +msgid "Internal controller" +msgstr "内部のコントローラー" + +msgid "Exit" +msgstr "終了" + +msgid "No ROMs found" +msgstr "ROMが見つかりません" + +msgid "Do you want to save the settings?" +msgstr "設定を保存しますか?" + +msgid "This will hard reset the emulated machine." +msgstr "保存すると使用中のマシンが再起動されます。" + +msgid "Save" +msgstr "保存" + +msgid "About 86Box" +msgstr "86Boxについて" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "古いコンピュータのエミュレータ\n\n著者: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nGNU General Public License version 2以降でリリースされています。詳しくは LICENSE をご覧ください。" + +msgid "Hardware not available" +msgstr "ハードウェアが利用できません" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "がインストールされてるか、libpcapに対応したネットワークに接続されてるか確認してください。" + +msgid "Invalid configuration" +msgstr "不正な設定です" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr "ESC/Pプリンタのエミュレーションにはlibfreetypeが必要です。" + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr "はPostScriptファイルをPDFに自動変換させる為に必要です。\n\n汎用PostScriptプリンターに送った任意のドキュメントはPostScript(.ps)ファイルとして保存されます。" + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr "FluidSynthのMIDI出力にはlibfluidsynthが必要です。" + +msgid "Entering fullscreen mode" +msgstr "フルスクリーンモードに転換します" + +msgid "Don't show this message again" +msgstr "今後このメッセージを表示しない" + +msgid "Don't exit" +msgstr "終了しない" + +msgid "Reset" +msgstr "リセット" + +msgid "Don't reset" +msgstr "リセットしない" + +msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgstr "CD-ROMイメージ (*.ISO *.iso *.CUE *.cue);;すべてのファイル (*)" + +msgid "%hs Device Configuration" +msgstr "%hs デバイスの設定" + +msgid "Monitor in sleep mode" +msgstr "モニターのスリープモード" + +msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" +msgstr "OpenGLシェーダー (*.GLSL *.glsl);;すべてのファイル (*)" + +msgid "OpenGL options" +msgstr "OpenGLの設定" + +msgid "You are loading an unsupported configuration" +msgstr "サポートされていない設定を読み込んでいます" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "選択したマシンに基づくCPUタイプのフィルタリングは、このエミュレートされたマシンでは無効になっています。\n\nこれにより、選択したマシンと互換性のないCPUが選択できます。ただし、マシンのBIOSまたは他のソフトウェアとの互換性が失われる可能性があります。\n\nこの設定の有効化は公式サポートができません。また、バグレポートが無効として閉じられる場合があります。" + +msgid "Continue" +msgstr "つづく" + +msgid "Cassette: %s" +msgstr "カセット: %s" + +msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" +msgstr "カセットイメージ (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;すべてのファイル (*)" + +msgid "Cartridge %i: %ls" +msgstr "カートリッジ %i: %ls" + +msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" +msgstr "カートリッジイメージ (*.A *.a *.B *.b *.JRC *.jrc);;すべてのファイル (*)" + +msgid "Error initializing renderer" +msgstr "レンダラーの初期化エラー" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL(3.0コア)レンダラーが初期化できませんでした。別のレンダラーを使用してください。" + +msgid "Hard disk (%s)" +msgstr "ハードディスク (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLLまたはESDIのCD-ROMドライブが存在しません" + +msgid "Custom..." +msgstr "カスタム..." + +msgid "Custom (large)..." +msgstr "カスタム(大)..." + +msgid "Add New Hard Disk" +msgstr "新規のディスクを追加" + +msgid "Add Existing Hard Disk" +msgstr "既定のディスクを追加" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "HDIのディスクイメージは4GB以上にはできません。" + +msgid "Disk images cannot be larger than 127 GB." +msgstr "ディスクイメージは127GB以上にはできません。" + +msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" +msgstr "ハードディスクイメージ (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;すべてのファイル (*)" + +msgid "Unable to read file" +msgstr "ファイルの読み込みができません" + +msgid "Unable to write file" +msgstr "ファイルの書き込みができません" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "512バイト以外のセクターサイズを持ったHDIまたはHDX形式のイメージはサポートしません。" + +msgid "USB is not yet supported" +msgstr "USBはまだサポートしません" + +msgid "Disk image file already exists" +msgstr "ディスクイメージファイルが既に存在します" + +msgid "Please specify a valid file name." +msgstr "有効なファイル名を指定してください。" + +msgid "Disk image created" +msgstr "ディスクイメージが作成されました" + +msgid "Make sure the file exists and is readable." +msgstr "ファイルが存在し、読み取り可能であることを確認します。" + +msgid "Make sure the file is being saved to a writable directory." +msgstr "ファイルが書き込み可能なディレクトリに保存されていることを確認してください。" + +msgid "Disk image too large" +msgstr "ディスクイメージが大きすぎます" + +msgid "Remember to partition and format the newly-created drive." +msgstr "新規ディスクのパーティション設定とフォーマットを必ずしといてください。" + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "選択したファイルは上書きされます。使っていいですか?" + +msgid "Unsupported disk image" +msgstr "サポートされていないディスクイメージ" + +msgid "Overwrite" +msgstr "上書き" + +msgid "Don't overwrite" +msgstr "上書きしない" + +msgid "Raw image (.img)" +msgstr "Rawイメージ (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDIイメージ (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDXイメージ (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "固定サイズのVHD (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "ダイナミックサイズのVHD (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "ディファレンシングVHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "大型ブロック (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "小型ブロック (512 KB)" + +msgid "VHD files (*.VHD *.vhd);;All files (*)" +msgstr "VHDファイル (*.VHD *.vhd);;すべてのファイル (*)" + +msgid "Select the parent VHD" +msgstr "親VHDの選択" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "親イメージがディファレンシングイメージの作成の後に修正した可能性があります。\n\nイメージファイルの移動、コピーまたはこのディスクを作成したプログラムにバグが発生した可能性があります。\n\nタイムスタンプを修正しますか?" + +msgid "Parent and child disk timestamps do not match" +msgstr "親ディスクと子ディスクのタイムスタンプが一致しません" + +msgid "Could not fix VHD timestamp." +msgstr "VHD のタイムスタンプを修正できませんでした。" + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (クラスター1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (クラスター2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5"" 128Mb M.O. (ISO 10090)" +msgstr "3.5"" 128Mb M.O. (ISO 10090)" + +msgid "3.5"" 230Mb M.O. (ISO 13963)" +msgstr "3.5"" 230Mb M.O. (ISO 13963)" + +msgid "3.5"" 540Mb M.O. (ISO 15498)" +msgstr "3.5"" 540Mb M.O. (ISO 15498)" + +msgid "3.5"" 640Mb M.O. (ISO 15498)" +msgstr "3.5"" 640Mb M.O. (ISO 15498)" + +msgid "3.5"" 1.3Gb M.O. (GigaMO)" +msgstr "3.5"" 1.3Gb M.O. (GigaMO)" + +msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25"" 600Mb M.O." +msgstr "5.25"" 600Mb M.O." + +msgid "5.25"" 650Mb M.O." +msgstr "5.25"" 650Mb M.O." + +msgid "5.25"" 1Gb M.O." +msgstr "5.25"" 1Gb M.O." + +msgid "5.25"" 1.3Gb M.O." +msgstr "5.25"" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "規定の回転数" + +msgid "1%% below perfect RPM" +msgstr "1%低い回転数" + +msgid "1.5%% below perfect RPM" +msgstr "1.5%低い回転数" + +msgid "2%% below perfect RPM" +msgstr "2%低い回転数" + +msgid "(System Default)" +msgstr "(システム既定値)" + diff --git a/src/qt/languages/ko_KR.po b/src/qt/languages/ko_KR.po new file mode 100644 index 000000000..9dc005c03 --- /dev/null +++ b/src/qt/languages/ko_KR.po @@ -0,0 +1,1176 @@ +msgid "Translated by" +msgstr "Unknown" + +msgid "&Action" +msgstr "동작(&A)" + +msgid "&Keyboard requires capture" +msgstr "키보드는 캡쳐가 필요함(&K)" + +msgid "&Right CTRL is left ALT" +msgstr "우측CTRL로 좌측ALT 입력(&R)" + +msgid "&Hard Reset..." +msgstr "재시작(&H)..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "Ctrl+Alt+Del(&C)\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+Esc(&E)" + +msgid "&Pause" +msgstr "일시정지(&P)" + +msgid "E&xit..." +msgstr "끝내기(&X)..." + +msgid "&View" +msgstr "표시(&V)" + +msgid "&Hide status bar" +msgstr "상태 바 숨기기(&H)" + +msgid "&Resizeable window" +msgstr "창 크기 조절 가능하게 하기(&R)" + +msgid "R&emember size && position" +msgstr "창 크기와 위치를 기억하기(&E)" + +msgid "Re&nderer" +msgstr "렌더러(&N)" + +msgid "&Qt (Software)" +msgstr "Qt (소프트웨어)(&Q)" + +msgid "Qt (&Hardware)" +msgstr "Qt (하드웨어)(&H)" + +msgid "Qt (&OpenGL)" +msgstr "Qt (OpenGL)(&O)" + +msgid "Qt (OpenGL &ES)" +msgstr "Qt (OpenGL ES)(&E)" + +msgid "Open&GL (3.0 Core)" +msgstr "OpenGL (3.0 코어)(&G)" + +msgid "&VNC" +msgstr "VNC(&V)" + +msgid "Specify dimensions..." +msgstr "창 크기 지정하기..." + +msgid "F&orce 4:3 display ratio" +msgstr "화면 비율을 4:3으로 맞추기(&O)" + +msgid "&Window scale factor" +msgstr "창 표시 배율(&W)" + +msgid "&0.5x" +msgstr "0.5배(&0)" + +msgid "&1x" +msgstr "1배(&1)" + +msgid "1.&5x" +msgstr "1.5배(&5)" + +msgid "&2x" +msgstr "2배(&2)" + +msgid "Filter method" +msgstr "필터 형식" + +msgid "&Nearest" +msgstr "최근방 이웃 보간법(&N)" + +msgid "&Linear" +msgstr "선형 보간법(&L)" + +msgid "Hi&DPI scaling" +msgstr "HiDPI 스케일링(&D)" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "전체 화면(&F)\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "전체 화면 비율(&S)" + +msgid "&Full screen stretch" +msgstr "전체 화면으로 확대(&F)" + +msgid "&4:3" +msgstr "4:3(&4)" + +msgid "&Square pixels (Keep ratio)" +msgstr "정사각형 픽셀 (비율 유지)(&S)" + +msgid "&Integer scale" +msgstr "정수배 확대(&I)" + +msgid "E&GA/(S)VGA settings" +msgstr "E&GA/(S)VGA 설정" + +msgid "&Inverted VGA monitor" +msgstr "색상 반전된 VGA 모니터(&I)" + +msgid "VGA screen &type" +msgstr "VGA 화면 종류(&T)" + +msgid "RGB &Color" +msgstr "RGB 천연색(&C)" + +msgid "&RGB Grayscale" +msgstr "RGB 회색조(&R)" + +msgid "&Amber monitor" +msgstr "주황색 모니터(&A)" + +msgid "&Green monitor" +msgstr "녹색 모니터(&G)" + +msgid "&White monitor" +msgstr "흰색 모니터(&W)" + +msgid "Grayscale &conversion type" +msgstr "회색조 표현방식(&C)" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT601 (NTSC/PAL)(&6)" + +msgid "BT&709 (HDTV)" +msgstr "BT709 (HDTV)(&7)" + +msgid "&Average" +msgstr "평균값(&A)" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "CGA/PCjr/Tandy/EGA/(S)VGA 오버스캔(&G)" + +msgid "Change contrast for &monochrome display" +msgstr "흑백 표시를 위한 밝기 조정(&M)" + +msgid "&Media" +msgstr "미디어(&M)" + +msgid "&Tools" +msgstr "도구(&T)" + +msgid "&Settings..." +msgstr "설정(&S)..." + +msgid "&Update status bar icons" +msgstr "상태 바 아이콘 갱신하기(&U)" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "스크린샷 찍기(&C)\tCtrl+F11" + +msgid "&Preferences..." +msgstr "환경설정(&P)..." + +msgid "Enable &Discord integration" +msgstr "디스코드 연동 활성화하기(&D)" + +msgid "Sound &gain..." +msgstr "음량 증폭(&G)..." + +msgid "Begin trace\tCtrl+T" +msgstr "추적 시작하기\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "추적 끝내기\tCtrl+T" + +msgid "&Logging" +msgstr "로그(&L)" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "BusLogic 로그 켜기\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "CD-ROM 로그 켜기\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "플로피 (86F) 로그 켜기\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "플로피 컨트롤러 로그 켜기\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "IDE 로그 켜기\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "직렬 포트 로그 켜기\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "네트워크 로그 켜기\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "중단점 로그 켜기(&L)\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "비디오 RAM 덤프 켜기(&V)\tCtrl+F1" + +msgid "&Help" +msgstr "도움말(&H)" + +msgid "&Documentation..." +msgstr "문서(&D)..." + +msgid "&About 86Box..." +msgstr "86Box에 대해(&A)..." + +msgid "" +msgstr "" + +msgid "&New image..." +msgstr "새 이미지(&N)..." + +msgid "&Existing image..." +msgstr "이미지 불러오기(&E)..." + +msgid "Existing image (&Write-protected)..." +msgstr "이미지 불러오기 (쓰기방지)(&W)..." + +msgid "&Record" +msgstr "녹음하기(&R)" + +msgid "&Play" +msgstr "재생하기(&P)" + +msgid "&Rewind to the beginning" +msgstr "맨앞으로 되감기(&R)" + +msgid "&Fast forward to the end" +msgstr "맨끝으로 빨리감기(&F)" + +msgid "E&ject" +msgstr "꺼내기(&J)" + +msgid "&Image..." +msgstr "이미지(&I)..." + +msgid "E&xport to 86F..." +msgstr "86F로 보내기(&X)..." + +msgid "&Mute" +msgstr "음소거(&M)" + +msgid "E&mpty" +msgstr "비었음(&M)" + +msgid "&Reload previous image" +msgstr "이전 이미지 다시 불러오기(&R)" + +msgid "&Image" +msgstr "이미지(&I)" + +msgid "Target &framerate" +msgstr "목표 프레임 레이트(&F)" + +msgid "&Sync with video" +msgstr "비디오와 동기(&S)" + +msgid "&25 fps" +msgstr "25 fps(&2)" + +msgid "&30 fps" +msgstr "30 fps(&3)" + +msgid "&50 fps" +msgstr "50 fps(&5)" + +msgid "&60 fps" +msgstr "60 fps(&6)" + +msgid "&75 fps" +msgstr "75 fps(&7)" + +msgid "&VSync" +msgstr "수직 동기화(&V)" + +msgid "&Select shader..." +msgstr "쉐이더 불러오기(&S)..." + +msgid "&Remove shader" +msgstr "쉐이더 끄기(&R)" + +msgid "Preferences" +msgstr "환경설정" + +msgid "Sound Gain" +msgstr "음량 증폭" + +msgid "New Image" +msgstr "새 이미지" + +msgid "Settings" +msgstr "설정" + +msgid "Specify Main Window Dimensions" +msgstr "창 크기 지정" + +msgid "OK" +msgstr "확인" + +msgid "Cancel" +msgstr "취소" + +msgid "Save these settings as &global defaults" +msgstr "이 설정들을 전역 기본값으로 저장하기(&G)" + +msgid "&Default" +msgstr "기본값(&D)" + +msgid "Language:" +msgstr "언어:" + +msgid "Icon set:" +msgstr "아이콘셋:" + +msgid "Gain" +msgstr "증가값" + +msgid "File name:" +msgstr "파일명:" + +msgid "Disk size:" +msgstr "디스크 용량:" + +msgid "RPM mode:" +msgstr "RPM 모드:" + +msgid "Progress:" +msgstr "진행:" + +msgid "Width:" +msgstr "가로:" + +msgid "Height:" +msgstr "세로:" + +msgid "Lock to this size" +msgstr "크기 고정" + +msgid "Machine type:" +msgstr "머신 종류:" + +msgid "Machine:" +msgstr "기종:" + +msgid "Configure" +msgstr "설정" + +msgid "CPU type:" +msgstr "CPU 종류:" + +msgid "Speed:" +msgstr "속도:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "대기 상태:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "메모리:" + +msgid "Time synchronization" +msgstr "시간 동기화" + +msgid "Disabled" +msgstr "사용하지 않음" + +msgid "Enabled (local time)" +msgstr "사용 (현지 시간)" + +msgid "Enabled (UTC)" +msgstr "사용 (UTC)" + +msgid "Dynamic Recompiler" +msgstr "동적 재컴파일" + +msgid "Video:" +msgstr "비디오 카드:" + +msgid "Voodoo Graphics" +msgstr "Voodoo 그래픽" + +msgid "Mouse:" +msgstr "마우스:" + +msgid "Joystick:" +msgstr "조이스틱:" + +msgid "Joystick 1..." +msgstr "조이스틱 1..." + +msgid "Joystick 2..." +msgstr "조이스틱 2..." + +msgid "Joystick 3..." +msgstr "조이스틱 3..." + +msgid "Joystick 4..." +msgstr "조이스틱 4..." + +msgid "Sound card:" +msgstr "사운드 카드:" + +msgid "MIDI Out Device:" +msgstr "MIDI 출력 장치:" + +msgid "MIDI In Device:" +msgstr "MIDI 입력 장치:" + +msgid "Standalone MPU-401" +msgstr "MPU-401 단독 사용" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "FLOAT32 사운드 사용" + +msgid "Network type:" +msgstr "네트워크 종류:" + +msgid "PCap device:" +msgstr "PCap 장치:" + +msgid "Network adapter:" +msgstr "네트워크 어댑터:" + +msgid "LPT1 Device:" +msgstr "LPT1 장치:" + +msgid "LPT2 Device:" +msgstr "LPT2 장치:" + +msgid "LPT3 Device:" +msgstr "LPT3 장치:" + +msgid "Serial port 1" +msgstr "직렬 포트 1" + +msgid "Serial port 2" +msgstr "직렬 포트 2" + +msgid "Serial port 3" +msgstr "직렬 포트 3" + +msgid "Serial port 4" +msgstr "직렬 포트 4" + +msgid "Parallel port 1" +msgstr "병렬 포트 1" + +msgid "Parallel port 2" +msgstr "병렬 포트 2" + +msgid "Parallel port 3" +msgstr "병렬 포트 3" + +msgid "HD Controller:" +msgstr "HD 컨트롤러:" + +msgid "FD Controller:" +msgstr "FD 컨트롤러:" + +msgid "Tertiary IDE Controller" +msgstr "제3의 IDE 컨트롤러" + +msgid "Quaternary IDE Controller" +msgstr "제4의 IDE 컨트롤러" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "컨트롤러 1:" + +msgid "Controller 2:" +msgstr "컨트롤러 2:" + +msgid "Controller 3:" +msgstr "컨트롤러 3:" + +msgid "Controller 4:" +msgstr "컨트롤러 4:" + +msgid "Cassette" +msgstr "카세트 테이프" + +msgid "Hard disks:" +msgstr "하드 디스크:" + +msgid "&New..." +msgstr "새로 만들기(&N)..." + +msgid "&Existing..." +msgstr "불러오기(&E)..." + +msgid "&Remove" +msgstr "목록에서 제거(&R)" + +msgid "Bus:" +msgstr "버스:" + +msgid "Channel:" +msgstr "채널:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "열기(&S)..." + +msgid "Sectors:" +msgstr "섹터:" + +msgid "Heads:" +msgstr "헤드:" + +msgid "Cylinders:" +msgstr "실린더:" + +msgid "Size (MB):" +msgstr "용량(MB):" + +msgid "Type:" +msgstr "형식:" + +msgid "Image Format:" +msgstr "이미지 포맷:" + +msgid "Block Size:" +msgstr "블록 크기:" + +msgid "Floppy drives:" +msgstr "플로피 드라이브:" + +msgid "Turbo timings" +msgstr "고속 동작" + +msgid "Check BPB" +msgstr "BPB 확인" + +msgid "CD-ROM drives:" +msgstr "CD-ROM 드라이브:" + +msgid "MO drives:" +msgstr "광자기 드라이브:" + +msgid "ZIP drives:" +msgstr "ZIP 드라이브:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA RTC 카드:" + +msgid "ISA Memory Expansion" +msgstr "ISA 메모리 확장 카드" + +msgid "Card 1:" +msgstr "카드 1:" + +msgid "Card 2:" +msgstr "카드 2:" + +msgid "Card 3:" +msgstr "카드 3:" + +msgid "Card 4:" +msgstr "카드 4:" + +msgid "ISABugger device" +msgstr "ISABugger 장치" + +msgid "POST card" +msgstr "POST 카드" + +msgid "Segoe UI" +msgstr "Malgun Gothic" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "오류" + +msgid "Fatal error" +msgstr "치명적인 오류" + +msgid "" +msgstr "<예약됨>" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "CTRL+ALT+PAGE DOWN 키를 누르면 창 모드로 전환합니다." + +msgid "Speed" +msgstr "속도" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgstr "ZIP 이미지 (*.IM? *.im? *.ZDI *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." +msgstr "86Box에서 사용 가능한 ROM 이미지를 찾을 수 없습니다.\n\nROM 세트를다운로드 후 ""roms"" 디렉토리에 압축을 풀어 주세요." + +msgid "(empty)" +msgstr "(비었음)" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" +msgstr "ZIP 이미지 (*.IM? *.im? *.ZDI *.zdi);;모든 파일 (*)" + +msgid "Turbo" +msgstr "터보" + +msgid "On" +msgstr "켜짐" + +msgid "Off" +msgstr "꺼짐" + +msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" +msgstr "모든 이미지 (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;기본 섹터 이미지 (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;표면 이미지 (*.86F *.86f)" + +msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "roms/machines 디렉토리에 필요한 롬파일이 없어 기종 ""%hs""을(를) 사용할 수 없습니다. 사용 가능한 기종으로 변경합니다." + +msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "roms/video 디렉토리에 필요한 롬파일이 없어 비디오 카드 ""%hs""을(를) 사용할 수 없습니다. 사용 가능한 기종으로 변경합니다." + +msgid "Machine" +msgstr "기종" + +msgid "Display" +msgstr "디스플레이" + +msgid "Input devices" +msgstr "입력 장치" + +msgid "Sound" +msgstr "사운드" + +msgid "Network" +msgstr "네트워크" + +msgid "Ports (COM & LPT)" +msgstr "포트 (COM & LPT)" + +msgid "Storage controllers" +msgstr "장치 컨트롤러" + +msgid "Hard disks" +msgstr "하드 디스크" + +msgid "Floppy & CD-ROM drives" +msgstr "플로피 / CD-ROM" + +msgid "Other removable devices" +msgstr "기타 이동식 저장장치" + +msgid "Other peripherals" +msgstr "기타 주변기기" + +msgid "Surface images (*.86F *.86f)" +msgstr "표면 이미지 (*.86F *.86f)" + +msgid "Click to capture mouse" +msgstr "이 창을 클릭하면 마우스를 사용합니다" + +msgid "Press F8+F12 to release mouse" +msgstr "F12+F8키를 누르면 마우스를 해제합니다" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "F12+F8키 또는 가운데 버튼을 클릭하면 마우스를 해제합니다" + +msgid "Unable to initialize FluidSynth" +msgstr "FluidSynth를 초기화할 수 없습니다" + +msgid "Bus" +msgstr "버스" + +msgid "File" +msgstr "파일" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "비디오 렌더러를 초기화할 수 없습니다." + +msgid "Default" +msgstr "기본값" + +msgid "%i Wait state(s)" +msgstr "%i 대기 상태" + +msgid "Type" +msgstr "형식" + +msgid "Failed to set up PCap" +msgstr "PCap 설정에 실패했습니다" + +msgid "No PCap devices found" +msgstr "PCap 장치가 없습니다" + +msgid "Invalid PCap device" +msgstr "PCap 장치가 올바르지 않습니다" + +msgid "Standard 2-button joystick(s)" +msgstr "표준 2버튼 조이스틱" + +msgid "Standard 4-button joystick" +msgstr "표준 4버튼 조이스틱" + +msgid "Standard 6-button joystick" +msgstr "표준 6버튼 조이스틱" + +msgid "Standard 8-button joystick" +msgstr "표준 8버튼 조이스틱" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "없음" + +msgid "Unable to load keyboard accelerators." +msgstr "키보드 가속기를 불러올 수 없습니다." + +msgid "Unable to register raw input." +msgstr "Raw 입력을 등록할 수 없습니다." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "플로피 %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgstr "모든 이미지 (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;어드밴스드 섹터 이미지 (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;기본 섹터 이미지 (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;플럭스 이미지 (*.FDI *.fdi);;표면 이미지 (*.86F *.86f *.MFM *.mfm);;모든 파일 (*)" + +msgid "Unable to initialize FreeType" +msgstr "FreeType을 초기화할 수 없습니다" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "SDL을 초기화할 수 없습니다. SDL2.dll이 필요합니다" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "실행중인 머신을 재시작하시겠습니까?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "86Box를 끝내시겠습니까?" + +msgid "Unable to initialize Ghostscript" +msgstr "Ghostscript를 초기화할 수 없습니다" + +msgid "MO %i (%ls): %ls" +msgstr "광자기 %i (%ls): %ls" + +msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgstr "광자기 이미지 (*.IM? *.im? *.MDI *.mdi);;모든 파일 (*)" + +msgid "Welcome to 86Box!" +msgstr "86Box에 어서오세요!" + +msgid "Internal controller" +msgstr "내부 컨트롤러" + +msgid "Exit" +msgstr "끝내기" + +msgid "No ROMs found" +msgstr "ROM을 불러올 수 없습니다" + +msgid "Do you want to save the settings?" +msgstr "설정을 저장하시겠습니까?" + +msgid "This will hard reset the emulated machine." +msgstr "사용중인 머신이 재부팅됩니다." + +msgid "Save" +msgstr "저장" + +msgid "About 86Box" +msgstr "86Box에 대해" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "고전 컴퓨터 에뮬레이터\n\n저자: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nGNU General Public 라이선스 (버전 2 이상)에 의해 배포되었습니다. 자세한 내용은 LICENSE 파일을 읽어 주세요." + +msgid "Hardware not available" +msgstr "하드웨어를 이용할 수 없습니다" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "이 설치되었는지 libpcap에 대응하는 네트워크에 접속되어 있는지 확인해 주세요." + +msgid "Invalid configuration" +msgstr "올바르지 않은 설정입니다" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr "ESC/P 프린터 에뮬레이션에 libfreetype이(가) 필요합니다." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr "은(는) PostScript 파일을 PDF로 자동변환하는 데에 필요합니다.\n\n표준 PostScript 프린터로 보내신 임의의 문서는 PostScript (.ps) 파일로 저장됩니다." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr "FluidSynth의 MIDI 출력에 libfluidsynth이(가) 필요합니다." + +msgid "Entering fullscreen mode" +msgstr "전체 화면으로 전환" + +msgid "Don't show this message again" +msgstr "이 메시지 그만 보기" + +msgid "Don't exit" +msgstr "끝내지 않기" + +msgid "Reset" +msgstr "재시작" + +msgid "Don't reset" +msgstr "재시작 안함" + +msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgstr "CD-ROM 이미지 (*.ISO *.iso *.CUE *.cue);;모든 파일 (*)" + +msgid "%hs Device Configuration" +msgstr "%hs 장치 설정" + +msgid "Monitor in sleep mode" +msgstr "모니터 절전 모드" + +msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" +msgstr "OpenGL 쉐이더 (*.GLSL *.glsl);;모든 파일 (*)" + +msgid "OpenGL options" +msgstr "OpenGL 설정" + +msgid "You are loading an unsupported configuration" +msgstr "지원하지 않는 설정입니다" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "이 에뮬레이트된 기종에 대해 선택한 기종을 기반으로 하는 CPU 종류 필터링이 사용되지 않도록 설정되었습니다.\n\n따라서 선택된 머신과 호환되지 않는 CPU를 선택하실 수 있습니다. 하지만 BIOS 또는 다른 소프트웨어와 호환되지 않을 수 있습니다.\n\n이 설정을 활성화하는 것은 공식적으로 지원되지 않으며, 제출된 버그 보고서는 유효하지 않음으로 닫힐 수 있습니다." + +msgid "Continue" +msgstr "계속" + +msgid "Cassette: %s" +msgstr "카세트: %s" + +msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" +msgstr "카세트 이미지 (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;모든 파일 (*)" + +msgid "Cartridge %i: %ls" +msgstr "카트리지 %i: %ls" + +msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" +msgstr "카트리지 이미지 (*.A *.a *.B *.b *.JRC *.jrc);;모든 파일 (*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Hard disk (%s)" +msgstr "하드 디스크 (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL 또는 ESDI CD-ROM 드라이브가 존재하지 않습니다" + +msgid "Custom..." +msgstr "사용자 설정..." + +msgid "Custom (large)..." +msgstr "사용자 설정 (대용량)..." + +msgid "Add New Hard Disk" +msgstr "새로 생성" + +msgid "Add Existing Hard Disk" +msgstr "기존 이미지 사용" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "HDI 디스크 이미지는 4GB 이상으로 지정할 수 없습니다" + +msgid "Disk images cannot be larger than 127 GB." +msgstr "디스크 이미지는 127GB 이상으로 지정할 수 없습니다" + +msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" +msgstr "하드 디스크 이미지 (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;모든 파일 (*)" + +msgid "Unable to read file" +msgstr "파일을 읽을 수 없습니다" + +msgid "Unable to write file" +msgstr "파일을 저장할 수 없습니다" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "512 바이트 이외의 섹터 크기를 가진 HDI 또는 HDX 형식의 이미지를 생성할 수 없습니다" + +msgid "USB is not yet supported" +msgstr "USB는 아직 지원하지 않습니다" + +msgid "Disk image file already exists" +msgstr "디스크 이미지 파일이 이미 존재합니다" + +msgid "Please specify a valid file name." +msgstr "올바른 파일명을 지정해 주세요." + +msgid "Disk image created" +msgstr "디스크 이미지가 생성되었습니다" + +msgid "Make sure the file exists and is readable." +msgstr "파일이 존재하며 읽을 수 있는지 확인합니다." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "파일이 쓰기 가능한 디렉토리에 저장되고 있는지 확인합니다." + +msgid "Disk image too large" +msgstr "디스크 이미지가 너무 큽니다" + +msgid "Remember to partition and format the newly-created drive." +msgstr "새로 생성한 드라이브의 파티션 설정과 포맷을 꼭 해주세요." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "선택하신 파일을 덮어씌웁니다. 사용하시겠습니까?" + +msgid "Unsupported disk image" +msgstr "지원하지 않는 디스크 이미지입니다" + +msgid "Overwrite" +msgstr "덮어쓰기" + +msgid "Don't overwrite" +msgstr "덮어쓰지 않음" + +msgid "Raw image (.img)" +msgstr "Raw 이미지 (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDI 이미지 (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDX 이미지 (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "고정 사이즈 VHD (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "동적 사이즈 VHD (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "디퍼런싱 VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "대형 블록 (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "소형 블록 (512 KB)" + +msgid "VHD files (*.VHD *.vhd);;All files (*)" +msgstr "VHD 파일 (*.VHD *.vhd);;모든 파일 (*)" + +msgid "Select the parent VHD" +msgstr "부모 VHD 선택" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "이는 디퍼런싱 이미지가 생성된 후 부모 이미지가 수정되었음을 의미할 수 있습니다.\n\n이미지 파일이 이동 또는 복사된 경우 또는 이 디스크를 만든 프로그램의 버그로 인해 발생할 수도 있습니다.\n\n타임스탬프를 수정하시겠습니까?" + +msgid "Parent and child disk timestamps do not match" +msgstr "부모 디스크와 자식 디스크의 타임스탬프가 일치하지 않습니다" + +msgid "Could not fix VHD timestamp." +msgstr "VHD 타임스탬프를 고칠 수 없습니다" + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (클러스터 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (클러스터 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5"" 128Mb M.O. (ISO 10090)" +msgstr "3.5"" 128Mb M.O. (ISO 10090)" + +msgid "3.5"" 230Mb M.O. (ISO 13963)" +msgstr "3.5"" 230Mb M.O. (ISO 13963)" + +msgid "3.5"" 540Mb M.O. (ISO 15498)" +msgstr "3.5"" 540Mb M.O. (ISO 15498)" + +msgid "3.5"" 640Mb M.O. (ISO 15498)" +msgstr "3.5"" 640Mb M.O. (ISO 15498)" + +msgid "3.5"" 1.3Gb M.O. (GigaMO)" +msgstr "3.5"" 1.3Gb M.O. (GigaMO)" + +msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25"" 600Mb M.O." +msgstr "5.25"" 600Mb M.O." + +msgid "5.25"" 650Mb M.O." +msgstr "5.25"" 650Mb M.O." + +msgid "5.25"" 1Gb M.O." +msgstr "5.25"" 1Gb M.O." + +msgid "5.25"" 1.3Gb M.O." +msgstr "5.25"" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "완벽한 회전수" + +msgid "1%% below perfect RPM" +msgstr "1% 낮은 회전수" + +msgid "1.5%% below perfect RPM" +msgstr "1.5% 낮은 회전수" + +msgid "2%% below perfect RPM" +msgstr "2% 낮은 회전수" + +msgid "(System Default)" +msgstr "(시스템 기본값)" + diff --git a/src/qt/languages/pt_BR.po b/src/qt/languages/pt_BR.po new file mode 100644 index 000000000..004d91546 --- /dev/null +++ b/src/qt/languages/pt_BR.po @@ -0,0 +1,1173 @@ +msgid "Translated by" +msgstr "Unknown" + +msgid "&Action" +msgstr "&Ação" + +msgid "&Keyboard requires capture" +msgstr "&Teclado requer captura" + +msgid "&Right CTRL is left ALT" +msgstr "CTRL &direito é o ALT esquerdo" + +msgid "&Hard Reset..." +msgstr "&Reinicialização completa..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Pausar" + +msgid "E&xit..." +msgstr "&Sair..." + +msgid "&View" +msgstr "&Exibir" + +msgid "&Hide status bar" +msgstr "&Ocultar barra de status" + +msgid "&Resizeable window" +msgstr "&Janela redimensionável" + +msgid "R&emember size && position" +msgstr "&Lembrar tamanho e posição" + +msgid "Re&nderer" +msgstr "&Renderizador" + +msgid "&Qt (Software)" +msgstr "&Qt (Software)" + +msgid "Qt (&Hardware)" +msgstr "Qt (&Hardware)" + +msgid "Qt (&OpenGL)" +msgstr "Qt (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (Núcleo 3.0)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "Especificar as dimensões..." + +msgid "F&orce 4:3 display ratio" +msgstr "F&orçar proporção de tela em 4:3" + +msgid "&Window scale factor" +msgstr "&Fator de redimensionamento da janela" + +msgid "&0.5x" +msgstr "&0,5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1,&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Método de filtragem" + +msgid "&Nearest" +msgstr "&Mais próximo" + +msgid "&Linear" +msgstr "&Linear" + +msgid "Hi&DPI scaling" +msgstr "Escala Hi&DPI" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Tela cheia\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Modo de &redimensionamento da tela cheia" + +msgid "&Full screen stretch" +msgstr "&Tela cheia esticada" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "Pixel&s quadrados (manter proporção)" + +msgid "&Integer scale" +msgstr "&Redimensionamento com valores inteiros" + +msgid "E&GA/(S)VGA settings" +msgstr "Configurações E&GA/(S)VGA" + +msgid "&Inverted VGA monitor" +msgstr "Monitor VGA &invertido" + +msgid "VGA screen &type" +msgstr "&Tipo de tela VGA" + +msgid "RGB &Color" +msgstr "&Cor RGB" + +msgid "&RGB Grayscale" +msgstr "Tons de cinza &RGB" + +msgid "&Amber monitor" +msgstr "Monitor &âmbar" + +msgid "&Green monitor" +msgstr "Monitor &verde" + +msgid "&White monitor" +msgstr "Monitor &branco" + +msgid "Grayscale &conversion type" +msgstr "Tipo de &conversão de tons de cinza" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Média" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "Overscan do CGA/PCjr/Tandy/E&GA/(S)VGA" + +msgid "Change contrast for &monochrome display" +msgstr "Alterar contraste para exibição &monocromática" + +msgid "&Media" +msgstr "&Mídia" + +msgid "&Tools" +msgstr "&Ferramentas" + +msgid "&Settings..." +msgstr "&Configurações..." + +msgid "&Update status bar icons" +msgstr "&Atualizar ícones da barra de status" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Capturar &tela\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Preferências..." + +msgid "Enable &Discord integration" +msgstr "Ativar integração com o &Discord" + +msgid "Sound &gain..." +msgstr "&Ganho de som..." + +msgid "Begin trace\tCtrl+T" +msgstr "Inicio do rastreamento\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Fim do rastreamento\tCtrl+T" + +msgid "&Logging" +msgstr "&Registros" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Ativar registros da BusLogic\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Ativar registros do CD-ROM\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Ativar registros do disquete (86F)\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Ativar registros do controlador de disquete\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Ativar registros da IDE\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Ativar registros da porta serial\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Ativar registros da rede\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Ponto de parada no registo\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "Despejo da RAM de &vídeo\tCtrl+F1" + +msgid "&Help" +msgstr "&Ajuda" + +msgid "&Documentation..." +msgstr "&Documentação..." + +msgid "&About 86Box..." +msgstr "&Sobre o 86Box..." + +msgid "" +msgstr "" + +msgid "&New image..." +msgstr "&Nova imagem..." + +msgid "&Existing image..." +msgstr "&Imagem existente..." + +msgid "Existing image (&Write-protected)..." +msgstr "Imagem existente (&protegida contra escrita)..." + +msgid "&Record" +msgstr "&Gravar" + +msgid "&Play" +msgstr "&Reproduzir" + +msgid "&Rewind to the beginning" +msgstr "&Rebobinar até o começo" + +msgid "&Fast forward to the end" +msgstr "&Avançar até o fim" + +msgid "E&ject" +msgstr "E&jetar" + +msgid "&Image..." +msgstr "&Imagem..." + +msgid "E&xport to 86F..." +msgstr "E&xportar para 86F..." + +msgid "&Mute" +msgstr "&Sem som" + +msgid "E&mpty" +msgstr "&Vazio" + +msgid "&Reload previous image" +msgstr "&Recarregar imagem anterior" + +msgid "&Image" +msgstr "&Imagem" + +msgid "Target &framerate" +msgstr "&Taxa de quadro pretendida" + +msgid "&Sync with video" +msgstr "&Sincronizar com vídeo" + +msgid "&25 fps" +msgstr "&25 qps" + +msgid "&30 fps" +msgstr "&30 qps" + +msgid "&50 fps" +msgstr "&50 qps" + +msgid "&60 fps" +msgstr "&60 qps" + +msgid "&75 fps" +msgstr "&75 qps" + +msgid "&VSync" +msgstr "Sincronização &vertical" + +msgid "&Select shader..." +msgstr "&Selecionar shader..." + +msgid "&Remove shader" +msgstr "&Remover shader" + +msgid "Preferences" +msgstr "Preferências" + +msgid "Sound Gain" +msgstr "Ganho de som" + +msgid "New Image" +msgstr "Nova imagem de disquete" + +msgid "Settings" +msgstr "Configurações" + +msgid "Specify Main Window Dimensions" +msgstr "Especifique as dimensões da janela principal" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Save these settings as &global defaults" +msgstr "Usar estas configurações como &padrões globais" + +msgid "&Default" +msgstr "&Padrão" + +msgid "Language:" +msgstr "Idioma:" + +msgid "Icon set:" +msgstr "Pacote de ícones:" + +msgid "Gain" +msgstr "Ganho" + +msgid "File name:" +msgstr "Nome:" + +msgid "Disk size:" +msgstr "Tamanho:" + +msgid "RPM mode:" +msgstr "Modo RPM:" + +msgid "Progress:" +msgstr "Progresso:" + +msgid "Width:" +msgstr "Largura:" + +msgid "Height:" +msgstr "Altura:" + +msgid "Lock to this size" +msgstr "Travar nesse tamanho" + +msgid "Machine type:" +msgstr "Tipo de máquina:" + +msgid "Machine:" +msgstr "Máquina:" + +msgid "Configure" +msgstr "Configurar" + +msgid "CPU type:" +msgstr "Tipo de CPU:" + +msgid "Speed:" +msgstr "Veloc.:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "Estados de espera:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Memória:" + +msgid "Time synchronization" +msgstr "Sincronização da hora" + +msgid "Disabled" +msgstr "Desativada" + +msgid "Enabled (local time)" +msgstr "Ativada (hora local)" + +msgid "Enabled (UTC)" +msgstr "Ativada (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Recompilador dinâmico" + +msgid "Video:" +msgstr "Vídeo:" + +msgid "Voodoo Graphics" +msgstr "3DFX Voodoo" + +msgid "Mouse:" +msgstr "Mouse:" + +msgid "Joystick:" +msgstr "Joystick:" + +msgid "Joystick 1..." +msgstr "Joystick 1..." + +msgid "Joystick 2..." +msgstr "Joystick 2..." + +msgid "Joystick 3..." +msgstr "Joystick 3..." + +msgid "Joystick 4..." +msgstr "Joystick 4..." + +msgid "Sound card:" +msgstr "Placa de som:" + +msgid "MIDI Out Device:" +msgstr "Disp. saída MIDI:" + +msgid "MIDI In Device:" +msgstr "Disp. entrada MIDI:" + +msgid "Standalone MPU-401" +msgstr "MPU-401 autônomo" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Usar som FLOAT32" + +msgid "Network type:" +msgstr "Tipo de rede:" + +msgid "PCap device:" +msgstr "Dispositivo PCap:" + +msgid "Network adapter:" +msgstr "Adaptador de rede:" + +msgid "LPT1 Device:" +msgstr "Dispositivo LPT1:" + +msgid "LPT2 Device:" +msgstr "Dispositivo LPT2:" + +msgid "LPT3 Device:" +msgstr "Dispositivo LPT3:" + +msgid "Serial port 1" +msgstr "Porta serial 1" + +msgid "Serial port 2" +msgstr "Porta serial 2" + +msgid "Serial port 3" +msgstr "Porta serial 3" + +msgid "Serial port 4" +msgstr "Porta serial 4" + +msgid "Parallel port 1" +msgstr "Porta paralela 1" + +msgid "Parallel port 2" +msgstr "Porta paralela 2" + +msgid "Parallel port 3" +msgstr "Porta paralela 3" + +msgid "HD Controller:" +msgstr "Controlador HD:" + +msgid "FD Controller:" +msgstr "Controlador FD:" + +msgid "Tertiary IDE Controller" +msgstr "Controlador IDE terciário" + +msgid "Quaternary IDE Controller" +msgstr "Controlador IDE quaternário" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Controlador 1:" + +msgid "Controller 2:" +msgstr "Controlador 2:" + +msgid "Controller 3:" +msgstr "Controlador 3:" + +msgid "Controller 4:" +msgstr "Controlador 4:" + +msgid "Cassette" +msgstr "Cassete" + +msgid "Hard disks:" +msgstr "Discos rígidos:" + +msgid "&New..." +msgstr "&Novo..." + +msgid "&Existing..." +msgstr "&Existente..." + +msgid "&Remove" +msgstr "&Remover" + +msgid "Bus:" +msgstr "Bar.:" + +msgid "Channel:" +msgstr "Canal:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Especificar..." + +msgid "Sectors:" +msgstr "Setores:" + +msgid "Heads:" +msgstr "Cabeças:" + +msgid "Cylinders:" +msgstr "Cilindros:" + +msgid "Size (MB):" +msgstr "Tamanho (MB):" + +msgid "Type:" +msgstr "Tipo:" + +msgid "Image Format:" +msgstr "Formato:" + +msgid "Block Size:" +msgstr "Tamanho do bloco:" + +msgid "Floppy drives:" +msgstr "Unidades de disquete:" + +msgid "Turbo timings" +msgstr "Turbo" + +msgid "Check BPB" +msgstr "Verificar BPB" + +msgid "CD-ROM drives:" +msgstr "Unidades de CD-ROM:" + +msgid "MO drives:" +msgstr "Unidades magneto-ópticas:" + +msgid "ZIP drives:" +msgstr "Unidades ZIP:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "RTC ISA:" + +msgid "ISA Memory Expansion" +msgstr "Expansão de memória ISA" + +msgid "Card 1:" +msgstr "Placa 1:" + +msgid "Card 2:" +msgstr "Placa 2:" + +msgid "Card 3:" +msgstr "Placa 3:" + +msgid "Card 4:" +msgstr "Placa 4:" + +msgid "ISABugger device" +msgstr "Dispositivo ISABugger" + +msgid "POST card" +msgstr "Placa de diagnóstico" + +msgid "Segoe UI" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Erro" + +msgid "Fatal error" +msgstr "Erro fatal" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Use CTRL+ALT+PAGE DOWN para retornar ao modo janela" + +msgid "Speed" +msgstr "Velocidade" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgstr "Imagens ZIP (*.IM? *.im? *.ZDI *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." +msgstr "O 86Box não conseguiu encontrar nenhuma imagem de ROM utilizável.\n\nPor favor, baixe um conjunto de ROM e extraia no diretório ""roms""." + +msgid "(empty)" +msgstr "(vazio)" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" +msgstr "Imagens ZIP (*.IM? *.im? *.ZDI *.zdi);;Todos os arquivos (*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Lig." + +msgid "Off" +msgstr "Desl." + +msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" +msgstr "Todas as imagens (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Imagens de setor básico (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Imagens de superfície (*.86F *.86f)" + +msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "A máquina ""%hs"" não está disponível devido à falta de ROMs no diretório roms/machines. Mudando para uma máquina disponível." + +msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "A placa de vídeo ""%hs"" não está disponível devido à falta de ROMs no diretório roms/video. Mudando para uma placa de vídeo disponível." + +msgid "Machine" +msgstr "Máquina" + +msgid "Display" +msgstr "Vídeo" + +msgid "Input devices" +msgstr "Dispositivos de entrada" + +msgid "Sound" +msgstr "Som" + +msgid "Network" +msgstr "Rede" + +msgid "Ports (COM & LPT)" +msgstr "Portas (COM & LPT)" + +msgid "Storage controllers" +msgstr "Controladores de armaz." + +msgid "Hard disks" +msgstr "Discos rígidos" + +msgid "Floppy & CD-ROM drives" +msgstr "Disquete & CD-ROM" + +msgid "Other removable devices" +msgstr "Dispos. removíveis" + +msgid "Other peripherals" +msgstr "Outros periféricos" + +msgid "Surface images (*.86F *.86f)" +msgstr "Imagens de superfície (*.86F *.86f)" + +msgid "Click to capture mouse" +msgstr "Clique para capturar o mouse" + +msgid "Press F8+F12 to release mouse" +msgstr "Aperte F8+F12 para liberar o mouse" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Aperte F8+F12 ou botão do meio para liberar o mouse" + +msgid "Unable to initialize FluidSynth" +msgstr "Não foi possível inicializar o FluidSynth" + +msgid "Bus" +msgstr "Barramento" + +msgid "File" +msgstr "Arquivo" + +msgid "C" +msgstr "CI" + +msgid "H" +msgstr "CA" + +msgid "S" +msgstr "SE" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Não foi possível inicializar o renderizador de vídeo." + +msgid "Default" +msgstr "Padrão" + +msgid "%i Wait state(s)" +msgstr "%i estado(s) de espera" + +msgid "Type" +msgstr "Tipo" + +msgid "Failed to set up PCap" +msgstr "Não foi possível configurar o PCap" + +msgid "No PCap devices found" +msgstr "Nenhum dispositivo PCap encontrado" + +msgid "Invalid PCap device" +msgstr "Dispositivo PCap inválido" + +msgid "Standard 2-button joystick(s)" +msgstr "Joystick padrão de 2 botões" + +msgid "Standard 4-button joystick" +msgstr "Joystick padrão de 4 botões" + +msgid "Standard 6-button joystick" +msgstr "Joystick padrão de 6 botões" + +msgid "Standard 8-button joystick" +msgstr "Joystick padrão de 8 botões" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Nada" + +msgid "Unable to load keyboard accelerators." +msgstr "Não foi possível carregar os aceleradores do teclado." + +msgid "Unable to register raw input." +msgstr "Não foi possível registrar a entrada bruta." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Disquete %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgstr "Todas as imagens (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Imagens de setor avançado (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Imagens de setor básico (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Imagens de fluxo (*.FDI *.fdi);;Imagens de superfície (*.86F *.86f *.MFM *.mfm);;Todos os arquivos (*)" + +msgid "Unable to initialize FreeType" +msgstr "Não foi possível inicializar o FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Não é possível inicializar o SDL, é necessário o SDL2.dll" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Tem certeza de que deseja reiniciar completamente a máquina emulada?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Tem certeza de que deseja sair do 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Não é possível inicializar o Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "Magneto-óptico %i (%ls): %ls" + +msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgstr "Imagens magneto-ópticas (*.IM? *.im? *.MDI *.mdi);;Todos os arquivos (*)" + +msgid "Welcome to 86Box!" +msgstr "Bem-vindo ao 86Box!" + +msgid "Internal controller" +msgstr "Controle interno" + +msgid "Exit" +msgstr "Sair" + +msgid "No ROMs found" +msgstr "Nenhum ROM encontrada" + +msgid "Do you want to save the settings?" +msgstr "Você deseja salvar as configurações?" + +msgid "This will hard reset the emulated machine." +msgstr "Isto fará com que a máquina emulada seja reinicializada." + +msgid "Save" +msgstr "Salvar" + +msgid "About 86Box" +msgstr "Sobre o 86Box" + +msgid "86Box v" +msgstr "86Box versão" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Um emulador de computadores antigos\n\nAutores: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, e outros.\n\nTraduzido por: Altieres Lima da Silva\n\nLançado sob a Licença Pública Geral GNU versão 2 ou posterior. Veja o arquivo LICENSE para mais informações." + +msgid "Hardware not available" +msgstr "Hardware não disponível" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Certifique-se de que libpcap esteja instalado e que você tenha uma conexão de rede compatível com libpcap." + +msgid "Invalid configuration" +msgstr "Configuração inválida" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " é necessário para emulação de impressora ESC/P." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " é necessário para a conversão automática de arquivos PostScript para PDF.\n\nQualquer documento enviado para a impressora genérica PostScript será salvo como arquivos PostScript (.ps)." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " é necessário para a saída MIDI FluidSynth." + +msgid "Entering fullscreen mode" +msgstr "Entrando no modo de tela cheia" + +msgid "Don't show this message again" +msgstr "Não exibir esta mensagem novamente" + +msgid "Don't exit" +msgstr "Não sair" + +msgid "Reset" +msgstr "Reiniciar" + +msgid "Don't reset" +msgstr "Não reiniciar" + +msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgstr "Imagens de CD-ROM (*.ISO *.iso *.CUE *.cue);;Todos os arquivos (*)" + +msgid "%hs Device Configuration" +msgstr "Configuração do dispositivo %hs" + +msgid "Monitor in sleep mode" +msgstr "Monitor em modo de suspensão" + +msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" +msgstr "Shaders OpenGL (*.GLSL *.glsl);;Todos os arquivos (*)" + +msgid "OpenGL options" +msgstr "Opções do OpenGL" + +msgid "You are loading an unsupported configuration" +msgstr "Você está carregando uma configuração não suportada" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "A filtragem do tipo CPU baseada na máquina selecionada é desativada para esta máquina emulada.\n\nIsto torna possível escolher uma CPU que de outra forma seria incompatível com a máquina selecionada. Entretanto, você pode encontrar incompatibilidades com a BIOS da máquina ou outro software.\n\nA ativação desta configuração não é oficialmente suportada e qualquer relatório de erro arquivado pode ser fechado como inválido." + +msgid "Continue" +msgstr "Continuar" + +msgid "Cassette: %s" +msgstr "Cassete: %s" + +msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" +msgstr "Imagens de cassete (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Todos os arquivos (*)" + +msgid "Cartridge %i: %ls" +msgstr "Cartucho %i: %ls" + +msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" +msgstr "Imagens de cartucho (*.A *.a *.B *.b *.JRC *.jrc);;Todos os arquivos (*)" + +msgid "Error initializing renderer" +msgstr "Erro ao inicializar o renderizador" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "O renderizador OpenGL (Núcleo 3.0) não pôde ser inicializado. Use outro renderizador." + +msgid "Hard disk (%s)" +msgstr "Disco rígido (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "As unidades de CD-ROM MFM/RLL ou ESDI nunca existiram" + +msgid "Custom..." +msgstr "Personalizado..." + +msgid "Custom (large)..." +msgstr "Personalizado (grande)..." + +msgid "Add New Hard Disk" +msgstr "Adicionar novo disco rígido" + +msgid "Add Existing Hard Disk" +msgstr "Adicionar disco rígido existente" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "As imagens de disco HDI não podem ser maiores do que 4GB." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "As imagens de disco não podem ser maiores do que 127GB." + +msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" +msgstr "Imagens de disco rígido (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Todos os arquivos (*)" + +msgid "Unable to read file" +msgstr "Não foi possível ler o arquivo" + +msgid "Unable to write file" +msgstr "Não foi possível escrever o arquivo" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "Imagens HDI ou HDX com um tamanho de setor que não seja 512 não são suportadas." + +msgid "USB is not yet supported" +msgstr "O USB ainda não é suportado" + +msgid "Disk image file already exists" +msgstr "Esta imagem existe" + +msgid "Please specify a valid file name." +msgstr "Digite um nome de arquivo válido." + +msgid "Disk image created" +msgstr "A imagem foi criada com sucesso" + +msgid "Make sure the file exists and is readable." +msgstr "Certifique-se de que o arquivo existe e é legível." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Certifique-se de que o arquivo está sendo salvo em um diretório gravável." + +msgid "Disk image too large" +msgstr "A imagem do disco é muito grande" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Lembre-se de particionar e formatar a unidade recém-criada." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "O arquivo selecionado será sobrescrito. Você tem certeza de que deseja usá-lo?" + +msgid "Unsupported disk image" +msgstr "Imagem de disco sem suporte" + +msgid "Overwrite" +msgstr "Sobrescrever" + +msgid "Don't overwrite" +msgstr "Não sobrescrever" + +msgid "Raw image (.img)" +msgstr "Imagem bruta (.img)" + +msgid "HDI image (.hdi)" +msgstr "Imagem HDI (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "Imagem HDX (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD de tamanho fixo (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD de tamanho dinâmico (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "VHD diferencial (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Blocos grandes (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Blocos pequenos (512 KB)" + +msgid "VHD files (*.VHD *.vhd);;All files (*)" +msgstr "Arquivos VHD (*.VHD *.vhd);;Todos os arquivos (*)" + +msgid "Select the parent VHD" +msgstr "Selecione o VHD pai" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Isto pode significar que a imagem de origem foi modificada após a criação da imagem diferencial.\n\nTambém pode acontecer caso os arquivos de imagem tenham sido movidos ou copiados, ou por um erro no programa que criou este disco.\n\nVocê quer consertar os marcadores de tempo?" + +msgid "Parent and child disk timestamps do not match" +msgstr "A data/hora dos arquivos de pais e filhos não correspondem" + +msgid "Could not fix VHD timestamp." +msgstr "Não foi possível consertar o carimbo de data/hora da VHD." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (cluster 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (cluster 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5"" 128Mb M.O. (ISO 10090)" +msgstr "3.5"" 128Mb M.O. (ISO 10090)" + +msgid "3.5"" 230Mb M.O. (ISO 13963)" +msgstr "3.5"" 230Mb M.O. (ISO 13963)" + +msgid "3.5"" 540Mb M.O. (ISO 15498)" +msgstr "3.5"" 540Mb M.O. (ISO 15498)" + +msgid "3.5"" 640Mb M.O. (ISO 15498)" +msgstr "3.5"" 640Mb M.O. (ISO 15498)" + +msgid "3.5"" 1.3Gb M.O. (GigaMO)" +msgstr "3.5"" 1.3Gb M.O. (GigaMO)" + +msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25"" 600Mb M.O." +msgstr "5.25"" 600Mb M.O." + +msgid "5.25"" 650Mb M.O." +msgstr "5.25"" 650Mb M.O." + +msgid "5.25"" 1Gb M.O." +msgstr "5.25"" 1Gb M.O." + +msgid "5.25"" 1.3Gb M.O." +msgstr "5.25"" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "RPM perfeita" + +msgid "1%% below perfect RPM" +msgstr "1%% abaixo das RPM perfeita" + +msgid "1.5%% below perfect RPM" +msgstr "1.5%% abaixo das RPM perfeita" + +msgid "2%% below perfect RPM" +msgstr "2%% abaixo das RPM perfeita" + +msgid "(System Default)" +msgstr "(Padrão do sistema)" + diff --git a/src/qt/languages/pt_PT.po b/src/qt/languages/pt_PT.po new file mode 100644 index 000000000..140c0c0c7 --- /dev/null +++ b/src/qt/languages/pt_PT.po @@ -0,0 +1,1173 @@ +msgid "Translated by" +msgstr "Unknown" + +msgid "&Action" +msgstr "&Ação" + +msgid "&Keyboard requires capture" +msgstr "&Teclado requere captura" + +msgid "&Right CTRL is left ALT" +msgstr "&CTRL direito é ALT esquerdo" + +msgid "&Hard Reset..." +msgstr "&Reinicialização completa..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Pausa" + +msgid "E&xit..." +msgstr "&Sair..." + +msgid "&View" +msgstr "&Ver" + +msgid "&Hide status bar" +msgstr "&Ocultar barra de estado" + +msgid "&Resizeable window" +msgstr "&Janela redimensionável" + +msgid "R&emember size && position" +msgstr "&Lembrar tamanho e posição" + +msgid "Re&nderer" +msgstr "&Renderizador" + +msgid "&Qt (Software)" +msgstr "&Qt (Software)" + +msgid "Qt (&Hardware)" +msgstr "Qt (&Hardware)" + +msgid "Qt (&OpenGL)" +msgstr "Qt (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (Núcleo 3.0)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "&Especificar dimensões..." + +msgid "F&orce 4:3 display ratio" +msgstr "&Forçar rácio de visualização 4:3" + +msgid "&Window scale factor" +msgstr "F&actor de escala de janela" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Método de filtragem" + +msgid "&Nearest" +msgstr "&Mais próximo" + +msgid "&Linear" +msgstr "&Linear" + +msgid "Hi&DPI scaling" +msgstr "Escala Hi&DPI" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "E&crã cheio\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Modo &de estiramento em ecrã cheio" + +msgid "&Full screen stretch" +msgstr "&Estiramento em ecrã cheio" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "Pixels &quadrados (Manter rácio)" + +msgid "&Integer scale" +msgstr "Escala &inteira" + +msgid "E&GA/(S)VGA settings" +msgstr "Definições E&GA/(S)VGA" + +msgid "&Inverted VGA monitor" +msgstr "Monitor VGA &invertido" + +msgid "VGA screen &type" +msgstr "&Tipo de ecrã VGA" + +msgid "RGB &Color" +msgstr "&Cores RGB" + +msgid "&RGB Grayscale" +msgstr "&RGB em escala de cinzentos" + +msgid "&Amber monitor" +msgstr "Monitor âmb&ar" + +msgid "&Green monitor" +msgstr "Monitor &verde" + +msgid "&White monitor" +msgstr "Monitor &branco" + +msgid "Grayscale &conversion type" +msgstr "Tipo de &conversão para escala de cinzentos" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Media" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "Overscan de CGA/PCjr/Tandy/E&GA/(S)VGA" + +msgid "Change contrast for &monochrome display" +msgstr "Mudar &contraste para ecrã monocromático" + +msgid "&Media" +msgstr "&Media" + +msgid "&Tools" +msgstr "&Ferramentas" + +msgid "&Settings..." +msgstr "&Definições..." + +msgid "&Update status bar icons" +msgstr "&Atualizar ícones da barra de estado" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Gravar imagem de ecrã\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Preferências..." + +msgid "Enable &Discord integration" +msgstr "Ativar integração com &Discord" + +msgid "Sound &gain..." +msgstr "&Ganho de som..." + +msgid "Begin trace\tCtrl+T" +msgstr "Iniciar o rastreio\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Terminar o rastreio\tCtrl+T" + +msgid "&Logging" +msgstr "&Registo" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Ativar registo BusLogic\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Ativar registo do CD-ROM\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Ativar registo de disquetes (86F)\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Ativar registo do controlador de disquetes\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Ativar registo IDE\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Ativar registo da porta série\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Ativar registo de rede\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Ponto de paragem no registo\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "Despejo de RAM &vídeo\tCtrl+F1" + +msgid "&Help" +msgstr "&Ajuda" + +msgid "&Documentation..." +msgstr "&Documentação..." + +msgid "&About 86Box..." +msgstr "&Acerca do 86Box..." + +msgid "" +msgstr "" + +msgid "&New image..." +msgstr "&Nova imagem..." + +msgid "&Existing image..." +msgstr "Imagem &existente..." + +msgid "Existing image (&Write-protected)..." +msgstr "Imagem existente (&Proteção contra escrita)..." + +msgid "&Record" +msgstr "&Gravar" + +msgid "&Play" +msgstr "&Reproduzir" + +msgid "&Rewind to the beginning" +msgstr "Re&bobinar para o início" + +msgid "&Fast forward to the end" +msgstr "&Avanço rápido para o fim" + +msgid "E&ject" +msgstr "E&jetar" + +msgid "&Image..." +msgstr "&Imagem..." + +msgid "E&xport to 86F..." +msgstr "E&xportar para 86F..." + +msgid "&Mute" +msgstr "&Mute" + +msgid "E&mpty" +msgstr "&CDROM vazio" + +msgid "&Reload previous image" +msgstr "&Recarregar imagem anterior" + +msgid "&Image" +msgstr "&Imagem" + +msgid "Target &framerate" +msgstr "&Taxa de quadros de destino" + +msgid "&Sync with video" +msgstr "&Sincronizar com vídeo" + +msgid "&25 fps" +msgstr "&25 q/s" + +msgid "&30 fps" +msgstr "&30 q/s" + +msgid "&50 fps" +msgstr "&50 q/s" + +msgid "&60 fps" +msgstr "&60 q/s" + +msgid "&75 fps" +msgstr "&75 q/s" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Selecionar shader..." + +msgid "&Remove shader" +msgstr "&Remover shader" + +msgid "Preferences" +msgstr "Preferências" + +msgid "Sound Gain" +msgstr "Ganho de som" + +msgid "New Image" +msgstr "Nova imagem" + +msgid "Settings" +msgstr "Definições" + +msgid "Specify Main Window Dimensions" +msgstr "Especificar dimensões da janela principal" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Save these settings as &global defaults" +msgstr "Guardar estas definições como padrões &globais" + +msgid "&Default" +msgstr "&Padrão" + +msgid "Language:" +msgstr "Idioma:" + +msgid "Icon set:" +msgstr "Pacote de ícones:" + +msgid "Gain" +msgstr "Ganho" + +msgid "File name:" +msgstr "Nome:" + +msgid "Disk size:" +msgstr "Tamanho:" + +msgid "RPM mode:" +msgstr "Modo RPM:" + +msgid "Progress:" +msgstr "Progresso:" + +msgid "Width:" +msgstr "Largura:" + +msgid "Height:" +msgstr "Altura:" + +msgid "Lock to this size" +msgstr "Fixar neste tamanho" + +msgid "Machine type:" +msgstr "Tipo de máquina:" + +msgid "Machine:" +msgstr "Máquina:" + +msgid "Configure" +msgstr "Configurar" + +msgid "CPU type:" +msgstr "Tipo do CPU:" + +msgid "Speed:" +msgstr "Velocidade:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "Estados de espera:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Memória:" + +msgid "Time synchronization" +msgstr "Sincronização da hora" + +msgid "Disabled" +msgstr "Desativada" + +msgid "Enabled (local time)" +msgstr "Ativada (hora local)" + +msgid "Enabled (UTC)" +msgstr "Ativada (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Recompilador dinâmico" + +msgid "Video:" +msgstr "Vídeo:" + +msgid "Voodoo Graphics" +msgstr "Gráficos Voodoo" + +msgid "Mouse:" +msgstr "Rato:" + +msgid "Joystick:" +msgstr "Joystick:" + +msgid "Joystick 1..." +msgstr "Joystick 1..." + +msgid "Joystick 2..." +msgstr "Joystick 2..." + +msgid "Joystick 3..." +msgstr "Joystick 3..." + +msgid "Joystick 4..." +msgstr "Joystick 4..." + +msgid "Sound card:" +msgstr "Placa de som:" + +msgid "MIDI Out Device:" +msgstr "Disp. saída MIDI:" + +msgid "MIDI In Device:" +msgstr "Disp. entrada MIDI:" + +msgid "Standalone MPU-401" +msgstr "MPU-401 autónomo" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Utilizar som FLOAT32" + +msgid "Network type:" +msgstr "Tipo de rede:" + +msgid "PCap device:" +msgstr "Dispositivo PCap:" + +msgid "Network adapter:" +msgstr "Placa de rede:" + +msgid "LPT1 Device:" +msgstr "Dispositivo LPT1:" + +msgid "LPT2 Device:" +msgstr "Dispositivo LPT2:" + +msgid "LPT3 Device:" +msgstr "Dispositivo LPT3:" + +msgid "Serial port 1" +msgstr "Porta de série 1" + +msgid "Serial port 2" +msgstr "Porta de série 2" + +msgid "Serial port 3" +msgstr "Porta de série 3" + +msgid "Serial port 4" +msgstr "Porta de série 4" + +msgid "Parallel port 1" +msgstr "Porta paralela 1" + +msgid "Parallel port 2" +msgstr "Porta paralela 2" + +msgid "Parallel port 3" +msgstr "Porta paralela 3" + +msgid "HD Controller:" +msgstr "Controlador HD:" + +msgid "FD Controller:" +msgstr "Controlador FD:" + +msgid "Tertiary IDE Controller" +msgstr "Controlador IDE terciário" + +msgid "Quaternary IDE Controller" +msgstr "Controlador IDE quaternário" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Controlador 1:" + +msgid "Controller 2:" +msgstr "Controlador 2:" + +msgid "Controller 3:" +msgstr "Controlador 3:" + +msgid "Controller 4:" +msgstr "Controlador 4:" + +msgid "Cassette" +msgstr "Cassete" + +msgid "Hard disks:" +msgstr "Discos rígidos:" + +msgid "&New..." +msgstr "&Novo..." + +msgid "&Existing..." +msgstr "&Existente..." + +msgid "&Remove" +msgstr "&Remover" + +msgid "Bus:" +msgstr "Barram.:" + +msgid "Channel:" +msgstr "Canal:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Especificar..." + +msgid "Sectors:" +msgstr "Sectores:" + +msgid "Heads:" +msgstr "Cabeças:" + +msgid "Cylinders:" +msgstr "Cilindros:" + +msgid "Size (MB):" +msgstr "Tamanho (MB):" + +msgid "Type:" +msgstr "Tipo:" + +msgid "Image Format:" +msgstr "Formato de imagem:" + +msgid "Block Size:" +msgstr "Tamanho de bloco:" + +msgid "Floppy drives:" +msgstr "Unidades de disquete:" + +msgid "Turbo timings" +msgstr "Velocidade turbo" + +msgid "Check BPB" +msgstr "Verificar BPB" + +msgid "CD-ROM drives:" +msgstr "Unidades CD-ROM:" + +msgid "MO drives:" +msgstr "Unidades magneto-ópticas:" + +msgid "ZIP drives:" +msgstr "Unidades ZIP:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA RTC:" + +msgid "ISA Memory Expansion" +msgstr "Expansão de memória ISA" + +msgid "Card 1:" +msgstr "Placa 1:" + +msgid "Card 2:" +msgstr "Placa 2:" + +msgid "Card 3:" +msgstr "Placa 3:" + +msgid "Card 4:" +msgstr "Placa 4:" + +msgid "ISABugger device" +msgstr "Dispositivo ISABugger" + +msgid "POST card" +msgstr "Placa POST" + +msgid "Segoe UI" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Erro" + +msgid "Fatal error" +msgstr "Erro fatal" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Pressione CTRL+ALT+PAGE DOWN para voltar ao modo de janela." + +msgid "Speed" +msgstr "Velocidade" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgstr "Imagens ZIP (*.IM? *.im? *.ZDI *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." +msgstr "O 86Box não conseguiu encontrar nenhuma imagem ROM utilizável.\n\nPor favor, vá a href=""https://github.com/86Box/roms/releases/latest"">descarregue um pacote ROM e instale-o na pasta ""roms""." + +msgid "(empty)" +msgstr "(empty)" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" +msgstr "Imagens ZIP (*.IM? *.im? *.ZDI *.zdi);;Todos os ficheiros (*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Ativado" + +msgid "Off" +msgstr "Desativado" + +msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" +msgstr "Todas as imagens (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Imagens básicas de sector (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Imagens de superfície (*.86F *.86f)" + +msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "A máquina ""%hs"" não está disponível devido à falta de ROMs na pasta roms/machines. A mudar para uma máquina disponível." + +msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "A placa vídeo ""%hs"" não está disponível devido à falta de ROMs na pasta roms/video. A mudar para uma placa vídeo disponível." + +msgid "Machine" +msgstr "Máquina" + +msgid "Display" +msgstr "Apresentação" + +msgid "Input devices" +msgstr "Dispositivos de entrada" + +msgid "Sound" +msgstr "Som" + +msgid "Network" +msgstr "Rede" + +msgid "Ports (COM & LPT)" +msgstr "Portas (COM e LPT)" + +msgid "Storage controllers" +msgstr "Dispositivos de armazenamento" + +msgid "Hard disks" +msgstr "Discos rígidos" + +msgid "Floppy & CD-ROM drives" +msgstr "Unidades de disquete e CD-ROM" + +msgid "Other removable devices" +msgstr "Outros dispostivos removíveis" + +msgid "Other peripherals" +msgstr "Outros dispositivos" + +msgid "Surface images (*.86F *.86f)" +msgstr "Imagens de superfície (*.86F *.86f)" + +msgid "Click to capture mouse" +msgstr "Clique para capturar o rato" + +msgid "Press F8+F12 to release mouse" +msgstr "Pressione F8+F12 para soltar o rato" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Pressione F8+F12 ou tecla média para soltar o rato" + +msgid "Unable to initialize FluidSynth" +msgstr "Não foi possível inicializar o FluidSynth" + +msgid "Bus" +msgstr "Barramento" + +msgid "File" +msgstr "Ficheiro" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "C" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Não foi possível inicializar o renderizador vídeo." + +msgid "Default" +msgstr "Padrão" + +msgid "%i Wait state(s)" +msgstr "%i estado(s) de espera" + +msgid "Type" +msgstr "Tipo" + +msgid "Failed to set up PCap" +msgstr "Falha na configuração de PCap" + +msgid "No PCap devices found" +msgstr "Não foi encontrado um dispositivo PCap" + +msgid "Invalid PCap device" +msgstr "Dispositivo PCap inválido" + +msgid "Standard 2-button joystick(s)" +msgstr "Joystick(s) standard de 2 botões" + +msgid "Standard 4-button joystick" +msgstr "Joystick(s) standard de 4 botões" + +msgid "Standard 6-button joystick" +msgstr "Joystick(s) standard de 6 botões" + +msgid "Standard 8-button joystick" +msgstr "Joystick(s) standard de 8 botões" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Nenhum" + +msgid "Unable to load keyboard accelerators." +msgstr "Não foi possível inicializar os aceleradores de teclado." + +msgid "Unable to register raw input." +msgstr "Não foi possível registar a entrada bruta." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CCS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Disquete %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgstr "Todas as imagens (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Imagens avançadas de sector (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Imagens básicas de sector (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Imagens de fluxo (*.FDI *.fdi);;Imagens de superfície (*.86F *.86f *.MFM *.mfm);;Todos os ficheiros (*)" + +msgid "Unable to initialize FreeType" +msgstr "Não foi possível inicializar o FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Não foi possível inicializar o SDL. O ficheiro SDL2.dll é necessário!" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Tem a certeza de que quer um reinício completo da máquina emulada?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Tem a certeza de que quer sair do 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Não foi possível inicializar o Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "Magneto-óptico %i (%ls): %ls" + +msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgstr "Imagens magneto-ópticas (*.IM? *.im? *.MDI *.mdi);;Todas as imagens (*)" + +msgid "Welcome to 86Box!" +msgstr "Bem-vindos ao 86Box!" + +msgid "Internal controller" +msgstr "Controlador interno" + +msgid "Exit" +msgstr "Sair" + +msgid "No ROMs found" +msgstr "Não foi encontrada nenhuma ROM" + +msgid "Do you want to save the settings?" +msgstr "Deseja guardar as definições?" + +msgid "This will hard reset the emulated machine." +msgstr "Isto irá causar um reinício completo da máquina emulada." + +msgid "Save" +msgstr "Guardar" + +msgid "About 86Box" +msgstr "Acerca do 86Box" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Um emulador de computadores antigos\n\nAutores: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nUsado sob a licença GNU General Public License versão 2 ou posterior. Veja o ficheiro LICENSE para mais informações." + +msgid "Hardware not available" +msgstr "Hardware não disponível" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Certifique-se de que a biblioteca libpcap está instalada e de que está a utilizar uma ligação de rede compatível com a biblioteca libpcap." + +msgid "Invalid configuration" +msgstr "Configuração inválida" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " é requerida para a emulação de impressora ESC/P." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " é requerido para a conversão automática de ficheiros PostScript para ficheiros PDF.\n\nQualquer documento enviado para a impressora PostScript genérica será gravado como um ficheiro PostScript (.ps)." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " é necessário para a saída MIDI FluidSynth MIDI." + +msgid "Entering fullscreen mode" +msgstr "A entrar no modo de ecrã cheio" + +msgid "Don't show this message again" +msgstr "Não mostrar mais esta mensagem" + +msgid "Don't exit" +msgstr "Não sair" + +msgid "Reset" +msgstr "Reiniciar" + +msgid "Don't reset" +msgstr "Não reiniciar" + +msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgstr "Imagens CD-ROM (*.ISO *.iso *.CUE *.cue);;Todos os ficheiros (*)" + +msgid "%hs Device Configuration" +msgstr "Configuração de dispositivo %hs" + +msgid "Monitor in sleep mode" +msgstr "Ecrã em modo de sono" + +msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" +msgstr "Shaders OpenGL (*.GLSL *.glsl);;Todos os ficheiros (*)" + +msgid "OpenGL options" +msgstr "Opções de OpenGL" + +msgid "You are loading an unsupported configuration" +msgstr "Está a carregar uma configuração sem suporte!" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "A filtragem do tipo de CPU baseada na máquina escolhida está desativada para esta máquina emulada.\n\nIsto torna possível escolher um CPU que, de outra forma, não seria compatível com a máquina escolhida. No entanto, pode não ser compatível com a BIOS da máquina ou outros programas.\n\nA activação desta definição não tem suporte oficial e qualquer relatório de erros pode ser fechado como inválido." + +msgid "Continue" +msgstr "Continuar" + +msgid "Cassette: %s" +msgstr "Cassete: %s" + +msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" +msgstr "Imagens de cassete (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Todos os ficheiros (*)" + +msgid "Cartridge %i: %ls" +msgstr "Cartucho %i: %ls" + +msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" +msgstr "Imagens de cartucho (*.A *.a *.B *.b *.JRC *.jrc);;Todos os ficheiros (*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Hard disk (%s)" +msgstr "Disco rígido (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "Unidades CD-ROM com barramento MFM/RLL ou ESDI nunca existiram!" + +msgid "Custom..." +msgstr "Personalizado..." + +msgid "Custom (large)..." +msgstr "Personalizado (grande)..." + +msgid "Add New Hard Disk" +msgstr "Adicionar novo disco rígido" + +msgid "Add Existing Hard Disk" +msgstr "Adicionar disco rígido existente" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "As imagens de disco HDI não podem ter mais de 4 GB." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "As imagens de disco não podem ter mais de 127 GB." + +msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" +msgstr "Imagens de disco rígido (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Todos os ficheiros (*)" + +msgid "Unable to read file" +msgstr "Não foi possível ler o ficheiro" + +msgid "Unable to write file" +msgstr "Não foi possível escrever o ficheiro" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "Imagens HDI ou HDX com um tamanho de sector diferente de 512 não são suportadas." + +msgid "USB is not yet supported" +msgstr "O barramento USB ainda não tem suporte" + +msgid "Disk image file already exists" +msgstr "A imagem de disco já existe" + +msgid "Please specify a valid file name." +msgstr "Por favor, especifique um nome de ficheiro válido." + +msgid "Disk image created" +msgstr "Imagem de disco criada" + +msgid "Make sure the file exists and is readable." +msgstr "Certifique-se de que o ficheiro existe e é legível." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Certifique-se de que o ficheiro está a ser guardado numa pasta editável." + +msgid "Disk image too large" +msgstr "Imagem de disco muito grande" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Lembre-se de particionar e formatar o novo disco criado." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "O ficheiro selecionado será sobrescrito. Tem a certeza de que quer utilizá-lo?" + +msgid "Unsupported disk image" +msgstr "Imagem de disco sem suporte" + +msgid "Overwrite" +msgstr "Sobrescrever" + +msgid "Don't overwrite" +msgstr "Não sobrescrever" + +msgid "Raw image (.img)" +msgstr "Imagem bruta (.img)" + +msgid "HDI image (.hdi)" +msgstr "Imagem HDI (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "Imagem HDX (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD com tamanho fixo (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD com tamanho dinâmico (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "VHD diferenciador (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Blocos grandes (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Blocos pequenos (512 KB)" + +msgid "VHD files (*.VHD *.vhd);;All files (*)" +msgstr "Ficheiros VHD (*.VHD *.vhd);;Todos os ficheiros (*)" + +msgid "Select the parent VHD" +msgstr "Seleccione o VHD pai" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Isto pode significar que a imagem pai foi modificada depois da criação da imagem diferenciadora.\n\nTambém pode acontecer se os ficheiros da imagem foram movidos ou copiados ou por causa de um erro no programa que criou este disco.\n\nQuer corrigir os carimbos de data/hora?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Os carimbos de data/hora dos discos pai e filho não correspondem!" + +msgid "Could not fix VHD timestamp." +msgstr "Não foi possível corrigir o carimbo de data/hora do VHD." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (cluster 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (cluster 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5"" 128Mb M.O. (ISO 10090)" +msgstr "3.5"" 128Mb M.O. (ISO 10090)" + +msgid "3.5"" 230Mb M.O. (ISO 13963)" +msgstr "3.5"" 230Mb M.O. (ISO 13963)" + +msgid "3.5"" 540Mb M.O. (ISO 15498)" +msgstr "3.5"" 540Mb M.O. (ISO 15498)" + +msgid "3.5"" 640Mb M.O. (ISO 15498)" +msgstr "3.5"" 640Mb M.O. (ISO 15498)" + +msgid "3.5"" 1.3Gb M.O. (GigaMO)" +msgstr "3.5"" 1.3Gb M.O. (GigaMO)" + +msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25"" 600Mb M.O." +msgstr "5.25"" 600Mb M.O." + +msgid "5.25"" 650Mb M.O." +msgstr "5.25"" 650Mb M.O." + +msgid "5.25"" 1Gb M.O." +msgstr "5.25"" 1Gb M.O." + +msgid "5.25"" 1.3Gb M.O." +msgstr "5.25"" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "RPM perfeito" + +msgid "1%% below perfect RPM" +msgstr "RPM 1%% abaixo do RPM perfeito" + +msgid "1.5%% below perfect RPM" +msgstr "RPM 1.5%% abaixo do RPM perfeito" + +msgid "2%% below perfect RPM" +msgstr "RPM 2%% abaixo do RPM perfeito" + +msgid "(System Default)" +msgstr "(Padrão do sistema)" + diff --git a/src/qt/languages/ru_RU.po b/src/qt/languages/ru_RU.po new file mode 100644 index 000000000..4326de96a --- /dev/null +++ b/src/qt/languages/ru_RU.po @@ -0,0 +1,1173 @@ +msgid "Translated by" +msgstr "Unknown" + +msgid "&Action" +msgstr "&Действие" + +msgid "&Keyboard requires capture" +msgstr "&Клавиатура требует захвата" + +msgid "&Right CTRL is left ALT" +msgstr "&Правый CTRL - это левый ALT" + +msgid "&Hard Reset..." +msgstr "&Холодная перезагрузка..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Пауза" + +msgid "E&xit..." +msgstr "&Выход..." + +msgid "&View" +msgstr "&Вид" + +msgid "&Hide status bar" +msgstr "&Скрыть строку статуса" + +msgid "&Resizeable window" +msgstr "&Изменяемый размер окна" + +msgid "R&emember size && position" +msgstr "&Запомнить размер и положение" + +msgid "Re&nderer" +msgstr "&Рендерер" + +msgid "&Qt (Software)" +msgstr "&Qt (Software)" + +msgid "Qt (&Hardware)" +msgstr "Qt (&Hardware)" + +msgid "Qt (&OpenGL)" +msgstr "Qt (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "&Указать размеры..." + +msgid "F&orce 4:3 display ratio" +msgstr "У&становить соотношение сторон 4:3" + +msgid "&Window scale factor" +msgstr "&Масштаб окна" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Метод фильтрации" + +msgid "&Nearest" +msgstr "&Ближайший" + +msgid "&Linear" +msgstr "&Линейный" + +msgid "Hi&DPI scaling" +msgstr "Масштабирование Hi&DPI" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Полноэкранный режим\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "&Растягивание в полноэкранном режиме" + +msgid "&Full screen stretch" +msgstr "&На весь экран" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Квадратные пиксели (сохранить соотношение)" + +msgid "&Integer scale" +msgstr "&Целочисленное масштабирование" + +msgid "E&GA/(S)VGA settings" +msgstr "Настройки E&GA/(S)VGA" + +msgid "&Inverted VGA monitor" +msgstr "&Инвертировать цвета VGA" + +msgid "VGA screen &type" +msgstr "&Тип экрана VGA" + +msgid "RGB &Color" +msgstr "RGB &цветной" + +msgid "&RGB Grayscale" +msgstr "&RGB монохромный" + +msgid "&Amber monitor" +msgstr "&Янтарный оттенок" + +msgid "&Green monitor" +msgstr "&Зелёный оттенок" + +msgid "&White monitor" +msgstr "&Белый оттенок" + +msgid "Grayscale &conversion type" +msgstr "Тип монохромного &конвертирования" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Усреднённый" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "Вылеты развёртки CGA/PCjr/Tandy/E&GA/(S)VGA" + +msgid "Change contrast for &monochrome display" +msgstr "Изменить контрастность &монохромного дисплея" + +msgid "&Media" +msgstr "&Носители" + +msgid "&Tools" +msgstr "&Инструменты" + +msgid "&Settings..." +msgstr "&Настройки машины..." + +msgid "&Update status bar icons" +msgstr "&Обновление значков строки статуса" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Сделать с&криншот\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Параметры..." + +msgid "Enable &Discord integration" +msgstr "Включить интеграцию &Discord" + +msgid "Sound &gain..." +msgstr "&Усиление звука..." + +msgid "Begin trace\tCtrl+T" +msgstr "Начать трассировку\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Завершить трассировку\tCtrl+T" + +msgid "&Logging" +msgstr "&Ведение журнала" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Включить журналы BusLogic\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Включить журналы CD-ROM\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Включить журналы дискет (86F)\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Включить журналы контроллера дискет\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Включить журналы IDE\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Включить журналы COM порта\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Включить журналы сети\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Точка останова журнала\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "&Выгрузка дампа видео-ОЗУ\tCtrl+F1" + +msgid "&Help" +msgstr "&Помощь" + +msgid "&Documentation..." +msgstr "&Документация..." + +msgid "&About 86Box..." +msgstr "&О программе 86Box..." + +msgid "" +msgstr "" + +msgid "&New image..." +msgstr "&Новый образ..." + +msgid "&Existing image..." +msgstr "&Выбрать образ..." + +msgid "Existing image (&Write-protected)..." +msgstr "Выбрать образ (&Защита от записи)..." + +msgid "&Record" +msgstr "&Запись" + +msgid "&Play" +msgstr "&Воспроизведение" + +msgid "&Rewind to the beginning" +msgstr "&Перемотка на начало" + +msgid "&Fast forward to the end" +msgstr "&Перемотка в конец" + +msgid "E&ject" +msgstr "И&звлечь" + +msgid "&Image..." +msgstr "&Образ..." + +msgid "E&xport to 86F..." +msgstr "Э&кспорт в 86F..." + +msgid "&Mute" +msgstr "&Mute" + +msgid "E&mpty" +msgstr "П&устой" + +msgid "&Reload previous image" +msgstr "&Снова загрузить предыдущий образ" + +msgid "&Image" +msgstr "&Образ..." + +msgid "Target &framerate" +msgstr "Целевая &частота кадров" + +msgid "&Sync with video" +msgstr "&Синхронизация с видео" + +msgid "&25 fps" +msgstr "&25 кадров в секунду" + +msgid "&30 fps" +msgstr "&30 кадров в секунду" + +msgid "&50 fps" +msgstr "&50 кадров в секунду" + +msgid "&60 fps" +msgstr "&60 кадров в секунду" + +msgid "&75 fps" +msgstr "&75 кадров в секунду" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Выбрать шейдер..." + +msgid "&Remove shader" +msgstr "&Удалить шейдер" + +msgid "Preferences" +msgstr "Параметры" + +msgid "Sound Gain" +msgstr "Усиление звука" + +msgid "New Image" +msgstr "Новый образ" + +msgid "Settings" +msgstr "Настройки" + +msgid "Specify Main Window Dimensions" +msgstr "Указать размеры главного окна" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Отмена" + +msgid "Save these settings as &global defaults" +msgstr "Сохранить эти параметры как &глобальные по умолчанию" + +msgid "&Default" +msgstr "&По умолчанию" + +msgid "Language:" +msgstr "Язык:" + +msgid "Icon set:" +msgstr "Набор иконок:" + +msgid "Gain" +msgstr "Усиление" + +msgid "File name:" +msgstr "Имя файла:" + +msgid "Disk size:" +msgstr "Размер диска:" + +msgid "RPM mode:" +msgstr "RPM режим:" + +msgid "Progress:" +msgstr "Прогресс:" + +msgid "Width:" +msgstr "Ширина:" + +msgid "Height:" +msgstr "Высота:" + +msgid "Lock to this size" +msgstr "Зафиксировать размер" + +msgid "Machine type:" +msgstr "Тип машины:" + +msgid "Machine:" +msgstr "Системная плата:" + +msgid "Configure" +msgstr "Настройка" + +msgid "CPU type:" +msgstr "Тип ЦПУ:" + +msgid "Speed:" +msgstr "Speed:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "Циклы ожидания:" + +msgid "MB" +msgstr "МБ" + +msgid "Memory:" +msgstr "Память:" + +msgid "Time synchronization" +msgstr "Синхронизация времени" + +msgid "Disabled" +msgstr "Отключить" + +msgid "Enabled (local time)" +msgstr "Включить (местное)" + +msgid "Enabled (UTC)" +msgstr "Включить (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Динамический рекомпилятор" + +msgid "Video:" +msgstr "Видеокарта:" + +msgid "Voodoo Graphics" +msgstr "Ускоритель Voodoo" + +msgid "Mouse:" +msgstr "Мышь:" + +msgid "Joystick:" +msgstr "Джойстик:" + +msgid "Joystick 1..." +msgstr "Джойстик 1..." + +msgid "Joystick 2..." +msgstr "Джойстик 2..." + +msgid "Joystick 3..." +msgstr "Джойстик 3..." + +msgid "Joystick 4..." +msgstr "Джойстик 4..." + +msgid "Sound card:" +msgstr "Звуковая карта:" + +msgid "MIDI Out Device:" +msgstr "MIDI Out устр-во:" + +msgid "MIDI In Device:" +msgstr "MIDI In устр-во:" + +msgid "Standalone MPU-401" +msgstr "Отдельный MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "FLOAT32 звук" + +msgid "Network type:" +msgstr "Тип сети:" + +msgid "PCap device:" +msgstr "Устройство PCap:" + +msgid "Network adapter:" +msgstr "Сетевая карта:" + +msgid "LPT1 Device:" +msgstr "Устройство LPT1:" + +msgid "LPT2 Device:" +msgstr "Устройство LPT2:" + +msgid "LPT3 Device:" +msgstr "Устройство LPT3:" + +msgid "Serial port 1" +msgstr "Последов. порт COM1" + +msgid "Serial port 2" +msgstr "Последов. порт COM2" + +msgid "Serial port 3" +msgstr "Последов. порт COM3" + +msgid "Serial port 4" +msgstr "Последов. порт COM4" + +msgid "Parallel port 1" +msgstr "Параллельный порт LPT1" + +msgid "Parallel port 2" +msgstr "Параллельный порт LPT2" + +msgid "Parallel port 3" +msgstr "Параллельный порт LPT3" + +msgid "HD Controller:" +msgstr "Контроллер HD:" + +msgid "FD Controller:" +msgstr "Контроллер FD:" + +msgid "Tertiary IDE Controller" +msgstr "Третичный IDE контроллер" + +msgid "Quaternary IDE Controller" +msgstr "Четвертичный IDE контроллер" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Контроллер 1:" + +msgid "Controller 2:" +msgstr "Контроллер 2:" + +msgid "Controller 3:" +msgstr "Контроллер 3:" + +msgid "Controller 4:" +msgstr "Контроллер 4:" + +msgid "Cassette" +msgstr "Кассета" + +msgid "Hard disks:" +msgstr "Жёсткие диски:" + +msgid "&New..." +msgstr "&Создать..." + +msgid "&Existing..." +msgstr "&Выбрать..." + +msgid "&Remove" +msgstr "&Убрать" + +msgid "Bus:" +msgstr "Шина:" + +msgid "Channel:" +msgstr "Канал:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Указать..." + +msgid "Sectors:" +msgstr "Сектора:" + +msgid "Heads:" +msgstr "Головки:" + +msgid "Cylinders:" +msgstr "Цилиндры:" + +msgid "Size (MB):" +msgstr "Размер (МБ):" + +msgid "Type:" +msgstr "Тип:" + +msgid "Image Format:" +msgstr "Тип образа:" + +msgid "Block Size:" +msgstr "Размер блока:" + +msgid "Floppy drives:" +msgstr "Гибкие диски:" + +msgid "Turbo timings" +msgstr "Турбо тайминги" + +msgid "Check BPB" +msgstr "Проверять BPB" + +msgid "CD-ROM drives:" +msgstr "Дисководы CD-ROM:" + +msgid "MO drives:" +msgstr "Магнитооптические дисководы:" + +msgid "ZIP drives:" +msgstr "ZIP дисководы:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA RTC:" + +msgid "ISA Memory Expansion" +msgstr "Карта расширения памяти (ISA)" + +msgid "Card 1:" +msgstr "Карта 1:" + +msgid "Card 2:" +msgstr "Карта 2:" + +msgid "Card 3:" +msgstr "Карта 3:" + +msgid "Card 4:" +msgstr "Карта 4:" + +msgid "ISABugger device" +msgstr "Устройство ISABugger" + +msgid "POST card" +msgstr "Карта POST" + +msgid "Segoe UI" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Ошибка" + +msgid "Fatal error" +msgstr "Неустранимая ошибка" + +msgid "" +msgstr "<зарезервировано>" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Нажмите CTRL + ALT + PAGE DOWN для возврата в оконный режим." + +msgid "Speed" +msgstr "Скорость" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgstr "Образы ZIP (*.IM? *.im? *.ZDI *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." +msgstr "86Box не смог найти ни одного подходящего для использования файла с ПЗУ.\n\nПожалуйста скачайте набор ПЗУ и извлеките его в каталог ""roms""." + +msgid "(empty)" +msgstr "(пусто)" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" +msgstr "Образы ZIP (*.IM? *.im? *.ZDI *.zdi);;Все файлы (*)" + +msgid "Turbo" +msgstr "Турбо" + +msgid "On" +msgstr "Вкл" + +msgid "Off" +msgstr "Выкл" + +msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" +msgstr "Все образы (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Простые посекторные образы (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface образы (*.86F *.86f)" + +msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Системная плата ""%hs"" недоступна из-за отсутствия файла её ПЗУ в каталоге roms/machines. Переключение на доступную системную плату." + +msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Видеокарта ""%hs"" недоступна из-за отсутствия файла её ПЗУ в каталоге roms/video. Переключение на доступную видеокарту." + +msgid "Machine" +msgstr "Компьютер" + +msgid "Display" +msgstr "Дисплей" + +msgid "Input devices" +msgstr "Устройства ввода" + +msgid "Sound" +msgstr "Звук" + +msgid "Network" +msgstr "Сеть" + +msgid "Ports (COM & LPT)" +msgstr "Порты (COM и LPT)" + +msgid "Storage controllers" +msgstr "Контроллеры дисков" + +msgid "Hard disks" +msgstr "Жёсткие диски" + +msgid "Floppy & CD-ROM drives" +msgstr "Гибкие диски и CD-ROM" + +msgid "Other removable devices" +msgstr "Другие съёмные устр-ва" + +msgid "Other peripherals" +msgstr "Другая периферия" + +msgid "Surface images (*.86F *.86f)" +msgstr "Образы Surface (*.86F *.86f)" + +msgid "Click to capture mouse" +msgstr "Щёлкните мышью для захвата курсора" + +msgid "Press F8+F12 to release mouse" +msgstr "Нажмите F8+F12 чтобы освободить курсор" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Нажмите F8+F12 или среднюю кнопку мыши чтобы освободить курсор" + +msgid "Unable to initialize FluidSynth" +msgstr "Невозможно инициализировать FluidSynth" + +msgid "Bus" +msgstr "Шина" + +msgid "File" +msgstr "Файл" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "КБ" + +msgid "Could not initialize the video renderer." +msgstr "Не удалось инициализировать рендерер видео." + +msgid "Default" +msgstr "По умолчанию" + +msgid "%i Wait state(s)" +msgstr "%i WS" + +msgid "Type" +msgstr "Тип" + +msgid "Failed to set up PCap" +msgstr "Не удалось настроить PCap" + +msgid "No PCap devices found" +msgstr "Устройства PCap не найдены" + +msgid "Invalid PCap device" +msgstr "Неверное устройство PCap" + +msgid "Standard 2-button joystick(s)" +msgstr "Стандартный 2-кнопочный джойстик" + +msgid "Standard 4-button joystick" +msgstr "Стандартный 4-кнопочный джойстик" + +msgid "Standard 6-button joystick" +msgstr "Стандартный 6-кнопочный джойстик" + +msgid "Standard 8-button joystick" +msgstr "Стандартный 8-кнопочный джойстик" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Система управления полетом Thrustmaster" + +msgid "None" +msgstr "Нет" + +msgid "Unable to load keyboard accelerators." +msgstr "Невозможно загрузить ускорители клавиатуры." + +msgid "Unable to register raw input." +msgstr "Невозможно зарегистрировать необработанный ввод." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u МБ (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Дисковод %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgstr "Все образы (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Расширенные образы секторов (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Основные образы секторов (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Образы Flux (*.FDI *.fdi);;Образы Surface (*.86F *.86f *.MFM *.mfm);;Все файлы (*)" + +msgid "Unable to initialize FreeType" +msgstr "Невозможно инициализировать FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Невозможно инициализировать SDL, требуется SDL2.dll" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Вы уверены, что хотите выполнить холодную перезагрузку эмулируемой машины?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Вы уверены, что хотите выйти из 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Невозможно инициализировать Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "Магнитооптический %i (%ls): %ls" + +msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgstr "Образы магнитооптических дисков (*.IM? *.im? *.MDI *.mdi);;Все файлы (*)" + +msgid "Welcome to 86Box!" +msgstr "Добро пожаловать в 86Box!" + +msgid "Internal controller" +msgstr "Встроенный контроллер" + +msgid "Exit" +msgstr "Выход" + +msgid "No ROMs found" +msgstr "ПЗУ не найдены" + +msgid "Do you want to save the settings?" +msgstr "Хотите ли вы сохранить настройки?" + +msgid "This will hard reset the emulated machine." +msgstr "Это приведет к холодной перезагрузке эмулируемой машины." + +msgid "Save" +msgstr "Сохранить" + +msgid "About 86Box" +msgstr "О 86Box" + +msgid "86Box v" +msgstr "86Box v." + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Эмулятор старых компьютеров\n\nАвторы: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nВыпускается под лицензией GNU General Public License версии 2 или более поздней. Дополнительную информацию см. в файле LICENSE." + +msgid "Hardware not available" +msgstr "Оборудование недоступно" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Убедитесь, что libpcap установлен и ваше сетевое соединение, совместимо с libpcap." + +msgid "Invalid configuration" +msgstr "Недопустимая конфигурация" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr "Для эмуляции принтера ESC/P требуется libfreetype." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " требуется для автоматического преобразования файлов PostScript в PDF.\n\nВсе документы, отправленные на общий принтер PostScript, будут сохранены в виде файлов PostScript (.ps)." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr "Для FluidSynth MIDI-вывода требуется libfluidsynth." + +msgid "Entering fullscreen mode" +msgstr "Вход в полноэкранный режим" + +msgid "Don't show this message again" +msgstr "Больше не показывать это сообщение" + +msgid "Don't exit" +msgstr "Не выходить" + +msgid "Reset" +msgstr "Перезагрузить" + +msgid "Don't reset" +msgstr "Не перезагружать" + +msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgstr "Образы CD-ROM (*.ISO *.iso *.CUE *.cue);;Все файлы (*)" + +msgid "%hs Device Configuration" +msgstr "Конфигурация устройства %hs" + +msgid "Monitor in sleep mode" +msgstr "Монитор в спящем режиме" + +msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" +msgstr "Шейдеры OpenGL (*.GLSL *.glsl);;Все файлы (*)" + +msgid "OpenGL options" +msgstr "Параметры OpenGL" + +msgid "You are loading an unsupported configuration" +msgstr "Вы загружаете неподдерживаемую конфигурацию" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "Выбор типов CPU для этой системной платы на данной эмулируемой машине отключен.\n\nЭто позволяет выбрать процессор, который в противном случае несовместим с выбранной материнской платой. Однако, вы можете столкнуться с несовместимостью с BIOS материнской платы или другим ПО.\n\nВключение этого параметра официально не поддерживается, и все поданные отчеты об ошибках могут быть закрыты как недействительные." + +msgid "Continue" +msgstr "Продолжить" + +msgid "Cassette: %s" +msgstr "Кассета: %s" + +msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" +msgstr "Образы кассет (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Все файлы (*)" + +msgid "Cartridge %i: %ls" +msgstr "Картридж %i: %ls" + +msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" +msgstr "Образы картриджей (*.A *.a *.B *.b *.JRC *.jrc);;Все файлы (*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Hard disk (%s)" +msgstr "Жёсткий диск (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL или ESDI дисководов CD-ROM никогда не существовало" + +msgid "Custom..." +msgstr "Custom..." + +msgid "Custom (large)..." +msgstr "Custom (large)..." + +msgid "Add New Hard Disk" +msgstr "Создать новый жёсткий диск" + +msgid "Add Existing Hard Disk" +msgstr "Добавить существующий жёсткий диск" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "Размер образов дисков HDI не может превышать 4 ГБ." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Размер образов дисков не может превышать 127 ГБ." + +msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" +msgstr "Образы жёстких дисков (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Все файлы (*)" + +msgid "Unable to read file" +msgstr "Невозможно прочитать файл" + +msgid "Unable to write file" +msgstr "Невозможно записать файл" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "Образы HDI или HDX с размером сектора, отличным от 512, не поддерживаются." + +msgid "USB is not yet supported" +msgstr "USB пока не поддерживается" + +msgid "Disk image file already exists" +msgstr "Файл образа диска уже существует" + +msgid "Please specify a valid file name." +msgstr "Пожалуйста, укажите правильное имя файла." + +msgid "Disk image created" +msgstr "Образ диска создан" + +msgid "Make sure the file exists and is readable." +msgstr "Убедитесь, что файл существует и доступен для чтения." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Убедитесь, что файл сохраняется в директории доступной для записи." + +msgid "Disk image too large" +msgstr "Слишком большой образ диска" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Не забудьте разметить и отформатировать вновь созданный диск." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Выбранный файл будет перезаписан. Вы уверены, что хотите использовать его?" + +msgid "Unsupported disk image" +msgstr "Неподдерживаемый образ диска" + +msgid "Overwrite" +msgstr "Перезаписать" + +msgid "Don't overwrite" +msgstr "Не перезаписывать" + +msgid "Raw image (.img)" +msgstr "RAW образ (.img)" + +msgid "HDI image (.hdi)" +msgstr "Образ HDI (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "Образ HDX (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD фиксированного размера (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD динамического размера (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Дифференцированный образ VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Большие блоки (2 МБ)" + +msgid "Small blocks (512 KB)" +msgstr "Маленькие блоки (512 КБ)" + +msgid "VHD files (*.VHD *.vhd);;All files (*)" +msgstr "Файлы VHD (*.VHD *.vhd);;Все файлы (*)" + +msgid "Select the parent VHD" +msgstr "Выберите родительский VHD" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Это может означать, что родительский образ был изменён после того, как был создан дифференцированный образ.\n\nЭто также может произойти, если файлы образа были перемещены или скопированы, или из-за ошибки в программе, создавшей этот диск.\n\nВы хотите исправить временные метки?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Временные метки родительского и дочернего дисков не совпадают" + +msgid "Could not fix VHD timestamp." +msgstr "Не удалось исправить временную метку VHD." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 кБ" + +msgid "180 kB" +msgstr "180 кБ" + +msgid "320 kB" +msgstr "320 кБ" + +msgid "360 kB" +msgstr "360 кБ" + +msgid "640 kB" +msgstr "640 кБ" + +msgid "720 kB" +msgstr "720 кБ" + +msgid "1.2 MB" +msgstr "1.2 МБ" + +msgid "1.25 MB" +msgstr "1.25 МБ" + +msgid "1.44 MB" +msgstr "1.44 МБ" + +msgid "DMF (cluster 1024)" +msgstr "DMF (кластер 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (кластер 2048)" + +msgid "2.88 MB" +msgstr "2.88 МБ" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5"" 128Mb M.O. (ISO 10090)" +msgstr "3.5"" 128Мб M.O. (ISO 10090)" + +msgid "3.5"" 230Mb M.O. (ISO 13963)" +msgstr "3.5"" 230Мб M.O. (ISO 13963)" + +msgid "3.5"" 540Mb M.O. (ISO 15498)" +msgstr "3.5"" 540Мб M.O. (ISO 15498)" + +msgid "3.5"" 640Mb M.O. (ISO 15498)" +msgstr "3.5"" 640Мб M.O. (ISO 15498)" + +msgid "3.5"" 1.3Gb M.O. (GigaMO)" +msgstr "3.5"" 1.3Гб M.O. (GigaMO)" + +msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5"" 2.3Гб M.O. (GigaMO 2)" + +msgid "5.25"" 600Mb M.O." +msgstr "5.25"" 600Мб M.O." + +msgid "5.25"" 650Mb M.O." +msgstr "5.25"" 650Мб M.O." + +msgid "5.25"" 1Gb M.O." +msgstr "5.25"" 1Гб M.O." + +msgid "5.25"" 1.3Gb M.O." +msgstr "5.25"" 1.3Гб M.O." + +msgid "Perfect RPM" +msgstr "Точный RPM" + +msgid "1%% below perfect RPM" +msgstr "На 1% медленнее точного RPM" + +msgid "1.5%% below perfect RPM" +msgstr "На 1.5% медленнее точного RPM" + +msgid "2%% below perfect RPM" +msgstr "На 2% медленнее точного RPM" + +msgid "(System Default)" +msgstr "(Системный)" + diff --git a/src/qt/languages/sl_SI.po b/src/qt/languages/sl_SI.po new file mode 100644 index 000000000..3282b6f33 --- /dev/null +++ b/src/qt/languages/sl_SI.po @@ -0,0 +1,1173 @@ +msgid "Translated by" +msgstr "Unknown" + +msgid "&Action" +msgstr "&Dejanja" + +msgid "&Keyboard requires capture" +msgstr "&Tipkovnica potrebuje zajem" + +msgid "&Right CTRL is left ALT" +msgstr "&Desni CTRL je levi ALT" + +msgid "&Hard Reset..." +msgstr "&Ponovni zagon..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Premor" + +msgid "E&xit..." +msgstr "Iz&hod..." + +msgid "&View" +msgstr "&Pogled" + +msgid "&Hide status bar" +msgstr "&Skrij statusno vrstico" + +msgid "&Resizeable window" +msgstr "S&premenljiva velikost okna" + +msgid "R&emember size && position" +msgstr "&Zapomni si velikost in položaj" + +msgid "Re&nderer" +msgstr "&Upodabljanje" + +msgid "&Qt (Software)" +msgstr "&Qt (programsko)" + +msgid "Qt (&Hardware)" +msgstr "Qt (s&trojno)" + +msgid "Qt (&OpenGL)" +msgstr "Qt (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (Jedro 3.0)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "&Določi velikost..." + +msgid "F&orce 4:3 display ratio" +msgstr "&Vsili 4:3 razmerje zaslona" + +msgid "&Window scale factor" +msgstr "&Faktor velikosti okna" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "&Metoda filtriranja" + +msgid "&Nearest" +msgstr "&Najbližja" + +msgid "&Linear" +msgstr "&Linearna" + +msgid "Hi&DPI scaling" +msgstr "&Raztezanje za visok DPI" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Celozaslonski način\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "&Način celozaslonskega raztezanja" + +msgid "&Full screen stretch" +msgstr "&Raztegni na celoten zaslon" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Kvadratni piksli (ohrani razmerje)" + +msgid "&Integer scale" +msgstr "&Celoštevilsko raztezanje" + +msgid "E&GA/(S)VGA settings" +msgstr "Nastavitve E&GA/(S)VGA" + +msgid "&Inverted VGA monitor" +msgstr "&Obrni barve zaslona VGA" + +msgid "VGA screen &type" +msgstr "&Vrsta zaslona VGA" + +msgid "RGB &Color" +msgstr "&Barvni RGB" + +msgid "&RGB Grayscale" +msgstr "&Sivinski RGB" + +msgid "&Amber monitor" +msgstr "&Rumeni zaslon" + +msgid "&Green monitor" +msgstr "&Zeleni zaslon" + +msgid "&White monitor" +msgstr "B&eli zaslon" + +msgid "Grayscale &conversion type" +msgstr "V&rsta pretvorbe sivin" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Povprečje" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "&Presežek slike CGA/PCjr/Tandy/EGA/(S)VGA" + +msgid "Change contrast for &monochrome display" +msgstr "&Spremeni contrast za črno-beli zaslon" + +msgid "&Media" +msgstr "&Mediji" + +msgid "&Tools" +msgstr "&Orodja" + +msgid "&Settings..." +msgstr "&Nastavitve..." + +msgid "&Update status bar icons" +msgstr "&Posodabljaj ikone statusne vrstice" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "&Zajemi posnetek zaslona\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Možnosti..." + +msgid "Enable &Discord integration" +msgstr "Omogoči integracijo s programom &Discord" + +msgid "Sound &gain..." +msgstr "&Ojačanje zvoka..." + +msgid "Begin trace\tCtrl+T" +msgstr "Z&ačni sledenje\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "&Končaj sledenje\tCtrl+T" + +msgid "&Logging" +msgstr "&Beleženje" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Omogoči beleženje za BusLogic\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Omogoči beleženje za CD-ROM\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Omogoči beleženje za diskete (86F)\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Omogoči beleženje za disketni krmilnik\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Omogoči beleženje za IDE\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Omogoči beleženje za serijska vrata\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Omogoči beleženje za omrežje\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Zabeleži prelomno točko\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "&Izvozi pomnilnik zaslona\tCtrl+F1" + +msgid "&Help" +msgstr "&Pomoč" + +msgid "&Documentation..." +msgstr "&Dokumentacija..." + +msgid "&About 86Box..." +msgstr "&O programu 86Box..." + +msgid "" +msgstr "" + +msgid "&New image..." +msgstr "&Nova slika..." + +msgid "&Existing image..." +msgstr "&Obstoječa slika..." + +msgid "Existing image (&Write-protected)..." +msgstr "Obstoječa slika (&samo za branje)..." + +msgid "&Record" +msgstr "Snemaj" + +msgid "&Play" +msgstr "Predvajaj" + +msgid "&Rewind to the beginning" +msgstr "Previj na začetek" + +msgid "&Fast forward to the end" +msgstr "Preskoči na konec" + +msgid "E&ject" +msgstr "Izvrzi" + +msgid "&Image..." +msgstr "Slika..." + +msgid "E&xport to 86F..." +msgstr "&Izvozi v 86F..." + +msgid "&Mute" +msgstr "&Utišaj" + +msgid "E&mpty" +msgstr "&Prazen" + +msgid "&Reload previous image" +msgstr "&Naloži zadnjo sliko" + +msgid "&Image" +msgstr "&Slika" + +msgid "Target &framerate" +msgstr "&Ciljno št. sličic na sekundo" + +msgid "&Sync with video" +msgstr "&Sinhroniziraj z videom" + +msgid "&25 fps" +msgstr "&25 fps" + +msgid "&30 fps" +msgstr "&30 fps" + +msgid "&50 fps" +msgstr "&50 fps" + +msgid "&60 fps" +msgstr "&60 fps" + +msgid "&75 fps" +msgstr "&75 fps" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Izberi senčilnik..." + +msgid "&Remove shader" +msgstr "&Odstrani senčilnik" + +msgid "Preferences" +msgstr "Možnosti" + +msgid "Sound Gain" +msgstr "Ojačanje zvoka" + +msgid "New Image" +msgstr "Nova slika" + +msgid "Settings" +msgstr "Nastavitve" + +msgid "Specify Main Window Dimensions" +msgstr "Določi velikost glavnega okna" + +msgid "OK" +msgstr "V redu" + +msgid "Cancel" +msgstr "Prekliči" + +msgid "Save these settings as &global defaults" +msgstr "Shrani te nastavitve kot globalne privzete" + +msgid "&Default" +msgstr "Privzeto" + +msgid "Language:" +msgstr "Jezik:" + +msgid "Icon set:" +msgstr "Komplet ikon:" + +msgid "Gain" +msgstr "Ojačanje" + +msgid "File name:" +msgstr "Ime datoteke:" + +msgid "Disk size:" +msgstr "Velikost diska:" + +msgid "RPM mode:" +msgstr "Način števila obratov:" + +msgid "Progress:" +msgstr "Napredek:" + +msgid "Width:" +msgstr "Širina:" + +msgid "Height:" +msgstr "Višina:" + +msgid "Lock to this size" +msgstr "Zakleni na to velikost" + +msgid "Machine type:" +msgstr "Vrsta sistema:" + +msgid "Machine:" +msgstr "Sistem:" + +msgid "Configure" +msgstr "Nastavi" + +msgid "CPU type:" +msgstr "Vrsta procesorja:" + +msgid "Speed:" +msgstr "Hitrost:" + +msgid "FPU:" +msgstr "Procesor plavajoče vejice:" + +msgid "Wait states:" +msgstr "Čakalna stanja:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Spomin:" + +msgid "Time synchronization" +msgstr "Sinhronizacija časa" + +msgid "Disabled" +msgstr "Onemogočeno" + +msgid "Enabled (local time)" +msgstr "Omogočeno (lokalni čas)" + +msgid "Enabled (UTC)" +msgstr "Omogočeno (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Dinamični prevajalnik" + +msgid "Video:" +msgstr "Video:" + +msgid "Voodoo Graphics" +msgstr "Voodoo grafika" + +msgid "Mouse:" +msgstr "Miška:" + +msgid "Joystick:" +msgstr "Igralna palica:" + +msgid "Joystick 1..." +msgstr "Igralna palica 1..." + +msgid "Joystick 2..." +msgstr "Igralna palica 2..." + +msgid "Joystick 3..." +msgstr "Igralna palica 3..." + +msgid "Joystick 4..." +msgstr "Igralna palica 4..." + +msgid "Sound card:" +msgstr "Zvočna kartica:" + +msgid "MIDI Out Device:" +msgstr "Izhodna naprava MIDI:" + +msgid "MIDI In Device:" +msgstr "Vhodna naprava MIDI:" + +msgid "Standalone MPU-401" +msgstr "Samostojen MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Uporabi FLOAT32 za zvok" + +msgid "Network type:" +msgstr "Vrsta omrežja:" + +msgid "PCap device:" +msgstr "Naprava PCap:" + +msgid "Network adapter:" +msgstr "Omrežna kartica:" + +msgid "LPT1 Device:" +msgstr "Naprava LPT1:" + +msgid "LPT2 Device:" +msgstr "Naprava LPT2:" + +msgid "LPT3 Device:" +msgstr "Naprava LPT3:" + +msgid "Serial port 1" +msgstr "Serijska vrata 1" + +msgid "Serial port 2" +msgstr "Serijska vrata 2" + +msgid "Serial port 3" +msgstr "Serijska vrata 3" + +msgid "Serial port 4" +msgstr "Serijska vrata 4" + +msgid "Parallel port 1" +msgstr "Paralelna vrata 1" + +msgid "Parallel port 2" +msgstr "Paralelna vrata 2" + +msgid "Parallel port 3" +msgstr "Paralelna vrata 3" + +msgid "HD Controller:" +msgstr "Krmilnik trdega diska:" + +msgid "FD Controller:" +msgstr "Krmilnik disketnika:" + +msgid "Tertiary IDE Controller" +msgstr "Terciarni krmilnik IDE" + +msgid "Quaternary IDE Controller" +msgstr "Kvartarni krmilnik IDE" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Krmilnik 1:" + +msgid "Controller 2:" +msgstr "Krmilnik 2:" + +msgid "Controller 3:" +msgstr "Krmilnik 3:" + +msgid "Controller 4:" +msgstr "Krmilnik 4:" + +msgid "Cassette" +msgstr "Kasetnik" + +msgid "Hard disks:" +msgstr "Trdi diski:" + +msgid "&New..." +msgstr "Nov..." + +msgid "&Existing..." +msgstr "Obstoječ..." + +msgid "&Remove" +msgstr "Odstrani" + +msgid "Bus:" +msgstr "Vodilo:" + +msgid "Channel:" +msgstr "Kanal:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "Določi..." + +msgid "Sectors:" +msgstr "Sektorji:" + +msgid "Heads:" +msgstr "Glave:" + +msgid "Cylinders:" +msgstr "Cilindri:" + +msgid "Size (MB):" +msgstr "Velikost (MB):" + +msgid "Type:" +msgstr "Vrsta:" + +msgid "Image Format:" +msgstr "Format slike:" + +msgid "Block Size:" +msgstr "Velikost bloka:" + +msgid "Floppy drives:" +msgstr "Disketni pogoni:" + +msgid "Turbo timings" +msgstr "Turbo časovniki" + +msgid "Check BPB" +msgstr "Preverjaj BPB" + +msgid "CD-ROM drives:" +msgstr "Pogoni CD-ROM:" + +msgid "MO drives:" +msgstr "Magnetno-optični pogoni:" + +msgid "ZIP drives:" +msgstr "Pogoni ZIP:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "Ura v realnem času ISA:" + +msgid "ISA Memory Expansion" +msgstr "Razširitev spomina ISA" + +msgid "Card 1:" +msgstr "Kartica 1:" + +msgid "Card 2:" +msgstr "Kartica 2:" + +msgid "Card 3:" +msgstr "Kartica 3:" + +msgid "Card 4:" +msgstr "Kartica 4:" + +msgid "ISABugger device" +msgstr "Naprava ISABugger" + +msgid "POST card" +msgstr "Kartica POST" + +msgid "Segoe UI" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Napaka" + +msgid "Fatal error" +msgstr "Kritična napaka" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Pritisnite CTRL+ALT+PAGE DOWN za povratek iz celozaslonskega načina." + +msgid "Speed" +msgstr "Hitrost" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgstr "ZIP slike (*.IM? *.im? *.ZDI *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." +msgstr "86Box ni našel nobenih uporabnih ROM slik.\n\nProsim prenesite set ROM-ov in ga razširite v mapo ""roms""." + +msgid "(empty)" +msgstr "(prazno)" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" +msgstr "ZIP slike (*.IM? *.im? *.ZDI *.zdi);;Vse datoteke (*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Vključeno" + +msgid "Off" +msgstr "Izključeno" + +msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" +msgstr "Vse slike (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Osnovne sektorske slike (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Površinske slike (*.86F *.86f)" + +msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Sistem ""%hs"" ni na voljo zaradi manjkajočih ROM-ov v mapi roms/machines. Preklapljam na drug sistem, ki je na voljo." + +msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Grafična kartica ""%hs"" ni na voljo zaradi manjkajočih ROM-ov v mapi roms/video. Preklapljam na drugo grafično kartico, ki je na voljo.." + +msgid "Machine" +msgstr "Sistem" + +msgid "Display" +msgstr "Zaslon" + +msgid "Input devices" +msgstr "Vhodne naprave" + +msgid "Sound" +msgstr "Zvok" + +msgid "Network" +msgstr "Omrežje" + +msgid "Ports (COM & LPT)" +msgstr "Vrata (COM & LPT)" + +msgid "Storage controllers" +msgstr "Krmilniki shrambe" + +msgid "Hard disks" +msgstr "Trdi diski" + +msgid "Floppy & CD-ROM drives" +msgstr "Disketni in CD-ROM pogoni" + +msgid "Other removable devices" +msgstr "Druge odstranljive naprave" + +msgid "Other peripherals" +msgstr "Druga periferija" + +msgid "Surface images (*.86F *.86f)" +msgstr "Površinske slike (*.86F *.86f)" + +msgid "Click to capture mouse" +msgstr "Kliknite za zajem miške" + +msgid "Press F8+F12 to release mouse" +msgstr "Pritisnite F8+F12 za izpust miške" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Pritisnite F8+F12 ali srednji gumb za izpust miške" + +msgid "Unable to initialize FluidSynth" +msgstr "Ne morem inicializirati FluidSynth" + +msgid "Bus" +msgstr "Vodilo" + +msgid "File" +msgstr "Datoteka" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Ne morem inicializirati pogona upodabljanja." + +msgid "Default" +msgstr "Privzeto" + +msgid "%i Wait state(s)" +msgstr "%i stanj čakanja" + +msgid "Type" +msgstr "Vrsta" + +msgid "Failed to set up PCap" +msgstr "Nastavitev PCap ni uspela" + +msgid "No PCap devices found" +msgstr "Nobena naprava PCap ni bila najdena" + +msgid "Invalid PCap device" +msgstr "Neveljavna naprava PCap" + +msgid "Standard 2-button joystick(s)" +msgstr "Standardna krmilna palica z 2 gumboma" + +msgid "Standard 4-button joystick" +msgstr "Standardna krmilna palica s 4 gumbi" + +msgid "Standard 6-button joystick" +msgstr "Standardna krmilna palica s 6 gumbi" + +msgid "Standard 8-button joystick" +msgstr "Standardna krmilna palica z 8 gumbi" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Brez" + +msgid "Unable to load keyboard accelerators." +msgstr "Ne morem naložiti pospeševalnikov tipkovnice." + +msgid "Unable to register raw input." +msgstr "Ne morem registrirati neobdelanega vnosa." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Disketa %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgstr "Vse slike (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Napredne sektorske slike (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Osnovne sektorske slike (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Tokovne slike (*.FDI *.fdi);;Površinske slike (*.86F *.86f *.MFM *.mfm);;Vse datoteke (*)" + +msgid "Unable to initialize FreeType" +msgstr "Ne morem inicializirati FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Ne morem inicializirati SDL, potrebna je knjižica SDL2.dll" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Ste prepričani, da želite ponovno zagnati emulirani sistem?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Ste prepričani, da želite zapreti 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Ne morem inicializirati Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgstr "Slike MO (*.IM? *.im? *.MDI *.mdi);;Vse datoteke (*)" + +msgid "Welcome to 86Box!" +msgstr "Dobrodošli v 86Box!" + +msgid "Internal controller" +msgstr "Notranji krmilnik" + +msgid "Exit" +msgstr "Izhod" + +msgid "No ROMs found" +msgstr "Nobeni ROM-i niso bili najdeni" + +msgid "Do you want to save the settings?" +msgstr "Želite shraniti nastavitve?" + +msgid "This will hard reset the emulated machine." +msgstr "To bo ponovno zagnalo emuliran sistem." + +msgid "Save" +msgstr "Shrani" + +msgid "About 86Box" +msgstr "O programu 86Box" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Emulator starih računalnikov\n\nAvtorji: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho in drugi.\n\nIzdano pod licenco GNU General Public License različica 2 ali novejša. Glej datoteko LICENSE za več informacij." + +msgid "Hardware not available" +msgstr "Strojna oprema ni na voljo" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Prepičajte se, da je nameščen libpcap in da ste na omrežni povezavi, združljivi z " + +msgid "Invalid configuration" +msgstr "Neveljavna konfiguracija" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " je potreben za emuliranje ESC/P tiskalnika." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " je potreben za samodejno pretvorbo PostScript datotek v PDF.\n\nVsi dokumenti, poslani generičnemu PostScript tiskalniku bodo shranjeni kot PostScript (.ps) datoteke." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " je potreben za FluidSynth MIDI izhod." + +msgid "Entering fullscreen mode" +msgstr "Preklapljam v celozaslonski način" + +msgid "Don't show this message again" +msgstr "Ne pokaži več tega sporočila" + +msgid "Don't exit" +msgstr "Prekliči izhod" + +msgid "Reset" +msgstr "Resetiraj" + +msgid "Don't reset" +msgstr "Ne resetiraj" + +msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgstr "Slike CD-ROM (*.ISO *.iso *.CUE *.cue);;Vse datoteke (*)" + +msgid "%hs Device Configuration" +msgstr "Konfiguracija naprave %hs" + +msgid "Monitor in sleep mode" +msgstr "Zaslon v načinu spanja" + +msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" +msgstr "Senčilniki OpenGL (*.GLSL *.glsl);;Vse datoteke (*)" + +msgid "OpenGL options" +msgstr "Možnosti OpenGL" + +msgid "You are loading an unsupported configuration" +msgstr "Nalagate nepodprto konfiguracijo" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "Filtriranje vrste procesorja glede na izbran sistem je onemogočeno za ta emuliran sistem.\n\nTako lahko izberete procesor, ki je sicer nezdružljiv z izbranim sistemom. Vendar lahko naletite na nezdružljivosti z BIOS-om sistema ali drugo programsko opremo\n\nOmogočanje te nastavitve ni uradno podprto, vsa poročila o hroščih iz tega naslova pa bodo zaprta kot neveljavna." + +msgid "Continue" +msgstr "Nadaljuj" + +msgid "Cassette: %s" +msgstr "Kaseta: %s" + +msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" +msgstr "Slike kaset (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Vse datoteke (*)" + +msgid "Cartridge %i: %ls" +msgstr "Spominski vložek %i: %ls" + +msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" +msgstr "Slike spominskega vložka (*.A *.a *.B *.b *.JRC *.jrc);;Vse datoteke (*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Hard disk (%s)" +msgstr "Trdi disk (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL ali ESDI pogoni CD-ROM niso nikoli obstajali" + +msgid "Custom..." +msgstr "Po meri..." + +msgid "Custom (large)..." +msgstr "Po meri (velik)..." + +msgid "Add New Hard Disk" +msgstr "Dodaj nov trdi disk" + +msgid "Add Existing Hard Disk" +msgstr "Dodaj obstoječ trdi disk" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "Slike diska HDI ne morejo biti večje od 4 GB." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Slike diska ne morejo biti večje od 127 GB." + +msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" +msgstr "Slike trdega diska (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Vse datoteke (*)" + +msgid "Unable to read file" +msgstr "Ne morem prebrati datoteke" + +msgid "Unable to write file" +msgstr "Ne morem pisati v datoteko" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "Slike HDI ali HDX, ki nimajo sektorjev velikosti 512 bajtov, niso podprte." + +msgid "USB is not yet supported" +msgstr "USB še ni podprt" + +msgid "Disk image file already exists" +msgstr "Datoteka s sliko diska že obstaja" + +msgid "Please specify a valid file name." +msgstr "Prosim, navedite veljavno ime datoteke." + +msgid "Disk image created" +msgstr "Slika diska ustvarjena" + +msgid "Make sure the file exists and is readable." +msgstr "Prepričajte se, da datoteka obstaja in je berljiva." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Prepričajte se, da datoteko shranjujete v zapisljivo mapo." + +msgid "Disk image too large" +msgstr "Slika diska je prevelika" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Ne pozabite na novem disku ustvariti particij in jih formatirati." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Izbrana datoteka bo prepisana. Ali jo res želite uporabiti?" + +msgid "Unsupported disk image" +msgstr "Nepodprta slika diska" + +msgid "Overwrite" +msgstr "Prepiši" + +msgid "Don't overwrite" +msgstr "Ne prepiši" + +msgid "Raw image (.img)" +msgstr "Surova slika (.img)" + +msgid "HDI image (.hdi)" +msgstr "Slika HDI (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "Slika HDX (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD fiksne velikosti (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "Dinamičen VHD (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Diferencialni VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Veliki bloki (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Mali bloki (512 KB)" + +msgid "VHD files (*.VHD *.vhd);;All files (*)" +msgstr "Datoteke VHD (*.VHD *.vhd);;Vse datoteke (*)" + +msgid "Select the parent VHD" +msgstr "Izberite starševsko sliko VHD" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "To lahko pomeni, da je bila starševska slika spremenjena potem, ko je že bila ustvarjena diferencialna slika.\n\nDo tega lahko pride tudi kadar so datoteke slik diska premaknjene ali kopirane, ali pa gre za hrošča v programu, ki je ustvaril ta disk.\n\nŽelite popraviti časovni žig?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Časovna žiga starševske slike diska in slike diska otroka se ne ujemata" + +msgid "Could not fix VHD timestamp." +msgstr "Ne morem popraviti časovnega žiga slike VHD." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (grozd 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (grozd 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5"" 128Mb M.O. (ISO 10090)" +msgstr "3.5"" 128Mb M.O. (ISO 10090)" + +msgid "3.5"" 230Mb M.O. (ISO 13963)" +msgstr "3.5"" 230Mb M.O. (ISO 13963)" + +msgid "3.5"" 540Mb M.O. (ISO 15498)" +msgstr "3.5"" 540Mb M.O. (ISO 15498)" + +msgid "3.5"" 640Mb M.O. (ISO 15498)" +msgstr "3.5"" 640Mb M.O. (ISO 15498)" + +msgid "3.5"" 1.3Gb M.O. (GigaMO)" +msgstr "3.5"" 1.3Gb M.O. (GigaMO)" + +msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25"" 600Mb M.O." +msgstr "5.25"" 600Mb M.O." + +msgid "5.25"" 650Mb M.O." +msgstr "5.25"" 650Mb M.O." + +msgid "5.25"" 1Gb M.O." +msgstr "5.25"" 1Gb M.O." + +msgid "5.25"" 1.3Gb M.O." +msgstr "5.25"" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "Popolni obrati na minuto" + +msgid "1%% below perfect RPM" +msgstr "1%% pod popolnimi obrati" + +msgid "1.5%% below perfect RPM" +msgstr "1.5%% pod popolnimi obrati" + +msgid "2%% below perfect RPM" +msgstr "2%% pod popolnimi obrati" + +msgid "(System Default)" +msgstr "(Sistemsko privzeto)" + diff --git a/src/qt/languages/tr_TR.po b/src/qt/languages/tr_TR.po new file mode 100644 index 000000000..1a28dfff8 --- /dev/null +++ b/src/qt/languages/tr_TR.po @@ -0,0 +1,1173 @@ +msgid "Translated by" +msgstr "Unknown" + +msgid "&Action" +msgstr "&Komutlar" + +msgid "&Keyboard requires capture" +msgstr "&Klavye sadece fare yakalandığında çalışsın" + +msgid "&Right CTRL is left ALT" +msgstr "&Sağ CTRL tuşunu sol ALT tuşu olarak ayarla" + +msgid "&Hard Reset..." +msgstr "&Makineyi yeniden başlat..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Duraklat" + +msgid "E&xit..." +msgstr "Emülatörden &çık..." + +msgid "&View" +msgstr "&Görüntüleme" + +msgid "&Hide status bar" +msgstr "&Durum çubuğunu gizle" + +msgid "&Resizeable window" +msgstr "&Yeniden boyutlandırılabilir pencere" + +msgid "R&emember size && position" +msgstr "&Pencere boyut ve pozisyonunu hatırla" + +msgid "Re&nderer" +msgstr "&İşleyici" + +msgid "&Qt (Software)" +msgstr "&Qt (Yazılım)" + +msgid "Qt (&Hardware)" +msgstr "Qt (&Donanım)" + +msgid "Qt (&OpenGL)" +msgstr "Qt (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 Core)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "Pencere &boyutunu belirle..." + +msgid "F&orce 4:3 display ratio" +msgstr "&4:3 görüntüleme oranına zorla" + +msgid "&Window scale factor" +msgstr "Pencere &ölçek çarpanı" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "&Filtre metodu" + +msgid "&Nearest" +msgstr "&Nearest (En yakın)" + +msgid "&Linear" +msgstr "&Linear (Doğrusal)" + +msgid "Hi&DPI scaling" +msgstr "Hi&DPI ölçeklemesi" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Tam ekran\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Tam ekran &germe modu" + +msgid "&Full screen stretch" +msgstr "&Tam ekrana ger" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Kare piksel (ölçeği koru)" + +msgid "&Integer scale" +msgstr "Tam &sayı ölçeklemesi" + +msgid "E&GA/(S)VGA settings" +msgstr "EGA/&(S)VGA ayarları" + +msgid "&Inverted VGA monitor" +msgstr "Ters &renk VGA monitör" + +msgid "VGA screen &type" +msgstr "VGA ekran &tipi" + +msgid "RGB &Color" +msgstr "RGB (&renkli)" + +msgid "&RGB Grayscale" +msgstr "RGB (&gri tonlama)" + +msgid "&Amber monitor" +msgstr "&Kehribar rengi monitör" + +msgid "&Green monitor" +msgstr "&Yeşil renk monitör" + +msgid "&White monitor" +msgstr "&Beyaz renk monitör" + +msgid "Grayscale &conversion type" +msgstr "&Gri tonlama dönüştürme tipi" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Ortalama" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "CGA/PCjr/Tandy/E&GA/(S)VGA aşırı taraması" + +msgid "Change contrast for &monochrome display" +msgstr "Gri to&nlamalı görüntü için kontrastı değiştir" + +msgid "&Media" +msgstr "&Medya" + +msgid "&Tools" +msgstr "&Araçlar" + +msgid "&Settings..." +msgstr "&Ayarlar..." + +msgid "&Update status bar icons" +msgstr "Durum &çubuğu ikonlarını güncelle" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "&Ekran görüntüsü al\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Tercihler..." + +msgid "Enable &Discord integration" +msgstr "&Discord entegrasyonunu etkinleştir" + +msgid "Sound &gain..." +msgstr "&Ses yükseltici..." + +msgid "Begin trace\tCtrl+T" +msgstr "Begin trace\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "End trace\tCtrl+T" + +msgid "&Logging" +msgstr "&Logging" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "BusLogic kayıtlarını etkinleştir\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "CD-ROM kayıtlarını etkinleştir\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Disket (86F) kayıtlarını etkinleştir\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Disket kontrolcüsü kayıtlarını etkinleştir\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "IDE kayıtlarını etkinleştir\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Seri Port kayıtlarını etkinleştir\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Ağ kayıtlarını etkinleştir\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&breakpoint'i kayıtla\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "&Video belleğini depola\tCtrl+F1" + +msgid "&Help" +msgstr "&Yardım" + +msgid "&Documentation..." +msgstr "&Dökümanlar..." + +msgid "&About 86Box..." +msgstr "&86Box Hakkında..." + +msgid "" +msgstr "" + +msgid "&New image..." +msgstr "&Yeni imaj oluştur..." + +msgid "&Existing image..." +msgstr "&İmaj seç..." + +msgid "Existing image (&Write-protected)..." +msgstr "İmaj &seç (Yazma-korumalı)..." + +msgid "&Record" +msgstr "&Kaydet" + +msgid "&Play" +msgstr "&Oynat" + +msgid "&Rewind to the beginning" +msgstr "&Başlangıca geri sar" + +msgid "&Fast forward to the end" +msgstr "Sona doğru &ileri sar" + +msgid "E&ject" +msgstr "&Çıkar" + +msgid "&Image..." +msgstr "&İmaj..." + +msgid "E&xport to 86F..." +msgstr "&86F dosyası olarak aktar..." + +msgid "&Mute" +msgstr "&Sesi kapat" + +msgid "E&mpty" +msgstr "İmajı &çıkar" + +msgid "&Reload previous image" +msgstr "&Önceki imajı seç" + +msgid "&Image" +msgstr "&İmaj seç" + +msgid "Target &framerate" +msgstr "Hedef &kare oranı" + +msgid "&Sync with video" +msgstr "Video ile &senkronize et" + +msgid "&25 fps" +msgstr "&25 fps" + +msgid "&30 fps" +msgstr "&30 fps" + +msgid "&50 fps" +msgstr "&50 fps" + +msgid "&60 fps" +msgstr "&60 fps" + +msgid "&75 fps" +msgstr "&75 fps" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "Gölgelendirici &seç..." + +msgid "&Remove shader" +msgstr "&Gölgelendiriciyi kaldır" + +msgid "Preferences" +msgstr "Tercihler" + +msgid "Sound Gain" +msgstr "Ses Artırma" + +msgid "New Image" +msgstr "Yeni İmaj" + +msgid "Settings" +msgstr "Ayarlar" + +msgid "Specify Main Window Dimensions" +msgstr "Ana Pencere Boyutunu Belirle" + +msgid "OK" +msgstr "Tamam" + +msgid "Cancel" +msgstr "İptal et" + +msgid "Save these settings as &global defaults" +msgstr "Bu ayarları &varsayılan olarak kaydet" + +msgid "&Default" +msgstr "&Varsayılan" + +msgid "Language:" +msgstr "Dil:" + +msgid "Icon set:" +msgstr "Simge seti:" + +msgid "Gain" +msgstr "Artırma" + +msgid "File name:" +msgstr "Dosya adı:" + +msgid "Disk size:" +msgstr "Disk boyutu:" + +msgid "RPM mode:" +msgstr "RPM modu:" + +msgid "Progress:" +msgstr "İşlem:" + +msgid "Width:" +msgstr "Genişlik:" + +msgid "Height:" +msgstr "Yükseklik:" + +msgid "Lock to this size" +msgstr "Bu boyuta kilitle" + +msgid "Machine type:" +msgstr "Makine türü:" + +msgid "Machine:" +msgstr "Makine:" + +msgid "Configure" +msgstr "Ayarla" + +msgid "CPU type:" +msgstr "CPU türü:" + +msgid "Speed:" +msgstr "Hız:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "Bekleme süreleri:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Bellek:" + +msgid "Time synchronization" +msgstr "Zaman senkronizasyonu" + +msgid "Disabled" +msgstr "Devre dışı" + +msgid "Enabled (local time)" +msgstr "Etkin (yerel zaman)" + +msgid "Enabled (UTC)" +msgstr "Etkin (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Dinamik Derleyici" + +msgid "Video:" +msgstr "Ekran kartı:" + +msgid "Voodoo Graphics" +msgstr "Voodoo Grafikleri" + +msgid "Mouse:" +msgstr "Fare:" + +msgid "Joystick:" +msgstr "Oyun kolu:" + +msgid "Joystick 1..." +msgstr "Oyun kolu 1..." + +msgid "Joystick 2..." +msgstr "Oyun kolu 2..." + +msgid "Joystick 3..." +msgstr "Oyun kolu 3..." + +msgid "Joystick 4..." +msgstr "Oyun kolu 4..." + +msgid "Sound card:" +msgstr "Ses kartı:" + +msgid "MIDI Out Device:" +msgstr "MIDI Çıkış Cihazı:" + +msgid "MIDI In Device:" +msgstr "MIDI Giriş Cihazı:" + +msgid "Standalone MPU-401" +msgstr "Bağımsız MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "FLOAT32 ses kullan" + +msgid "Network type:" +msgstr "Ağ tipi:" + +msgid "PCap device:" +msgstr "PCap cihazı:" + +msgid "Network adapter:" +msgstr "Ağ cihazı:" + +msgid "LPT1 Device:" +msgstr "LPT1 Cihazı:" + +msgid "LPT2 Device:" +msgstr "LPT2 Cihazı:" + +msgid "LPT3 Device:" +msgstr "LPT3 Cihazı:" + +msgid "Serial port 1" +msgstr "Seri port 1" + +msgid "Serial port 2" +msgstr "Seri port 2" + +msgid "Serial port 3" +msgstr "Seri port 3" + +msgid "Serial port 4" +msgstr "Seri port 4" + +msgid "Parallel port 1" +msgstr "Paralel port 1" + +msgid "Parallel port 2" +msgstr "Paralel port 2" + +msgid "Parallel port 3" +msgstr "Paralel port 3" + +msgid "HD Controller:" +msgstr "HD Kontrolcüsü:" + +msgid "FD Controller:" +msgstr "FD Kontrolcüsü:" + +msgid "Tertiary IDE Controller" +msgstr "Üçlü IDE Kontrolcüsü" + +msgid "Quaternary IDE Controller" +msgstr "Dörtlü IDE Kontrolcüsü" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Kontrolcü 1:" + +msgid "Controller 2:" +msgstr "Kontrolcü 2:" + +msgid "Controller 3:" +msgstr "Kontrolcü 3:" + +msgid "Controller 4:" +msgstr "Kontrolcü 4:" + +msgid "Cassette" +msgstr "Kaset" + +msgid "Hard disks:" +msgstr "Hard diskler:" + +msgid "&New..." +msgstr "&Yeni..." + +msgid "&Existing..." +msgstr "&Var olan..." + +msgid "&Remove" +msgstr "&Kaldır" + +msgid "Bus:" +msgstr "Veri yolu:" + +msgid "Channel:" +msgstr "Kanal:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Belirle..." + +msgid "Sectors:" +msgstr "Sektörler:" + +msgid "Heads:" +msgstr "Veri Kafaları:" + +msgid "Cylinders:" +msgstr "Silindirler:" + +msgid "Size (MB):" +msgstr "Boyut (MB):" + +msgid "Type:" +msgstr "Tip:" + +msgid "Image Format:" +msgstr "İmaj Düzeni:" + +msgid "Block Size:" +msgstr "Blok Boyutu:" + +msgid "Floppy drives:" +msgstr "Disket sürücüleri:" + +msgid "Turbo timings" +msgstr "Turbo zamanlamaları" + +msgid "Check BPB" +msgstr "BPB'yi denetle" + +msgid "CD-ROM drives:" +msgstr "CD-ROM sürücüleri:" + +msgid "MO drives:" +msgstr "MO sürücüleri:" + +msgid "ZIP drives:" +msgstr "ZIP sürücüleri:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA RTC:" + +msgid "ISA Memory Expansion" +msgstr "ISA Bellek Artırma" + +msgid "Card 1:" +msgstr "Kart 1:" + +msgid "Card 2:" +msgstr "Kart 2:" + +msgid "Card 3:" +msgstr "Kart 3:" + +msgid "Card 4:" +msgstr "Kart 4:" + +msgid "ISABugger device" +msgstr "ISABugger cihazı" + +msgid "POST card" +msgstr "POST kartı" + +msgid "Segoe UI" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Hata" + +msgid "Fatal error" +msgstr "Kritik hata" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Pencere moduna geri dönmek için CTRL+ALT+PAGE DOWN tuşlarına basın." + +msgid "Speed" +msgstr "Hız" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgstr "ZIP imajları (*.IM? *.im? *.ZDI *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." +msgstr "86Box hiç bir kullanılabilir ROM imajı bulamadı.\n\nLütfen ROM setini indirin ve onu ""Roms"" klasörüne çıkarın." + +msgid "(empty)" +msgstr "(empty)" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" +msgstr "ZIP imajları (*.IM? *.im? *.ZDI *.zdi);;All files (*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Açık" + +msgid "Off" +msgstr "Kapalı" + +msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" +msgstr "Tüm imajlar (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basit sektör imajları (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Yüzey imajları (*.86F *.86f)" + +msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr """%hs"" makinesi roms/machines klasöründe mevcut olmayan ROM imajı yüzünden mevcut değil. Mevcut olan bir makineye geçiş yapılıyor." + +msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr """%hs"" ekran kartı roms/video klasöründe mevcut olmayan ROM imajı yüzünden mevcut değil. Mevcut olan bir ekran kartına geçiş yapılıyor." + +msgid "Machine" +msgstr "Makine" + +msgid "Display" +msgstr "Görüntü" + +msgid "Input devices" +msgstr "Giriş aygıtları" + +msgid "Sound" +msgstr "Ses" + +msgid "Network" +msgstr "Ağ" + +msgid "Ports (COM & LPT)" +msgstr "Portlar (COM & LPT)" + +msgid "Storage controllers" +msgstr "Depolama kontrolcüleri" + +msgid "Hard disks" +msgstr "Hard diskler" + +msgid "Floppy & CD-ROM drives" +msgstr "Disket & CD-ROM sürücüleri" + +msgid "Other removable devices" +msgstr "Diğer kaldırılabilir cihazlar" + +msgid "Other peripherals" +msgstr "Diğer cihazlar" + +msgid "Surface images (*.86F *.86f)" +msgstr "Yüzey imajları (*.86F *.86f)" + +msgid "Click to capture mouse" +msgstr "Farenin yakalanması için tıklayın" + +msgid "Press F8+F12 to release mouse" +msgstr "Farenin bırakılması için F8+F12 tuşlarına basın" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Farenin bırakılması için F8+F12 veya farenin orta tuşuna basın" + +msgid "Unable to initialize FluidSynth" +msgstr "FluidSynth başlatılamadı" + +msgid "Bus" +msgstr "Veri yolu" + +msgid "File" +msgstr "Dosya" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Video işleyici başlatılamadı." + +msgid "Default" +msgstr "Varsayılan" + +msgid "%i Wait state(s)" +msgstr "%i Bekleme durumları" + +msgid "Type" +msgstr "Tür" + +msgid "Failed to set up PCap" +msgstr "PCap ayarlanamadı" + +msgid "No PCap devices found" +msgstr "Herhangi bir PCap cihazı bulunamadı" + +msgid "Invalid PCap device" +msgstr "Geçersiz PCap cihazı" + +msgid "Standard 2-button joystick(s)" +msgstr "Standart 2-button oyun kolları" + +msgid "Standard 4-button joystick" +msgstr "Standart 4-button oyun kolu" + +msgid "Standard 6-button joystick" +msgstr "Standart 6-button oyun kolu" + +msgid "Standard 8-button joystick" +msgstr "Standart 8-button oyun kolu" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Kontrol Sistemi" + +msgid "None" +msgstr "Hiçbiri" + +msgid "Unable to load keyboard accelerators." +msgstr "Klavye ivdirgeçleri yüklenemedi." + +msgid "Unable to register raw input." +msgstr "Ham girdi kaydedilemedi." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Disket %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgstr "Tüm imajlar (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Gelişmiş sektör imajları (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basit sektör imajları (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Yüzey imajları (*.86F *.86f *.MFM *.mfm);;All files (*)" + +msgid "Unable to initialize FreeType" +msgstr "FreeType başlatılamadı" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "SDL başlatılamadı, SDL2.dll gerekmektedir" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Emüle edilen makineyi yeniden başlatmak istediğinizden emin misiniz?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "86Box'tan çıkmak istediğinize emin misiniz?" + +msgid "Unable to initialize Ghostscript" +msgstr "Ghostscript başlatılamadı" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgstr "MO imajları (*.IM? *.im? *.MDI *.mdi);;All files (*)" + +msgid "Welcome to 86Box!" +msgstr "86Box'a hoşgeldiniz!" + +msgid "Internal controller" +msgstr "Dahili kontrolcü" + +msgid "Exit" +msgstr "Çıkış" + +msgid "No ROMs found" +msgstr "Hiçbir ROM imajı bulunamadı" + +msgid "Do you want to save the settings?" +msgstr "Ayarları kaydetmek istediğinizden emin misiniz?" + +msgid "This will hard reset the emulated machine." +msgstr "Bu makineyi yeniden başlatacak." + +msgid "Save" +msgstr "Kaydet" + +msgid "About 86Box" +msgstr "86Box Hakkında" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Bir eski bilgisayar emülatörü\n\nYapanlar: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, ve diğerleri.\n\nGNU Genel Kamu Lisansı versiyon 2 veya sonrası altında yayınlanmıştır. Daha fazla bilgi için LICENSE'ı gözden geçirin." + +msgid "Hardware not available" +msgstr "Donanım mevcut değil" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "libpcap kurulu olduğundan ve libpcap-uyumlu bir internet ağında bulunduğunuzdan emin olun." + +msgid "Invalid configuration" +msgstr "Geçersiz konfigürasyon" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " ESC/P yazıcı emülasyonu için gereklidir." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " PostScript dosyalarının otomatik olarak PDF dosyalarına çevirilmesi için gereklidir.\n\nGenel PostScript yazıcısına gönderilen tüm dökümanlar PostScript (.ps) dosyaları olarak kaydedilecektir." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " FluidSynth MIDI çıkışı için gereklidir." + +msgid "Entering fullscreen mode" +msgstr "Tam ekran moduna geçiliyor" + +msgid "Don't show this message again" +msgstr "Bu mesajı bir daha gösterme" + +msgid "Don't exit" +msgstr "Çıkış yapma" + +msgid "Reset" +msgstr "Yeniden başlat" + +msgid "Don't reset" +msgstr "Yeniden başlatma" + +msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgstr "CD-ROM imajları (*.ISO *.iso *.CUE *.cue);;Tüm dosyalar (*)" + +msgid "%hs Device Configuration" +msgstr "%hs Cihaz Konfigürasyonu" + +msgid "Monitor in sleep mode" +msgstr "Monitör uyku modunda" + +msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" +msgstr "OpenGL Gölgelendiricileri (*.GLSL *.glsl);;Tüm dosyalar (*)" + +msgid "OpenGL options" +msgstr "OpenGL ayarları" + +msgid "You are loading an unsupported configuration" +msgstr "Desteklenmeyen bir konfigürasyon yüklüyorsunuz" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "Seçtiğiniz makineye uygun CPU (işlemci) türü filtrelemesi bu emülasyon için devre dışı bırakıldı.\n\nBu, normalde seçilen makine ile uyumlu olmayan bir CPU seçmenizi mümkün kılmaktadır. Ancak, bundan dolayı seçilen makinenin BIOS'u veya diğer yazılımlar ile uyumsuzluk sorunu yaşayabilirsiniz.\n\nBu filtrelemeyi devre dışı bırakmak emülatör tarafından resmi olarak desteklenmemektedir ve açtığınız bug (hata) raporları geçersiz olarak kapatılabilir." + +msgid "Continue" +msgstr "Devam et" + +msgid "Cassette: %s" +msgstr "Kaset: %s" + +msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" +msgstr "Kaset imajları (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Tüm dosyalar (*)" + +msgid "Cartridge %i: %ls" +msgstr "Kartuş %i: %ls" + +msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" +msgstr "Kartuş imajları (*.A *.a *.B *.b *.JRC *.jrc);;Tüm dosyalar (*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Hard disk (%s)" +msgstr "Hard disk (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL veya ESDI CD-ROM sürücüleri hiçbir zaman var olmamıştır" + +msgid "Custom..." +msgstr "Diğer..." + +msgid "Custom (large)..." +msgstr "Diğer (büyük)..." + +msgid "Add New Hard Disk" +msgstr "Yeni Hard Disk Dosyası Oluştur" + +msgid "Add Existing Hard Disk" +msgstr "Var Olan Hard Disk Dosyası Ekle" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "HDI disk imajları 4 GB'tan daha büyük olamaz." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Disk imajları 127 GB'tan daha büyük olamaz." + +msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" +msgstr "Hard disk imajları (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Tüm dosyalar (*)" + +msgid "Unable to read file" +msgstr "Dosya okunamıyor" + +msgid "Unable to write file" +msgstr "Dosyanın üzerine yazılamıyor" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "512 dışında sektör boyutu olan HDI veya HDX imajları desteklenmemektedir." + +msgid "USB is not yet supported" +msgstr "USB şu anda desteklenmemektedir" + +msgid "Disk image file already exists" +msgstr "Disk imaj dosyası zaten var olmakta" + +msgid "Please specify a valid file name." +msgstr "Lütfen geçerli bir dosya ismi belirleyin." + +msgid "Disk image created" +msgstr "Disk imajı oluşturuldu" + +msgid "Make sure the file exists and is readable." +msgstr "Dosyanın var olduğuna ve okunabildiğine emin olun." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Dosyanın yazılabilir bir klasöre kaydedildiğinden emin olun." + +msgid "Disk image too large" +msgstr "Disk imajı çok büyük" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Yeni oluşturulan diski bölmeyi ve formatlamayı unutmayın." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Seçili dosyanın üzerine yazılacaktır. Bunu yapmak istediğinizden emin misiniz?" + +msgid "Unsupported disk image" +msgstr "Desteklenmeyen disk imajı" + +msgid "Overwrite" +msgstr "Üzerine yaz" + +msgid "Don't overwrite" +msgstr "Üzerine yazma" + +msgid "Raw image (.img)" +msgstr "Ham imaj (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDI imajı (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDX imajı (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "Sabit-boyutlu VHD (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "Dinamik-boyutlu VHD (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Differencing VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Büyük bloklar (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Küçük bloklar (512 KB)" + +msgid "VHD files (*.VHD *.vhd);;All files (*)" +msgstr "VHD dosyaları (*.VHD *.vhd);;Tüm dosyalar (*)" + +msgid "Select the parent VHD" +msgstr "Ana VHD dosyasını seçin" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Bu, farkı alınan imaj oluşturulduktan sonra ana imaj dosyasının düzenlendiği anlamına geliyor olabilir.\n\nBu durum ayrıca imaj dosyaları kopyalandığında veya yerleri değiştirildiğinde veya imaj dosyalarını oluşturan programdaki bir hatadan dolayı olmuş olabilir.\n\nZaman damgalarını düzeltmek ister misiniz?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Ana ve ek disk zaman damgaları uyuşmuyor" + +msgid "Could not fix VHD timestamp." +msgstr "VHD zaman damgası düzeltilemedi." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (cluster 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (cluster 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5"" 128Mb M.O. (ISO 10090)" +msgstr "3.5"" 128Mb M.O. (ISO 10090)" + +msgid "3.5"" 230Mb M.O. (ISO 13963)" +msgstr "3.5"" 230Mb M.O. (ISO 13963)" + +msgid "3.5"" 540Mb M.O. (ISO 15498)" +msgstr "3.5"" 540Mb M.O. (ISO 15498)" + +msgid "3.5"" 640Mb M.O. (ISO 15498)" +msgstr "3.5"" 640Mb M.O. (ISO 15498)" + +msgid "3.5"" 1.3Gb M.O. (GigaMO)" +msgstr "3.5"" 1.3Gb M.O. (GigaMO)" + +msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25"" 600Mb M.O." +msgstr "5.25"" 600Mb M.O." + +msgid "5.25"" 650Mb M.O." +msgstr "5.25"" 650Mb M.O." + +msgid "5.25"" 1Gb M.O." +msgstr "5.25"" 1Gb M.O." + +msgid "5.25"" 1.3Gb M.O." +msgstr "5.25"" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "Mükemmel RPM" + +msgid "1%% below perfect RPM" +msgstr "mükemmel RPM değerinin 1%% altı" + +msgid "1.5%% below perfect RPM" +msgstr "mükemmel RPM değerinin 1.5%% altı" + +msgid "2%% below perfect RPM" +msgstr "mükemmel RPM değerinin 2%% altı" + +msgid "(System Default)" +msgstr "(Sistem Varsayılanı)" + diff --git a/src/qt/languages/zh_CN.po b/src/qt/languages/zh_CN.po new file mode 100644 index 000000000..7ad5251fd --- /dev/null +++ b/src/qt/languages/zh_CN.po @@ -0,0 +1,1176 @@ +msgid "Translated by" +msgstr "Unknown" + +msgid "&Action" +msgstr "操作(&A)" + +msgid "&Keyboard requires capture" +msgstr "键盘需要捕捉(&K)" + +msgid "&Right CTRL is left ALT" +msgstr "将右 CTRL 键映射为左 ALT 键(&R)" + +msgid "&Hard Reset..." +msgstr "硬重置(&H)..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "Ctrl+Alt+Del(&C)\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+Esc(&E)" + +msgid "&Pause" +msgstr "暂停(&P)" + +msgid "E&xit..." +msgstr "退出(&X)..." + +msgid "&View" +msgstr "查看(&V)" + +msgid "&Hide status bar" +msgstr "隐藏状态栏(&H)" + +msgid "&Resizeable window" +msgstr "窗口大小可调(&R)" + +msgid "R&emember size && position" +msgstr "记住窗口大小和位置(&E)" + +msgid "Re&nderer" +msgstr "渲染器(&N)" + +msgid "&Qt (Software)" +msgstr "Qt (软件)(&Q)" + +msgid "Qt (&Hardware)" +msgstr "Qt (硬件)(&H)" + +msgid "Qt (&OpenGL)" +msgstr "Qt (OpenGL)(&O)" + +msgid "Qt (OpenGL &ES)" +msgstr "Qt (OpenGL ES)(&E)" + +msgid "Open&GL (3.0 Core)" +msgstr "OpenGL (3.0 核心)(&G)" + +msgid "&VNC" +msgstr "VNC(&V)" + +msgid "Specify dimensions..." +msgstr "指定窗口大小..." + +msgid "F&orce 4:3 display ratio" +msgstr "强制 4:3 显示比例(&O)" + +msgid "&Window scale factor" +msgstr "窗口缩放系数(&W)" + +msgid "&0.5x" +msgstr "0.5x(&0)" + +msgid "&1x" +msgstr "1x(&1)" + +msgid "1.&5x" +msgstr "1.5x(&5)" + +msgid "&2x" +msgstr "2x(&2)" + +msgid "Filter method" +msgstr "过滤方式" + +msgid "&Nearest" +msgstr "邻近(&N)" + +msgid "&Linear" +msgstr "线性(&L)" + +msgid "Hi&DPI scaling" +msgstr "HiDPI 缩放(&D)" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "全屏(&F)\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "全屏拉伸模式(&S)" + +msgid "&Full screen stretch" +msgstr "全屏拉伸(&F)" + +msgid "&4:3" +msgstr "4:3(&4)" + +msgid "&Square pixels (Keep ratio)" +msgstr "保持比例(&S)" + +msgid "&Integer scale" +msgstr "整数比例(&I)" + +msgid "E&GA/(S)VGA settings" +msgstr "EGA/(S)VGA 设置(&G)" + +msgid "&Inverted VGA monitor" +msgstr "VGA 显示器反色显示(&I)" + +msgid "VGA screen &type" +msgstr "VGA 屏幕类型(&T)" + +msgid "RGB &Color" +msgstr "RGB 彩色(&C)" + +msgid "&RGB Grayscale" +msgstr "RGB 灰度(&R)" + +msgid "&Amber monitor" +msgstr "琥珀色单色显示器(&A)" + +msgid "&Green monitor" +msgstr "绿色单色显示器(&G)" + +msgid "&White monitor" +msgstr "白色单色显示器(&W)" + +msgid "Grayscale &conversion type" +msgstr "灰度转换类型(&C)" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT601 (NTSC/PAL)(&6)" + +msgid "BT&709 (HDTV)" +msgstr "BT709 (HDTV)(&7)" + +msgid "&Average" +msgstr "平均(&A)" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "CGA/PCjr/Tandy/EGA/(S)VGA 过扫描(&G)" + +msgid "Change contrast for &monochrome display" +msgstr "更改单色显示对比度(&M)" + +msgid "&Media" +msgstr "介质(&M)" + +msgid "&Tools" +msgstr "工具(&T)" + +msgid "&Settings..." +msgstr "设置(&S)..." + +msgid "&Update status bar icons" +msgstr "更新状态栏图标(&U)" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "截图(&C)\tCtrl+F11" + +msgid "&Preferences..." +msgstr "首选项(&P)..." + +msgid "Enable &Discord integration" +msgstr "启用 Discord 集成(&D)" + +msgid "Sound &gain..." +msgstr "音量增益(&G)..." + +msgid "Begin trace\tCtrl+T" +msgstr "开始追踪\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "结束追踪\tCtrl+T" + +msgid "&Logging" +msgstr "记录日志(&L)" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "启用 BusLogic 日志\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "启用 CD-ROM 日志\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "启用软盘 (86F) 日志\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "启用软盘控制器日志\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "启用 IDE 日志\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "启用串口日志\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "启用网络日志\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "日志断点(&L)\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "创建显卡内存转储(&V)\tCtrl+F1" + +msgid "&Help" +msgstr "帮助(&H)" + +msgid "&Documentation..." +msgstr "文档(&D)..." + +msgid "&About 86Box..." +msgstr "关于 86Box(&A)..." + +msgid "" +msgstr "" + +msgid "&New image..." +msgstr "新建镜像(&N)..." + +msgid "&Existing image..." +msgstr "打开已存在的镜像(&E)..." + +msgid "Existing image (&Write-protected)..." +msgstr "打开已存在的镜像并写保护(&W)..." + +msgid "&Record" +msgstr "录制(&R)" + +msgid "&Play" +msgstr "播放(&P)" + +msgid "&Rewind to the beginning" +msgstr "倒带至起点(&R)" + +msgid "&Fast forward to the end" +msgstr "快进至终点(&F)" + +msgid "E&ject" +msgstr "弹出(&J)" + +msgid "&Image..." +msgstr "镜像(&I)..." + +msgid "E&xport to 86F..." +msgstr "导出为 86F 格式(&x)..." + +msgid "&Mute" +msgstr "静音(&M)" + +msgid "E&mpty" +msgstr "空置驱动器(&M)" + +msgid "&Reload previous image" +msgstr "载入上一个镜像(&R)" + +msgid "&Image" +msgstr "镜像(&I)" + +msgid "Target &framerate" +msgstr "目标帧率(&F)" + +msgid "&Sync with video" +msgstr "与视频同步(&S)" + +msgid "&25 fps" +msgstr "25 fps(&2)" + +msgid "&30 fps" +msgstr "30 fps(&3)" + +msgid "&50 fps" +msgstr "50 fps(&5)" + +msgid "&60 fps" +msgstr "60 fps(&6)" + +msgid "&75 fps" +msgstr "75 fps(&7)" + +msgid "&VSync" +msgstr "垂直同步(&V)" + +msgid "&Select shader..." +msgstr "选择着色器(&S)..." + +msgid "&Remove shader" +msgstr "移除着色器(&R)" + +msgid "Preferences" +msgstr "首选项" + +msgid "Sound Gain" +msgstr "音量增益" + +msgid "New Image" +msgstr "新建镜像" + +msgid "Settings" +msgstr "设置" + +msgid "Specify Main Window Dimensions" +msgstr "指定主窗口大小" + +msgid "OK" +msgstr "确定" + +msgid "Cancel" +msgstr "取消" + +msgid "Save these settings as &global defaults" +msgstr "将以上设置存储为全局默认值(&G)" + +msgid "&Default" +msgstr "默认(&D)" + +msgid "Language:" +msgstr "语言:" + +msgid "Icon set:" +msgstr "图标集:" + +msgid "Gain" +msgstr "增益" + +msgid "File name:" +msgstr "文件名:" + +msgid "Disk size:" +msgstr "磁盘大小:" + +msgid "RPM mode:" +msgstr "转速 (RPM) 模式:" + +msgid "Progress:" +msgstr "进度:" + +msgid "Width:" +msgstr "宽度:" + +msgid "Height:" +msgstr "高度:" + +msgid "Lock to this size" +msgstr "锁定此大小" + +msgid "Machine type:" +msgstr "机器类型:" + +msgid "Machine:" +msgstr "机型:" + +msgid "Configure" +msgstr "配置" + +msgid "CPU type:" +msgstr "CPU 类型:" + +msgid "Speed:" +msgstr "速度:" + +msgid "FPU:" +msgstr "浮点处理器 (FPU):" + +msgid "Wait states:" +msgstr "等待状态 (WS):" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "内存:" + +msgid "Time synchronization" +msgstr "时间同步" + +msgid "Disabled" +msgstr "禁用" + +msgid "Enabled (local time)" +msgstr "启用 (本地时间)" + +msgid "Enabled (UTC)" +msgstr "启用 (UTC)" + +msgid "Dynamic Recompiler" +msgstr "动态重编译器" + +msgid "Video:" +msgstr "显卡:" + +msgid "Voodoo Graphics" +msgstr "Voodoo Graphics" + +msgid "Mouse:" +msgstr "鼠标:" + +msgid "Joystick:" +msgstr "操纵杆:" + +msgid "Joystick 1..." +msgstr "操纵杆 1..." + +msgid "Joystick 2..." +msgstr "操纵杆 2..." + +msgid "Joystick 3..." +msgstr "操纵杆 3..." + +msgid "Joystick 4..." +msgstr "操纵杆 4..." + +msgid "Sound card:" +msgstr "声卡:" + +msgid "MIDI Out Device:" +msgstr "MIDI 输出设备:" + +msgid "MIDI In Device:" +msgstr "MIDI 输入设备:" + +msgid "Standalone MPU-401" +msgstr "独立 MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "使用单精度浮点 (FLOAT32)" + +msgid "Network type:" +msgstr "网络类型:" + +msgid "PCap device:" +msgstr "PCap 设备:" + +msgid "Network adapter:" +msgstr "网络适配器:" + +msgid "LPT1 Device:" +msgstr "LPT1 设备:" + +msgid "LPT2 Device:" +msgstr "LPT2 设备:" + +msgid "LPT3 Device:" +msgstr "LPT3 设备:" + +msgid "Serial port 1" +msgstr "串口 1" + +msgid "Serial port 2" +msgstr "串口 2" + +msgid "Serial port 3" +msgstr "串口 3" + +msgid "Serial port 4" +msgstr "串口 4" + +msgid "Parallel port 1" +msgstr "并口 1" + +msgid "Parallel port 2" +msgstr "并口 2" + +msgid "Parallel port 3" +msgstr "并口 3" + +msgid "HD Controller:" +msgstr "硬盘控制器:" + +msgid "FD Controller:" +msgstr "软盘控制器:" + +msgid "Tertiary IDE Controller" +msgstr "第三 IDE 控制器" + +msgid "Quaternary IDE Controller" +msgstr "第四 IDE 控制器" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "控制器 1:" + +msgid "Controller 2:" +msgstr "控制器 2:" + +msgid "Controller 3:" +msgstr "控制器 3:" + +msgid "Controller 4:" +msgstr "控制器 4:" + +msgid "Cassette" +msgstr "磁带" + +msgid "Hard disks:" +msgstr "硬盘:" + +msgid "&New..." +msgstr "新建(&N)..." + +msgid "&Existing..." +msgstr "已有镜像(&E)..." + +msgid "&Remove" +msgstr "移除(&R)" + +msgid "Bus:" +msgstr "总线:" + +msgid "Channel:" +msgstr "通道:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "指定(&S)..." + +msgid "Sectors:" +msgstr "扇区(S):" + +msgid "Heads:" +msgstr "磁头(H):" + +msgid "Cylinders:" +msgstr "柱面(C):" + +msgid "Size (MB):" +msgstr "大小 (MB):" + +msgid "Type:" +msgstr "类型:" + +msgid "Image Format:" +msgstr "镜像格式:" + +msgid "Block Size:" +msgstr "块大小:" + +msgid "Floppy drives:" +msgstr "软盘驱动器:" + +msgid "Turbo timings" +msgstr "加速时序" + +msgid "Check BPB" +msgstr "检查 BPB" + +msgid "CD-ROM drives:" +msgstr "光盘驱动器:" + +msgid "MO drives:" +msgstr "磁光盘驱动器:" + +msgid "ZIP drives:" +msgstr "ZIP 驱动器:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA 实时时钟:" + +msgid "ISA Memory Expansion" +msgstr "ISA 内存扩充" + +msgid "Card 1:" +msgstr "扩展卡 1:" + +msgid "Card 2:" +msgstr "扩展卡 2:" + +msgid "Card 3:" +msgstr "扩展卡 3:" + +msgid "Card 4:" +msgstr "扩展卡 4:" + +msgid "ISABugger device" +msgstr "ISABugger 设备" + +msgid "POST card" +msgstr "自检 (POST) 卡" + +msgid "Segoe UI" +msgstr "Microsoft YaHei" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "错误" + +msgid "Fatal error" +msgstr "致命错误" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "按 CTRL+ALT+PAGE DOWN 组合键返回到窗口模式。" + +msgid "Speed" +msgstr "速度" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgstr "ZIP 镜像 (*.IM? *.im? *.ZDI *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." +msgstr "86Box 找不到任何可用的 ROM 镜像。\n\n请下载ROM 包并将其解压到 ""roms"" 文件夹。" + +msgid "(empty)" +msgstr "(空)" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" +msgstr "ZIP 镜像 (*.IM? *.im? *.ZDI *.zdi);;所有文件 (*)" + +msgid "Turbo" +msgstr "加速" + +msgid "On" +msgstr "开" + +msgid "Off" +msgstr "关" + +msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" +msgstr "所有镜像 (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;基本扇区镜像 (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;表面镜像 (*.86F *.86f)" + +msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "由于 roms/machines 文件夹中缺少合适的 ROM,机型 ""%hs"" 不可用。将切换到其他可用机型。" + +msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "由于 roms/video 文件夹中缺少合适的 ROM,显卡 ""%hs"" 不可用。将切换到其他可用显卡。" + +msgid "Machine" +msgstr "机型" + +msgid "Display" +msgstr "显示" + +msgid "Input devices" +msgstr "输入设备" + +msgid "Sound" +msgstr "声音" + +msgid "Network" +msgstr "网络" + +msgid "Ports (COM & LPT)" +msgstr "端口 (COM 和 LPT)" + +msgid "Storage controllers" +msgstr "存储控制器" + +msgid "Hard disks" +msgstr "硬盘" + +msgid "Floppy & CD-ROM drives" +msgstr "软盘/光盘驱动器" + +msgid "Other removable devices" +msgstr "其他可移动设备" + +msgid "Other peripherals" +msgstr "其他外围设备" + +msgid "Surface images (*.86F *.86f)" +msgstr "表面镜像 (*.86F *.86f)" + +msgid "Click to capture mouse" +msgstr "单击窗口捕捉鼠标" + +msgid "Press F8+F12 to release mouse" +msgstr "按 F8+F12 释放鼠标" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "按 F8+F12 或鼠标中键释放鼠标" + +msgid "Unable to initialize FluidSynth" +msgstr "无法初始化 FluidSynth" + +msgid "Bus" +msgstr "总线" + +msgid "File" +msgstr "文件" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "无法初始化视频渲染器。" + +msgid "Default" +msgstr "默认" + +msgid "%i Wait state(s)" +msgstr "%i 等待状态 (WS)" + +msgid "Type" +msgstr "类型" + +msgid "Failed to set up PCap" +msgstr "设置 PCap 失败" + +msgid "No PCap devices found" +msgstr "未找到 PCap 设备" + +msgid "Invalid PCap device" +msgstr "无效 PCap 设备" + +msgid "Standard 2-button joystick(s)" +msgstr "标准 2 键操纵杆" + +msgid "Standard 4-button joystick" +msgstr "标准 4 键操纵杆" + +msgid "Standard 6-button joystick" +msgstr "标准 6 键操纵杆" + +msgid "Standard 8-button joystick" +msgstr "标准 8 键操纵杆" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "无" + +msgid "Unable to load keyboard accelerators." +msgstr "无法加载键盘加速器。" + +msgid "Unable to register raw input." +msgstr "无法注册原始输入。" + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "软盘 %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgstr "所有镜像 (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;高级扇区镜像 (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;基本扇区镜像 (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux 镜像 (*.FDI *.fdi);;表面镜像 (*.86F *.86f *.MFM *.mfm);;所有文件 (*)" + +msgid "Unable to initialize FreeType" +msgstr "无法初始化 FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "无法初始化 SDL,需要 SDL2.dll" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "确定要硬重置模拟器吗?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "确定要退出 86Box 吗?" + +msgid "Unable to initialize Ghostscript" +msgstr "无法初始化 Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "磁光盘 %i (%ls): %ls" + +msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgstr "磁光盘镜像 (*.IM? *.im? *.MDI *.mdi);;所有文件 (*)" + +msgid "Welcome to 86Box!" +msgstr "欢迎使用 86Box!" + +msgid "Internal controller" +msgstr "内部控制器" + +msgid "Exit" +msgstr "退出" + +msgid "No ROMs found" +msgstr "找不到 ROM" + +msgid "Do you want to save the settings?" +msgstr "要保存设置吗?" + +msgid "This will hard reset the emulated machine." +msgstr "此操作将硬重置模拟器。" + +msgid "Save" +msgstr "保存" + +msgid "About 86Box" +msgstr "关于 86Box" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "一个旧式计算机模拟器\n\n作者: Sarah Walker、Miran Grca、Fred N. van Kempen (waltje)、SA1988、Tiseno100、reenigne、leilei、JohnElliott、greatpsycho 等人。\n\n本软件依据 GNU 通用公共许可证第二版或更新版本发布。详情见 LICENSE 文件。" + +msgid "Hardware not available" +msgstr "硬件不可用" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "请确认 libpcap 已安装且使用兼容 libpcap 的网络连接。" + +msgid "Invalid configuration" +msgstr "无效配置" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr "ESC/P 打印机模拟需要" + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " 是将 PostScript 文件转换为 PDF 所需要的库。\n\n使用通用 PostScript 打印机打印的文档将被保存为 PostScript (.ps) 文件。" + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr "FluidSynth MIDI 输出需要" + +msgid "Entering fullscreen mode" +msgstr "正在进入全屏模式" + +msgid "Don't show this message again" +msgstr "不要再显示此消息" + +msgid "Don't exit" +msgstr "不退出" + +msgid "Reset" +msgstr "重置" + +msgid "Don't reset" +msgstr "不重置" + +msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgstr "光盘镜像 (*.ISO *.iso *.CUE *.cue);;所有文件 (*)" + +msgid "%hs Device Configuration" +msgstr "%hs 设备配置" + +msgid "Monitor in sleep mode" +msgstr "显示器处在睡眠状态" + +msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" +msgstr "OpenGL 着色器 (*.GLSL *.glsl);;所有文件 (*)" + +msgid "OpenGL options" +msgstr "OpenGL 选项" + +msgid "You are loading an unsupported configuration" +msgstr "正在载入一个不受支持的配置" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "此模拟计算机禁用了基于选定计算机的 CPU 类型过滤。\n\n能够选中与所选机器本不兼容的 CPU,但是可能会遇到与机器 BIOS 或其他软件不兼容的问题。\n\n启用此设置不受官方支持,并且提交的任何错误报告可能会视为无效而关闭。" + +msgid "Continue" +msgstr "继续" + +msgid "Cassette: %s" +msgstr "磁带: %s" + +msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" +msgstr "磁带镜像 (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;所有文件 (*)" + +msgid "Cartridge %i: %ls" +msgstr "卡带 %i: %ls" + +msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" +msgstr "卡带镜像 (*.A *.a *.B *.b *.JRC *.jrc);;所有文件 (*)" + +msgid "Error initializing renderer" +msgstr "初始化渲染器时出错" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "无法初始化 OpenGL (3.0 核心) 渲染器。请使用其他渲染器。" + +msgid "Hard disk (%s)" +msgstr "硬盘 (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "不存在 MFM/RLL 或 ESDI CD-ROM 驱动器" + +msgid "Custom..." +msgstr "自定义..." + +msgid "Custom (large)..." +msgstr "自定义 (大容量)..." + +msgid "Add New Hard Disk" +msgstr "添加新硬盘" + +msgid "Add Existing Hard Disk" +msgstr "添加已存在的硬盘" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "HDI 磁盘镜像不能超过 4 GB。" + +msgid "Disk images cannot be larger than 127 GB." +msgstr "磁盘镜像不能超过 127 GB。" + +msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" +msgstr "硬盘镜像 (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;所有文件 (*)" + +msgid "Unable to read file" +msgstr "无法读取文件" + +msgid "Unable to write file" +msgstr "无法写入文件" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "不支持非 512 字节扇区大小的 HDI 或 HDX 镜像。" + +msgid "USB is not yet supported" +msgstr "尚未支持 USB" + +msgid "Disk image file already exists" +msgstr "磁盘镜像文件已存在" + +msgid "Please specify a valid file name." +msgstr "请指定有效的文件名。" + +msgid "Disk image created" +msgstr "已创建磁盘镜像" + +msgid "Make sure the file exists and is readable." +msgstr "请确定此文件已存在并可读取。" + +msgid "Make sure the file is being saved to a writable directory." +msgstr "请确定此文件保存在可写目录中。" + +msgid "Disk image too large" +msgstr "磁盘镜像太大" + +msgid "Remember to partition and format the newly-created drive." +msgstr "请记得为新创建的镜像分区并格式化。" + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "选定的文件将被覆盖。确定继续使用此文件吗?" + +msgid "Unsupported disk image" +msgstr "不支持的磁盘镜像" + +msgid "Overwrite" +msgstr "覆盖" + +msgid "Don't overwrite" +msgstr "不覆盖" + +msgid "Raw image (.img)" +msgstr "原始镜像 (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDI 镜像 (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDX 镜像 (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "固定大小 VHD (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "动态大小 VHD (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "差分 VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "大块 (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "小块 (512 KB)" + +msgid "VHD files (*.VHD *.vhd);;All files (*)" +msgstr "VHD 文件 (*.VHD *.vhd);;所有文件 (*)" + +msgid "Select the parent VHD" +msgstr "选择父 VHD 文件" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "父映像可能在创建差异镜像后被修改。\n\n如果镜像文件被移动或复制,或创建此磁盘的程序中存在错误,也可能发生这种情况。\n\n是否需要修复时间戳?" + +msgid "Parent and child disk timestamps do not match" +msgstr "父盘与子盘的时间戳不匹配" + +msgid "Could not fix VHD timestamp." +msgstr "无法修复 VHD 时间戳。" + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "光盘 %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (1024 簇)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (2048 簇)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5"" 128Mb M.O. (ISO 10090)" +msgstr "3.5 英寸 128Mb 磁光盘 (ISO 10090)" + +msgid "3.5"" 230Mb M.O. (ISO 13963)" +msgstr "3.5 英寸 230Mb 磁光盘 (ISO 13963)" + +msgid "3.5"" 540Mb M.O. (ISO 15498)" +msgstr "3.5 英寸 540Mb 磁光盘 (ISO 15498)" + +msgid "3.5"" 640Mb M.O. (ISO 15498)" +msgstr "3.5 英寸 640Mb 磁光盘 (ISO 15498)" + +msgid "3.5"" 1.3Gb M.O. (GigaMO)" +msgstr "3.5 英寸 1.3Gb 磁光盘 (GigaMO)" + +msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5 英寸 2.3Gb 磁光盘 (GigaMO 2)" + +msgid "5.25"" 600Mb M.O." +msgstr "5.25 英寸 600Mb 磁光盘" + +msgid "5.25"" 650Mb M.O." +msgstr "5.25 英寸 650Mb 磁光盘" + +msgid "5.25"" 1Gb M.O." +msgstr "5.25 英寸 1Gb 磁光盘" + +msgid "5.25"" 1.3Gb M.O." +msgstr "5.25 英寸 1.3Gb 磁光盘" + +msgid "Perfect RPM" +msgstr "标准转速 (RPM)" + +msgid "1%% below perfect RPM" +msgstr "低于标准转速的 1%%" + +msgid "1.5%% below perfect RPM" +msgstr "低于标准转速的 1.5%%" + +msgid "2%% below perfect RPM" +msgstr "低于标准转速的 2%%" + +msgid "(System Default)" +msgstr "(系统默认)" + diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 822b35436..72d96a2fd 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -97,6 +97,16 @@ main_thread_fn() is_quit = 1; } +class CustomTranslator : public QTranslator +{ +protected: + QString translate(const char *context, const char *sourceText, + const char *disambiguation = nullptr, int n = -1) const override + { + return QTranslator::translate("", sourceText, disambiguation, n); + } +}; + int main(int argc, char* argv[]) { QApplication app(argc, argv); Q_INIT_RESOURCE(qt_resources); @@ -105,13 +115,16 @@ int main(int argc, char* argv[]) { fmt.setSwapInterval(0); QSurfaceFormat::setDefaultFormat(fmt); app.setStyle(new StyleOverride()); + QDirIterator it(":", QDirIterator::Subdirectories); + while (it.hasNext()) { + qDebug() << it.next() << "\n"; + } - QTranslator translator; - if (translator.load(QLocale(), QLatin1String("86box"), QLatin1String("_"), QLatin1String(":/"))) + CustomTranslator translator; + qDebug() << QLocale::system().name() << "\n"; + if (translator.load(QLatin1String("86box_"), QLatin1String(":/"), QString(), "de_DE.qm")) { - translator.load(QLocale(), QLatin1String("qt"), QLatin1String("_"), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); - translator.load(QLocale(), QLatin1String("qt_help"), QLatin1String("_"), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); - translator.load(QLocale(), QLatin1String("qtbase"), QLatin1String("_"), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + qDebug() << "Translations loaded.\n"; QCoreApplication::installTranslator(&translator); } #ifdef __APPLE__ diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index f56576714..9bd73d729 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -47,7 +47,7 @@ 0 0 724 - 22 + 23 @@ -488,7 +488,7 @@ - About 86Box... + &About 86Box... QAction::AboutRole diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index 70fbc1517..07795708c 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -473,9 +473,13 @@ size_t c16stombs(char dst[], const uint16_t src[], int len) #ifdef _WIN32 #define LIB_NAME_FLUIDSYNTH "libfluidsynth.dll" +#define LIB_NAME_GS "gsdll32.dll" +#define LIB_NAME_FREETYPE "freetype.dll" #define MOUSE_CAPTURE_KEYSEQ "F8+F12" #else #define LIB_NAME_FLUIDSYNTH "libfluidsynth" +#define LIB_NAME_GS "libgs" +#define LIB_NAME_FREETYPE "libfreetype" #define MOUSE_CAPTURE_KEYSEQ "CTRL-END" #endif #ifdef Q_OS_MACOS @@ -490,25 +494,44 @@ static std::map translatedstrings; static void reload_strings() { translatedstrings.clear(); - translatedstrings[IDS_2077] = QObject::tr("Click to capture mouse.").toStdWString(); - translatedstrings[IDS_2078] = QObject::tr("Press %1 to release mouse").arg(MOUSE_CAPTURE_KEYSEQ).toStdWString(); - translatedstrings[IDS_2079] = QObject::tr("Press %1 or middle button to release mouse").arg(MOUSE_CAPTURE_KEYSEQ).toStdWString(); - translatedstrings[IDS_2080] = QObject::tr("Failed to initialize FluidSynth").toStdWString(); - translatedstrings[IDS_4099] = QObject::tr("MFM/RLL or ESDI CD-ROM drives never existed").toStdWString(); - translatedstrings[IDS_2093] = QObject::tr("Failed to set up PCap").toStdWString(); - translatedstrings[IDS_2094] = QObject::tr("No PCap devices found").toStdWString(); - translatedstrings[IDS_2110] = QObject::tr("Unable to initialize FreeType").toStdWString(); - translatedstrings[IDS_2111] = QObject::tr("Unable to initialize SDL, libsdl2 is required").toStdWString(); - translatedstrings[IDS_2131] = QObject::tr("libfreetype is required for ESC/P printer emulation.").toStdWString(); - translatedstrings[IDS_2132] = QObject::tr("libgs is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files.").toStdWString(); - translatedstrings[IDS_2133] = QObject::tr("%1 is required for FluidSynth MIDI output.").arg(LIB_NAME_FLUIDSYNTH).toStdWString(); - translatedstrings[IDS_2129] = QObject::tr("Make sure libpcap is installed and that you are on a libpcap-compatible network connection.").toStdWString(); - translatedstrings[IDS_2114] = QObject::tr("Unable to initialize Ghostscript").toStdWString(); - translatedstrings[IDS_2063] = QObject::tr("Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine.").toStdWString(); - translatedstrings[IDS_2064] = QObject::tr("Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card.").toStdWString(); - translatedstrings[IDS_2128] = QObject::tr("Hardware not available").toStdWString(); - translatedstrings[IDS_2120] = QObject::tr("No ROMs found.").toStdWString(); - translatedstrings[IDS_2056] = QObject::tr("86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"%1\" directory.").arg(ROMDIR).toStdWString(); + translatedstrings[IDS_2077] = QCoreApplication::translate("", "Click to capture mouse").toStdWString(); + translatedstrings[IDS_2078] = QCoreApplication::translate("", "Press F8+F12 to release mouse").replace("F8+F12", MOUSE_CAPTURE_KEYSEQ).toStdWString(); + translatedstrings[IDS_2079] = QCoreApplication::translate("", "Press F8+F12 or middle button to release mouse").replace("F8+F12", MOUSE_CAPTURE_KEYSEQ).toStdWString(); + translatedstrings[IDS_2080] = QCoreApplication::translate("", "Failed to initialize FluidSynth").toStdWString(); + translatedstrings[IDS_4099] = QCoreApplication::translate("", "MFM/RLL or ESDI CD-ROM drives never existed").toStdWString(); + translatedstrings[IDS_2093] = QCoreApplication::translate("", "Failed to set up PCap").toStdWString(); + translatedstrings[IDS_2094] = QCoreApplication::translate("", "No PCap devices found").toStdWString(); + translatedstrings[IDS_2110] = QCoreApplication::translate("", "Unable to initialize FreeType").toStdWString(); + translatedstrings[IDS_2111] = QCoreApplication::translate("", "Unable to initialize SDL, libsdl2 is required").toStdWString(); + translatedstrings[IDS_2129] = QCoreApplication::translate("", "Make sure libpcap is installed and that you are on a libpcap-compatible network connection.").toStdWString(); + translatedstrings[IDS_2114] = QCoreApplication::translate("", "Unable to initialize Ghostscript").toStdWString(); + translatedstrings[IDS_2063] = QCoreApplication::translate("", "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine.").toStdWString(); + translatedstrings[IDS_2064] = QCoreApplication::translate("", "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card.").toStdWString(); + translatedstrings[IDS_2128] = QCoreApplication::translate("", "Hardware not available").toStdWString(); + translatedstrings[IDS_2120] = QCoreApplication::translate("", "No ROMs found").toStdWString(); + translatedstrings[IDS_2056] = QCoreApplication::translate("", "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the roms directory.").replace("roms", "\"" ROMDIR "\"").toStdWString(); + + auto flsynthstr = QCoreApplication::translate("", " is required for FluidSynth MIDI output."); + if (flsynthstr.contains("libfluidsynth")) + { + flsynthstr.replace("libfluidsynth", LIB_NAME_FLUIDSYNTH); + } + else flsynthstr.prepend(LIB_NAME_FLUIDSYNTH); + translatedstrings[IDS_2133] = flsynthstr.toStdWString(); + auto gssynthstr = QCoreApplication::translate("", " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files."); + if (gssynthstr.contains("libgs")) + { + gssynthstr.replace("libgs", LIB_NAME_GS); + } + else gssynthstr.prepend(LIB_NAME_GS); + translatedstrings[IDS_2132] = flsynthstr.toStdWString(); + auto ftsynthstr = QCoreApplication::translate("", " is required for ESC/P printer emulation."); + if (ftsynthstr.contains("libfreetype")) + { + ftsynthstr.replace("libfreetype", LIB_NAME_FREETYPE); + } + else ftsynthstr.prepend(LIB_NAME_FREETYPE); + translatedstrings[IDS_2131] = ftsynthstr.toStdWString(); } wchar_t* plat_get_string(int i) diff --git a/src/qt/qt_translations.qrc b/src/qt/qt_translations.qrc index 4a971471c..872a6b739 100644 --- a/src/qt/qt_translations.qrc +++ b/src/qt/qt_translations.qrc @@ -1,21 +1,20 @@ - 86box_de.qm - 86box_en-GB.qm - 86box_en.qm - 86box_es.qm - 86box_fi.qm - 86box_fr.qm - 86box_hr.qm - 86box_hu.qm - 86box_it.qm - 86box_ja.qm - 86box_ko.qm - 86box_pt-BR.qm - 86box_pt-PT.qm - 86box_ru.qm - 86box_sl.qm - 86box_tr.qm - 86box_zh.qm + 86box_de_DE.qm + 86box_en_GB.qm + 86box_es_ES.qm + 86box_fi_FI.qm + 86box_fr_FR.qm + 86box_hr_HR.qm + 86box_hu_HU.qm + 86box_it_IT.qm + 86box_ja_JP.qm + 86box_ko_KR.qm + 86box_pt_BR.qm + 86box_pt_PT.qm + 86box_ru_RU.qm + 86box_sl_SI.qm + 86box_tr_TR.qm + 86box_zh_CN.qm From 9659d1e16bad984e96ab66e896012312903439ba Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 4 Jan 2022 15:06:21 +0600 Subject: [PATCH 168/278] Fix ROM message string to be identical to Win32 --- src/qt/qt_platform.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index 07795708c..1b03284c1 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -509,7 +509,7 @@ static void reload_strings() translatedstrings[IDS_2064] = QCoreApplication::translate("", "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card.").toStdWString(); translatedstrings[IDS_2128] = QCoreApplication::translate("", "Hardware not available").toStdWString(); translatedstrings[IDS_2120] = QCoreApplication::translate("", "No ROMs found").toStdWString(); - translatedstrings[IDS_2056] = QCoreApplication::translate("", "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the roms directory.").replace("roms", "\"" ROMDIR "\"").toStdWString(); + translatedstrings[IDS_2056] = QCoreApplication::translate("", "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the roms directory.").replace("roms", "\"" ROMDIR "\"").toStdWString(); auto flsynthstr = QCoreApplication::translate("", " is required for FluidSynth MIDI output."); if (flsynthstr.contains("libfluidsynth")) From 2f0f947596891874e551ccfef07cf1b0a9b8aef6 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 4 Jan 2022 16:57:07 +0600 Subject: [PATCH 169/278] More string changes to fit in line with Win32 more --- src/qt/languages/{cs_CZ.po => cs-CZ.po} | 12 +++++----- src/qt/languages/{de_DE.po => de-DE.po} | 12 +++++----- src/qt/languages/{en_GB.po => en-GB.po} | 12 +++++----- src/qt/languages/{es_ES.po => es-ES.po} | 12 +++++----- src/qt/languages/{fi_FI.po => fi-FI.po} | 12 +++++----- src/qt/languages/{fr_FR.po => fr-FR.po} | 12 +++++----- src/qt/languages/{hr_HR.po => hr-HR.po} | 12 +++++----- src/qt/languages/{hu_HU.po => hu-HU.po} | 16 ++++++------- src/qt/languages/{it_IT.po => it-IT.po} | 12 +++++----- src/qt/languages/{ja_JP.po => ja-JP.po} | 15 +++++------- src/qt/languages/{ko_KR.po => ko-KR.po} | 15 +++++------- src/qt/languages/{pt_BR.po => pt-BR.po} | 12 +++++----- src/qt/languages/{pt_PT.po => pt-PT.po} | 12 +++++----- src/qt/languages/{ru_RU.po => ru-RU.po} | 12 +++++----- src/qt/languages/{sl_SI.po => sl-SI.po} | 12 +++++----- src/qt/languages/{tr_TR.po => tr-TR.po} | 12 +++++----- src/qt/languages/{zh_CN.po => zh-CN.po} | 15 +++++------- src/qt/qt_main.cpp | 10 ++++++-- src/qt/qt_mainwindow.ui | 19 ++++++++------- src/qt/qt_translations.qrc | 32 ++++++++++++------------- 20 files changed, 139 insertions(+), 139 deletions(-) rename src/qt/languages/{cs_CZ.po => cs-CZ.po} (95%) rename src/qt/languages/{de_DE.po => de-DE.po} (95%) rename src/qt/languages/{en_GB.po => en-GB.po} (95%) rename src/qt/languages/{es_ES.po => es-ES.po} (95%) rename src/qt/languages/{fi_FI.po => fi-FI.po} (95%) rename src/qt/languages/{fr_FR.po => fr-FR.po} (95%) rename src/qt/languages/{hr_HR.po => hr-HR.po} (95%) rename src/qt/languages/{hu_HU.po => hu-HU.po} (94%) rename src/qt/languages/{it_IT.po => it-IT.po} (95%) rename src/qt/languages/{ja_JP.po => ja-JP.po} (95%) rename src/qt/languages/{ko_KR.po => ko-KR.po} (95%) rename src/qt/languages/{pt_BR.po => pt-BR.po} (95%) rename src/qt/languages/{pt_PT.po => pt-PT.po} (95%) rename src/qt/languages/{ru_RU.po => ru-RU.po} (96%) rename src/qt/languages/{sl_SI.po => sl-SI.po} (95%) rename src/qt/languages/{tr_TR.po => tr-TR.po} (95%) rename src/qt/languages/{zh_CN.po => zh-CN.po} (94%) diff --git a/src/qt/languages/cs_CZ.po b/src/qt/languages/cs-CZ.po similarity index 95% rename from src/qt/languages/cs_CZ.po rename to src/qt/languages/cs-CZ.po index 950bdec34..743965eda 100644 --- a/src/qt/languages/cs_CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -40,14 +40,14 @@ msgstr "&Pamatovat velikost a pozici" msgid "Re&nderer" msgstr "&Renderer" -msgid "&Qt (Software)" -msgstr "&Qt (Software)" +msgid "&SDL (Software)" +msgstr "&SDL (Software)" -msgid "Qt (&Hardware)" -msgstr "Qt (&Hardware)" +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardware)" -msgid "Qt (&OpenGL)" -msgstr "Qt (&OpenGL)" +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" msgid "Open&GL (3.0 Core)" msgstr "Open&GL (3.0 Core)" diff --git a/src/qt/languages/de_DE.po b/src/qt/languages/de-DE.po similarity index 95% rename from src/qt/languages/de_DE.po rename to src/qt/languages/de-DE.po index 8a47369b9..0cf20fad1 100644 --- a/src/qt/languages/de_DE.po +++ b/src/qt/languages/de-DE.po @@ -40,14 +40,14 @@ msgstr "&Größe && Position merken" msgid "Re&nderer" msgstr "Re&nderer" -msgid "&Qt (Software)" -msgstr "&Qt (Software)" +msgid "&SDL (Software)" +msgstr "&SDL (Software)" -msgid "Qt (&Hardware)" -msgstr "Qt (&Hardware)" +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardware)" -msgid "Qt (&OpenGL)" -msgstr "Qt (&OpenGL)" +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" msgid "Open&GL (3.0 Core)" msgstr "Open&GL (3.0-Kern)" diff --git a/src/qt/languages/en_GB.po b/src/qt/languages/en-GB.po similarity index 95% rename from src/qt/languages/en_GB.po rename to src/qt/languages/en-GB.po index 35f55f71a..fce16c388 100644 --- a/src/qt/languages/en_GB.po +++ b/src/qt/languages/en-GB.po @@ -40,14 +40,14 @@ msgstr "R&emember size && position" msgid "Re&nderer" msgstr "Re&nderer" -msgid "&Qt (Software)" -msgstr "&Qt (Software)" +msgid "&SDL (Software)" +msgstr "&SDL (Software)" -msgid "Qt (&Hardware)" -msgstr "Qt (&Hardware)" +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardware)" -msgid "Qt (&OpenGL)" -msgstr "Qt (&OpenGL)" +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" msgid "Open&GL (3.0 Core)" msgstr "Open&GL (3.0 Core)" diff --git a/src/qt/languages/es_ES.po b/src/qt/languages/es-ES.po similarity index 95% rename from src/qt/languages/es_ES.po rename to src/qt/languages/es-ES.po index 4f3cc2c99..d7f7dd6ad 100644 --- a/src/qt/languages/es_ES.po +++ b/src/qt/languages/es-ES.po @@ -40,14 +40,14 @@ msgstr "&Recordar tamaño y posición" msgid "Re&nderer" msgstr "Re&nderizador" -msgid "&Qt (Software)" -msgstr "&Qt (Software)" +msgid "&SDL (Software)" +msgstr "&SDL (Software)" -msgid "Qt (&Hardware)" -msgstr "Qt (&Hardware)" +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardware)" -msgid "Qt (&OpenGL)" -msgstr "Qt (&OpenGL)" +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" msgid "Open&GL (3.0 Core)" msgstr "Open&GL (3.0 Core)" diff --git a/src/qt/languages/fi_FI.po b/src/qt/languages/fi-FI.po similarity index 95% rename from src/qt/languages/fi_FI.po rename to src/qt/languages/fi-FI.po index 9617ce8a2..da2a5a25b 100644 --- a/src/qt/languages/fi_FI.po +++ b/src/qt/languages/fi-FI.po @@ -40,14 +40,14 @@ msgstr "&Muista koko ja sijainti" msgid "Re&nderer" msgstr "&Renderöijä" -msgid "&Qt (Software)" -msgstr "&Qt (ohjelmistopohjainen)" +msgid "&SDL (Software)" +msgstr "&SDL (ohjelmistopohjainen)" -msgid "Qt (&Hardware)" -msgstr "Qt (&laitteistokiihdytetty)" +msgid "SDL (&Hardware)" +msgstr "SDL (&laitteistokiihdytetty)" -msgid "Qt (&OpenGL)" -msgstr "Qt (&OpenGL)" +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" msgid "Open&GL (3.0 Core)" msgstr "Open&GL (3.0 Core)" diff --git a/src/qt/languages/fr_FR.po b/src/qt/languages/fr-FR.po similarity index 95% rename from src/qt/languages/fr_FR.po rename to src/qt/languages/fr-FR.po index 2eb53967f..037035b79 100644 --- a/src/qt/languages/fr_FR.po +++ b/src/qt/languages/fr-FR.po @@ -40,14 +40,14 @@ msgstr "S&auvegarder taille && position" msgid "Re&nderer" msgstr "Moteur de &rendu vidéo" -msgid "&Qt (Software)" -msgstr "&Qt (Logiciel)" +msgid "&SDL (Software)" +msgstr "&SDL (Logiciel)" -msgid "Qt (&Hardware)" -msgstr "Qt (&Materiel)" +msgid "SDL (&Hardware)" +msgstr "SDL (&Materiel)" -msgid "Qt (&OpenGL)" -msgstr "Qt (&OpenGL)" +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" msgid "Open&GL (3.0 Core)" msgstr "Open&GL (3.0 Core)" diff --git a/src/qt/languages/hr_HR.po b/src/qt/languages/hr-HR.po similarity index 95% rename from src/qt/languages/hr_HR.po rename to src/qt/languages/hr-HR.po index d06dba88d..a1ee9adf8 100644 --- a/src/qt/languages/hr_HR.po +++ b/src/qt/languages/hr-HR.po @@ -40,14 +40,14 @@ msgstr "&Zapamtite veličinu i položaj" msgid "Re&nderer" msgstr "&Renderer" -msgid "&Qt (Software)" -msgstr "&Qt (Softver)" +msgid "&SDL (Software)" +msgstr "&SDL (Softver)" -msgid "Qt (&Hardware)" -msgstr "Qt (&Hardver)" +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardver)" -msgid "Qt (&OpenGL)" -msgstr "Qt (&OpenGL)" +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" msgid "Open&GL (3.0 Core)" msgstr "Open&GL (3.0 jezgra)" diff --git a/src/qt/languages/hu_HU.po b/src/qt/languages/hu-HU.po similarity index 94% rename from src/qt/languages/hu_HU.po rename to src/qt/languages/hu-HU.po index 933c342da..fb59afffd 100644 --- a/src/qt/languages/hu_HU.po +++ b/src/qt/languages/hu-HU.po @@ -40,14 +40,14 @@ msgstr "Méret és pozíció &megjegyzése" msgid "Re&nderer" msgstr "&Megjelenítő" -msgid "&Qt (Software)" -msgstr "&Qt (Szoftveres)" +msgid "&SDL (Software)" +msgstr "&SDL (Szoftveres)" -msgid "Qt (&Hardware)" -msgstr "Qt (&Hardveres)" +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardveres)" -msgid "Qt (&OpenGL)" -msgstr "Qt (&OpenGL)" +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" msgid "Open&GL (3.0 Core)" msgstr "Open&GL (3.0 Core)" @@ -926,10 +926,10 @@ msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" msgstr "ROM-kazetta képek (*.A *.a *.B *.b *.JRC *.jrc);;Minden fájl (*)" msgid "Error initializing renderer" -msgstr "Error initializing renderer" +msgstr "Hiba történt a renderelő inicializálásakor" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "Az OpenGL (3.0 Core) megjelenítő-motort nem sikerült inicializálni. Kérem használjon másik renderelőt." msgid "Hard disk (%s)" msgstr "Merevlemez (%s)" diff --git a/src/qt/languages/it_IT.po b/src/qt/languages/it-IT.po similarity index 95% rename from src/qt/languages/it_IT.po rename to src/qt/languages/it-IT.po index cd0ceaad7..c1aa8c763 100644 --- a/src/qt/languages/it_IT.po +++ b/src/qt/languages/it-IT.po @@ -40,14 +40,14 @@ msgstr "R&icorda dimensioni e posizione" msgid "Re&nderer" msgstr "Re&nderer" -msgid "&Qt (Software)" -msgstr "&Qt (Software)" +msgid "&SDL (Software)" +msgstr "&SDL (Software)" -msgid "Qt (&Hardware)" -msgstr "Qt (&Hardware)" +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardware)" -msgid "Qt (&OpenGL)" -msgstr "Qt (&OpenGL)" +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" msgid "Open&GL (3.0 Core)" msgstr "Open&GL (3.0 Core)" diff --git a/src/qt/languages/ja_JP.po b/src/qt/languages/ja-JP.po similarity index 95% rename from src/qt/languages/ja_JP.po rename to src/qt/languages/ja-JP.po index c954cef32..49e4e5803 100644 --- a/src/qt/languages/ja_JP.po +++ b/src/qt/languages/ja-JP.po @@ -40,17 +40,14 @@ msgstr "ウィンドウのサイズと位置を記憶する(&E)" msgid "Re&nderer" msgstr "レンダラー(&N)" -msgid "&Qt (Software)" -msgstr "Qt (ソフトウェア)(&Q)" +msgid "&SDL (Software)" +msgstr "SDL (ソフトウェア)(&S)" -msgid "Qt (&Hardware)" -msgstr "Qt (ハードウェア)(&H)" +msgid "SDL (&Hardware)" +msgstr "SDL (ハードウェア)(&H)" -msgid "Qt (&OpenGL)" -msgstr "Qt (OpenGL)(&O)" - -msgid "Qt (OpenGL &ES)" -msgstr "Qt (OpenGL ES)(&E)" +msgid "SDL (&OpenGL)" +msgstr "SDL (OpenGL)(&O)" msgid "Open&GL (3.0 Core)" msgstr "OpenGL (3.0コア)(&G)" diff --git a/src/qt/languages/ko_KR.po b/src/qt/languages/ko-KR.po similarity index 95% rename from src/qt/languages/ko_KR.po rename to src/qt/languages/ko-KR.po index 9dc005c03..3912445da 100644 --- a/src/qt/languages/ko_KR.po +++ b/src/qt/languages/ko-KR.po @@ -40,17 +40,14 @@ msgstr "창 크기와 위치를 기억하기(&E)" msgid "Re&nderer" msgstr "렌더러(&N)" -msgid "&Qt (Software)" -msgstr "Qt (소프트웨어)(&Q)" +msgid "&SDL (Software)" +msgstr "SDL (소프트웨어)(&S)" -msgid "Qt (&Hardware)" -msgstr "Qt (하드웨어)(&H)" +msgid "SDL (&Hardware)" +msgstr "SDL (하드웨어)(&H)" -msgid "Qt (&OpenGL)" -msgstr "Qt (OpenGL)(&O)" - -msgid "Qt (OpenGL &ES)" -msgstr "Qt (OpenGL ES)(&E)" +msgid "SDL (&OpenGL)" +msgstr "SDL (OpenGL)(&O)" msgid "Open&GL (3.0 Core)" msgstr "OpenGL (3.0 코어)(&G)" diff --git a/src/qt/languages/pt_BR.po b/src/qt/languages/pt-BR.po similarity index 95% rename from src/qt/languages/pt_BR.po rename to src/qt/languages/pt-BR.po index 004d91546..b69e33c09 100644 --- a/src/qt/languages/pt_BR.po +++ b/src/qt/languages/pt-BR.po @@ -40,14 +40,14 @@ msgstr "&Lembrar tamanho e posição" msgid "Re&nderer" msgstr "&Renderizador" -msgid "&Qt (Software)" -msgstr "&Qt (Software)" +msgid "&SDL (Software)" +msgstr "&SDL (Software)" -msgid "Qt (&Hardware)" -msgstr "Qt (&Hardware)" +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardware)" -msgid "Qt (&OpenGL)" -msgstr "Qt (&OpenGL)" +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" msgid "Open&GL (3.0 Core)" msgstr "Open&GL (Núcleo 3.0)" diff --git a/src/qt/languages/pt_PT.po b/src/qt/languages/pt-PT.po similarity index 95% rename from src/qt/languages/pt_PT.po rename to src/qt/languages/pt-PT.po index 140c0c0c7..3b4981066 100644 --- a/src/qt/languages/pt_PT.po +++ b/src/qt/languages/pt-PT.po @@ -40,14 +40,14 @@ msgstr "&Lembrar tamanho e posição" msgid "Re&nderer" msgstr "&Renderizador" -msgid "&Qt (Software)" -msgstr "&Qt (Software)" +msgid "&SDL (Software)" +msgstr "&SDL (Software)" -msgid "Qt (&Hardware)" -msgstr "Qt (&Hardware)" +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardware)" -msgid "Qt (&OpenGL)" -msgstr "Qt (&OpenGL)" +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" msgid "Open&GL (3.0 Core)" msgstr "Open&GL (Núcleo 3.0)" diff --git a/src/qt/languages/ru_RU.po b/src/qt/languages/ru-RU.po similarity index 96% rename from src/qt/languages/ru_RU.po rename to src/qt/languages/ru-RU.po index 4326de96a..b6ed0d130 100644 --- a/src/qt/languages/ru_RU.po +++ b/src/qt/languages/ru-RU.po @@ -40,14 +40,14 @@ msgstr "&Запомнить размер и положение" msgid "Re&nderer" msgstr "&Рендерер" -msgid "&Qt (Software)" -msgstr "&Qt (Software)" +msgid "&SDL (Software)" +msgstr "&SDL (Software)" -msgid "Qt (&Hardware)" -msgstr "Qt (&Hardware)" +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardware)" -msgid "Qt (&OpenGL)" -msgstr "Qt (&OpenGL)" +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" msgid "Open&GL (3.0 Core)" msgstr "Open&GL (3.0)" diff --git a/src/qt/languages/sl_SI.po b/src/qt/languages/sl-SI.po similarity index 95% rename from src/qt/languages/sl_SI.po rename to src/qt/languages/sl-SI.po index 3282b6f33..a3ea06a85 100644 --- a/src/qt/languages/sl_SI.po +++ b/src/qt/languages/sl-SI.po @@ -40,14 +40,14 @@ msgstr "&Zapomni si velikost in položaj" msgid "Re&nderer" msgstr "&Upodabljanje" -msgid "&Qt (Software)" -msgstr "&Qt (programsko)" +msgid "&SDL (Software)" +msgstr "&SDL (programsko)" -msgid "Qt (&Hardware)" -msgstr "Qt (s&trojno)" +msgid "SDL (&Hardware)" +msgstr "SDL (s&trojno)" -msgid "Qt (&OpenGL)" -msgstr "Qt (&OpenGL)" +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" msgid "Open&GL (3.0 Core)" msgstr "Open&GL (Jedro 3.0)" diff --git a/src/qt/languages/tr_TR.po b/src/qt/languages/tr-TR.po similarity index 95% rename from src/qt/languages/tr_TR.po rename to src/qt/languages/tr-TR.po index 1a28dfff8..22c70c6f7 100644 --- a/src/qt/languages/tr_TR.po +++ b/src/qt/languages/tr-TR.po @@ -40,14 +40,14 @@ msgstr "&Pencere boyut ve pozisyonunu hatırla" msgid "Re&nderer" msgstr "&İşleyici" -msgid "&Qt (Software)" -msgstr "&Qt (Yazılım)" +msgid "&SDL (Software)" +msgstr "&SDL (Yazılım)" -msgid "Qt (&Hardware)" -msgstr "Qt (&Donanım)" +msgid "SDL (&Hardware)" +msgstr "SDL (&Donanım)" -msgid "Qt (&OpenGL)" -msgstr "Qt (&OpenGL)" +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" msgid "Open&GL (3.0 Core)" msgstr "Open&GL (3.0 Core)" diff --git a/src/qt/languages/zh_CN.po b/src/qt/languages/zh-CN.po similarity index 94% rename from src/qt/languages/zh_CN.po rename to src/qt/languages/zh-CN.po index 7ad5251fd..3bebb6735 100644 --- a/src/qt/languages/zh_CN.po +++ b/src/qt/languages/zh-CN.po @@ -40,17 +40,14 @@ msgstr "记住窗口大小和位置(&E)" msgid "Re&nderer" msgstr "渲染器(&N)" -msgid "&Qt (Software)" -msgstr "Qt (软件)(&Q)" +msgid "&SDL (Software)" +msgstr "SDL (软件)(&S)" -msgid "Qt (&Hardware)" -msgstr "Qt (硬件)(&H)" +msgid "SDL (&Hardware)" +msgstr "SDL (硬件)(&H)" -msgid "Qt (&OpenGL)" -msgstr "Qt (OpenGL)(&O)" - -msgid "Qt (OpenGL &ES)" -msgstr "Qt (OpenGL ES)(&E)" +msgid "SDL (&OpenGL)" +msgstr "SDL (OpenGL)(&O)" msgid "Open&GL (3.0 Core)" msgstr "OpenGL (3.0 核心)(&G)" diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 72d96a2fd..91bed1298 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -119,10 +119,16 @@ int main(int argc, char* argv[]) { while (it.hasNext()) { qDebug() << it.next() << "\n"; } - + QTranslator qtTranslator; + qtTranslator.load(QLocale::system(), QStringLiteral("qt_"), QString(), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + if (app.installTranslator(&qtTranslator)) + { + qDebug() << "Qt translations loaded." << "\n"; + } CustomTranslator translator; qDebug() << QLocale::system().name() << "\n"; - if (translator.load(QLatin1String("86box_"), QLatin1String(":/"), QString(), "de_DE.qm")) + auto localetofilename = QLocale::system().name().replace('_', '-'); + if (translator.load(QLatin1String("86box_"), QLatin1String(":/"), QString(), localetofilename + ".qm")) { qDebug() << "Translations loaded.\n"; QCoreApplication::installTranslator(&translator); diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 9bd73d729..b0a9baf08 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -52,7 +52,7 @@ - Action + &Action @@ -80,7 +80,7 @@ - View + &View @@ -186,7 +186,7 @@ true - Keyboard requires capture + &Keyboard requires capture @@ -194,22 +194,25 @@ true - Right CTRL is left ALT + &Right CTRL is left ALT - Hard Reset + &Hard Reset... + &Ctrl+Alt+Del + + Ctrl+Alt+Del - Ctrl+Alt+Esc + Ctrl+Alt+&Esc @@ -217,7 +220,7 @@ true - Pause + &Pause @@ -227,7 +230,7 @@ - Settings + &Settings... QAction::PreferencesRole diff --git a/src/qt/qt_translations.qrc b/src/qt/qt_translations.qrc index 872a6b739..5cf4a7cbb 100644 --- a/src/qt/qt_translations.qrc +++ b/src/qt/qt_translations.qrc @@ -1,20 +1,20 @@ - 86box_de_DE.qm - 86box_en_GB.qm - 86box_es_ES.qm - 86box_fi_FI.qm - 86box_fr_FR.qm - 86box_hr_HR.qm - 86box_hu_HU.qm - 86box_it_IT.qm - 86box_ja_JP.qm - 86box_ko_KR.qm - 86box_pt_BR.qm - 86box_pt_PT.qm - 86box_ru_RU.qm - 86box_sl_SI.qm - 86box_tr_TR.qm - 86box_zh_CN.qm + 86box_de-DE.qm + 86box_en-GB.qm + 86box_es-ES.qm + 86box_fi-FI.qm + 86box_fr-FR.qm + 86box_hr-HR.qm + 86box_hu-HU.qm + 86box_it-IT.qm + 86box_ja-JP.qm + 86box_ko-KR.qm + 86box_pt-BR.qm + 86box_pt-PT.qm + 86box_ru-RU.qm + 86box_sl-SI.qm + 86box_tr-TR.qm + 86box_zh-CN.qm From 7b75bfb18d3d2a243a53f8cdedfaa576a648cba3 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 5 Jan 2022 01:17:07 +0600 Subject: [PATCH 170/278] Make most of main window text translatable --- src/qt/CMakeLists.txt | 1 + src/qt/languages/cs-CZ.po | 55 +- src/qt/languages/de-DE.po | 37 +- src/qt/languages/en-GB.po | 55 +- src/qt/languages/en_GB.ts | 1599 ------------------------------------- src/qt/languages/es-ES.po | 55 +- src/qt/languages/fi-FI.po | 55 +- src/qt/languages/fi-fi.po | 1173 +++++++++++++++++++++++++++ src/qt/languages/fr-FR.po | 55 +- src/qt/languages/hr-HR.po | 57 +- src/qt/languages/hu-HU.po | 55 +- src/qt/languages/it-IT.po | 55 +- src/qt/languages/ja-JP.po | 51 +- src/qt/languages/ko-KR.po | 55 +- src/qt/languages/pt-BR.po | 55 +- src/qt/languages/pt-PT.po | 55 +- src/qt/languages/ru-RU.po | 55 +- src/qt/languages/sl-SI.po | 55 +- src/qt/languages/tr-TR.po | 55 +- src/qt/languages/zh-CN.po | 35 +- src/qt/qt_mainwindow.ui | 95 +-- src/qt/qt_platform.cpp | 2 +- 22 files changed, 1646 insertions(+), 2119 deletions(-) delete mode 100644 src/qt/languages/en_GB.ts create mode 100644 src/qt/languages/fi-fi.po diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 78baf5701..4b028b208 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -183,6 +183,7 @@ foreach(po_file ${po_files}) COMMAND ${LCONVERT_EXECUTABLE} -i ${po_file} -o ${CMAKE_CURRENT_BINARY_DIR}/86box_${PO_FILE_NAME}.qm WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") list(APPEND QM_FILES "${CMAKE_CURRENT_BINARY_DIR}/86box_${PO_FILE_NAME}.qm") + list(APPEND QM_FILES "${po_file}") endforeach() configure_file(qt_translations.qrc ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) target_sources(ui PRIVATE ${QM_FILES} ${CMAKE_CURRENT_BINARY_DIR}/qt_translations.qrc) diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index 743965eda..856d4466a 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -217,9 +217,6 @@ msgstr "&Dokumentace" msgid "&About 86Box..." msgstr "&O programu 86Box" -msgid "" -msgstr "" - msgid "&New image..." msgstr "&Nový obraz..." @@ -625,8 +622,8 @@ msgstr "ZIP %03i %i (%s): %ls" msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" msgstr "Obrazy ZIP disků (*.IM? *.im? *.ZDI *.zdi)" -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." -msgstr "86Box nenalezl žádné použitelné image pamětí ROM.\n\nStáhněte sadu obrazů ROM a extrahujte ji do složky ""roms""." +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box nenalezl žádné použitelné image pamětí ROM.\n\nStáhněte sadu obrazů ROM a extrahujte ji do složky \"roms\"." msgid "(empty)" msgstr "(prázdné)" @@ -646,11 +643,11 @@ msgstr "Vyp." msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" msgstr "Všechny obrazy disků (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Základní sektorové obrazy (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Obrazy povrchu (*.86F *.86f)" -msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "Počítač ""%hs"" není dostupný, jelikož chybí obraz jeho paměti ROM ve složce ""roms/machines"". Konfigurace se přepne na jiný dostupný počítač." +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Počítač \"%hs\" není dostupný, jelikož chybí obraz jeho paměti ROM ve složce \"roms/machines\". Konfigurace se přepne na jiný dostupný počítač." -msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "Video adaptér ""%hs"" není dostupný, jelikož chybí obraz jeho paměti ROM ve složce ""roms/video"". Konfigurace se přepne na jiný dostupný adaptér." +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Video adaptér \"%hs\" není dostupný, jelikož chybí obraz jeho paměti ROM ve složce \"roms/video\". Konfigurace se přepne na jiný dostupný adaptér." msgid "Machine" msgstr "Počítač" @@ -1126,35 +1123,35 @@ msgstr "2.88 MB" msgid "ZIP 100" msgstr "ZIP 100" -msgid "3.5"" 128Mb M.O. (ISO 10090)" -msgstr "3.5"" 128Mb M.O. (ISO 10090)" +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" -msgid "3.5"" 230Mb M.O. (ISO 13963)" -msgstr "3.5"" 230Mb M.O. (ISO 13963)" +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" -msgid "3.5"" 540Mb M.O. (ISO 15498)" -msgstr "3.5"" 540Mb M.O. (ISO 15498)" +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" -msgid "3.5"" 640Mb M.O. (ISO 15498)" -msgstr "3.5"" 640Mb M.O. (ISO 15498)" +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" -msgid "3.5"" 1.3Gb M.O. (GigaMO)" -msgstr "3.5"" 1.3Gb M.O. (GigaMO)" +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" -msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgid "5.25"" 600Mb M.O." -msgstr "5.25"" 600Mb M.O." +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." -msgid "5.25"" 650Mb M.O." -msgstr "5.25"" 650Mb M.O." +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." -msgid "5.25"" 1Gb M.O." -msgstr "5.25"" 1Gb M.O." +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." -msgid "5.25"" 1.3Gb M.O." -msgstr "5.25"" 1.3Gb M.O." +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." msgid "Perfect RPM" msgstr "Dokonalé otáčky za minutu" diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po index 0cf20fad1..4e359c9c8 100644 --- a/src/qt/languages/de-DE.po +++ b/src/qt/languages/de-DE.po @@ -217,9 +217,6 @@ msgstr "&Dokumentation..." msgid "&About 86Box..." msgstr "&Über 86Box..." -msgid "" -msgstr "" - msgid "&New image..." msgstr "&Neues Image..." @@ -625,8 +622,8 @@ msgstr "ZIP %03i %i (%s): %ls" msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" msgstr "ZIP-Images (*.IM? *.im? *.ZDI *.zdi)" -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." -msgstr "86Box konnte keine nutzbaren ROM-Dateien finden.\n\nBitte besuchen Sie download, laden ein ROM-Set herunter und extrahieren dies in das ""roms""-Verzeichnis." +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box konnte keine nutzbaren ROM-Dateien finden.\n\nBitte besuchen Sie download, laden ein ROM-Set herunter und extrahieren dies in das \"roms\"-Verzeichnis." msgid "(empty)" msgstr "(leer)" @@ -646,11 +643,11 @@ msgstr "Aus" msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" msgstr "Alle Images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basissektorimages (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Oberflächenimages (*.86F *.86f)" -msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "Die Maschine ""%hs"" ist aufgrund von fehlenden ROMs im Verzeichnis roms/machines nicht verfügbar. Es wird auf eine verfügbare Maschine gewechselt." +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Die Maschine \"%hs\" ist aufgrund von fehlenden ROMs im Verzeichnis roms/machines nicht verfügbar. Es wird auf eine verfügbare Maschine gewechselt." -msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "Die Videokarte ""%hs"" ist aufgrund von fehlenden ROMs im Verzeichnis roms/video nicht verfügbar. Es wird auf eine verfügbare Videokarte gewechselt." +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Die Videokarte \"%hs\" ist aufgrund von fehlenden ROMs im Verzeichnis roms/video nicht verfügbar. Es wird auf eine verfügbare Videokarte gewechselt." msgid "Machine" msgstr "Maschine" @@ -908,7 +905,7 @@ msgid "You are loading an unsupported configuration" msgstr "Sie laden gerade eine nicht unterstützte Konfiguration" msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "Das Filtern der CPU-Typen basierend auf der ausgewählten Maschine ist für diese Maschine deaktiviert.\n\nDies ermöglicht es, dass man eine sonst nicht mit der ausgewählten Maschine inkompatible CPU auswählen kann. Allerdings kann dies zu Inkompatiblilitäten mit dem BIOS der Maschine oder anderen Programmen kommen.\n\nDas Aktivieren dieser Einstellung wird nicht unterstützt und sämtliche Bugreports können als ""invalid"" geschlossen werden." +msgstr "Das Filtern der CPU-Typen basierend auf der ausgewählten Maschine ist für diese Maschine deaktiviert.\n\nDies ermöglicht es, dass man eine sonst nicht mit der ausgewählten Maschine inkompatible CPU auswählen kann. Allerdings kann dies zu Inkompatiblilitäten mit dem BIOS der Maschine oder anderen Programmen kommen.\n\nDas Aktivieren dieser Einstellung wird nicht unterstützt und sämtliche Bugreports können als \"invalid\" geschlossen werden." msgid "Continue" msgstr "Fortfahren" @@ -1126,34 +1123,34 @@ msgstr "2,88 MB" msgid "ZIP 100" msgstr "ZIP 100" -msgid "3.5"" 128Mb M.O. (ISO 10090)" +msgid "3.5\" 128Mb M.O. (ISO 10090)" msgstr "3,5-Zoll 128 MB M.O. (ISO 10090)" -msgid "3.5"" 230Mb M.O. (ISO 13963)" +msgid "3.5\" 230Mb M.O. (ISO 13963)" msgstr "3,5-Zoll 230 MB M.O. (ISO 13963)" -msgid "3.5"" 540Mb M.O. (ISO 15498)" +msgid "3.5\" 540Mb M.O. (ISO 15498)" msgstr "3,5-Zoll 540 MB M.O. (ISO 15498)" -msgid "3.5"" 640Mb M.O. (ISO 15498)" +msgid "3.5\" 640Mb M.O. (ISO 15498)" msgstr "3,5-Zoll 640 MB M.O. (ISO 15498)" -msgid "3.5"" 1.3Gb M.O. (GigaMO)" +msgid "3.5\" 1.3Gb M.O. (GigaMO)" msgstr "3,5-Zoll 1,3 GB M.O. (GigaMO)" -msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" msgstr "3,5-Zoll 2,3 GB M.O. (GigaMO 2)" -msgid "5.25"" 600Mb M.O." +msgid "5.25\" 600Mb M.O." msgstr "5,25-Zoll 600 MB M.O." -msgid "5.25"" 650Mb M.O." +msgid "5.25\" 650Mb M.O." msgstr "5,25-Zoll 650 MB M.O." -msgid "5.25"" 1Gb M.O." +msgid "5.25\" 1Gb M.O." msgstr "5,25-Zoll 1 GB M.O." -msgid "5.25"" 1.3Gb M.O." +msgid "5.25\" 1.3Gb M.O." msgstr "5,25-Zoll 1,3 GB M.O." msgid "Perfect RPM" diff --git a/src/qt/languages/en-GB.po b/src/qt/languages/en-GB.po index fce16c388..479f87a47 100644 --- a/src/qt/languages/en-GB.po +++ b/src/qt/languages/en-GB.po @@ -217,9 +217,6 @@ msgstr "&Documentation..." msgid "&About 86Box..." msgstr "&About 86Box..." -msgid "" -msgstr "" - msgid "&New image..." msgstr "&New image..." @@ -625,8 +622,8 @@ msgstr "ZIP %03i %i (%s): %ls" msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" msgstr "ZIP images (*.IM? *.im? *.ZDI *.zdi)" -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." -msgstr "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgid "(empty)" msgstr "(empty)" @@ -646,11 +643,11 @@ msgstr "Off" msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" msgstr "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" -msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." msgid "Machine" msgstr "Machine" @@ -1126,35 +1123,35 @@ msgstr "2.88 MB" msgid "ZIP 100" msgstr "ZIP 100" -msgid "3.5"" 128Mb M.O. (ISO 10090)" -msgstr "3.5"" 128Mb M.O. (ISO 10090)" +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" -msgid "3.5"" 230Mb M.O. (ISO 13963)" -msgstr "3.5"" 230Mb M.O. (ISO 13963)" +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" -msgid "3.5"" 540Mb M.O. (ISO 15498)" -msgstr "3.5"" 540Mb M.O. (ISO 15498)" +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" -msgid "3.5"" 640Mb M.O. (ISO 15498)" -msgstr "3.5"" 640Mb M.O. (ISO 15498)" +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" -msgid "3.5"" 1.3Gb M.O. (GigaMO)" -msgstr "3.5"" 1.3Gb M.O. (GigaMO)" +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" -msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgid "5.25"" 600Mb M.O." -msgstr "5.25"" 600Mb M.O." +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." -msgid "5.25"" 650Mb M.O." -msgstr "5.25"" 650Mb M.O." +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." -msgid "5.25"" 1Gb M.O." -msgstr "5.25"" 1Gb M.O." +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." -msgid "5.25"" 1.3Gb M.O." -msgstr "5.25"" 1.3Gb M.O." +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." msgid "Perfect RPM" msgstr "Perfect RPM" diff --git a/src/qt/languages/en_GB.ts b/src/qt/languages/en_GB.ts deleted file mode 100644 index 4641a7ead..000000000 --- a/src/qt/languages/en_GB.ts +++ /dev/null @@ -1,1599 +0,0 @@ - - - - - - - Translated by - Unknown - - - &Action - &Action - - - &Keyboard requires capture - &Keyboard requires capture - - - &Right CTRL is left ALT - &Right CTRL is left ALT - - - &Hard Reset... - &Hard Reset... - - - &Ctrl+Alt+Del Ctrl+F12 - &Ctrl+Alt+Del Ctrl+F12 - - - Ctrl+Alt+&Esc - Ctrl+Alt+&Esc - - - &Pause - &Pause - - - E&xit... - E&xit... - - - &View - &View - - - &Hide status bar - &Hide status bar - - - &Resizeable window - &Resizeable window - - - R&emember size && position - R&emember size && position - - - Re&nderer - Re&nderer - - - &Qt (Software) - &Qt (Software) - - - Qt (&Hardware) - Qt (&Hardware) - - - Qt (&OpenGL) - Qt (&OpenGL) - - - Open&GL (3.0 Core) - Open&GL (3.0 Core) - - - &VNC - &VNC - - - Specify dimensions... - Specify dimensions... - - - F&orce 4:3 display ratio - F&orce 4:3 display ratio - - - &Window scale factor - &Window scale factor - - - &0.5x - &0.5x - - - &1x - &1x - - - 1.&5x - 1.&5x - - - &2x - &2x - - - Filter method - Filter method - - - &Nearest - &Nearest - - - &Linear - &Linear - - - Hi&DPI scaling - Hi&DPI scaling - - - &Fullscreen Ctrl+Alt+PageUP - &Fullscreen Ctrl+Alt+PageUP - - - Fullscreen &stretch mode - Fullscreen &stretch mode - - - &Full screen stretch - &Full screen stretch - - - &4:3 - &4:3 - - - &Square pixels (Keep ratio) - &Square pixels (Keep ratio) - - - &Integer scale - &Integer scale - - - E&GA/(S)VGA settings - E&GA/(S)VGA settings - - - &Inverted VGA monitor - &Inverted VGA monitor - - - VGA screen &type - VGA screen &type - - - RGB &Color - RGB &Colour - - - &RGB Grayscale - &RGB Greyscale - - - &Amber monitor - &Amber monitor - - - &Green monitor - &Green monitor - - - &White monitor - &White monitor - - - Grayscale &conversion type - Grayscale &conversion type - - - BT&601 (NTSC/PAL) - BT&601 (NTSC/PAL) - - - BT&709 (HDTV) - BT&709 (HDTV) - - - &Average - &Average - - - CGA/PCjr/Tandy/E&GA/(S)VGA overscan - CGA/PCjr/Tandy/E&GA/(S)VGA overscan - - - Change contrast for &monochrome display - Change contrast for &monochrome display - - - &Media - &Media - - - &Tools - &Tools - - - &Settings... - &Settings... - - - &Update status bar icons - &Update status bar icons - - - Take s&creenshot Ctrl+F11 - Take s&creenshot Ctrl+F11 - - - &Preferences... - &Preferences... - - - Enable &Discord integration - Enable &Discord integration - - - Sound &gain... - Sound &gain... - - - Begin trace Ctrl+T - Begin trace Ctrl+T - - - End trace Ctrl+T - End trace Ctrl+T - - - &Logging - &Logging - - - Enable BusLogic logs Ctrl+F4 - Enable BusLogic logs Ctrl+F4 - - - Enable CD-ROM logs Ctrl+F5 - Enable CD-ROM logs Ctrl+F5 - - - Enable floppy (86F) logs Ctrl+F6 - Enable floppy (86F) logs Ctrl+F6 - - - Enable floppy controller logs Ctrl+F7 - Enable floppy controller logs Ctrl+F7 - - - Enable IDE logs Ctrl+F8 - Enable IDE logs Ctrl+F8 - - - Enable Serial Port logs Ctrl+F3 - Enable Serial Port logs Ctrl+F3 - - - Enable Network logs Ctrl+F9 - Enable Network logs Ctrl+F9 - - - &Log breakpoint Ctrl+F10 - &Log breakpoint Ctrl+F10 - - - Dump &video RAM Ctrl+F1 - Dump &video RAM Ctrl+F1 - - - &Help - &Help - - - &Documentation... - &Documentation... - - - &About 86Box... - &About 86Box... - - - &New image... - &New image... - - - &Existing image... - &Existing image... - - - Existing image (&Write-protected)... - Existing image (&Write-protected)... - - - &Record - &Record - - - &Play - &Play - - - &Rewind to the beginning - &Rewind to the beginning - - - &Fast forward to the end - &Fast forward to the end - - - E&ject - E&ject - - - &Image... - &Image... - - - E&xport to 86F... - E&xport to 86F... - - - &Mute - &Mute - - - E&mpty - E&mpty - - - &Reload previous image - &Reload previous image - - - &Image - &Image - - - Target &framerate - Target &framerate - - - &Sync with video - &Sync with video - - - &25 fps - &25 fps - - - &30 fps - &30 fps - - - &50 fps - &50 fps - - - &60 fps - &60 fps - - - &75 fps - &75 fps - - - &VSync - &VSync - - - &Select shader... - &Select shader... - - - &Remove shader - &Remove shader - - - Preferences - Preferences - - - Sound Gain - Sound Gain - - - New Image - New Image - - - Settings - Settings - - - Specify Main Window Dimensions - Specify Main Window Dimensions - - - OK - OK - - - Cancel - Cancel - - - Save these settings as &global defaults - Save these settings as &global defaults - - - &Default - &Default - - - Language: - Language: - - - Icon set: - Icon set: - - - Gain - Gain - - - File name: - File name: - - - Disk size: - Disk size: - - - RPM mode: - RPM mode: - - - Progress: - Progress: - - - Width: - Width: - - - Height: - Height: - - - Lock to this size - Lock to this size - - - Machine type: - Machine type: - - - Machine: - Machine: - - - Configure - Configure - - - CPU type: - CPU type: - - - Speed: - Speed: - - - FPU: - FPU: - - - Wait states: - Wait states: - - - MB - MB - - - Memory: - Memory: - - - Time synchronization - Time synchronization - - - Disabled - Disabled - - - Enabled (local time) - Enabled (local time) - - - Enabled (UTC) - Enabled (UTC) - - - Dynamic Recompiler - Dynamic Recompiler - - - Video: - Video: - - - Voodoo Graphics - Voodoo Graphics - - - Mouse: - Mouse: - - - Joystick: - Joystick: - - - Joystick 1... - Joystick 1... - - - Joystick 2... - Joystick 2... - - - Joystick 3... - Joystick 3... - - - Joystick 4... - Joystick 4... - - - Sound card: - Sound card: - - - MIDI Out Device: - MIDI Out Device: - - - MIDI In Device: - MIDI In Device: - - - Standalone MPU-401 - Standalone MPU-401 - - - Innovation SSI-2001 - Innovation SSI-2001 - - - CMS / Game Blaster - CMS / Game Blaster - - - Gravis Ultrasound - Gravis Ultrasound - - - Use FLOAT32 sound - Use FLOAT32 sound - - - Network type: - Network type: - - - PCap device: - PCap device: - - - Network adapter: - Network adapter: - - - LPT1 Device: - LPT1 Device: - - - LPT2 Device: - LPT2 Device: - - - LPT3 Device: - LPT3 Device: - - - Serial port 1 - Serial port 1 - - - Serial port 2 - Serial port 2 - - - Serial port 3 - Serial port 3 - - - Serial port 4 - Serial port 4 - - - Parallel port 1 - Parallel port 1 - - - Parallel port 2 - Parallel port 2 - - - Parallel port 3 - Parallel port 3 - - - HD Controller: - HD Controller: - - - FD Controller: - FD Controller: - - - Tertiary IDE Controller - Tertiary IDE Controller - - - Quaternary IDE Controller - Quaternary IDE Controller - - - SCSI - SCSI - - - Controller 1: - Controller 1: - - - Controller 2: - Controller 2: - - - Controller 3: - Controller 3: - - - Controller 4: - Controller 4: - - - Cassette - Cassette - - - Hard disks: - Hard disks: - - - &New... - &New... - - - &Existing... - &Existing... - - - &Remove - &Remove - - - Bus: - Bus: - - - Channel: - Channel: - - - ID: - ID: - - - &Specify... - &Specify... - - - Sectors: - Sectors: - - - Heads: - Heads: - - - Cylinders: - Cylinders: - - - Size (MB): - Size (MB): - - - Type: - Type: - - - Image Format: - Image Format: - - - Block Size: - Block Size: - - - Floppy drives: - Floppy drives: - - - Turbo timings - Turbo timings - - - Check BPB - Check BPB - - - CD-ROM drives: - CD-ROM drives: - - - MO drives: - MO drives: - - - ZIP drives: - ZIP drives: - - - ZIP 250 - ZIP 250 - - - ISA RTC: - ISA RTC: - - - ISA Memory Expansion - ISA Memory Expansion - - - Card 1: - Card 1: - - - Card 2: - Card 2: - - - Card 3: - Card 3: - - - Card 4: - Card 4: - - - ISABugger device - ISABugger device - - - POST card - POST card - - - Segoe UI - Segoe UI - - - 86Box - 86Box - - - Error - Error - - - Fatal error - Fatal error - - - <reserved> - <reserved> - - - Press CTRL+ALT+PAGE DOWN to return to windowed mode. - Press CTRL+ALT+PAGE DOWN to return to windowed mode. - - - Speed - Speed - - - ZIP %03i %i (%s): %ls - ZIP %03i %i (%s): %ls - - - ZIP images (*.IM? *.im? *.ZDI *.zdi) - ZIP images (*.IM? *.im? *.ZDI *.zdi) - - - 86Box could not find any usable ROM images. - -Please <a href=https://github.com/86Box/roms/releases/latest>download</a> a ROM set and extract it into the roms directory. - 86Box could not find any usable ROM images. - -Please <a href=https://github.com/86Box/roms/releases/latest>download</a> a ROM set and extract it into the roms directory. - - - (empty) - (empty) - - - ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*) - ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*) - - - Turbo - Turbo - - - On - On - - - Off - Off - - - All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f) - All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f) - - - Machine %hs is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. - Machine %hs is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. - - - Video card %hs is not available due to missing ROMs in the roms/video directory. Switching to an available video card. - Video card %hs is not available due to missing ROMs in the roms/video directory. Switching to an available video card. - - - Machine - Machine - - - Display - Display - - - Input devices - Input devices - - - Sound - Sound - - - Network - Network - - - Ports (COM & LPT) - Ports (COM & LPT) - - - Storage controllers - Storage controllers - - - Hard disks - Hard disks - - - Floppy & CD-ROM drives - Floppy & CD-ROM drives - - - Other removable devices - Other removable devices - - - Other peripherals - Other peripherals - - - Surface images (*.86F *.86f) - Surface images (*.86F *.86f) - - - Click to capture mouse - Click to capture mouse - - - Press F8+F12 to release mouse - Press F8+F12 to release mouse - - - Press F8+F12 or middle button to release mouse - Press F8+F12 or middle button to release mouse - - - Unable to initialize FluidSynth - Unable to initialize FluidSynth - - - Bus - Bus - - - File - File - - - C - C - - - H - H - - - S - S - - - KB - KB - - - Could not initialize the video renderer. - Could not initialize the video renderer. - - - Default - Default - - - %i Wait state(s) - %i Wait state(s) - - - Type - Type - - - Failed to set up PCap - Failed to set up PCap - - - No PCap devices found - No PCap devices found - - - Invalid PCap device - Invalid PCap device - - - Standard 2-button joystick(s) - Standard 2-button joystick(s) - - - Standard 4-button joystick - Standard 4-button joystick - - - Standard 6-button joystick - Standard 6-button joystick - - - Standard 8-button joystick - Standard 8-button joystick - - - CH Flightstick Pro - CH Flightstick Pro - - - Microsoft SideWinder Pad - Microsoft SideWinder Pad - - - Thrustmaster Flight Control System - Thrustmaster Flight Control System - - - None - None - - - Unable to load keyboard accelerators. - Unable to load keyboard accelerators. - - - Unable to register raw input. - Unable to register raw input. - - - %u - %u - - - %u MB (CHS: %i, %i, %i) - %u MB (CHS: %i, %i, %i) - - - Floppy %i (%s): %ls - Floppy %i (%s): %ls - - - All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) - All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) - - - Unable to initialize FreeType - Unable to initialize FreeType - - - Unable to initialize SDL, SDL2.dll is required - Unable to initialize SDL, SDL2.dll is required - - - Are you sure you want to hard reset the emulated machine? - Are you sure you want to hard reset the emulated machine? - - - Are you sure you want to exit 86Box? - Are you sure you want to exit 86Box? - - - Unable to initialize Ghostscript - Unable to initialize Ghostscript - - - MO %i (%ls): %ls - MO %i (%ls): %ls - - - MO images (*.IM? *.im? *.MDI *.mdi);;All files (*) - MO images (*.IM? *.im? *.MDI *.mdi);;All files (*) - - - Welcome to 86Box! - Welcome to 86Box! - - - Internal controller - Internal controller - - - Exit - Exit - - - No ROMs found - No ROMs found - - - Do you want to save the settings? - Do you want to save the settings? - - - This will hard reset the emulated machine. - This will hard reset the emulated machine. - - - Save - Save - - - About 86Box - About 86Box - - - 86Box v - 86Box v - - - An emulator of old computers - -Authors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others. - -Released under the GNU General Public License version 2 or later. See LICENSE for more information. - An emulator of old computers - -Authors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others. - -Released under the GNU General Public License version 2 or later. See LICENSE for more information. - - - Hardware not available - Hardware not available - - - WinPcap - WinPcap - - - libpcap - libpcap - - - Make sure libpcap is installed and that you are on a libpcap-compatible network connection. - Make sure libpcap is installed and that you are on a libpcap-compatible network connection. - - - Invalid configuration - Invalid configuration - - - freetype.dll - freetype.dll - - - libfreetype - libfreetype - - - is required for ESC/P printer emulation. - is required for ESC/P printer emulation. - - - gsdll32.dll - gsdll32.dll - - - libgs - libgs - - - is required for automatic conversion of PostScript files to PDF. - -Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. - is required for automatic conversion of PostScript files to PDF. - -Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. - - - libfluidsynth.dll - libfluidsynth.dll - - - libfluidsynth - libfluidsynth - - - is required for FluidSynth MIDI output. - is required for FluidSynth MIDI output. - - - Entering fullscreen mode - Entering fullscreen mode - - - Don't show this message again - Don't show this message again - - - Don't exit - Don't exit - - - Reset - Reset - - - Don't reset - Don't reset - - - CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*) - CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*) - - - %hs Device Configuration - %hs Device Configuration - - - Monitor in sleep mode - Monitor in sleep mode - - - OpenGL Shaders (*.GLSL *.glsl);;All files (*) - OpenGL Shaders (*.GLSL *.glsl);;All files (*) - - - OpenGL options - OpenGL options - - - You are loading an unsupported configuration - You are loading an unsupported configuration - - - CPU type filtering based on selected machine is disabled for this emulated machine. - -This makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software. - -Enabling this setting is not officially supported and any bug reports filed may be closed as invalid. - CPU type filtering based on selected machine is disabled for this emulated machine. - -This makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software. - -Enabling this setting is not officially supported and any bug reports filed may be closed as invalid. - - - Continue - Continue - - - Cassette: %s - Cassette: %s - - - Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*) - Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*) - - - Cartridge %i: %ls - Cartridge %i: %ls - - - Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*) - Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*) - - - Error initializing renderer - Error initializing renderer - - - OpenGL (3.0 Core) renderer could not be initialized. Use another renderer. - OpenGL (3.0 Core) renderer could not be initialized. Use another renderer. - - - Hard disk (%s) - Hard disk (%s) - - - %01i:%01i - %01i:%01i - - - %01i - %01i - - - MFM/RLL or ESDI CD-ROM drives never existed - MFM/RLL or ESDI CD-ROM drives never existed - - - Custom... - Custom... - - - Custom (large)... - Custom (large)... - - - Add New Hard Disk - Add New Hard Disk - - - Add Existing Hard Disk - Add Existing Hard Disk - - - HDI disk images cannot be larger than 4 GB. - HDI disk images cannot be larger than 4 GB. - - - Disk images cannot be larger than 127 GB. - Disk images cannot be larger than 127 GB. - - - Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*) - Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*) - - - Unable to read file - Unable to read file - - - Unable to write file - Unable to write file - - - HDI or HDX images with a sector size other than 512 are not supported. - HDI or HDX images with a sector size other than 512 are not supported. - - - USB is not yet supported - USB is not yet supported - - - Disk image file already exists - Disk image file already exists - - - Please specify a valid file name. - Please specify a valid file name. - - - Disk image created - Disk image created - - - Make sure the file exists and is readable. - Make sure the file exists and is readable. - - - Make sure the file is being saved to a writable directory. - Make sure the file is being saved to a writable directory. - - - Disk image too large - Disk image too large - - - Remember to partition and format the newly-created drive. - Remember to partition and format the newly-created drive. - - - The selected file will be overwritten. Are you sure you want to use it? - The selected file will be overwritten. Are you sure you want to use it? - - - Unsupported disk image - Unsupported disk image - - - Overwrite - Overwrite - - - Don't overwrite - Don't overwrite - - - Raw image (.img) - Raw image (.img) - - - HDI image (.hdi) - HDI image (.hdi) - - - HDX image (.hdx) - HDX image (.hdx) - - - Fixed-size VHD (.vhd) - Fixed-size VHD (.vhd) - - - Dynamic-size VHD (.vhd) - Dynamic-size VHD (.vhd) - - - Differencing VHD (.vhd) - Differencing VHD (.vhd) - - - Large blocks (2 MB) - Large blocks (2 MB) - - - Small blocks (512 KB) - Small blocks (512 KB) - - - VHD files (*.VHD *.vhd);;All files (*) - VHD files (*.VHD *.vhd);;All files (*) - - - Select the parent VHD - Select the parent VHD - - - This could mean that the parent image was modified after the differencing image was created. - -It can also happen if the image files were moved or copied, or by a bug in the program that created this disk. - -Do you want to fix the timestamps? - This could mean that the parent image was modified after the differencing image was created. - -It can also happen if the image files were moved or copied, or by a bug in the program that created this disk. - -Do you want to fix the timestamps? - - - Parent and child disk timestamps do not match - Parent and child disk timestamps do not match - - - Could not fix VHD timestamp. - Could not fix VHD timestamp. - - - %01i:%02i - %01i:%02i - - - MFM/RLL - MFM/RLL - - - XTA - XTA - - - ESDI - ESDI - - - IDE - IDE - - - ATAPI - ATAPI - - - MFM/RLL (%01i:%01i) - MFM/RLL (%01i:%01i) - - - XTA (%01i:%01i) - XTA (%01i:%01i) - - - ESDI (%01i:%01i) - ESDI (%01i:%01i) - - - IDE (%01i:%01i) - IDE (%01i:%01i) - - - ATAPI (%01i:%01i) - ATAPI (%01i:%01i) - - - SCSI (%01i:%02i) - SCSI (%01i:%02i) - - - CD-ROM %i (%s): %s - CD-ROM %i (%s): %s - - - 160 kB - 160 kB - - - 180 kB - 180 kB - - - 320 kB - 320 kB - - - 360 kB - 360 kB - - - 640 kB - 640 kB - - - 720 kB - 720 kB - - - 1.2 MB - 1.2 MB - - - 1.25 MB - 1.25 MB - - - 1.44 MB - 1.44 MB - - - DMF (cluster 1024) - DMF (cluster 1024) - - - DMF (cluster 2048) - DMF (cluster 2048) - - - 2.88 MB - 2.88 MB - - - ZIP 100 - ZIP 100 - - - 3.5 128Mb M.O. (ISO 10090) - 3.5 128Mb M.O. (ISO 10090) - - - 3.5 230Mb M.O. (ISO 13963) - 3.5 230Mb M.O. (ISO 13963) - - - 3.5 540Mb M.O. (ISO 15498) - 3.5 540Mb M.O. (ISO 15498) - - - 3.5 640Mb M.O. (ISO 15498) - 3.5 640Mb M.O. (ISO 15498) - - - 3.5 1.3Gb M.O. (GigaMO) - 3.5 1.3Gb M.O. (GigaMO) - - - 3.5 2.3Gb M.O. (GigaMO 2) - 3.5 2.3Gb M.O. (GigaMO 2) - - - 5.25 600Mb M.O. - 5.25 600Mb M.O. - - - 5.25 650Mb M.O. - 5.25 650Mb M.O. - - - 5.25 1Gb M.O. - 5.25 1Gb M.O. - - - 5.25 1.3Gb M.O. - 5.25 1.3Gb M.O. - - - Perfect RPM - Perfect RPM - - - 1%% below perfect RPM - 1%% below perfect RPM - - - 1.5%% below perfect RPM - 1.5%% below perfect RPM - - - 2%% below perfect RPM - 2%% below perfect RPM - - - (System Default) - (System Default) - - - diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po index d7f7dd6ad..e79a35ea0 100644 --- a/src/qt/languages/es-ES.po +++ b/src/qt/languages/es-ES.po @@ -217,9 +217,6 @@ msgstr "&Documentación..." msgid "&About 86Box..." msgstr "&Acerca de 86Box..." -msgid "" -msgstr "" - msgid "&New image..." msgstr "&Nueva imagen..." @@ -625,8 +622,8 @@ msgstr "ZIP %03i %i (%s): %ls" msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" msgstr "Imagenes ZIP (*.IM? *.im? *.ZDI *.zdi)" -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." -msgstr "86Box no pudo encontrar ninguna imagen ROM usable.\n\nPor favor descarga un grupo de imágenes y extráelas en el directorio ""roms""." +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box no pudo encontrar ninguna imagen ROM usable.\n\nPor favor descarga un grupo de imágenes y extráelas en el directorio \"roms\"." msgid "(empty)" msgstr "(vacío)" @@ -646,11 +643,11 @@ msgstr "Off" msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" msgstr "Todas las imagenes (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" -msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "La máquina ""%hs"" no está disponible debido a ROMs faltantes en el directorio roms/machines. Cambiando a una máquina disponible." +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "La máquina \"%hs\" no está disponible debido a ROMs faltantes en el directorio roms/machines. Cambiando a una máquina disponible." -msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "La tarjeta de vídeo ""%hs"" no está disponible debido a ROMs faltantes en el directorio roms/machines. Cambiando a una tarjeta de vídeo disponible." +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "La tarjeta de vídeo \"%hs\" no está disponible debido a ROMs faltantes en el directorio roms/machines. Cambiando a una tarjeta de vídeo disponible." msgid "Machine" msgstr "Máquina" @@ -1126,35 +1123,35 @@ msgstr "2.88 MB" msgid "ZIP 100" msgstr "ZIP 100" -msgid "3.5"" 128Mb M.O. (ISO 10090)" -msgstr "3.5"" 128Mb M.O. (ISO 10090)" +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" -msgid "3.5"" 230Mb M.O. (ISO 13963)" -msgstr "3.5"" 230Mb M.O. (ISO 13963)" +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" -msgid "3.5"" 540Mb M.O. (ISO 15498)" -msgstr "3.5"" 540Mb M.O. (ISO 15498)" +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" -msgid "3.5"" 640Mb M.O. (ISO 15498)" -msgstr "3.5"" 640Mb M.O. (ISO 15498)" +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" -msgid "3.5"" 1.3Gb M.O. (GigaMO)" -msgstr "3.5"" 1.3Gb M.O. (GigaMO)" +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" -msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgid "5.25"" 600Mb M.O." -msgstr "5.25"" 600Mb M.O." +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." -msgid "5.25"" 650Mb M.O." -msgstr "5.25"" 650Mb M.O." +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." -msgid "5.25"" 1Gb M.O." -msgstr "5.25"" 1Gb M.O." +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." -msgid "5.25"" 1.3Gb M.O." -msgstr "5.25"" 1.3Gb M.O." +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." msgid "Perfect RPM" msgstr "RPM perfectas" diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index da2a5a25b..a8e3e8c5c 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -217,9 +217,6 @@ msgstr "&Dokumentaatio..." msgid "&About 86Box..." msgstr "&Tietoja 86Box:sta..." -msgid "" -msgstr "" - msgid "&New image..." msgstr "&Uusi kasettikuva..." @@ -625,8 +622,8 @@ msgstr "ZIP %03i %i (%s): %ls" msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" msgstr "ZIP-levykuvat (*.IM? *.im? *.ZDI *.zdi)" -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." -msgstr "86Box ei löytänyt käyttökelpoisia ROM-tiedostoja.\n\nVoit ladata ROM-paketin ja purkaa sen ""roms"" hakemistoon." +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box ei löytänyt käyttökelpoisia ROM-tiedostoja.\n\nVoit ladata ROM-paketin ja purkaa sen \"roms\" hakemistoon." msgid "(empty)" msgstr "(tyhjä)" @@ -646,11 +643,11 @@ msgstr "Pois" msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" msgstr "Kaikki levykuvat (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Perussektorilevykuvat (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Pintalevykuvat (*.86F *.86f)" -msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "Konetta ""%hs"" ei voi käyttää puuttuvien ROM-tiedostojen vuoksi. Vaihdetaan käyttökelpoiseen koneeseen." +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Konetta \"%hs\" ei voi käyttää puuttuvien ROM-tiedostojen vuoksi. Vaihdetaan käyttökelpoiseen koneeseen." -msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "Näytönohjainta ""%hs"" ei voi käyttää puuttuvien ROM-tiedostojen vuoksi. Vaihdetaan käyttökelpoiseen näytönohjaimeen." +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Näytönohjainta \"%hs\" ei voi käyttää puuttuvien ROM-tiedostojen vuoksi. Vaihdetaan käyttökelpoiseen näytönohjaimeen." msgid "Machine" msgstr "Tietokone" @@ -1126,35 +1123,35 @@ msgstr "2.88 Mt" msgid "ZIP 100" msgstr "ZIP 100" -msgid "3.5"" 128Mb M.O. (ISO 10090)" -msgstr "3.5"" 128Mt M.O. (ISO 10090)" +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mt M.O. (ISO 10090)" -msgid "3.5"" 230Mb M.O. (ISO 13963)" -msgstr "3.5"" 230Mt M.O. (ISO 13963)" +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mt M.O. (ISO 13963)" -msgid "3.5"" 540Mb M.O. (ISO 15498)" -msgstr "3.5"" 540Mt M.O. (ISO 15498)" +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mt M.O. (ISO 15498)" -msgid "3.5"" 640Mb M.O. (ISO 15498)" -msgstr "3.5"" 640Mt M.O. (ISO 15498)" +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mt M.O. (ISO 15498)" -msgid "3.5"" 1.3Gb M.O. (GigaMO)" -msgstr "3.5"" 1.3Gt M.O. (GigaMO)" +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gt M.O. (GigaMO)" -msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5"" 2.3Gt M.O. (GigaMO 2)" +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gt M.O. (GigaMO 2)" -msgid "5.25"" 600Mb M.O." -msgstr "5.25"" 600Mt M.O." +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mt M.O." -msgid "5.25"" 650Mb M.O." -msgstr "5.25"" 650Mt M.O." +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mt M.O." -msgid "5.25"" 1Gb M.O." -msgstr "5.25"" 1Gt M.O." +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gt M.O." -msgid "5.25"" 1.3Gb M.O." -msgstr "5.25"" 1.3Gt M.O." +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gt M.O." msgid "Perfect RPM" msgstr "Täydellinen RPM" diff --git a/src/qt/languages/fi-fi.po b/src/qt/languages/fi-fi.po new file mode 100644 index 000000000..52c103e60 --- /dev/null +++ b/src/qt/languages/fi-fi.po @@ -0,0 +1,1173 @@ +msgid "Translated by" +msgstr "Unknown" + +msgid "&Action" +msgstr "&Toiminto" + +msgid "&Keyboard requires capture" +msgstr "&Vaadi näppäimistön kaappaus" + +msgid "&Right CTRL is left ALT" +msgstr "&Oikea CTRL on vasen ALT" + +msgid "&Hard Reset..." +msgstr "&Uudelleenkäynnistys (kylmä)..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Tauko" + +msgid "E&xit..." +msgstr "&Poistu..." + +msgid "&View" +msgstr "&Näytä" + +msgid "&Hide status bar" +msgstr "&Piilota tilapalkki" + +msgid "&Resizeable window" +msgstr "&Salli koon muuttaminen" + +msgid "R&emember size && position" +msgstr "&Muista koko ja sijainti" + +msgid "Re&nderer" +msgstr "&Renderöijä" + +msgid "&SDL (Software)" +msgstr "&SDL (ohjelmistopohjainen)" + +msgid "SDL (&Hardware)" +msgstr "SDL (&laitteistokiihdytetty)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 Core)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "&Määritä koko..." + +msgid "F&orce 4:3 display ratio" +msgstr "Pakota 4:3 näyttösuhde" + +msgid "&Window scale factor" +msgstr "&Ikkunan kokokerroin" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "&Suodatusmetodi" + +msgid "&Nearest" +msgstr "&Lähin naapuri" + +msgid "&Linear" +msgstr "Li&neaarinen interpolaatio" + +msgid "Hi&DPI scaling" +msgstr "&Suuri DPI-skaalaus" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Koko näytön tila\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Koko näytön &skaalaustila" + +msgid "&Full screen stretch" +msgstr "&Venytä koko näyttöön" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Tasasivuiset kuvapisteet (säilytä kuvasuhde)" + +msgid "&Integer scale" +msgstr "&Kokonaislukuskaalaus" + +msgid "E&GA/(S)VGA settings" +msgstr "&EGA/(S)VGA asetukset" + +msgid "&Inverted VGA monitor" +msgstr "&VGA näyttö käänteisillä väreillä" + +msgid "VGA screen &type" +msgstr "VGA näytön &tyyppi" + +msgid "RGB &Color" +msgstr "RGB &värit" + +msgid "&RGB Grayscale" +msgstr "&RGB harmaasävyinen" + +msgid "&Amber monitor" +msgstr "&Meripihkanvärinen" + +msgid "&Green monitor" +msgstr "V&ihreä" + +msgid "&White monitor" +msgstr "V&alkoinen" + +msgid "Grayscale &conversion type" +msgstr "&Harmaasävymuunnoksen tyyppi" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Keskiarvo" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "CGA/PCjr/Tandy/E&GA/(S)VGA &yliskannaus" + +msgid "Change contrast for &monochrome display" +msgstr "&Muuta harmaavärinäytön kontrastia" + +msgid "&Media" +msgstr "&Media" + +msgid "&Tools" +msgstr "&Työkalut" + +msgid "&Settings..." +msgstr "&Kokoonpano..." + +msgid "&Update status bar icons" +msgstr "&Päivitä tilapalkin kuvakkeita" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Ota &kuvakaappaus\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Sovellusasetukset..." + +msgid "Enable &Discord integration" +msgstr "Käytä &Discord integraatiota" + +msgid "Sound &gain..." +msgstr "&Äänen tulotaso..." + +msgid "Begin trace\tCtrl+T" +msgstr "Aloita jäljitys\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Lopeta jäljitys\tCtrl+T" + +msgid "&Logging" +msgstr "&Lokitus" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "BusLogic-lokitus päällä\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "CD-ROM-lokitus päällä\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Levykelokitus (86F) päällä\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Levykekontrollerin lokitus päällä\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "IDE-lokitus päällä\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Sarjaporttilokitus päällä\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Verkkolokitus päällä\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Kirjaa keskeytyskohdat\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "Tallenna &videomuistin vedos\tCtrl+F1" + +msgid "&Help" +msgstr "&Ohje" + +msgid "&Documentation..." +msgstr "&Dokumentaatio..." + +msgid "&About 86Box..." +msgstr "&Tietoja 86Box:sta..." + + + + +msgid "&New image..." +msgstr "&Uusi kasettikuva..." + +msgid "&Existing image..." +msgstr "&Olemassaoleva kasettikuva..." + +msgid "Existing image (&Write-protected)..." +msgstr "Olemassaoleva kasettikuva (&kirjoitussuojattu)..." + +msgid "&Record" +msgstr "&Nauhoita" + +msgid "&Play" +msgstr "&Toista" + +msgid "&Rewind to the beginning" +msgstr "Kelaa &alkuun" + +msgid "&Fast forward to the end" +msgstr "Kelaa &loppuun" + +msgid "E&ject" +msgstr "&Poista kasettipesästä" + +msgid "&Image..." +msgstr "&ROM-moduulikuva..." + +msgid "E&xport to 86F..." +msgstr "&Vie 86F-tiedostoon..." + +msgid "&Mute" +msgstr "&Mykistä" + +msgid "E&mpty" +msgstr "&Tyhjä" + +msgid "&Reload previous image" +msgstr "&Lataa edellinen levykuva uudelleen" + +msgid "&Image" +msgstr "L&evykuva" + +msgid "Target &framerate" +msgstr "&Kuvataajuustavoite" + +msgid "&Sync with video" +msgstr "&Synkronisoi videoon" + +msgid "&25 fps" +msgstr "&25 ruutua/s" + +msgid "&30 fps" +msgstr "&30 ruutua/s" + +msgid "&50 fps" +msgstr "&50 ruutua/s" + +msgid "&60 fps" +msgstr "&60 ruutua/s" + +msgid "&75 fps" +msgstr "&75 ruutua/s" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "Valitse varjostin&ohjelma..." + +msgid "&Remove shader" +msgstr "&Poista varjostinohjelma" + +msgid "Preferences" +msgstr "Sovellusasetukset" + +msgid "Sound Gain" +msgstr "Äänen tulotaso" + +msgid "New Image" +msgstr "Uusi levykuva" + +msgid "Settings" +msgstr "Kokoonpano" + +msgid "Specify Main Window Dimensions" +msgstr "Määritä pääikkunan koko" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Peruuta" + +msgid "Save these settings as &global defaults" +msgstr "Tallenna nämä asetukset &globaaleiksi oletuksiksi" + +msgid "&Default" +msgstr "&Oletus" + +msgid "Language:" +msgstr "Kieli:" + +msgid "Icon set:" +msgstr "Kuvakkeet:" + +msgid "Gain" +msgstr "Taso" + +msgid "File name:" +msgstr "Tiedostonimi:" + +msgid "Disk size:" +msgstr "Levyn koko:" + +msgid "RPM mode:" +msgstr "RPM tila:" + +msgid "Progress:" +msgstr "Edistyminen:" + +msgid "Width:" +msgstr "Leveys:" + +msgid "Height:" +msgstr "Korkeus:" + +msgid "Lock to this size" +msgstr "Lukitse tähän kokoon" + +msgid "Machine type:" +msgstr "Tietokoneen tyyppi:" + +msgid "Machine:" +msgstr "Tietokone:" + +msgid "Configure" +msgstr "Määritys" + +msgid "CPU type:" +msgstr "Suorittimen tyyppi:" + +msgid "Speed:" +msgstr "Nopeus:" + +msgid "FPU:" +msgstr "Apusuoritin:" + +msgid "Wait states:" +msgstr "Odotustilat:" + +msgid "MB" +msgstr "Mt" + +msgid "Memory:" +msgstr "Muisti:" + +msgid "Time synchronization" +msgstr "Kellon synkronointi" + +msgid "Disabled" +msgstr "Ei käytössä" + +msgid "Enabled (local time)" +msgstr "Käytössä (paikallinen)" + +msgid "Enabled (UTC)" +msgstr "Käytössä (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Dynaaminen uudelleenkääntäjä" + +msgid "Video:" +msgstr "Näytönohjain:" + +msgid "Voodoo Graphics" +msgstr "Voodoo-grafiikkasuoritin" + +msgid "Mouse:" +msgstr "Hiiri:" + +msgid "Joystick:" +msgstr "Peliohjain:" + +msgid "Joystick 1..." +msgstr "Peliohjain 1..." + +msgid "Joystick 2..." +msgstr "Peliohjain 2..." + +msgid "Joystick 3..." +msgstr "Peliohjain 3..." + +msgid "Joystick 4..." +msgstr "Peliohjain 4..." + +msgid "Sound card:" +msgstr "Äänikortti:" + +msgid "MIDI Out Device:" +msgstr "MIDI-ulostulo:" + +msgid "MIDI In Device:" +msgstr "MIDI-sisääntulo:" + +msgid "Standalone MPU-401" +msgstr "Erillinen MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Käytä FLOAT32-ääntä" + +msgid "Network type:" +msgstr "Verkon tyyppi:" + +msgid "PCap device:" +msgstr "PCap-laite:" + +msgid "Network adapter:" +msgstr "Verkkokortti:" + +msgid "LPT1 Device:" +msgstr "LPT1-laite:" + +msgid "LPT2 Device:" +msgstr "LPT2-laite:" + +msgid "LPT3 Device:" +msgstr "LPT3-laite:" + +msgid "Serial port 1" +msgstr "Sarjaportti 1" + +msgid "Serial port 2" +msgstr "Sarjaportti 2" + +msgid "Serial port 3" +msgstr "Sarjaportti 3" + +msgid "Serial port 4" +msgstr "Sarjaportti 4" + +msgid "Parallel port 1" +msgstr "Rinnakkaisportti 1" + +msgid "Parallel port 2" +msgstr "Rinnakkaisportti 2" + +msgid "Parallel port 3" +msgstr "Rinnakkaisportti 3" + +msgid "HD Controller:" +msgstr "Kiintolevyohjain:" + +msgid "FD Controller:" +msgstr "Levykeohjain:" + +msgid "Tertiary IDE Controller" +msgstr "Tertinäärinen IDE-ohjain" + +msgid "Quaternary IDE Controller" +msgstr "Kvaternaarinen IDE-ohjain" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Ohjain 1:" + +msgid "Controller 2:" +msgstr "Ohjain 2:" + +msgid "Controller 3:" +msgstr "Ohjain 3:" + +msgid "Controller 4:" +msgstr "Ohjain 4:" + +msgid "Cassette" +msgstr "Kasettiasema" + +msgid "Hard disks:" +msgstr "Kiintolevyt:" + +msgid "&New..." +msgstr "&Uusi..." + +msgid "&Existing..." +msgstr "&Olemassaoleva..." + +msgid "&Remove" +msgstr "&Poista" + +msgid "Bus:" +msgstr "Väylä:" + +msgid "Channel:" +msgstr "Kanava:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Määritä..." + +msgid "Sectors:" +msgstr "Sektorit:" + +msgid "Heads:" +msgstr "Päät:" + +msgid "Cylinders:" +msgstr "Sylinterit:" + +msgid "Size (MB):" +msgstr "Koko (Mt):" + +msgid "Type:" +msgstr "Tyyppi:" + +msgid "Image Format:" +msgstr "Tiedostomuoto:" + +msgid "Block Size:" +msgstr "Lohkon koko:" + +msgid "Floppy drives:" +msgstr "Levykeasemat:" + +msgid "Turbo timings" +msgstr "Turbo-ajoitukset" + +msgid "Check BPB" +msgstr "Tarkista BPB" + +msgid "CD-ROM drives:" +msgstr "CD-ROM-asemat:" + +msgid "MO drives:" +msgstr "Magneettisoptiset asemat (MO):" + +msgid "ZIP drives:" +msgstr "ZIP-asemat:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA-RTC (kello):" + +msgid "ISA Memory Expansion" +msgstr "ISA-muistilaajennus" + +msgid "Card 1:" +msgstr "Kortti 1:" + +msgid "Card 2:" +msgstr "Kortti 2:" + +msgid "Card 3:" +msgstr "Kortti 3:" + +msgid "Card 4:" +msgstr "Kortti 4:" + +msgid "ISABugger device" +msgstr "ISABugger-laite" + +msgid "POST card" +msgstr "POST-kortti" + +msgid "Segoe UI" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Virhe" + +msgid "Fatal error" +msgstr "Vakava virhe" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Paina CTRL+ALT+PAGE DOWN palataksesi ikkunoituun tilaan." + +msgid "Speed" +msgstr "Nopeus" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgstr "ZIP-levykuvat (*.IM? *.im? *.ZDI *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box ei löytänyt käyttökelpoisia ROM-tiedostoja.\n\nVoit ladata ROM-paketin ja purkaa sen \"roms\" hakemistoon." + +msgid "(empty)" +msgstr "(tyhjä)" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" +msgstr "ZIP-levykuvat (*.IM? *.im? *.ZDI *.zdi);;Kaikki tiedostot (*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Päällä" + +msgid "Off" +msgstr "Pois" + +msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" +msgstr "Kaikki levykuvat (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Perussektorilevykuvat (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Pintalevykuvat (*.86F *.86f)" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Konetta \"%hs\" ei voi käyttää puuttuvien ROM-tiedostojen vuoksi. Vaihdetaan käyttökelpoiseen koneeseen." + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Näytönohjainta \"%hs\" ei voi käyttää puuttuvien ROM-tiedostojen vuoksi. Vaihdetaan käyttökelpoiseen näytönohjaimeen." + +msgid "Machine" +msgstr "Tietokone" + +msgid "Display" +msgstr "Näyttö" + +msgid "Input devices" +msgstr "Syöttölaitteet" + +msgid "Sound" +msgstr "Ääni" + +msgid "Network" +msgstr "Verkko" + +msgid "Ports (COM & LPT)" +msgstr "Portit (COM & LPT)" + +msgid "Storage controllers" +msgstr "Tallennusohjaimet" + +msgid "Hard disks" +msgstr "Kiintolevyt" + +msgid "Floppy & CD-ROM drives" +msgstr "Levyke ja CD-ROM" + +msgid "Other removable devices" +msgstr "Muut tallennuslaitteet" + +msgid "Other peripherals" +msgstr "Muut oheislaitteet" + +msgid "Surface images (*.86F *.86f)" +msgstr "Pintalevykuvat (*.86F *.86f)" + +msgid "Click to capture mouse" +msgstr "Kaappaa hiiri klikkaamalla" + +msgid "Press F8+F12 to release mouse" +msgstr "Paina F8+F12 vapauttaaksesi hiiren" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Paina F8+F12 tai keskipainiketta vapauttaaksesi hiiren" + +msgid "Unable to initialize FluidSynth" +msgstr "FluidSynth:in alustus epäonnistui" + +msgid "Bus" +msgstr "Väylä" + +msgid "File" +msgstr "Tiedosto" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "kt" + +msgid "Could not initialize the video renderer." +msgstr "Video-renderöijän alustus epäonnistui" + +msgid "Default" +msgstr "Oletus" + +msgid "%i Wait state(s)" +msgstr "%i odotustilaa" + +msgid "Type" +msgstr "Tyyppi" + +msgid "Failed to set up PCap" +msgstr "PCap-asennus epäonnistui" + +msgid "No PCap devices found" +msgstr "PCap-laitteita ei löytynyt" + +msgid "Invalid PCap device" +msgstr "Virheellinen PCap-laite" + +msgid "Standard 2-button joystick(s)" +msgstr "Standardi 2-painikkeinen peliohjain/-ohjaimet" + +msgid "Standard 4-button joystick" +msgstr "Standardi 4-painikkeinen peliohjain" + +msgid "Standard 6-button joystick" +msgstr "Standardi 6-painikkeinen peliohjain" + +msgid "Standard 8-button joystick" +msgstr "Standardi 8-painikkeinen peliohjain" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Ei mikään" + +msgid "Unable to load keyboard accelerators." +msgstr "Näppäinkiihdyttimien lataus epäonnistui" + +msgid "Unable to register raw input." +msgstr "Raakasyötteen rekisteröinti epäonnistui" + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u Mt (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Levyke %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgstr "Kaikki levykuvat (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Kehittyneet sektorilevykuvat (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Perussektorilevykuvat (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux-levykuvat (*.FDI *.fdi);;Pintalevykuvat (*.86F *.86f *.MFM *.mfm);;Kaikki tiedostot (*)" + +msgid "Unable to initialize FreeType" +msgstr "FreeType:n alustus epäonnistui" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "SDL:n alustus epäonnistui. Tarvitaan SDL2.dll" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Oletko varma, että haluat käynnistää emuloidun tietokoneen uudelleen?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Haluatko varmasti sulkea 86Box:in?" + +msgid "Unable to initialize Ghostscript" +msgstr "Ghostscript:in alustus epäonnistui" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgstr "MO-levykuvat (*.IM? *.im? *.MDI *.mdi);;Kaikki tiedostot (*)" + +msgid "Welcome to 86Box!" +msgstr "Tervetuloa 86Box:iin!" + +msgid "Internal controller" +msgstr "Sisäinen ohjain" + +msgid "Exit" +msgstr "Poistu" + +msgid "No ROMs found" +msgstr "ROM-tiedostoja ei löytynyt" + +msgid "Do you want to save the settings?" +msgstr "Tallennetaanko asetukset?" + +msgid "This will hard reset the emulated machine." +msgstr "Tämä käynnistää emuloidun tietokoneen uudelleen." + +msgid "Save" +msgstr "Tallenna" + +msgid "About 86Box" +msgstr "Tietoja 86Box:sta" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Vanhojen tietokoneiden emulaattori\n\nTekijät: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho ja muut.\n\nJulkaistu GNU General Public License 2. version tai myöhemmän alaisena. Tarkempia tietoja LICENSE-tiedostossa." + +msgid "Hardware not available" +msgstr "Laitteisto ei ole saatavilla" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Varmista, että libpcap on asennettu ja että verkkoyhteytesi on libpcap-yhteensopiva." + +msgid "Invalid configuration" +msgstr "Virheelliset määritykset" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " vaaditaan ESC/P-tulostimen emuloimiseksi." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " vaaditaan PostScript-tiedostojen automaattiseen muuntamiseen PDF-tiedostoiksi.\n\nKaikki geneeriselle PostScript-tulostimelle lähetetyt asiakirjat tallennetaan PostScript (.ps) -tiedostoina." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " vaaditaan FluidSynth MIDI-ulostuloa varten." + +msgid "Entering fullscreen mode" +msgstr "Siirrytään koko näytön tilaan" + +msgid "Don't show this message again" +msgstr "Älä näytä tätä viestiä uudelleen" + +msgid "Don't exit" +msgstr "Älä poistu" + +msgid "Reset" +msgstr "Käynnistä uudelleen" + +msgid "Don't reset" +msgstr "Älä käynnistä uudelleen" + +msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgstr "CD-ROM-levykuvat (*.ISO *.iso *.CUE *.cue);;Kaikki tiedostot (*)" + +msgid "%hs Device Configuration" +msgstr "%hs - Laitteen määritykset" + +msgid "Monitor in sleep mode" +msgstr "Näyttö lepotilassa" + +msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" +msgstr "OpenGL-varjostinohjelmat (*.GLSL *.glsl);;Kaikki tiedostot (*)" + +msgid "OpenGL options" +msgstr "OpenGL-asetukset" + +msgid "You are loading an unsupported configuration" +msgstr "Olet lataamassa ei-tuettuja määrittelyjä" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "Valittuun tietokoneeseen perustuva suoritintyypin suodatus ei ole käytössä tällä emuloidulla koneella.\n\nTämä mahdollistaa muutoin yhteensopimattoman suorittimen valinnan kyseisen tietokoneen kanssa. Voit kuitenkin kohdata ongelmia tietokoneen BIOS:in tai muun ohjelmiston kanssa.\n\nTämän asetuksen käyttö ei ole virallisesti tuettua ja kaikki tehdyt virheraportit voidaan sulkea epäpätevinä." + +msgid "Continue" +msgstr "Jatka" + +msgid "Cassette: %s" +msgstr "Kasetti: %s" + +msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" +msgstr "Kasetti-tiedostot (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Kaikki tiedostot (*)" + +msgid "Cartridge %i: %ls" +msgstr "ROM-moduuli %i: %ls" + +msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" +msgstr "ROM-moduulikuvat (*.A *.a *.B *.b *.JRC *.jrc);;Kaikki tiedostot (*)" + +msgid "Error initializing renderer" +msgstr "Virhe renderöijän alustuksessa" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderöijän alustus epäonnistui. Käytä toista renderöijää." + +msgid "Hard disk (%s)" +msgstr "Kiintolevy (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL tai ESDI CD-ROM asemia ei ole koskaan ollut olemassa" + +msgid "Custom..." +msgstr "Mukautettu..." + +msgid "Custom (large)..." +msgstr "Mukautettu (suuri)..." + +msgid "Add New Hard Disk" +msgstr "Lisää uusi kiintolevy" + +msgid "Add Existing Hard Disk" +msgstr "Lisää olemassaoleva kiintolevy" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "HDI levykuvan suurin mahdollinen koko on 4 Gt." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Levykuvien suurin mahdollinen koko on 127 Gt." + +msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" +msgstr "Kiintolevykuvat (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Kaikki tiedostot (*)" + +msgid "Unable to read file" +msgstr "Tiedostoa ei voi lukea" + +msgid "Unable to write file" +msgstr "Tiedostoon ei voi kirjoittaa" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "HDI- ja HDX-levykuvien ainoa tuettu sektorikoko on 512" + +msgid "USB is not yet supported" +msgstr "USB-tukea ei vielä ole" + +msgid "Disk image file already exists" +msgstr "Levykuva on jo olemassa" + +msgid "Please specify a valid file name." +msgstr "Anna kelvollinen tiedostonimi." + +msgid "Disk image created" +msgstr "Levykuva luotu" + +msgid "Make sure the file exists and is readable." +msgstr "Varmista, että tiedosto on olemassa ja lukukelpoinen" + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Varmista, että tiedoston tallennuskansioon on kirjoitusoikeus" + +msgid "Disk image too large" +msgstr "Liian suuri levykuva" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Muista osioida ja alustaa juuri luomasi asema." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Valittu tiedosto ylikirjoitetaan. Oletko varma, että haluat käyttää sitä?" + +msgid "Unsupported disk image" +msgstr "Levynkuvaa ei tueta" + +msgid "Overwrite" +msgstr "Ylikirjoita" + +msgid "Don't overwrite" +msgstr "Älä ylikirjoita" + +msgid "Raw image (.img)" +msgstr "Raaka levykuva (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDI-levykuva (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDX-levykuva (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "Kiinteä VHD (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "Dynaaminen VHD (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Differentiaalinen VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Suuret lohkot (2 Mt)" + +msgid "Small blocks (512 KB)" +msgstr "Pienet lohkot (512 kt)" + +msgid "VHD files (*.VHD *.vhd);;All files (*)" +msgstr "VHD-tiedostot (*.VHD *.vhd);;Kaikki tiedostot (*)" + +msgid "Select the parent VHD" +msgstr "Valitse ylätason VHD" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Tämä saattaa tarkoittaa, että ylätason levykuvaa on muokattu differentiaalisen levykuvan luonnin jälkeen.\n\nNäin voi käydä myös, jos levykuvatiedostoja on siirretty tai kopioitu. Lisäksi syynä voi olla levyn luoneessa sovelluksessa oleva ohjelmistovirhe.\n\nKorjataanko aikaleimat?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Ylä- ja alatason levyjen aikaleimat eivät täsmää" + +msgid "Could not fix VHD timestamp." +msgstr "VHD aikaleimaa ei pystytty korjaamaan." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kt" + +msgid "180 kB" +msgstr "180 kt" + +msgid "320 kB" +msgstr "320 kt" + +msgid "360 kB" +msgstr "360 kt" + +msgid "640 kB" +msgstr "640 kt" + +msgid "720 kB" +msgstr "720 kt" + +msgid "1.2 MB" +msgstr "1.2 Mt" + +msgid "1.25 MB" +msgstr "1.25 Mt" + +msgid "1.44 MB" +msgstr "1.44 Mt" + +msgid "DMF (cluster 1024)" +msgstr "DMF (lohko 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (lohko 2048)" + +msgid "2.88 MB" +msgstr "2.88 Mt" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mt M.O. (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mt M.O. (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mt M.O. (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mt M.O. (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gt M.O. (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gt M.O. (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mt M.O." + +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mt M.O." + +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gt M.O." + +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gt M.O." + +msgid "Perfect RPM" +msgstr "Täydellinen RPM" + +msgid "1%% below perfect RPM" +msgstr "1%% alle täydellisen RPM:n" + +msgid "1.5%% below perfect RPM" +msgstr "1.5%% alle täydellisen RPM:n" + +msgid "2%% below perfect RPM" +msgstr "2%% alle täydellisen RPM:n" + +msgid "(System Default)" +msgstr "(Järjestelmän oletus)" + diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po index 037035b79..74459d77c 100644 --- a/src/qt/languages/fr-FR.po +++ b/src/qt/languages/fr-FR.po @@ -217,9 +217,6 @@ msgstr "&Documentation..." msgid "&About 86Box..." msgstr "&A Propos de 86Box..." -msgid "" -msgstr "" - msgid "&New image..." msgstr "&Nouvelle image..." @@ -625,8 +622,8 @@ msgstr "ZIP %03i %i (%s): %ls" msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" msgstr "Images ZIP (*.IM? *.im? *.ZDI *.zdi)" -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." -msgstr "86Box n'a pas pu trouver d'images ROM utilisables.\n\nS'il vous plait, téléchargez un ensemble ROM et extrayez-le dans le répertoire ""roms""." +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box n'a pas pu trouver d'images ROM utilisables.\n\nS'il vous plait, téléchargez un ensemble ROM et extrayez-le dans le répertoire \"roms\"." msgid "(empty)" msgstr "(vide)" @@ -646,11 +643,11 @@ msgstr "Désactivé" msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" msgstr "Tous les images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Images basiques du secteur (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Images de la surface (*.86F *.86f)" -msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "La machine ""%hs"" n'est pas disponible en raison de l'absence de ROMs dans le répertoire roms/machines. Basculer vers une machine disponible." +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "La machine \"%hs\" n'est pas disponible en raison de l'absence de ROMs dans le répertoire roms/machines. Basculer vers une machine disponible." -msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "La carte vidéo ""%hs"" n'est pas disponible en raison de l'absence de ROMs dans le répertoire roms/video. Basculer vers une carte vidéo disponible." +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "La carte vidéo \"%hs\" n'est pas disponible en raison de l'absence de ROMs dans le répertoire roms/video. Basculer vers une carte vidéo disponible." msgid "Machine" msgstr "Machine" @@ -1126,35 +1123,35 @@ msgstr "2.88 MB" msgid "ZIP 100" msgstr "ZIP 100" -msgid "3.5"" 128Mb M.O. (ISO 10090)" -msgstr "3.5"" 128Mb M.O. (ISO 10090)" +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" -msgid "3.5"" 230Mb M.O. (ISO 13963)" -msgstr "3.5"" 230Mb M.O. (ISO 13963)" +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" -msgid "3.5"" 540Mb M.O. (ISO 15498)" -msgstr "3.5"" 540Mb M.O. (ISO 15498)" +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" -msgid "3.5"" 640Mb M.O. (ISO 15498)" -msgstr "3.5"" 640Mb M.O. (ISO 15498)" +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" -msgid "3.5"" 1.3Gb M.O. (GigaMO)" -msgstr "3.5"" 1.3Gb M.O. (GigaMO)" +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" -msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgid "5.25"" 600Mb M.O." -msgstr "5.25"" 600Mb M.O." +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." -msgid "5.25"" 650Mb M.O." -msgstr "5.25"" 650Mb M.O." +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." -msgid "5.25"" 1Gb M.O." -msgstr "5.25"" 1Gb M.O." +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." -msgid "5.25"" 1.3Gb M.O." -msgstr "5.25"" 1.3Gb M.O." +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." msgid "Perfect RPM" msgstr "RPM précis" diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index a1ee9adf8..a01994047 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -217,9 +217,6 @@ msgstr "&Dokumentacija..." msgid "&About 86Box..." msgstr "&O programu 86Box..." -msgid "" -msgstr "" - msgid "&New image..." msgstr "&Nova slika..." @@ -625,8 +622,8 @@ msgstr "ZIP %03i %i (%s): %ls" msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" msgstr "ZIP slike (*.IM? *.im? *.ZDI *.zdi)" -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." -msgstr "86Box nije mogao pronaći upotrebljive ROM datoteke.\n\nMolimte posjetite sknite paket s ROM datotekama i ekstrahirajte paket u ""roms"" mapu." +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box nije mogao pronaći upotrebljive ROM datoteke.\n\nMolimte posjetite sknite paket s ROM datotekama i ekstrahirajte paket u \"roms\" mapu." msgid "(empty)" msgstr "(prazno)" @@ -646,11 +643,11 @@ msgstr "Isključeno" msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" msgstr "Sve slike (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;BOsnovne sektorske slike (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Površinske slike (*.86F *.86f)" -msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "Sistem ""%hs"" nije dostupan jer ne postoje potrebni ROM-ovi u mapu roms/machines. Prebacivanje na dostupno računalo." +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Sistem \"%hs\" nije dostupan jer ne postoje potrebni ROM-ovi u mapu roms/machines. Prebacivanje na dostupno računalo." -msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "Video kartica ""%hs"" nije dostupna jer ne postoje potrebni ROM-ovi u mapu roms/video. Prebacivanje na dostupnu video karticu." +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Video kartica \"%hs\" nije dostupna jer ne postoje potrebni ROM-ovi u mapu roms/video. Prebacivanje na dostupnu video karticu." msgid "Machine" msgstr "Sistem" @@ -908,7 +905,7 @@ msgid "You are loading an unsupported configuration" msgstr "Učitavate nepodržanu konfiguraciju" msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "Filtriranje tipa CPU-a na temelju odabranog sistema onemogućeno je za ovaj emulirani sistem.\n\nOvo omogućuje odabir procesora koji inače nisu kompatibilne s odabranog sistem. Međutim, možete naići na na nekompatibilnosti s BIOS-om sustava ili drugim softverom.\n\nOmogućavanje ove postavke nije službeno podržano i sva prijava o greškama mogu biti zatvorena kao ""invalid""." +msgstr "Filtriranje tipa CPU-a na temelju odabranog sistema onemogućeno je za ovaj emulirani sistem.\n\nOvo omogućuje odabir procesora koji inače nisu kompatibilne s odabranog sistem. Međutim, možete naići na na nekompatibilnosti s BIOS-om sustava ili drugim softverom.\n\nOmogućavanje ove postavke nije službeno podržano i sva prijava o greškama mogu biti zatvorena kao \"invalid\"." msgid "Continue" msgstr "Nastavi" @@ -1126,35 +1123,35 @@ msgstr "2,88 MB" msgid "ZIP 100" msgstr "ZIP 100" -msgid "3.5"" 128Mb M.O. (ISO 10090)" -msgstr "3,5"" 128Mb M.O. (ISO 10090)" +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3,5\" 128Mb M.O. (ISO 10090)" -msgid "3.5"" 230Mb M.O. (ISO 13963)" -msgstr "3,5"" 230Mb M.O. (ISO 13963)" +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3,5\" 230Mb M.O. (ISO 13963)" -msgid "3.5"" 540Mb M.O. (ISO 15498)" -msgstr "3,5"" 540Mb M.O. (ISO 15498)" +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3,5\" 540Mb M.O. (ISO 15498)" -msgid "3.5"" 640Mb M.O. (ISO 15498)" -msgstr "3,5"" 640Mb M.O. (ISO 15498)" +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3,5\" 640Mb M.O. (ISO 15498)" -msgid "3.5"" 1.3Gb M.O. (GigaMO)" -msgstr "3,5"" 1.3Gb M.O. (GigaMO)" +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3,5\" 1.3Gb M.O. (GigaMO)" -msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" -msgstr "3,5"" 2.3Gb M.O. (GigaMO 2)" +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3,5\" 2.3Gb M.O. (GigaMO 2)" -msgid "5.25"" 600Mb M.O." -msgstr "5,25"" 600Mb M.O." +msgid "5.25\" 600Mb M.O." +msgstr "5,25\" 600Mb M.O." -msgid "5.25"" 650Mb M.O." -msgstr "5,25"" 650Mb M.O." +msgid "5.25\" 650Mb M.O." +msgstr "5,25\" 650Mb M.O." -msgid "5.25"" 1Gb M.O." -msgstr "5,25"" 1Gb M.O." +msgid "5.25\" 1Gb M.O." +msgstr "5,25\" 1Gb M.O." -msgid "5.25"" 1.3Gb M.O." -msgstr "5,25"" 1.3Gb M.O." +msgid "5.25\" 1.3Gb M.O." +msgstr "5,25\" 1.3Gb M.O." msgid "Perfect RPM" msgstr "Savršeni broj okretaja u minuti" diff --git a/src/qt/languages/hu-HU.po b/src/qt/languages/hu-HU.po index fb59afffd..e2c410de1 100644 --- a/src/qt/languages/hu-HU.po +++ b/src/qt/languages/hu-HU.po @@ -217,9 +217,6 @@ msgstr "&Dokumentáció..." msgid "&About 86Box..." msgstr "A 86Box &névjegye..." -msgid "" -msgstr "" - msgid "&New image..." msgstr "&Új képfájl létrehozása..." @@ -625,8 +622,8 @@ msgstr "ZIP %03i %i (%s): %ls" msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" msgstr "ZIP-lemezképek (*.IM? *.im? *.ZDI *.zdi)" -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." -msgstr "A 86Box nem talált használható ROM-képeket\n\nKérem töltse le a ROM készletet és bontsa ki a ""roms"" könyvtárba." +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "A 86Box nem talált használható ROM-képeket\n\nKérem töltse le a ROM készletet és bontsa ki a \"roms\" könyvtárba." msgid "(empty)" msgstr "(üres)" @@ -646,11 +643,11 @@ msgstr "Kikapcsolva" msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" msgstr "Minden képfájl (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Alapvető szektor képfájlok (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Felületi képfájlok (*.86F *.86f)" -msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "A számítógép ""%hs"" nem elérhető a ""roms/machines"" mappából hiányzó ROM-képek miatt. Ehelyett egy másik gép kerül futtatásra." +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "A számítógép \"%hs\" nem elérhető a \"roms/machines\" mappából hiányzó ROM-képek miatt. Ehelyett egy másik gép kerül futtatásra." -msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "A videokártya ""%hs"" nem elérhető a ""roms/video"" mappából hiányzó ROM-képek miatt. Ehelyett egy másik kártya kerül futtatásra." +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "A videokártya \"%hs\" nem elérhető a \"roms/video\" mappából hiányzó ROM-képek miatt. Ehelyett egy másik kártya kerül futtatásra." msgid "Machine" msgstr "Számítógép" @@ -1126,35 +1123,35 @@ msgstr "2.88 MB" msgid "ZIP 100" msgstr "ZIP 100" -msgid "3.5"" 128Mb M.O. (ISO 10090)" -msgstr "3.5"" 128Mb M.O. (ISO 10090)" +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" -msgid "3.5"" 230Mb M.O. (ISO 13963)" -msgstr "3.5"" 230Mb M.O. (ISO 13963)" +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" -msgid "3.5"" 540Mb M.O. (ISO 15498)" -msgstr "3.5"" 540Mb M.O. (ISO 15498)" +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" -msgid "3.5"" 640Mb M.O. (ISO 15498)" -msgstr "3.5"" 640Mb M.O. (ISO 15498)" +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" -msgid "3.5"" 1.3Gb M.O. (GigaMO)" -msgstr "3.5"" 1.3Gb M.O. (GigaMO)" +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" -msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgid "5.25"" 600Mb M.O." -msgstr "5.25"" 600Mb M.O." +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." -msgid "5.25"" 650Mb M.O." -msgstr "5.25"" 650Mb M.O." +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." -msgid "5.25"" 1Gb M.O." -msgstr "5.25"" 1Gb M.O." +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." -msgid "5.25"" 1.3Gb M.O." -msgstr "5.25"" 1.3Gb M.O." +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." msgid "Perfect RPM" msgstr "Tökéletes RPM" diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po index c1aa8c763..44821a80f 100644 --- a/src/qt/languages/it-IT.po +++ b/src/qt/languages/it-IT.po @@ -217,9 +217,6 @@ msgstr "&Documentazione..." msgid "&About 86Box..." msgstr "&Informazioni su 86Box..." -msgid "" -msgstr "" - msgid "&New image..." msgstr "&Nuova immagine..." @@ -625,8 +622,8 @@ msgstr "ZIP %03i %i (%s): %ls" msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" msgstr "Immagini ZIP (*.IM? *.im? *.ZDI *.zdi)" -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." -msgstr "86Box non può trovare immagini ROM utilizzabili.\n\nPlease download a ROM set and extract it into the ""roms"" directory." +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box non può trovare immagini ROM utilizzabili.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgid "(empty)" msgstr "(empty)" @@ -646,11 +643,11 @@ msgstr "Spento" msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" msgstr "Tutte le immagini (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Immagini di settori base (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Immagini di superficie (*.86F *.86f)" -msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "La macchina ""%hs"" non è disponibile a causa di immagini ROM mancanti nella directory roms/machines. Cambiando ad una macchina disponibile." +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "La macchina \"%hs\" non è disponibile a causa di immagini ROM mancanti nella directory roms/machines. Cambiando ad una macchina disponibile." -msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "La scheda video ""%hs"" non è disponibile a causa di immagini ROM mancanti nella directory roms/video. Cambiando ad una scheda video disponibile." +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "La scheda video \"%hs\" non è disponibile a causa di immagini ROM mancanti nella directory roms/video. Cambiando ad una scheda video disponibile." msgid "Machine" msgstr "Piastra madre" @@ -1126,35 +1123,35 @@ msgstr "2.88 MB" msgid "ZIP 100" msgstr "ZIP 100" -msgid "3.5"" 128Mb M.O. (ISO 10090)" -msgstr "3.5"" 128Mb M.O. (ISO 10090)" +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" -msgid "3.5"" 230Mb M.O. (ISO 13963)" -msgstr "3.5"" 230Mb M.O. (ISO 13963)" +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" -msgid "3.5"" 540Mb M.O. (ISO 15498)" -msgstr "3.5"" 540Mb M.O. (ISO 15498)" +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" -msgid "3.5"" 640Mb M.O. (ISO 15498)" -msgstr "3.5"" 640Mb M.O. (ISO 15498)" +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" -msgid "3.5"" 1.3Gb M.O. (GigaMO)" -msgstr "3.5"" 1.3Gb M.O. (GigaMO)" +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" -msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgid "5.25"" 600Mb M.O." -msgstr "5.25"" 600Mb M.O." +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." -msgid "5.25"" 650Mb M.O." -msgstr "5.25"" 650Mb M.O." +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." -msgid "5.25"" 1Gb M.O." -msgstr "5.25"" 1Gb M.O." +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." -msgid "5.25"" 1.3Gb M.O." -msgstr "5.25"" 1.3Gb M.O." +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." msgid "Perfect RPM" msgstr "RPM perfette" diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po index 49e4e5803..156396e7e 100644 --- a/src/qt/languages/ja-JP.po +++ b/src/qt/languages/ja-JP.po @@ -217,9 +217,6 @@ msgstr "ドキュメント(&D)..." msgid "&About 86Box..." msgstr "86Boxについて(&A)..." -msgid "" -msgstr "" - msgid "&New image..." msgstr "新規のイメージ(&N)..." @@ -625,8 +622,8 @@ msgstr "ZIP %03i %i (%s): %ls" msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" msgstr "ZIPイメージ (*.IM? *.im? *.ZDI *.zdi)" -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." -msgstr "86Boxで使用可能なROMイメージが見つかりませんでした。\n\nROMセットをダウンロードして、《roms》ディレクトリに解凍してください。" +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Boxで使用可能なROMイメージが見つかりませんでした。\n\nROMセットをダウンロードして、《roms》ディレクトリに解凍してください。" msgid "(empty)" msgstr "(空)" @@ -646,10 +643,10 @@ msgstr "オフ" msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" msgstr "すべてのイメージ (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;基本的なセクターイメージ (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;表面イメージ (*.86F *.86f)" -msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "roms/machinesディレクトリにROMがないため、マシン《%hs》は使用できません。使用可能なマシンに切り替えます。" -msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." msgstr "roms/videoディレクトリにROMがないため、ビデオカード《%hs》は使用できません。使用可能なビデオカードに切り替えます。" msgid "Machine" @@ -1126,35 +1123,35 @@ msgstr "2.88 MB" msgid "ZIP 100" msgstr "ZIP 100" -msgid "3.5"" 128Mb M.O. (ISO 10090)" -msgstr "3.5"" 128Mb M.O. (ISO 10090)" +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" -msgid "3.5"" 230Mb M.O. (ISO 13963)" -msgstr "3.5"" 230Mb M.O. (ISO 13963)" +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" -msgid "3.5"" 540Mb M.O. (ISO 15498)" -msgstr "3.5"" 540Mb M.O. (ISO 15498)" +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" -msgid "3.5"" 640Mb M.O. (ISO 15498)" -msgstr "3.5"" 640Mb M.O. (ISO 15498)" +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" -msgid "3.5"" 1.3Gb M.O. (GigaMO)" -msgstr "3.5"" 1.3Gb M.O. (GigaMO)" +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" -msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgid "5.25"" 600Mb M.O." -msgstr "5.25"" 600Mb M.O." +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." -msgid "5.25"" 650Mb M.O." -msgstr "5.25"" 650Mb M.O." +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." -msgid "5.25"" 1Gb M.O." -msgstr "5.25"" 1Gb M.O." +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." -msgid "5.25"" 1.3Gb M.O." -msgstr "5.25"" 1.3Gb M.O." +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." msgid "Perfect RPM" msgstr "規定の回転数" diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index 3912445da..4d9baeaa4 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -217,9 +217,6 @@ msgstr "문서(&D)..." msgid "&About 86Box..." msgstr "86Box에 대해(&A)..." -msgid "" -msgstr "" - msgid "&New image..." msgstr "새 이미지(&N)..." @@ -625,8 +622,8 @@ msgstr "ZIP %03i %i (%s): %ls" msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" msgstr "ZIP 이미지 (*.IM? *.im? *.ZDI *.zdi)" -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." -msgstr "86Box에서 사용 가능한 ROM 이미지를 찾을 수 없습니다.\n\nROM 세트를다운로드 후 ""roms"" 디렉토리에 압축을 풀어 주세요." +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box에서 사용 가능한 ROM 이미지를 찾을 수 없습니다.\n\nROM 세트를다운로드 후 \"roms\" 디렉토리에 압축을 풀어 주세요." msgid "(empty)" msgstr "(비었음)" @@ -646,11 +643,11 @@ msgstr "꺼짐" msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" msgstr "모든 이미지 (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;기본 섹터 이미지 (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;표면 이미지 (*.86F *.86f)" -msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "roms/machines 디렉토리에 필요한 롬파일이 없어 기종 ""%hs""을(를) 사용할 수 없습니다. 사용 가능한 기종으로 변경합니다." +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "roms/machines 디렉토리에 필요한 롬파일이 없어 기종 \"%hs\"을(를) 사용할 수 없습니다. 사용 가능한 기종으로 변경합니다." -msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "roms/video 디렉토리에 필요한 롬파일이 없어 비디오 카드 ""%hs""을(를) 사용할 수 없습니다. 사용 가능한 기종으로 변경합니다." +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "roms/video 디렉토리에 필요한 롬파일이 없어 비디오 카드 \"%hs\"을(를) 사용할 수 없습니다. 사용 가능한 기종으로 변경합니다." msgid "Machine" msgstr "기종" @@ -1126,35 +1123,35 @@ msgstr "2.88 MB" msgid "ZIP 100" msgstr "ZIP 100" -msgid "3.5"" 128Mb M.O. (ISO 10090)" -msgstr "3.5"" 128Mb M.O. (ISO 10090)" +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" -msgid "3.5"" 230Mb M.O. (ISO 13963)" -msgstr "3.5"" 230Mb M.O. (ISO 13963)" +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" -msgid "3.5"" 540Mb M.O. (ISO 15498)" -msgstr "3.5"" 540Mb M.O. (ISO 15498)" +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" -msgid "3.5"" 640Mb M.O. (ISO 15498)" -msgstr "3.5"" 640Mb M.O. (ISO 15498)" +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" -msgid "3.5"" 1.3Gb M.O. (GigaMO)" -msgstr "3.5"" 1.3Gb M.O. (GigaMO)" +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" -msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgid "5.25"" 600Mb M.O." -msgstr "5.25"" 600Mb M.O." +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." -msgid "5.25"" 650Mb M.O." -msgstr "5.25"" 650Mb M.O." +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." -msgid "5.25"" 1Gb M.O." -msgstr "5.25"" 1Gb M.O." +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." -msgid "5.25"" 1.3Gb M.O." -msgstr "5.25"" 1.3Gb M.O." +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." msgid "Perfect RPM" msgstr "완벽한 회전수" diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index b69e33c09..3cb0a00bf 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -217,9 +217,6 @@ msgstr "&Documentação..." msgid "&About 86Box..." msgstr "&Sobre o 86Box..." -msgid "" -msgstr "" - msgid "&New image..." msgstr "&Nova imagem..." @@ -625,8 +622,8 @@ msgstr "ZIP %03i %i (%s): %ls" msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" msgstr "Imagens ZIP (*.IM? *.im? *.ZDI *.zdi)" -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." -msgstr "O 86Box não conseguiu encontrar nenhuma imagem de ROM utilizável.\n\nPor favor, baixe um conjunto de ROM e extraia no diretório ""roms""." +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "O 86Box não conseguiu encontrar nenhuma imagem de ROM utilizável.\n\nPor favor, baixe um conjunto de ROM e extraia no diretório \"roms\"." msgid "(empty)" msgstr "(vazio)" @@ -646,11 +643,11 @@ msgstr "Desl." msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" msgstr "Todas as imagens (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Imagens de setor básico (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Imagens de superfície (*.86F *.86f)" -msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "A máquina ""%hs"" não está disponível devido à falta de ROMs no diretório roms/machines. Mudando para uma máquina disponível." +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "A máquina \"%hs\" não está disponível devido à falta de ROMs no diretório roms/machines. Mudando para uma máquina disponível." -msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "A placa de vídeo ""%hs"" não está disponível devido à falta de ROMs no diretório roms/video. Mudando para uma placa de vídeo disponível." +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "A placa de vídeo \"%hs\" não está disponível devido à falta de ROMs no diretório roms/video. Mudando para uma placa de vídeo disponível." msgid "Machine" msgstr "Máquina" @@ -1126,35 +1123,35 @@ msgstr "2.88 MB" msgid "ZIP 100" msgstr "ZIP 100" -msgid "3.5"" 128Mb M.O. (ISO 10090)" -msgstr "3.5"" 128Mb M.O. (ISO 10090)" +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" -msgid "3.5"" 230Mb M.O. (ISO 13963)" -msgstr "3.5"" 230Mb M.O. (ISO 13963)" +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" -msgid "3.5"" 540Mb M.O. (ISO 15498)" -msgstr "3.5"" 540Mb M.O. (ISO 15498)" +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" -msgid "3.5"" 640Mb M.O. (ISO 15498)" -msgstr "3.5"" 640Mb M.O. (ISO 15498)" +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" -msgid "3.5"" 1.3Gb M.O. (GigaMO)" -msgstr "3.5"" 1.3Gb M.O. (GigaMO)" +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" -msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgid "5.25"" 600Mb M.O." -msgstr "5.25"" 600Mb M.O." +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." -msgid "5.25"" 650Mb M.O." -msgstr "5.25"" 650Mb M.O." +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." -msgid "5.25"" 1Gb M.O." -msgstr "5.25"" 1Gb M.O." +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." -msgid "5.25"" 1.3Gb M.O." -msgstr "5.25"" 1.3Gb M.O." +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." msgid "Perfect RPM" msgstr "RPM perfeita" diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index 3b4981066..a0ea962a5 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -217,9 +217,6 @@ msgstr "&Documentação..." msgid "&About 86Box..." msgstr "&Acerca do 86Box..." -msgid "" -msgstr "" - msgid "&New image..." msgstr "&Nova imagem..." @@ -625,8 +622,8 @@ msgstr "ZIP %03i %i (%s): %ls" msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" msgstr "Imagens ZIP (*.IM? *.im? *.ZDI *.zdi)" -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." -msgstr "O 86Box não conseguiu encontrar nenhuma imagem ROM utilizável.\n\nPor favor, vá a href=""https://github.com/86Box/roms/releases/latest"">descarregue um pacote ROM e instale-o na pasta ""roms""." +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "O 86Box não conseguiu encontrar nenhuma imagem ROM utilizável.\n\nPor favor, vá a href=\"https://github.com/86Box/roms/releases/latest\">descarregue um pacote ROM e instale-o na pasta \"roms\"." msgid "(empty)" msgstr "(empty)" @@ -646,11 +643,11 @@ msgstr "Desativado" msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" msgstr "Todas as imagens (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Imagens básicas de sector (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Imagens de superfície (*.86F *.86f)" -msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "A máquina ""%hs"" não está disponível devido à falta de ROMs na pasta roms/machines. A mudar para uma máquina disponível." +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "A máquina \"%hs\" não está disponível devido à falta de ROMs na pasta roms/machines. A mudar para uma máquina disponível." -msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "A placa vídeo ""%hs"" não está disponível devido à falta de ROMs na pasta roms/video. A mudar para uma placa vídeo disponível." +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "A placa vídeo \"%hs\" não está disponível devido à falta de ROMs na pasta roms/video. A mudar para uma placa vídeo disponível." msgid "Machine" msgstr "Máquina" @@ -1126,35 +1123,35 @@ msgstr "2.88 MB" msgid "ZIP 100" msgstr "ZIP 100" -msgid "3.5"" 128Mb M.O. (ISO 10090)" -msgstr "3.5"" 128Mb M.O. (ISO 10090)" +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" -msgid "3.5"" 230Mb M.O. (ISO 13963)" -msgstr "3.5"" 230Mb M.O. (ISO 13963)" +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" -msgid "3.5"" 540Mb M.O. (ISO 15498)" -msgstr "3.5"" 540Mb M.O. (ISO 15498)" +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" -msgid "3.5"" 640Mb M.O. (ISO 15498)" -msgstr "3.5"" 640Mb M.O. (ISO 15498)" +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" -msgid "3.5"" 1.3Gb M.O. (GigaMO)" -msgstr "3.5"" 1.3Gb M.O. (GigaMO)" +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" -msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgid "5.25"" 600Mb M.O." -msgstr "5.25"" 600Mb M.O." +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." -msgid "5.25"" 650Mb M.O." -msgstr "5.25"" 650Mb M.O." +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." -msgid "5.25"" 1Gb M.O." -msgstr "5.25"" 1Gb M.O." +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." -msgid "5.25"" 1.3Gb M.O." -msgstr "5.25"" 1.3Gb M.O." +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." msgid "Perfect RPM" msgstr "RPM perfeito" diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index b6ed0d130..2488b4be6 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -217,9 +217,6 @@ msgstr "&Документация..." msgid "&About 86Box..." msgstr "&О программе 86Box..." -msgid "" -msgstr "" - msgid "&New image..." msgstr "&Новый образ..." @@ -625,8 +622,8 @@ msgstr "ZIP %03i %i (%s): %ls" msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" msgstr "Образы ZIP (*.IM? *.im? *.ZDI *.zdi)" -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." -msgstr "86Box не смог найти ни одного подходящего для использования файла с ПЗУ.\n\nПожалуйста скачайте набор ПЗУ и извлеките его в каталог ""roms""." +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box не смог найти ни одного подходящего для использования файла с ПЗУ.\n\nПожалуйста скачайте набор ПЗУ и извлеките его в каталог \"roms\"." msgid "(empty)" msgstr "(пусто)" @@ -646,11 +643,11 @@ msgstr "Выкл" msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" msgstr "Все образы (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Простые посекторные образы (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface образы (*.86F *.86f)" -msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "Системная плата ""%hs"" недоступна из-за отсутствия файла её ПЗУ в каталоге roms/machines. Переключение на доступную системную плату." +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Системная плата \"%hs\" недоступна из-за отсутствия файла её ПЗУ в каталоге roms/machines. Переключение на доступную системную плату." -msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "Видеокарта ""%hs"" недоступна из-за отсутствия файла её ПЗУ в каталоге roms/video. Переключение на доступную видеокарту." +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Видеокарта \"%hs\" недоступна из-за отсутствия файла её ПЗУ в каталоге roms/video. Переключение на доступную видеокарту." msgid "Machine" msgstr "Компьютер" @@ -1126,35 +1123,35 @@ msgstr "2.88 МБ" msgid "ZIP 100" msgstr "ZIP 100" -msgid "3.5"" 128Mb M.O. (ISO 10090)" -msgstr "3.5"" 128Мб M.O. (ISO 10090)" +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Мб M.O. (ISO 10090)" -msgid "3.5"" 230Mb M.O. (ISO 13963)" -msgstr "3.5"" 230Мб M.O. (ISO 13963)" +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Мб M.O. (ISO 13963)" -msgid "3.5"" 540Mb M.O. (ISO 15498)" -msgstr "3.5"" 540Мб M.O. (ISO 15498)" +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Мб M.O. (ISO 15498)" -msgid "3.5"" 640Mb M.O. (ISO 15498)" -msgstr "3.5"" 640Мб M.O. (ISO 15498)" +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Мб M.O. (ISO 15498)" -msgid "3.5"" 1.3Gb M.O. (GigaMO)" -msgstr "3.5"" 1.3Гб M.O. (GigaMO)" +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Гб M.O. (GigaMO)" -msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5"" 2.3Гб M.O. (GigaMO 2)" +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Гб M.O. (GigaMO 2)" -msgid "5.25"" 600Mb M.O." -msgstr "5.25"" 600Мб M.O." +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Мб M.O." -msgid "5.25"" 650Mb M.O." -msgstr "5.25"" 650Мб M.O." +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Мб M.O." -msgid "5.25"" 1Gb M.O." -msgstr "5.25"" 1Гб M.O." +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Гб M.O." -msgid "5.25"" 1.3Gb M.O." -msgstr "5.25"" 1.3Гб M.O." +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Гб M.O." msgid "Perfect RPM" msgstr "Точный RPM" diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index a3ea06a85..747ae40b9 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -217,9 +217,6 @@ msgstr "&Dokumentacija..." msgid "&About 86Box..." msgstr "&O programu 86Box..." -msgid "" -msgstr "" - msgid "&New image..." msgstr "&Nova slika..." @@ -625,8 +622,8 @@ msgstr "ZIP %03i %i (%s): %ls" msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" msgstr "ZIP slike (*.IM? *.im? *.ZDI *.zdi)" -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." -msgstr "86Box ni našel nobenih uporabnih ROM slik.\n\nProsim prenesite set ROM-ov in ga razširite v mapo ""roms""." +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box ni našel nobenih uporabnih ROM slik.\n\nProsim prenesite set ROM-ov in ga razširite v mapo \"roms\"." msgid "(empty)" msgstr "(prazno)" @@ -646,11 +643,11 @@ msgstr "Izključeno" msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" msgstr "Vse slike (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Osnovne sektorske slike (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Površinske slike (*.86F *.86f)" -msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "Sistem ""%hs"" ni na voljo zaradi manjkajočih ROM-ov v mapi roms/machines. Preklapljam na drug sistem, ki je na voljo." +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Sistem \"%hs\" ni na voljo zaradi manjkajočih ROM-ov v mapi roms/machines. Preklapljam na drug sistem, ki je na voljo." -msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "Grafična kartica ""%hs"" ni na voljo zaradi manjkajočih ROM-ov v mapi roms/video. Preklapljam na drugo grafično kartico, ki je na voljo.." +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Grafična kartica \"%hs\" ni na voljo zaradi manjkajočih ROM-ov v mapi roms/video. Preklapljam na drugo grafično kartico, ki je na voljo.." msgid "Machine" msgstr "Sistem" @@ -1126,35 +1123,35 @@ msgstr "2.88 MB" msgid "ZIP 100" msgstr "ZIP 100" -msgid "3.5"" 128Mb M.O. (ISO 10090)" -msgstr "3.5"" 128Mb M.O. (ISO 10090)" +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" -msgid "3.5"" 230Mb M.O. (ISO 13963)" -msgstr "3.5"" 230Mb M.O. (ISO 13963)" +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" -msgid "3.5"" 540Mb M.O. (ISO 15498)" -msgstr "3.5"" 540Mb M.O. (ISO 15498)" +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" -msgid "3.5"" 640Mb M.O. (ISO 15498)" -msgstr "3.5"" 640Mb M.O. (ISO 15498)" +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" -msgid "3.5"" 1.3Gb M.O. (GigaMO)" -msgstr "3.5"" 1.3Gb M.O. (GigaMO)" +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" -msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgid "5.25"" 600Mb M.O." -msgstr "5.25"" 600Mb M.O." +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." -msgid "5.25"" 650Mb M.O." -msgstr "5.25"" 650Mb M.O." +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." -msgid "5.25"" 1Gb M.O." -msgstr "5.25"" 1Gb M.O." +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." -msgid "5.25"" 1.3Gb M.O." -msgstr "5.25"" 1.3Gb M.O." +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." msgid "Perfect RPM" msgstr "Popolni obrati na minuto" diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po index 22c70c6f7..ef70640df 100644 --- a/src/qt/languages/tr-TR.po +++ b/src/qt/languages/tr-TR.po @@ -217,9 +217,6 @@ msgstr "&Dökümanlar..." msgid "&About 86Box..." msgstr "&86Box Hakkında..." -msgid "" -msgstr "" - msgid "&New image..." msgstr "&Yeni imaj oluştur..." @@ -625,8 +622,8 @@ msgstr "ZIP %03i %i (%s): %ls" msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" msgstr "ZIP imajları (*.IM? *.im? *.ZDI *.zdi)" -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." -msgstr "86Box hiç bir kullanılabilir ROM imajı bulamadı.\n\nLütfen ROM setini indirin ve onu ""Roms"" klasörüne çıkarın." +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box hiç bir kullanılabilir ROM imajı bulamadı.\n\nLütfen ROM setini indirin ve onu \"Roms\" klasörüne çıkarın." msgid "(empty)" msgstr "(empty)" @@ -646,11 +643,11 @@ msgstr "Kapalı" msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" msgstr "Tüm imajlar (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basit sektör imajları (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Yüzey imajları (*.86F *.86f)" -msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr """%hs"" makinesi roms/machines klasöründe mevcut olmayan ROM imajı yüzünden mevcut değil. Mevcut olan bir makineye geçiş yapılıyor." +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr \""%hs\" makinesi roms/machines klasöründe mevcut olmayan ROM imajı yüzünden mevcut değil. Mevcut olan bir makineye geçiş yapılıyor." -msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr """%hs"" ekran kartı roms/video klasöründe mevcut olmayan ROM imajı yüzünden mevcut değil. Mevcut olan bir ekran kartına geçiş yapılıyor." +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr \""%hs\" ekran kartı roms/video klasöründe mevcut olmayan ROM imajı yüzünden mevcut değil. Mevcut olan bir ekran kartına geçiş yapılıyor." msgid "Machine" msgstr "Makine" @@ -1126,35 +1123,35 @@ msgstr "2.88 MB" msgid "ZIP 100" msgstr "ZIP 100" -msgid "3.5"" 128Mb M.O. (ISO 10090)" -msgstr "3.5"" 128Mb M.O. (ISO 10090)" +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" -msgid "3.5"" 230Mb M.O. (ISO 13963)" -msgstr "3.5"" 230Mb M.O. (ISO 13963)" +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" -msgid "3.5"" 540Mb M.O. (ISO 15498)" -msgstr "3.5"" 540Mb M.O. (ISO 15498)" +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" -msgid "3.5"" 640Mb M.O. (ISO 15498)" -msgstr "3.5"" 640Mb M.O. (ISO 15498)" +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" -msgid "3.5"" 1.3Gb M.O. (GigaMO)" -msgstr "3.5"" 1.3Gb M.O. (GigaMO)" +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" -msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgid "5.25"" 600Mb M.O." -msgstr "5.25"" 600Mb M.O." +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." -msgid "5.25"" 650Mb M.O." -msgstr "5.25"" 650Mb M.O." +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." -msgid "5.25"" 1Gb M.O." -msgstr "5.25"" 1Gb M.O." +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." -msgid "5.25"" 1.3Gb M.O." -msgstr "5.25"" 1.3Gb M.O." +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." msgid "Perfect RPM" msgstr "Mükemmel RPM" diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po index 3bebb6735..f983e347c 100644 --- a/src/qt/languages/zh-CN.po +++ b/src/qt/languages/zh-CN.po @@ -217,9 +217,6 @@ msgstr "文档(&D)..." msgid "&About 86Box..." msgstr "关于 86Box(&A)..." -msgid "" -msgstr "" - msgid "&New image..." msgstr "新建镜像(&N)..." @@ -625,8 +622,8 @@ msgstr "ZIP %03i %i (%s): %ls" msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" msgstr "ZIP 镜像 (*.IM? *.im? *.ZDI *.zdi)" -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." -msgstr "86Box 找不到任何可用的 ROM 镜像。\n\n请下载ROM 包并将其解压到 ""roms"" 文件夹。" +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box 找不到任何可用的 ROM 镜像。\n\n请下载ROM 包并将其解压到 \"roms\" 文件夹。" msgid "(empty)" msgstr "(空)" @@ -646,11 +643,11 @@ msgstr "关" msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" msgstr "所有镜像 (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;基本扇区镜像 (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;表面镜像 (*.86F *.86f)" -msgid "Machine ""%hs"" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "由于 roms/machines 文件夹中缺少合适的 ROM,机型 ""%hs"" 不可用。将切换到其他可用机型。" +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "由于 roms/machines 文件夹中缺少合适的 ROM,机型 \"%hs\" 不可用。将切换到其他可用机型。" -msgid "Video card ""%hs"" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "由于 roms/video 文件夹中缺少合适的 ROM,显卡 ""%hs"" 不可用。将切换到其他可用显卡。" +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "由于 roms/video 文件夹中缺少合适的 ROM,显卡 \"%hs\" 不可用。将切换到其他可用显卡。" msgid "Machine" msgstr "机型" @@ -1126,34 +1123,34 @@ msgstr "2.88 MB" msgid "ZIP 100" msgstr "ZIP 100" -msgid "3.5"" 128Mb M.O. (ISO 10090)" +msgid "3.5\" 128Mb M.O. (ISO 10090)" msgstr "3.5 英寸 128Mb 磁光盘 (ISO 10090)" -msgid "3.5"" 230Mb M.O. (ISO 13963)" +msgid "3.5\" 230Mb M.O. (ISO 13963)" msgstr "3.5 英寸 230Mb 磁光盘 (ISO 13963)" -msgid "3.5"" 540Mb M.O. (ISO 15498)" +msgid "3.5\" 540Mb M.O. (ISO 15498)" msgstr "3.5 英寸 540Mb 磁光盘 (ISO 15498)" -msgid "3.5"" 640Mb M.O. (ISO 15498)" +msgid "3.5\" 640Mb M.O. (ISO 15498)" msgstr "3.5 英寸 640Mb 磁光盘 (ISO 15498)" -msgid "3.5"" 1.3Gb M.O. (GigaMO)" +msgid "3.5\" 1.3Gb M.O. (GigaMO)" msgstr "3.5 英寸 1.3Gb 磁光盘 (GigaMO)" -msgid "3.5"" 2.3Gb M.O. (GigaMO 2)" +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" msgstr "3.5 英寸 2.3Gb 磁光盘 (GigaMO 2)" -msgid "5.25"" 600Mb M.O." +msgid "5.25\" 600Mb M.O." msgstr "5.25 英寸 600Mb 磁光盘" -msgid "5.25"" 650Mb M.O." +msgid "5.25\" 650Mb M.O." msgstr "5.25 英寸 650Mb 磁光盘" -msgid "5.25"" 1Gb M.O." +msgid "5.25\" 1Gb M.O." msgstr "5.25 英寸 1Gb 磁光盘" -msgid "5.25"" 1.3Gb M.O." +msgid "5.25\" 1.3Gb M.O." msgstr "5.25 英寸 1.3Gb 磁光盘" msgid "Perfect RPM" diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index b0a9baf08..731876907 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -68,7 +68,7 @@ - Tools + &Tools @@ -84,7 +84,7 @@ - Renderer + Re&nderer @@ -93,7 +93,7 @@ - Window scale factor + &Window scale factor @@ -109,7 +109,7 @@ - Fullscreen stretch mode + Fullscreen &stretch mode @@ -118,11 +118,11 @@ - EGA/(S)VGA settings + E&GA/(S)VGA settings - VGA screen type + VGA screen &type @@ -132,7 +132,7 @@ - Grayscale conversion type + Grayscale &conversion type @@ -163,12 +163,12 @@ - Media + &Media - Help + &Help @@ -238,7 +238,7 @@ - Fullscreen + &Fullscreen Ctrl+Alt+PgUp @@ -249,7 +249,7 @@ true - Software Renderer + Qt (Software) @@ -257,7 +257,7 @@ true - Hardware Renderer (OpenGL) + Qt (OpenGL) @@ -265,7 +265,7 @@ true - Hardware Renderer (OpenGL ES) + Qt (OpenGL ES) @@ -273,7 +273,7 @@ true - Hide status bar + &Hide status bar @@ -281,7 +281,7 @@ true - Resizable window + &Resizeable window @@ -289,7 +289,7 @@ true - Remember size and position + R&emember size && position @@ -302,7 +302,7 @@ true - Force 4:3 display ratio + F&orce 4:3 display ratio @@ -310,7 +310,7 @@ true - HiDPI scaling + Hi&DPI scaling @@ -318,7 +318,7 @@ true - CGA/PCjr/Tandy/EGA/(S)VGA overscan + CGA/PCjr/Tandy/E&GA/(S)VGA overscan @@ -326,7 +326,7 @@ true - Change contrast for monochrome display + Change contrast for &monochrome display @@ -334,7 +334,7 @@ true - 0.5x + &0.5x @@ -342,7 +342,7 @@ true - 1x + &1x @@ -350,7 +350,7 @@ true - 1.5x + 1.&5x @@ -358,7 +358,7 @@ true - 2x + &2x @@ -366,7 +366,7 @@ true - Nearest + &Nearest @@ -374,7 +374,7 @@ true - Linear + &Linear @@ -382,7 +382,7 @@ true - Full screen stretch + &Full screen stretch @@ -390,7 +390,7 @@ true - 4:3 + &4:3 @@ -398,7 +398,7 @@ true - Square pixels (Keep ratio) + &Square pixels (Keep ratio) @@ -406,7 +406,7 @@ true - Integer scale + &Integer scale @@ -414,7 +414,7 @@ true - Inverted VGA monitor + &Inverted VGA monitor @@ -422,7 +422,7 @@ true - RGB Color + RGB &Color @@ -430,7 +430,7 @@ true - RGB Grayscale + &RGB Grayscale @@ -438,7 +438,7 @@ true - Amber monitor + &Amber monitor @@ -446,7 +446,7 @@ true - Green monitor + &Green monitor @@ -454,7 +454,7 @@ true - White monitor + &White monitor @@ -462,7 +462,7 @@ true - BT601 (NTSC/PAL) + BT&601 (NTSC/PAL) @@ -470,7 +470,7 @@ true - BT709 (HDTV) + BT&709 (HDTV) @@ -478,12 +478,15 @@ true - Average + &Average - About Qt... + About Qt + + + false QAction::AboutQtRole @@ -499,7 +502,7 @@ - Documentation... + &Documentation... @@ -507,17 +510,17 @@ true - Update status bar icons + &Update status bar icons - Take screenshot... + Take s&creenshot... - Sound gain... + Sound &gain... @@ -525,12 +528,12 @@ true - OpenGL 3.0 Core + Open&GL (3.0 Core) - Program preferences... + &Preferences... QAction::NoRole diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index 1b03284c1..b813ddec0 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -509,7 +509,7 @@ static void reload_strings() translatedstrings[IDS_2064] = QCoreApplication::translate("", "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card.").toStdWString(); translatedstrings[IDS_2128] = QCoreApplication::translate("", "Hardware not available").toStdWString(); translatedstrings[IDS_2120] = QCoreApplication::translate("", "No ROMs found").toStdWString(); - translatedstrings[IDS_2056] = QCoreApplication::translate("", "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the roms directory.").replace("roms", "\"" ROMDIR "\"").toStdWString(); + translatedstrings[IDS_2056] = QCoreApplication::translate("", "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory.").replace("roms", ROMDIR).toStdWString(); auto flsynthstr = QCoreApplication::translate("", " is required for FluidSynth MIDI output."); if (flsynthstr.contains("libfluidsynth")) From a6ee3f1579125157faf209407cfb406b428ba52d Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 5 Jan 2022 01:33:15 +0600 Subject: [PATCH 171/278] Rebuild .qm files every time .po files are changed --- src/qt/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 4b028b208..e9cce12e0 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -181,7 +181,8 @@ foreach(po_file ${po_files}) get_filename_component(PO_FILE_NAME ${po_file} NAME_WE) add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/86box_${PO_FILE_NAME}.qm" COMMAND ${LCONVERT_EXECUTABLE} -i ${po_file} -o ${CMAKE_CURRENT_BINARY_DIR}/86box_${PO_FILE_NAME}.qm - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + DEPENDS "${po_file}") list(APPEND QM_FILES "${CMAKE_CURRENT_BINARY_DIR}/86box_${PO_FILE_NAME}.qm") list(APPEND QM_FILES "${po_file}") endforeach() From 678ab350799180900abf175831a9464bce46e802 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 5 Jan 2022 01:45:17 +0600 Subject: [PATCH 172/278] More string changes to be Win32-like --- src/qt/qt_mediamenu.cpp | 16 ++++++++-------- src/qt/qt_settingsmachine.ui | 12 ++++++------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/qt/qt_mediamenu.cpp b/src/qt/qt_mediamenu.cpp index 0f6a478d6..051154ad3 100644 --- a/src/qt/qt_mediamenu.cpp +++ b/src/qt/qt_mediamenu.cpp @@ -36,22 +36,22 @@ void MediaMenu::refresh(QMenu *parentMenu) { if(MachineStatus::hasCassette()) { cassetteMenu = parentMenu->addMenu(""); - cassetteMenu->addAction(tr("New Image"), [this]() { cassetteNewImage(); }); + cassetteMenu->addAction(tr("&New image..."), [this]() { cassetteNewImage(); }); cassetteMenu->addSeparator(); - cassetteMenu->addAction(tr("Existing Image"), [this]() { cassetteSelectImage(false); }); - cassetteMenu->addAction(tr("Existing Image (Write Protected)"), [this]() { cassetteSelectImage(true); }); + cassetteMenu->addAction(tr("&Existing image.."), [this]() { cassetteSelectImage(false); }); + cassetteMenu->addAction(tr("&Existing image (&Write-protected)..."), [this]() { cassetteSelectImage(true); }); cassetteMenu->addSeparator(); cassetteRecordPos = cassetteMenu->children().count(); - cassetteMenu->addAction(tr("Record"), [this] { pc_cas_set_mode(cassette, 1); cassetteUpdateMenu(); })->setCheckable(true); + cassetteMenu->addAction(tr("&Record"), [this] { pc_cas_set_mode(cassette, 1); cassetteUpdateMenu(); })->setCheckable(true); cassettePlayPos = cassetteMenu->children().count(); - cassetteMenu->addAction(tr("Play"), [this] { pc_cas_set_mode(cassette, 0); cassetteUpdateMenu(); })->setCheckable(true); + cassetteMenu->addAction(tr("&Play"), [this] { pc_cas_set_mode(cassette, 0); cassetteUpdateMenu(); })->setCheckable(true); cassetteRewindPos = cassetteMenu->children().count(); - cassetteMenu->addAction(tr("Rewind"), [] { pc_cas_rewind(cassette); }); + cassetteMenu->addAction(tr("&Rewind to the beginning"), [] { pc_cas_rewind(cassette); }); cassetteFastFwdPos = cassetteMenu->children().count(); - cassetteMenu->addAction(tr("Fast Forward"), [] { pc_cas_append(cassette); }); + cassetteMenu->addAction(tr("&Fast forward to the end"), [] { pc_cas_append(cassette); }); cassetteMenu->addSeparator(); cassetteEjectPos = cassetteMenu->children().count(); - cassetteMenu->addAction(tr("Eject"), [this]() { cassetteEject(); }); + cassetteMenu->addAction(tr("E&ject"), [this]() { cassetteEject(); }); cassetteUpdateMenu(); } diff --git a/src/qt/qt_settingsmachine.ui b/src/qt/qt_settingsmachine.ui index 5e902a751..f404aa629 100644 --- a/src/qt/qt_settingsmachine.ui +++ b/src/qt/qt_settingsmachine.ui @@ -44,7 +44,7 @@ - Machine Type + Machine Type: @@ -54,35 +54,35 @@ - Machine + Machine: - CPU + CPU: - FPU + FPU: - Wait States + Wait states: - Memory + Memory: From abefa65e269c758fb155ecf861175a11705c9780 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 6 Jan 2022 01:41:57 +0600 Subject: [PATCH 173/278] Even more strings changes to be in line with Win32 --- src/qt/CMakeLists.txt | 2 +- src/qt/languages/.ts | 1603 ------------------------- src/qt/languages/fi-fi.po | 3 - src/qt/languages/tr-TR.po | 4 +- src/qt/qt_deviceconfig.cpp | 4 +- src/qt/qt_main.cpp | 3 + src/qt/qt_mainwindow.ui | 19 +- src/qt/qt_settings.cpp | 14 +- src/qt/qt_settingsdisplay.ui | 2 +- src/qt/qt_settingsinput.cpp | 2 +- src/qt/qt_settingsinput.ui | 4 +- src/qt/qt_settingsmachine.cpp | 4 +- src/qt/qt_settingsmachine.ui | 8 +- src/qt/qt_settingsotherperipherals.ui | 12 +- src/qt/qt_settingssound.ui | 6 +- vcpkg.json | 2 +- 16 files changed, 52 insertions(+), 1640 deletions(-) delete mode 100644 src/qt/languages/.ts diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index e9cce12e0..d9597ec2c 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -180,7 +180,7 @@ foreach(po_file ${po_files}) get_filename_component(PO_FILE_NAME ${po_file} NAME_WE) add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/86box_${PO_FILE_NAME}.qm" - COMMAND ${LCONVERT_EXECUTABLE} -i ${po_file} -o ${CMAKE_CURRENT_BINARY_DIR}/86box_${PO_FILE_NAME}.qm + COMMAND ${LCONVERT_EXECUTABLE} -input-format po -input-file ${po_file} -output-format qm -output-file ${CMAKE_CURRENT_BINARY_DIR}/86box_${PO_FILE_NAME}.qm WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" DEPENDS "${po_file}") list(APPEND QM_FILES "${CMAKE_CURRENT_BINARY_DIR}/86box_${PO_FILE_NAME}.qm") diff --git a/src/qt/languages/.ts b/src/qt/languages/.ts deleted file mode 100644 index 085ec047d..000000000 --- a/src/qt/languages/.ts +++ /dev/null @@ -1,1603 +0,0 @@ - - - - - - - Translated by - Unknown - - - &Action - 操作(&A) - - - &Keyboard requires capture - 键盘需要捕捉(&K) - - - &Right CTRL is left ALT - 将右 CTRL 键映射为左 ALT 键(&R) - - - &Hard Reset... - 硬重置(&H)... - - - &Ctrl+Alt+Del Ctrl+F12 - Ctrl+Alt+Del(&C) Ctrl+F12 - - - Ctrl+Alt+&Esc - Ctrl+Alt+Esc(&E) - - - &Pause - 暂停(&P) - - - E&xit... - 退出(&X)... - - - &View - 查看(&V) - - - &Hide status bar - 隐藏状态栏(&H) - - - &Resizeable window - 窗口大小可调(&R) - - - R&emember size && position - 记住窗口大小和位置(&E) - - - Re&nderer - 渲染器(&N) - - - &Qt (Software) - Qt (软件)(&Q) - - - Qt (&Hardware) - Qt (硬件)(&H) - - - Qt (&OpenGL) - Qt (OpenGL)(&O) - - - Qt (OpenGL &ES) - Qt (OpenGL ES)(&E) - - - Open&GL (3.0 Core) - OpenGL (3.0 核心)(&G) - - - &VNC - VNC(&V) - - - Specify dimensions... - 指定窗口大小... - - - F&orce 4:3 display ratio - 强制 4:3 显示比例(&O) - - - &Window scale factor - 窗口缩放系数(&W) - - - &0.5x - 0.5x(&0) - - - &1x - 1x(&1) - - - 1.&5x - 1.5x(&5) - - - &2x - 2x(&2) - - - Filter method - 过滤方式 - - - &Nearest - 邻近(&N) - - - &Linear - 线性(&L) - - - Hi&DPI scaling - HiDPI 缩放(&D) - - - &Fullscreen Ctrl+Alt+PageUP - 全屏(&F) Ctrl+Alt+PageUP - - - Fullscreen &stretch mode - 全屏拉伸模式(&S) - - - &Full screen stretch - 全屏拉伸(&F) - - - &4:3 - 4:3(&4) - - - &Square pixels (Keep ratio) - 保持比例(&S) - - - &Integer scale - 整数比例(&I) - - - E&GA/(S)VGA settings - EGA/(S)VGA 设置(&G) - - - &Inverted VGA monitor - VGA 显示器反色显示(&I) - - - VGA screen &type - VGA 屏幕类型(&T) - - - RGB &Color - RGB 彩色(&C) - - - &RGB Grayscale - RGB 灰度(&R) - - - &Amber monitor - 琥珀色单色显示器(&A) - - - &Green monitor - 绿色单色显示器(&G) - - - &White monitor - 白色单色显示器(&W) - - - Grayscale &conversion type - 灰度转换类型(&C) - - - BT&601 (NTSC/PAL) - BT601 (NTSC/PAL)(&6) - - - BT&709 (HDTV) - BT709 (HDTV)(&7) - - - &Average - 平均(&A) - - - CGA/PCjr/Tandy/E&GA/(S)VGA overscan - CGA/PCjr/Tandy/EGA/(S)VGA 过扫描(&G) - - - Change contrast for &monochrome display - 更改单色显示对比度(&M) - - - &Media - 介质(&M) - - - &Tools - 工具(&T) - - - &Settings... - 设置(&S)... - - - &Update status bar icons - 更新状态栏图标(&U) - - - Take s&creenshot Ctrl+F11 - 截图(&C) Ctrl+F11 - - - &Preferences... - 首选项(&P)... - - - Enable &Discord integration - 启用 Discord 集成(&D) - - - Sound &gain... - 音量增益(&G)... - - - Begin trace Ctrl+T - 开始追踪 Ctrl+T - - - End trace Ctrl+T - 结束追踪 Ctrl+T - - - &Logging - 记录日志(&L) - - - Enable BusLogic logs Ctrl+F4 - 启用 BusLogic 日志 Ctrl+F4 - - - Enable CD-ROM logs Ctrl+F5 - 启用 CD-ROM 日志 Ctrl+F5 - - - Enable floppy (86F) logs Ctrl+F6 - 启用软盘 (86F) 日志 Ctrl+F6 - - - Enable floppy controller logs Ctrl+F7 - 启用软盘控制器日志 Ctrl+F7 - - - Enable IDE logs Ctrl+F8 - 启用 IDE 日志 Ctrl+F8 - - - Enable Serial Port logs Ctrl+F3 - 启用串口日志 Ctrl+F3 - - - Enable Network logs Ctrl+F9 - 启用网络日志 Ctrl+F9 - - - &Log breakpoint Ctrl+F10 - 日志断点(&L) Ctrl+F10 - - - Dump &video RAM Ctrl+F1 - 创建显卡内存转储(&V) Ctrl+F1 - - - &Help - 帮助(&H) - - - &Documentation... - 文档(&D)... - - - &About 86Box... - 关于 86Box(&A)... - - - &New image... - 新建镜像(&N)... - - - &Existing image... - 打开已存在的镜像(&E)... - - - Existing image (&Write-protected)... - 打开已存在的镜像并写保护(&W)... - - - &Record - 录制(&R) - - - &Play - 播放(&P) - - - &Rewind to the beginning - 倒带至起点(&R) - - - &Fast forward to the end - 快进至终点(&F) - - - E&ject - 弹出(&J) - - - &Image... - 镜像(&I)... - - - E&xport to 86F... - 导出为 86F 格式(&x)... - - - &Mute - 静音(&M) - - - E&mpty - 空置驱动器(&M) - - - &Reload previous image - 载入上一个镜像(&R) - - - &Image - 镜像(&I) - - - Target &framerate - 目标帧率(&F) - - - &Sync with video - 与视频同步(&S) - - - &25 fps - 25 fps(&2) - - - &30 fps - 30 fps(&3) - - - &50 fps - 50 fps(&5) - - - &60 fps - 60 fps(&6) - - - &75 fps - 75 fps(&7) - - - &VSync - 垂直同步(&V) - - - &Select shader... - 选择着色器(&S)... - - - &Remove shader - 移除着色器(&R) - - - Preferences - 首选项 - - - Sound Gain - 音量增益 - - - New Image - 新建镜像 - - - Settings - 设置 - - - Specify Main Window Dimensions - 指定主窗口大小 - - - OK - 确定 - - - Cancel - 取消 - - - Save these settings as &global defaults - 将以上设置存储为全局默认值(&G) - - - &Default - 默认(&D) - - - Language: - 语言: - - - Icon set: - 图标集: - - - Gain - 增益 - - - File name: - 文件名: - - - Disk size: - 磁盘大小: - - - RPM mode: - 转速 (RPM) 模式: - - - Progress: - 进度: - - - Width: - 宽度: - - - Height: - 高度: - - - Lock to this size - 锁定此大小 - - - Machine type: - 机器类型: - - - Machine: - 机型: - - - Configure - 配置 - - - CPU type: - CPU 类型: - - - Speed: - 速度: - - - FPU: - 浮点处理器 (FPU): - - - Wait states: - 等待状态 (WS): - - - MB - MB - - - Memory: - 内存: - - - Time synchronization - 时间同步 - - - Disabled - 禁用 - - - Enabled (local time) - 启用 (本地时间) - - - Enabled (UTC) - 启用 (UTC) - - - Dynamic Recompiler - 动态重编译器 - - - Video: - 显卡: - - - Voodoo Graphics - Voodoo Graphics - - - Mouse: - 鼠标: - - - Joystick: - 操纵杆: - - - Joystick 1... - 操纵杆 1... - - - Joystick 2... - 操纵杆 2... - - - Joystick 3... - 操纵杆 3... - - - Joystick 4... - 操纵杆 4... - - - Sound card: - 声卡: - - - MIDI Out Device: - MIDI 输出设备: - - - MIDI In Device: - MIDI 输入设备: - - - Standalone MPU-401 - 独立 MPU-401 - - - Innovation SSI-2001 - Innovation SSI-2001 - - - CMS / Game Blaster - CMS / Game Blaster - - - Gravis Ultrasound - Gravis Ultrasound - - - Use FLOAT32 sound - 使用单精度浮点 (FLOAT32) - - - Network type: - 网络类型: - - - PCap device: - PCap 设备: - - - Network adapter: - 网络适配器: - - - LPT1 Device: - LPT1 设备: - - - LPT2 Device: - LPT2 设备: - - - LPT3 Device: - LPT3 设备: - - - Serial port 1 - 串口 1 - - - Serial port 2 - 串口 2 - - - Serial port 3 - 串口 3 - - - Serial port 4 - 串口 4 - - - Parallel port 1 - 并口 1 - - - Parallel port 2 - 并口 2 - - - Parallel port 3 - 并口 3 - - - HD Controller: - 硬盘控制器: - - - FD Controller: - 软盘控制器: - - - Tertiary IDE Controller - 第三 IDE 控制器 - - - Quaternary IDE Controller - 第四 IDE 控制器 - - - SCSI - SCSI - - - Controller 1: - 控制器 1: - - - Controller 2: - 控制器 2: - - - Controller 3: - 控制器 3: - - - Controller 4: - 控制器 4: - - - Cassette - 磁带 - - - Hard disks: - 硬盘: - - - &New... - 新建(&N)... - - - &Existing... - 已有镜像(&E)... - - - &Remove - 移除(&R) - - - Bus: - 总线: - - - Channel: - 通道: - - - ID: - ID: - - - &Specify... - 指定(&S)... - - - Sectors: - 扇区(S): - - - Heads: - 磁头(H): - - - Cylinders: - 柱面(C): - - - Size (MB): - 大小 (MB): - - - Type: - 类型: - - - Image Format: - 镜像格式: - - - Block Size: - 块大小: - - - Floppy drives: - 软盘驱动器: - - - Turbo timings - 加速时序 - - - Check BPB - 检查 BPB - - - CD-ROM drives: - 光盘驱动器: - - - MO drives: - 磁光盘驱动器: - - - ZIP drives: - ZIP 驱动器: - - - ZIP 250 - ZIP 250 - - - ISA RTC: - ISA 实时时钟: - - - ISA Memory Expansion - ISA 内存扩充 - - - Card 1: - 扩展卡 1: - - - Card 2: - 扩展卡 2: - - - Card 3: - 扩展卡 3: - - - Card 4: - 扩展卡 4: - - - ISABugger device - ISABugger 设备 - - - POST card - 自检 (POST) 卡 - - - Segoe UI - Microsoft YaHei - - - 86Box - 86Box - - - Error - 错误 - - - Fatal error - 致命错误 - - - <reserved> - <reserved> - - - Press CTRL+ALT+PAGE DOWN to return to windowed mode. - 按 CTRL+ALT+PAGE DOWN 组合键返回到窗口模式。 - - - Speed - 速度 - - - ZIP %03i %i (%s): %ls - ZIP %03i %i (%s): %ls - - - ZIP images (*.IM? *.im? *.ZDI *.zdi) - ZIP 镜像 (*.IM? *.im? *.ZDI *.zdi) - - - 86Box could not find any usable ROM images. - -Please <a href=https://github.com/86Box/roms/releases/latest>download</a> a ROM set and extract it into the roms directory. - 86Box 找不到任何可用的 ROM 镜像。 - -请<a href=https://github.com/86Box/roms/releases/latest>下载</a>ROM 包并将其解压到 roms 文件夹。 - - - (empty) - (空) - - - ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*) - ZIP 镜像 (*.IM? *.im? *.ZDI *.zdi);;所有文件 (*) - - - Turbo - 加速 - - - On - - - - Off - - - - All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f) - 所有镜像 (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;基本扇区镜像 (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;表面镜像 (*.86F *.86f) - - - Machine %hs is not available due to missing ROMs in the roms/machines directory. Switching to an available machine. - 由于 roms/machines 文件夹中缺少合适的 ROM,机型 %hs 不可用。将切换到其他可用机型。 - - - Video card %hs is not available due to missing ROMs in the roms/video directory. Switching to an available video card. - 由于 roms/video 文件夹中缺少合适的 ROM,显卡 %hs 不可用。将切换到其他可用显卡。 - - - Machine - 机型 - - - Display - 显示 - - - Input devices - 输入设备 - - - Sound - 声音 - - - Network - 网络 - - - Ports (COM & LPT) - 端口 (COM 和 LPT) - - - Storage controllers - 存储控制器 - - - Hard disks - 硬盘 - - - Floppy & CD-ROM drives - 软盘/光盘驱动器 - - - Other removable devices - 其他可移动设备 - - - Other peripherals - 其他外围设备 - - - Surface images (*.86F *.86f) - 表面镜像 (*.86F *.86f) - - - Click to capture mouse - 单击窗口捕捉鼠标 - - - Press F8+F12 to release mouse - 按 F8+F12 释放鼠标 - - - Press F8+F12 or middle button to release mouse - 按 F8+F12 或鼠标中键释放鼠标 - - - Unable to initialize FluidSynth - 无法初始化 FluidSynth - - - Bus - 总线 - - - File - 文件 - - - C - C - - - H - H - - - S - S - - - KB - KB - - - Could not initialize the video renderer. - 无法初始化视频渲染器。 - - - Default - 默认 - - - %i Wait state(s) - %i 等待状态 (WS) - - - Type - 类型 - - - Failed to set up PCap - 设置 PCap 失败 - - - No PCap devices found - 未找到 PCap 设备 - - - Invalid PCap device - 无效 PCap 设备 - - - Standard 2-button joystick(s) - 标准 2 键操纵杆 - - - Standard 4-button joystick - 标准 4 键操纵杆 - - - Standard 6-button joystick - 标准 6 键操纵杆 - - - Standard 8-button joystick - 标准 8 键操纵杆 - - - CH Flightstick Pro - CH Flightstick Pro - - - Microsoft SideWinder Pad - Microsoft SideWinder Pad - - - Thrustmaster Flight Control System - Thrustmaster Flight Control System - - - None - - - - Unable to load keyboard accelerators. - 无法加载键盘加速器。 - - - Unable to register raw input. - 无法注册原始输入。 - - - %u - %u - - - %u MB (CHS: %i, %i, %i) - %u MB (CHS: %i, %i, %i) - - - Floppy %i (%s): %ls - 软盘 %i (%s): %ls - - - All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*) - 所有镜像 (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;高级扇区镜像 (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;基本扇区镜像 (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux 镜像 (*.FDI *.fdi);;表面镜像 (*.86F *.86f *.MFM *.mfm);;所有文件 (*) - - - Unable to initialize FreeType - 无法初始化 FreeType - - - Unable to initialize SDL, SDL2.dll is required - 无法初始化 SDL,需要 SDL2.dll - - - Are you sure you want to hard reset the emulated machine? - 确定要硬重置模拟器吗? - - - Are you sure you want to exit 86Box? - 确定要退出 86Box 吗? - - - Unable to initialize Ghostscript - 无法初始化 Ghostscript - - - MO %i (%ls): %ls - 磁光盘 %i (%ls): %ls - - - MO images (*.IM? *.im? *.MDI *.mdi);;All files (*) - 磁光盘镜像 (*.IM? *.im? *.MDI *.mdi);;所有文件 (*) - - - Welcome to 86Box! - 欢迎使用 86Box! - - - Internal controller - 内部控制器 - - - Exit - 退出 - - - No ROMs found - 找不到 ROM - - - Do you want to save the settings? - 要保存设置吗? - - - This will hard reset the emulated machine. - 此操作将硬重置模拟器。 - - - Save - 保存 - - - About 86Box - 关于 86Box - - - 86Box v - 86Box v - - - An emulator of old computers - -Authors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others. - -Released under the GNU General Public License version 2 or later. See LICENSE for more information. - 一个旧式计算机模拟器 - -作者: Sarah Walker、Miran Grca、Fred N. van Kempen (waltje)、SA1988、Tiseno100、reenigne、leilei、JohnElliott、greatpsycho 等人。 - -本软件依据 GNU 通用公共许可证第二版或更新版本发布。详情见 LICENSE 文件。 - - - Hardware not available - 硬件不可用 - - - WinPcap - WinPcap - - - libpcap - libpcap - - - Make sure libpcap is installed and that you are on a libpcap-compatible network connection. - 请确认 libpcap 已安装且使用兼容 libpcap 的网络连接。 - - - Invalid configuration - 无效配置 - - - freetype.dll - freetype.dll - - - libfreetype - libfreetype - - - is required for ESC/P printer emulation. - ESC/P 打印机模拟需要 - - - gsdll32.dll - gsdll32.dll - - - libgs - libgs - - - is required for automatic conversion of PostScript files to PDF. - -Any documents sent to the generic PostScript printer will be saved as PostScript (.ps) files. - 是将 PostScript 文件转换为 PDF 所需要的库。 - -使用通用 PostScript 打印机打印的文档将被保存为 PostScript (.ps) 文件。 - - - libfluidsynth.dll - libfluidsynth.dll - - - libfluidsynth - libfluidsynth - - - is required for FluidSynth MIDI output. - FluidSynth MIDI 输出需要 - - - Entering fullscreen mode - 正在进入全屏模式 - - - Don't show this message again - 不要再显示此消息 - - - Don't exit - 不退出 - - - Reset - 重置 - - - Don't reset - 不重置 - - - CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*) - 光盘镜像 (*.ISO *.iso *.CUE *.cue);;所有文件 (*) - - - %hs Device Configuration - %hs 设备配置 - - - Monitor in sleep mode - 显示器处在睡眠状态 - - - OpenGL Shaders (*.GLSL *.glsl);;All files (*) - OpenGL 着色器 (*.GLSL *.glsl);;所有文件 (*) - - - OpenGL options - OpenGL 选项 - - - You are loading an unsupported configuration - 正在载入一个不受支持的配置 - - - CPU type filtering based on selected machine is disabled for this emulated machine. - -This makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software. - -Enabling this setting is not officially supported and any bug reports filed may be closed as invalid. - 此模拟计算机禁用了基于选定计算机的 CPU 类型过滤。 - -能够选中与所选机器本不兼容的 CPU,但是可能会遇到与机器 BIOS 或其他软件不兼容的问题。 - -启用此设置不受官方支持,并且提交的任何错误报告可能会视为无效而关闭。 - - - Continue - 继续 - - - Cassette: %s - 磁带: %s - - - Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*) - 磁带镜像 (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;所有文件 (*) - - - Cartridge %i: %ls - 卡带 %i: %ls - - - Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*) - 卡带镜像 (*.A *.a *.B *.b *.JRC *.jrc);;所有文件 (*) - - - Error initializing renderer - 初始化渲染器时出错 - - - OpenGL (3.0 Core) renderer could not be initialized. Use another renderer. - 无法初始化 OpenGL (3.0 核心) 渲染器。请使用其他渲染器。 - - - Hard disk (%s) - 硬盘 (%s) - - - %01i:%01i - %01i:%01i - - - %01i - %01i - - - MFM/RLL or ESDI CD-ROM drives never existed - 不存在 MFM/RLL 或 ESDI CD-ROM 驱动器 - - - Custom... - 自定义... - - - Custom (large)... - 自定义 (大容量)... - - - Add New Hard Disk - 添加新硬盘 - - - Add Existing Hard Disk - 添加已存在的硬盘 - - - HDI disk images cannot be larger than 4 GB. - HDI 磁盘镜像不能超过 4 GB。 - - - Disk images cannot be larger than 127 GB. - 磁盘镜像不能超过 127 GB。 - - - Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*) - 硬盘镜像 (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;所有文件 (*) - - - Unable to read file - 无法读取文件 - - - Unable to write file - 无法写入文件 - - - HDI or HDX images with a sector size other than 512 are not supported. - 不支持非 512 字节扇区大小的 HDI 或 HDX 镜像。 - - - USB is not yet supported - 尚未支持 USB - - - Disk image file already exists - 磁盘镜像文件已存在 - - - Please specify a valid file name. - 请指定有效的文件名。 - - - Disk image created - 已创建磁盘镜像 - - - Make sure the file exists and is readable. - 请确定此文件已存在并可读取。 - - - Make sure the file is being saved to a writable directory. - 请确定此文件保存在可写目录中。 - - - Disk image too large - 磁盘镜像太大 - - - Remember to partition and format the newly-created drive. - 请记得为新创建的镜像分区并格式化。 - - - The selected file will be overwritten. Are you sure you want to use it? - 选定的文件将被覆盖。确定继续使用此文件吗? - - - Unsupported disk image - 不支持的磁盘镜像 - - - Overwrite - 覆盖 - - - Don't overwrite - 不覆盖 - - - Raw image (.img) - 原始镜像 (.img) - - - HDI image (.hdi) - HDI 镜像 (.hdi) - - - HDX image (.hdx) - HDX 镜像 (.hdx) - - - Fixed-size VHD (.vhd) - 固定大小 VHD (.vhd) - - - Dynamic-size VHD (.vhd) - 动态大小 VHD (.vhd) - - - Differencing VHD (.vhd) - 差分 VHD (.vhd) - - - Large blocks (2 MB) - 大块 (2 MB) - - - Small blocks (512 KB) - 小块 (512 KB) - - - VHD files (*.VHD *.vhd);;All files (*) - VHD 文件 (*.VHD *.vhd);;所有文件 (*) - - - Select the parent VHD - 选择父 VHD 文件 - - - This could mean that the parent image was modified after the differencing image was created. - -It can also happen if the image files were moved or copied, or by a bug in the program that created this disk. - -Do you want to fix the timestamps? - 父映像可能在创建差异镜像后被修改。 - -如果镜像文件被移动或复制,或创建此磁盘的程序中存在错误,也可能发生这种情况。 - -是否需要修复时间戳? - - - Parent and child disk timestamps do not match - 父盘与子盘的时间戳不匹配 - - - Could not fix VHD timestamp. - 无法修复 VHD 时间戳。 - - - %01i:%02i - %01i:%02i - - - MFM/RLL - MFM/RLL - - - XTA - XTA - - - ESDI - ESDI - - - IDE - IDE - - - ATAPI - ATAPI - - - MFM/RLL (%01i:%01i) - MFM/RLL (%01i:%01i) - - - XTA (%01i:%01i) - XTA (%01i:%01i) - - - ESDI (%01i:%01i) - ESDI (%01i:%01i) - - - IDE (%01i:%01i) - IDE (%01i:%01i) - - - ATAPI (%01i:%01i) - ATAPI (%01i:%01i) - - - SCSI (%01i:%02i) - SCSI (%01i:%02i) - - - CD-ROM %i (%s): %s - 光盘 %i (%s): %s - - - 160 kB - 160 kB - - - 180 kB - 180 kB - - - 320 kB - 320 kB - - - 360 kB - 360 kB - - - 640 kB - 640 kB - - - 720 kB - 720 kB - - - 1.2 MB - 1.2 MB - - - 1.25 MB - 1.25 MB - - - 1.44 MB - 1.44 MB - - - DMF (cluster 1024) - DMF (1024 簇) - - - DMF (cluster 2048) - DMF (2048 簇) - - - 2.88 MB - 2.88 MB - - - ZIP 100 - ZIP 100 - - - 3.5 128Mb M.O. (ISO 10090) - 3.5 英寸 128Mb 磁光盘 (ISO 10090) - - - 3.5 230Mb M.O. (ISO 13963) - 3.5 英寸 230Mb 磁光盘 (ISO 13963) - - - 3.5 540Mb M.O. (ISO 15498) - 3.5 英寸 540Mb 磁光盘 (ISO 15498) - - - 3.5 640Mb M.O. (ISO 15498) - 3.5 英寸 640Mb 磁光盘 (ISO 15498) - - - 3.5 1.3Gb M.O. (GigaMO) - 3.5 英寸 1.3Gb 磁光盘 (GigaMO) - - - 3.5 2.3Gb M.O. (GigaMO 2) - 3.5 英寸 2.3Gb 磁光盘 (GigaMO 2) - - - 5.25 600Mb M.O. - 5.25 英寸 600Mb 磁光盘 - - - 5.25 650Mb M.O. - 5.25 英寸 650Mb 磁光盘 - - - 5.25 1Gb M.O. - 5.25 英寸 1Gb 磁光盘 - - - 5.25 1.3Gb M.O. - 5.25 英寸 1.3Gb 磁光盘 - - - Perfect RPM - 标准转速 (RPM) - - - 1%% below perfect RPM - 低于标准转速的 1%% - - - 1.5%% below perfect RPM - 低于标准转速的 1.5%% - - - 2%% below perfect RPM - 低于标准转速的 2%% - - - (System Default) - (系统默认) - - - diff --git a/src/qt/languages/fi-fi.po b/src/qt/languages/fi-fi.po index 52c103e60..a8e3e8c5c 100644 --- a/src/qt/languages/fi-fi.po +++ b/src/qt/languages/fi-fi.po @@ -217,9 +217,6 @@ msgstr "&Dokumentaatio..." msgid "&About 86Box..." msgstr "&Tietoja 86Box:sta..." - - - msgid "&New image..." msgstr "&Uusi kasettikuva..." diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po index ef70640df..de5417e87 100644 --- a/src/qt/languages/tr-TR.po +++ b/src/qt/languages/tr-TR.po @@ -644,10 +644,10 @@ msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd? msgstr "Tüm imajlar (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basit sektör imajları (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Yüzey imajları (*.86F *.86f)" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr \""%hs\" makinesi roms/machines klasöründe mevcut olmayan ROM imajı yüzünden mevcut değil. Mevcut olan bir makineye geçiş yapılıyor." +msgstr "\"%hs\" makinesi roms/machines klasöründe mevcut olmayan ROM imajı yüzünden mevcut değil. Mevcut olan bir makineye geçiş yapılıyor." msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr \""%hs\" ekran kartı roms/video klasöründe mevcut olmayan ROM imajı yüzünden mevcut değil. Mevcut olan bir ekran kartına geçiş yapılıyor." +msgstr "\"%hs\" ekran kartı roms/video klasöründe mevcut olmayan ROM imajı yüzünden mevcut değil. Mevcut olan bir ekran kartına geçiş yapılıyor." msgid "Machine" msgstr "Makine" diff --git a/src/qt/qt_deviceconfig.cpp b/src/qt/qt_deviceconfig.cpp index 7218ab63c..65fb865ac 100644 --- a/src/qt/qt_deviceconfig.cpp +++ b/src/qt/qt_deviceconfig.cpp @@ -198,9 +198,9 @@ void DeviceConfig::ConfigureDevice(const _device_* device, int instance) { QString DeviceConfig::DeviceName(const _device_* device, const char *internalName, int bus) { if (QStringLiteral("none") == internalName) { - return "None"; + return tr("None"); } else if (QStringLiteral("internal") == internalName) { - return "Internal"; + return tr("Internal controller"); } else if (device == nullptr) { return QString(); } else { diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 91bed1298..609245ad0 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -103,6 +103,9 @@ protected: QString translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const override { + if (strcmp(sourceText, "&Fullscreen") == 0) sourceText = "&Fullscreen\tCtrl+Alt+PageUP"; + if (strcmp(sourceText, "&Ctrl+Alt+Del") == 0) sourceText = "&Ctrl+Alt+Del\tCtrl+F12"; + if (strcmp(sourceText, "Take s&creenshot") == 0) sourceText = "Take s&creenshot\tCtrl+F11"; return QTranslator::translate("", sourceText, disambiguation, n); } }; diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 731876907..424b21e07 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -47,7 +47,7 @@ 0 0 724 - 23 + 21 @@ -209,6 +209,12 @@ Ctrl+Alt+Del + + Ctrl+F12 + + + false + @@ -243,6 +249,9 @@ Ctrl+Alt+PgUp + + false + @@ -515,7 +524,13 @@ - Take s&creenshot... + Take s&creenshot + + + Ctrl+F11 + + + false diff --git a/src/qt/qt_settings.cpp b/src/qt/qt_settings.cpp index b06495ce8..0ce21a7a4 100644 --- a/src/qt/qt_settings.cpp +++ b/src/qt/qt_settings.cpp @@ -34,15 +34,15 @@ private: QStringList pages = { "Machine", "Display", - "Input Devices", + "Input devices", "Sound", "Network", "Ports (COM & LPT)", - "Storage Controllers", - "Hard Disks", - "Floppy & CD-ROM Drives", - "Other Removable Devices", - "Other Peripherals", + "Storage controllers", + "Hard disks", + "Floppy & CD-ROM drives", + "Other removable devices", + "Other peripherals", }; QStringList page_icons = { "machine", @@ -64,7 +64,7 @@ QVariant SettingsModel::data(const QModelIndex &index, int role) const { switch (role) { case Qt::DisplayRole: - return pages.at(index.row()); + return tr(pages.at(index.row()).toUtf8().data()); case Qt::DecorationRole: return QIcon(QString("%1/%2.ico").arg(ProgSettings::getIconSetPath(), page_icons[index.row()])); default: diff --git a/src/qt/qt_settingsdisplay.ui b/src/qt/qt_settingsdisplay.ui index 02ee3a1a9..58a2e6aef 100644 --- a/src/qt/qt_settingsdisplay.ui +++ b/src/qt/qt_settingsdisplay.ui @@ -32,7 +32,7 @@ - Video + Video: diff --git a/src/qt/qt_settingsinput.cpp b/src/qt/qt_settingsinput.cpp index b34cb31ca..f9b99dd7a 100644 --- a/src/qt/qt_settingsinput.cpp +++ b/src/qt/qt_settingsinput.cpp @@ -75,7 +75,7 @@ void SettingsInput::onCurrentMachineChanged(int machineId) { removeRows = joystickModel->rowCount(); selectedRow = 0; while (joyName) { - int row = Models::AddEntry(joystickModel, joyName, i); + int row = Models::AddEntry(joystickModel, tr(joyName).toUtf8().data(), i); if (i == joystick_type) { selectedRow = row - removeRows; } diff --git a/src/qt/qt_settingsinput.ui b/src/qt/qt_settingsinput.ui index 28bf16eb8..7332ad907 100644 --- a/src/qt/qt_settingsinput.ui +++ b/src/qt/qt_settingsinput.ui @@ -41,7 +41,7 @@ - Mouse + Mouse: @@ -58,7 +58,7 @@ - Joystick + Joystick: diff --git a/src/qt/qt_settingsmachine.cpp b/src/qt/qt_settingsmachine.cpp index 959c53635..dee831e39 100644 --- a/src/qt/qt_settingsmachine.cpp +++ b/src/qt/qt_settingsmachine.cpp @@ -161,10 +161,10 @@ void SettingsMachine::on_comboBoxMachine_currentIndexChanged(int index) { int divisor; if ((machine_get_ram_granularity(machineId) < 1024)) { divisor = 1; - ui->spinBoxRAM->setSuffix(" KB"); + ui->spinBoxRAM->setSuffix(QCoreApplication::translate("", "KB").prepend(' ')); } else { divisor = 1024; - ui->spinBoxRAM->setSuffix(" MB"); + ui->spinBoxRAM->setSuffix(QCoreApplication::translate("", "MB").prepend(' ')); } ui->spinBoxRAM->setMinimum(machine_get_min_ram(machineId) / divisor); ui->spinBoxRAM->setMaximum(machine_get_max_ram(machineId) / divisor); diff --git a/src/qt/qt_settingsmachine.ui b/src/qt/qt_settingsmachine.ui index f404aa629..e4c010f17 100644 --- a/src/qt/qt_settingsmachine.ui +++ b/src/qt/qt_settingsmachine.ui @@ -44,7 +44,7 @@ - Machine Type: + Machine type: @@ -61,7 +61,7 @@ - CPU: + CPU type: @@ -116,7 +116,7 @@ - Speed + Speed: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -208,7 +208,7 @@ - Enabled (Local Time) + Enabled (local time) diff --git a/src/qt/qt_settingsotherperipherals.ui b/src/qt/qt_settingsotherperipherals.ui index a47b79425..0a8d93efb 100644 --- a/src/qt/qt_settingsotherperipherals.ui +++ b/src/qt/qt_settingsotherperipherals.ui @@ -31,7 +31,7 @@ - ISA RTC + ISA RTC: @@ -73,14 +73,14 @@ - Card 2 + Card 2: - Card 3 + Card 3: @@ -97,7 +97,7 @@ - Card 1 + Card 1: @@ -117,7 +117,7 @@ - Card 4 + Card 4: @@ -129,7 +129,7 @@ - ISABugger Device + ISABugger device diff --git a/src/qt/qt_settingssound.ui b/src/qt/qt_settingssound.ui index 6290f63aa..f8bad2c61 100644 --- a/src/qt/qt_settingssound.ui +++ b/src/qt/qt_settingssound.ui @@ -29,7 +29,7 @@ - MIDI In + MIDI In Device: @@ -50,7 +50,7 @@ - Sound Card + Sound card: @@ -67,7 +67,7 @@ - MIDI Out + MIDI Out Device: diff --git a/vcpkg.json b/vcpkg.json index 193d96e6f..bc7c7c524 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -11,6 +11,6 @@ "sdl2", "rtmidi", "qt5-base", - "qt5-translations", + "qt5-translations" ] } From 970430f72127b0c7a9b0718106e9141eb3312d2a Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 6 Jan 2022 16:58:11 +0600 Subject: [PATCH 174/278] Even more strings changes --- src/qt/CMakeLists.txt | 4 +- src/qt/qt_deviceconfig.cpp | 2 +- src/qt/qt_harddiskdialog.cpp | 60 ++++++++++++------------- src/qt/qt_harddrive_common.cpp | 8 ++-- src/qt/qt_platform.cpp | 4 +- src/qt/qt_settingsfloppycdrom.cpp | 26 +++++------ src/qt/qt_settingsfloppycdrom.ui | 14 +++--- src/qt/qt_settingsharddisks.cpp | 12 ++--- src/qt/qt_settingsharddisks.ui | 4 +- src/qt/qt_settingsnetwork.cpp | 4 +- src/qt/qt_settingsnetwork.ui | 6 +-- src/qt/qt_settingsotherremovable.ui | 14 +++--- src/qt/qt_settingsports.cpp | 2 +- src/qt/qt_settingsports.ui | 20 ++++----- src/qt/qt_settingsstoragecontrollers.ui | 12 ++--- 15 files changed, 97 insertions(+), 95 deletions(-) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index d9597ec2c..b1f37c4dc 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -177,10 +177,12 @@ set(QM_FILES) file(GLOB po_files "${CMAKE_CURRENT_SOURCE_DIR}/languages/*.po") foreach(po_file ${po_files}) get_target_property(LCONVERT_EXECUTABLE Qt${QT_MAJOR}::lconvert IMPORTED_LOCATION) + get_filename_component(_lconvert_bin_dir "${LCONVERT_EXECUTABLE}" DIRECTORY) + find_program(LCONVERT_EXECUTABLE lconvert HINTS "${_lconvert_bin_dir}") get_filename_component(PO_FILE_NAME ${po_file} NAME_WE) add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/86box_${PO_FILE_NAME}.qm" - COMMAND ${LCONVERT_EXECUTABLE} -input-format po -input-file ${po_file} -output-format qm -output-file ${CMAKE_CURRENT_BINARY_DIR}/86box_${PO_FILE_NAME}.qm + COMMAND ${LCONVERT_EXECUTABLE} -i ${po_file} -o ${CMAKE_CURRENT_BINARY_DIR}/86box_${PO_FILE_NAME}.qm WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" DEPENDS "${po_file}") list(APPEND QM_FILES "${CMAKE_CURRENT_BINARY_DIR}/86box_${PO_FILE_NAME}.qm") diff --git a/src/qt/qt_deviceconfig.cpp b/src/qt/qt_deviceconfig.cpp index 65fb865ac..ede8342dd 100644 --- a/src/qt/qt_deviceconfig.cpp +++ b/src/qt/qt_deviceconfig.cpp @@ -206,6 +206,6 @@ QString DeviceConfig::DeviceName(const _device_* device, const char *internalNam } else { char temp[512]; device_get_name(device, bus, temp); - return temp; + return tr(temp, nullptr, 512); } } diff --git a/src/qt/qt_harddiskdialog.cpp b/src/qt/qt_harddiskdialog.cpp index 7a85c754a..1bdb24f97 100644 --- a/src/qt/qt_harddiskdialog.cpp +++ b/src/qt/qt_harddiskdialog.cpp @@ -30,7 +30,7 @@ HarddiskDialog::HarddiskDialog(bool existing, QWidget *parent) : ui->setupUi(this); if (existing) { - setWindowTitle("Add Existing Hard Disk"); + setWindowTitle(tr("Add Existing Hard Disk")); ui->lineEditCylinders->setEnabled(false); ui->lineEditHeads->setEnabled(false); ui->lineEditSectors->setEnabled(false); @@ -42,24 +42,24 @@ HarddiskDialog::HarddiskDialog(bool existing, QWidget *parent) : connect(ui->fileField, &FileField::fileSelected, this, &HarddiskDialog::onExistingFileSelected); } else { - setWindowTitle("Add New Hard Disk"); + setWindowTitle(tr("Add New Hard Disk")); ui->fileField->setCreateFile(true); connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &HarddiskDialog::onCreateNewFile); } auto* model = ui->comboBoxFormat->model(); model->insertRows(0, 6); - model->setData(model->index(0, 0), "Raw image (.img)"); - model->setData(model->index(1, 0), "HDI image (.hdi)"); - model->setData(model->index(2, 0), "HDX image (.hdx)"); - model->setData(model->index(3, 0), "Fixed-size VHD (.vhd)"); - model->setData(model->index(4, 0), "Dynamic-size VHD (.vhd)"); - model->setData(model->index(5, 0), "Differencing VHD (.vhd)"); + model->setData(model->index(0, 0), tr("Raw image (.img)")); + model->setData(model->index(1, 0), tr("HDI image (.hdi)")); + model->setData(model->index(2, 0), tr("HDX image (.hdx)")); + model->setData(model->index(3, 0), tr("Fixed-size VHD (.vhd)")); + model->setData(model->index(4, 0), tr("Dynamic-size VHD (.vhd)")); + model->setData(model->index(5, 0), tr("Differencing VHD (.vhd)")); model = ui->comboBoxBlockSize->model(); model->insertRows(0, 2); - model->setData(model->index(0, 0), "Large blocks (2 MiB)"); - model->setData(model->index(1, 0), "Small blocks (512 KiB)"); + model->setData(model->index(0, 0), tr("Large blocks (2 MiB)")); + model->setData(model->index(1, 0), tr("Small blocks (512 KiB)")); ui->comboBoxBlockSize->hide(); ui->labelBlockSize->hide(); @@ -74,8 +74,8 @@ HarddiskDialog::HarddiskDialog(bool existing, QWidget *parent) : QString text = QString("%1 MiB (CHS: %2, %3, %4)").arg(size_mb).arg(hdd_table[i][0]).arg(hdd_table[i][1]).arg(hdd_table[i][2]); Models::AddEntry(model, text, i); } - Models::AddEntry(model, "Custom...", 127); - Models::AddEntry(model, "Custom (large)...", 128); + Models::AddEntry(model, tr("Custom..."), 127); + Models::AddEntry(model, tr("Custom (large)..."), 128); ui->lineEditSize->setValidator(new QIntValidator()); ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); @@ -105,10 +105,10 @@ void HarddiskDialog::on_comboBoxFormat_currentIndexChanged(int index) { bool enabled; if (index == 5) { /* They switched to a diff VHD; disable the geometry fields. */ enabled = false; - ui->lineEditCylinders->setText(QStringLiteral("(N/A)")); - ui->lineEditHeads->setText(QStringLiteral("(N/A)")); - ui->lineEditSectors->setText(QStringLiteral("(N/A)")); - ui->lineEditSize->setText(QStringLiteral("(N/A)")); + ui->lineEditCylinders->setText(tr("(N/A)")); + ui->lineEditHeads->setText(tr("(N/A)")); + ui->lineEditSectors->setText(tr("(N/A)")); + ui->lineEditSize->setText(tr("(N/A)")); } else { enabled = true; ui->lineEditCylinders->setText(QString::number(cylinders_)); @@ -246,7 +246,7 @@ static MVHDGeom create_drive_vhd_diff(const QString& fileName, const QString& pa void HarddiskDialog::onCreateNewFile() { qint64 size = ui->lineEditSize->text().toUInt() << 20U; if (size > 0x1FFFFFFE00ll) { - QMessageBox::critical(this, "Disk image too large", "Disk images cannot be larger than 127 GiB"); + QMessageBox::critical(this, tr("Disk image too large"), tr("Disk images cannot be larger than 127 GiB")); return; } @@ -280,7 +280,7 @@ void HarddiskDialog::onCreateNewFile() { QFile file(fileName); if (! file.open(QIODevice::WriteOnly)) { - QMessageBox::critical(this, "Unable to write file", "Make sure the file is being saved to a writable directory"); + QMessageBox::critical(this, tr("Unable to write file"), tr("Make sure the file is being saved to a writable directory")); return; } @@ -288,7 +288,7 @@ void HarddiskDialog::onCreateNewFile() { QDataStream stream(&file); stream.setByteOrder(QDataStream::LittleEndian); if (size >= 0x100000000ll) { - QMessageBox::critical(this, "Disk image too large", "HDI disk images cannot be larger than 4 GiB"); + QMessageBox::critical(this, tr("Disk image too large"), tr("HDI disk images cannot be larger than 4 GiB")); return; } uint32_t s = static_cast(size); @@ -324,7 +324,7 @@ void HarddiskDialog::onCreateNewFile() { switch (img_format) { case 3: { - QProgressDialog progress("Creating disk image", QString(), 0, 100, this); + QProgressDialog progress(tr("Creating disk image"), QString(), 0, 100, this); connect(this, &HarddiskDialog::fileProgress, &progress, &QProgressDialog::setValue); std::thread writer([&_86box_geometry, fileName, this] { _86box_geometry = create_drive_vhd_fixed(fileName, this, cylinders_, heads_, sectors_); @@ -337,7 +337,7 @@ void HarddiskDialog::onCreateNewFile() { _86box_geometry = create_drive_vhd_dynamic(fileName, cylinders_, heads_, sectors_, block_size); break; case 5: - QString vhdParent = QFileDialog::getOpenFileName(this, "Select the parent VHD", QString(), "VHD files (*.vhd);;All files (*)"); + QString vhdParent = QFileDialog::getOpenFileName(this, tr("Select the parent VHD"), QString(), tr("VHD files (*.vhd);;All files (*)")); if (vhdParent.isEmpty()) { return; } @@ -346,7 +346,7 @@ void HarddiskDialog::onCreateNewFile() { } if (img_format != 5) { - QMessageBox::information(this, "Disk image created", "Remember to partition and format the newly-created drive"); + QMessageBox::information(this, tr("Disk image created"), tr("Remember to partition and format the newly-created drive")); } ui->lineEditCylinders->setText(QString::number(_86box_geometry.cyl)); @@ -360,7 +360,7 @@ void HarddiskDialog::onCreateNewFile() { } // formats 0, 1 and 2 - QProgressDialog progress("Creating disk image", QString(), 0, 100, this); + QProgressDialog progress(tr("Creating disk image"), QString(), 0, 100, this); connect(this, &HarddiskDialog::fileProgress, &progress, &QProgressDialog::setValue); std::thread writer([size, &file, this] { QDataStream stream(&file); @@ -385,7 +385,7 @@ void HarddiskDialog::onCreateNewFile() { progress.exec(); writer.join(); - QMessageBox::information(this, "Disk image created", "Remember to partition and format the newly-created drive"); + QMessageBox::information(this, tr("Disk image created"), tr("Remember to partition and format the newly-created drive")); } static void adjust_vhd_geometry_for_86box(MVHDGeom *vhd_geometry) { @@ -449,7 +449,7 @@ void HarddiskDialog::onExistingFileSelected(const QString &fileName) { QFile file(fileName); if (! file.open(QIODevice::ReadOnly)) { - QMessageBox::critical(this, "Unable to read file", "Make sure the file exists and is readable"); + QMessageBox::critical(this, tr("Unable to read file"), tr("Make sure the file exists and is readable")); return; } QByteArray fileNameUtf8 = fileName.toUtf8(); @@ -461,7 +461,7 @@ void HarddiskDialog::onExistingFileSelected(const QString &fileName) { stream.setByteOrder(QDataStream::LittleEndian); stream >> sector_size; if (sector_size != 512) { - QMessageBox::critical(this, "Unsupported disk image", "HDI or HDX images with a sector size other than 512 are not supported"); + QMessageBox::critical(this, tr("Unsupported disk image"), tr("HDI or HDX images with a sector size other than 512 are not supported")); return; } @@ -472,14 +472,14 @@ void HarddiskDialog::onExistingFileSelected(const QString &fileName) { } else if (image_is_vhd(fileNameUtf8.data(), 1)) { MVHDMeta* vhd = mvhd_open(fileNameUtf8.data(), 0, &vhd_error); if (vhd == nullptr) { - QMessageBox::critical(this, "Unable to read file", "Make sure the file exists and is readable"); + QMessageBox::critical(this, tr("Unable to read file"), tr("Make sure the file exists and is readable")); return; } else if (vhd_error == MVHD_ERR_TIMESTAMP) { - QMessageBox::StandardButton btn = QMessageBox::warning(this, "Parent and child disk timestamps do not match", "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?", QMessageBox::Yes | QMessageBox::No); + QMessageBox::StandardButton btn = QMessageBox::warning(this, tr("Parent and child disk timestamps do not match"), tr("This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?"), QMessageBox::Yes | QMessageBox::No); if (btn == QMessageBox::Yes) { int ts_res = mvhd_diff_update_par_timestamp(vhd, &vhd_error); if (ts_res != 0) { - QMessageBox::critical(this, "Error", "Could not fix VHD timestamp"); + QMessageBox::critical(this, tr("Error"), tr("Could not fix VHD timestamp")); mvhd_close(vhd); return; } @@ -523,7 +523,7 @@ void HarddiskDialog::onExistingFileSelected(const QString &fileName) { } if ((sectors > max_sectors) || (heads > max_heads) || (cylinders > max_cylinders)) { - QMessageBox::critical(this, "Unable to read file", "Make sure the file exists and is readable"); + QMessageBox::critical(this, tr("Unable to read file"), tr("Make sure the file exists and is readable")); return; } diff --git a/src/qt/qt_harddrive_common.cpp b/src/qt/qt_harddrive_common.cpp index 8c6b478f3..fbc60f627 100644 --- a/src/qt/qt_harddrive_common.cpp +++ b/src/qt/qt_harddrive_common.cpp @@ -29,9 +29,9 @@ void Harddrives::populateBuses(QAbstractItemModel *model) { void Harddrives::populateRemovableBuses(QAbstractItemModel *model) { model->removeRows(0, model->rowCount()); model->insertRows(0, 3); - model->setData(model->index(0, 0), "Disabled"); - model->setData(model->index(1, 0), "ATAPI"); - model->setData(model->index(2, 0), "SCSI"); + model->setData(model->index(0, 0), QObject::tr("Disabled")); + model->setData(model->index(1, 0), QObject::tr("ATAPI")); + model->setData(model->index(2, 0), QObject::tr("SCSI")); model->setData(model->index(0, 0), HDD_BUS_DISABLED, Qt::UserRole); model->setData(model->index(1, 0), HDD_BUS_ATAPI, Qt::UserRole); @@ -75,7 +75,7 @@ QString Harddrives::BusChannelName(uint8_t bus, uint8_t channel) { QString busName; switch(bus) { case HDD_BUS_DISABLED: - busName = QString("Disabled"); + busName = QString(QObject::tr("Disabled")); break; case HDD_BUS_MFM: busName = QString("MFM/RLL (%1:%2)").arg(channel >> 1).arg(channel & 1); diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index b813ddec0..6211d12de 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -495,8 +495,8 @@ static void reload_strings() { translatedstrings.clear(); translatedstrings[IDS_2077] = QCoreApplication::translate("", "Click to capture mouse").toStdWString(); - translatedstrings[IDS_2078] = QCoreApplication::translate("", "Press F8+F12 to release mouse").replace("F8+F12", MOUSE_CAPTURE_KEYSEQ).toStdWString(); - translatedstrings[IDS_2079] = QCoreApplication::translate("", "Press F8+F12 or middle button to release mouse").replace("F8+F12", MOUSE_CAPTURE_KEYSEQ).toStdWString(); + translatedstrings[IDS_2078] = QCoreApplication::translate("", "Press F8+F12 to release mouse").replace("F8+F12", MOUSE_CAPTURE_KEYSEQ).replace("CTRL-END", QLocale::system().name() == "de_DE" ? "Strg+Ende" : "CTRL-END").toStdWString(); + translatedstrings[IDS_2079] = QCoreApplication::translate("", "Press F8+F12 or middle button to release mouse").replace("F8+F12", MOUSE_CAPTURE_KEYSEQ).replace("CTRL-END", QLocale::system().name() == "de_DE" ? "Strg+Ende" : "CTRL-END").toStdWString(); translatedstrings[IDS_2080] = QCoreApplication::translate("", "Failed to initialize FluidSynth").toStdWString(); translatedstrings[IDS_4099] = QCoreApplication::translate("", "MFM/RLL or ESDI CD-ROM drives never existed").toStdWString(); translatedstrings[IDS_2093] = QCoreApplication::translate("", "Failed to set up PCap").toStdWString(); diff --git a/src/qt/qt_settingsfloppycdrom.cpp b/src/qt/qt_settingsfloppycdrom.cpp index 02c890125..f42a701d8 100644 --- a/src/qt/qt_settingsfloppycdrom.cpp +++ b/src/qt/qt_settingsfloppycdrom.cpp @@ -73,9 +73,9 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent) : model = new QStandardItemModel(0, 3, this); ui->tableViewFloppy->setModel(model); - model->setHeaderData(0, Qt::Horizontal, "Type"); - model->setHeaderData(1, Qt::Horizontal, "Turbo"); - model->setHeaderData(2, Qt::Horizontal, "Check BPB"); + model->setHeaderData(0, Qt::Horizontal, tr("Type")); + model->setHeaderData(1, Qt::Horizontal, tr("Turbo")); + model->setHeaderData(2, Qt::Horizontal, tr("Check BPB")); model->insertRows(0, FDD_NUM); /* Floppy drives category */ @@ -83,8 +83,8 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent) : auto idx = model->index(i, 0); int type = fdd_get_type(i); setFloppyType(model, idx, type); - model->setData(idx.siblingAtColumn(1), fdd_get_turbo(i) > 0 ? "On" : "Off"); - model->setData(idx.siblingAtColumn(2), fdd_get_check_bpb(i) > 0 ? "On" : "Off"); + model->setData(idx.siblingAtColumn(1), fdd_get_turbo(i) > 0 ? tr("On") : tr("Off")); + model->setData(idx.siblingAtColumn(2), fdd_get_check_bpb(i) > 0 ? tr("On") : tr("Off")); } ui->tableViewFloppy->resizeColumnsToContents(); @@ -102,8 +102,8 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent) : model = new QStandardItemModel(0, 2, this); ui->tableViewCDROM->setModel(model); - model->setHeaderData(0, Qt::Horizontal, "Bus"); - model->setHeaderData(1, Qt::Horizontal, "Speed"); + model->setHeaderData(0, Qt::Horizontal, tr("Bus")); + model->setHeaderData(1, Qt::Horizontal, tr("Speed")); model->insertRows(0, CDROM_NUM); for (int i = 0; i < CDROM_NUM; i++) { auto idx = model->index(i, 0); @@ -126,8 +126,8 @@ void SettingsFloppyCDROM::save() { auto* model = ui->tableViewFloppy->model(); for (int i = 0; i < FDD_NUM; i++) { fdd_set_type(i, model->index(i, 0).data(Qt::UserRole).toInt()); - fdd_set_turbo(i, model->index(i, 1).data() == "On" ? 1 : 0); - fdd_set_check_bpb(i, model->index(i, 2).data() == "On" ? 1 : 0); + fdd_set_turbo(i, model->index(i, 1).data() == tr("On") ? 1 : 0); + fdd_set_check_bpb(i, model->index(i, 2).data() == tr("On") ? 1 : 0); } /* Removable devices category */ @@ -150,8 +150,8 @@ void SettingsFloppyCDROM::save() { void SettingsFloppyCDROM::onFloppyRowChanged(const QModelIndex ¤t) { int type = current.siblingAtColumn(0).data(Qt::UserRole).toInt(); ui->comboBoxFloppyType->setCurrentIndex(type); - ui->checkBoxTurboTimings->setChecked(current.siblingAtColumn(1).data() == "On"); - ui->checkBoxCheckBPB->setChecked(current.siblingAtColumn(2).data() == "On"); + ui->checkBoxTurboTimings->setChecked(current.siblingAtColumn(1).data() == tr("On")); + ui->checkBoxCheckBPB->setChecked(current.siblingAtColumn(2).data() == tr("On")); } void SettingsFloppyCDROM::onCDROMRowChanged(const QModelIndex ¤t) { @@ -176,12 +176,12 @@ void SettingsFloppyCDROM::onCDROMRowChanged(const QModelIndex ¤t) { void SettingsFloppyCDROM::on_checkBoxTurboTimings_stateChanged(int arg1) { auto idx = ui->tableViewFloppy->selectionModel()->currentIndex(); - ui->tableViewFloppy->model()->setData(idx.siblingAtColumn(1), arg1 == Qt::Checked ? "On" : "Off"); + ui->tableViewFloppy->model()->setData(idx.siblingAtColumn(1), arg1 == Qt::Checked ? tr("On") : tr("Off")); } void SettingsFloppyCDROM::on_checkBoxCheckBPB_stateChanged(int arg1) { auto idx = ui->tableViewFloppy->selectionModel()->currentIndex(); - ui->tableViewFloppy->model()->setData(idx.siblingAtColumn(2), arg1 == Qt::Checked ? "On" : "Off"); + ui->tableViewFloppy->model()->setData(idx.siblingAtColumn(2), arg1 == Qt::Checked ? tr("On") : tr("Off")); } void SettingsFloppyCDROM::on_comboBoxFloppyType_activated(int index) { diff --git a/src/qt/qt_settingsfloppycdrom.ui b/src/qt/qt_settingsfloppycdrom.ui index 222728356..dfe8283ab 100644 --- a/src/qt/qt_settingsfloppycdrom.ui +++ b/src/qt/qt_settingsfloppycdrom.ui @@ -29,7 +29,7 @@ - Floppy Drives + Floppy drives: @@ -51,7 +51,7 @@ - Type + Type: @@ -61,7 +61,7 @@ - Turbo Timings + Turbo timings @@ -90,7 +90,7 @@ - CD-ROM Drives + CD-ROM drives: @@ -112,7 +112,7 @@ - Channel + Channel: @@ -122,14 +122,14 @@ - Speed + Speed: - Bus + Bus: diff --git a/src/qt/qt_settingsharddisks.cpp b/src/qt/qt_settingsharddisks.cpp index f3e399ef8..ecf8df882 100644 --- a/src/qt/qt_settingsharddisks.cpp +++ b/src/qt/qt_settingsharddisks.cpp @@ -79,12 +79,12 @@ SettingsHarddisks::SettingsHarddisks(QWidget *parent) : ui->setupUi(this); QAbstractItemModel* model = new QStandardItemModel(0, 6, this); - model->setHeaderData(ColumnBus, Qt::Horizontal, "Bus"); - model->setHeaderData(ColumnFilename, Qt::Horizontal, "File"); - model->setHeaderData(ColumnCylinders, Qt::Horizontal, "C"); - model->setHeaderData(ColumnHeads, Qt::Horizontal, "H"); - model->setHeaderData(ColumnSectors, Qt::Horizontal, "S"); - model->setHeaderData(ColumnSize, Qt::Horizontal, "MiB"); + model->setHeaderData(ColumnBus, Qt::Horizontal, tr("Bus")); + model->setHeaderData(ColumnFilename, Qt::Horizontal, tr("File")); + model->setHeaderData(ColumnCylinders, Qt::Horizontal, tr("C")); + model->setHeaderData(ColumnHeads, Qt::Horizontal, tr("H")); + model->setHeaderData(ColumnSectors, Qt::Horizontal, tr("S")); + model->setHeaderData(ColumnSize, Qt::Horizontal, tr("MiB")); ui->tableView->setModel(model); for (int i = 0; i < HDD_NUM; i++) { diff --git a/src/qt/qt_settingsharddisks.ui b/src/qt/qt_settingsharddisks.ui index 4bded8aab..762315021 100644 --- a/src/qt/qt_settingsharddisks.ui +++ b/src/qt/qt_settingsharddisks.ui @@ -44,7 +44,7 @@ - Bus + Bus: @@ -54,7 +54,7 @@ - ID + ID: diff --git a/src/qt/qt_settingsnetwork.cpp b/src/qt/qt_settingsnetwork.cpp index 201a61fea..64b60b55e 100644 --- a/src/qt/qt_settingsnetwork.cpp +++ b/src/qt/qt_settingsnetwork.cpp @@ -28,7 +28,7 @@ SettingsNetwork::SettingsNetwork(QWidget *parent) : ui->setupUi(this); auto* model = ui->comboBoxNetwork->model(); - Models::AddEntry(model, "None", NET_TYPE_NONE); + Models::AddEntry(model, tr("None"), NET_TYPE_NONE); Models::AddEntry(model, "PCap", NET_TYPE_PCAP); Models::AddEntry(model, "SLiRP", NET_TYPE_SLIRP); ui->comboBoxNetwork->setCurrentIndex(network_type); @@ -38,7 +38,7 @@ SettingsNetwork::SettingsNetwork(QWidget *parent) : QString currentPcapDevice = network_host; for (int c = 0; c < network_ndev; c++) { - Models::AddEntry(model, network_devs[c].description, c); + Models::AddEntry(model, tr(network_devs[c].description), c); if (QString(network_devs[c].device) == currentPcapDevice) { selectedRow = c; } diff --git a/src/qt/qt_settingsnetwork.ui b/src/qt/qt_settingsnetwork.ui index 045ddbbae..0b99769a7 100644 --- a/src/qt/qt_settingsnetwork.ui +++ b/src/qt/qt_settingsnetwork.ui @@ -29,14 +29,14 @@ - PCap Device + PCap device: - Network Adapter + Network adapter: @@ -62,7 +62,7 @@ - Network Type + Network type: diff --git a/src/qt/qt_settingsotherremovable.ui b/src/qt/qt_settingsotherremovable.ui index 7d2b7a6d7..81b76f10a 100644 --- a/src/qt/qt_settingsotherremovable.ui +++ b/src/qt/qt_settingsotherremovable.ui @@ -29,7 +29,7 @@ - MO Drives + MO drives: @@ -51,14 +51,14 @@ - Bus + Bus: - Channel + Channel: @@ -71,7 +71,7 @@ - Type + Type: @@ -96,7 +96,7 @@ - ZIP Drives + ZIP drives: @@ -118,7 +118,7 @@ - Bus + Bus: @@ -128,7 +128,7 @@ - Channel + Channel: diff --git a/src/qt/qt_settingsports.cpp b/src/qt/qt_settingsports.cpp index 4c6446ef4..e2a0a4fdc 100644 --- a/src/qt/qt_settingsports.cpp +++ b/src/qt/qt_settingsports.cpp @@ -29,7 +29,7 @@ SettingsPorts::SettingsPorts(QWidget *parent) : break; } - Models::AddEntry(model, lptName, c); + Models::AddEntry(model, tr(lptName), c); if (c == lpt_ports[i].device) { selectedRow = c; } diff --git a/src/qt/qt_settingsports.ui b/src/qt/qt_settingsports.ui index 4831948dc..0e52b4f3f 100644 --- a/src/qt/qt_settingsports.ui +++ b/src/qt/qt_settingsports.ui @@ -31,7 +31,7 @@ - LPT1 Device + LPT1 Device: @@ -41,7 +41,7 @@ - LPT2 Device + LPT2 Device: @@ -51,7 +51,7 @@ - LPT3 Device + LPT3 Device: @@ -65,49 +65,49 @@ - Serial Port 1 + Serial port 1 - Parallel Port 1 + Parallel port 1 - Serial Port 2 + Serial port 2 - Parallel Port 2 + Parallel port 2 - Serial Port 3 + Serial port 3 - Parallel Port 3 + Parallel port 3 - Serial Port 4 + Serial port 4 diff --git a/src/qt/qt_settingsstoragecontrollers.ui b/src/qt/qt_settingsstoragecontrollers.ui index 3d1bf7dba..00f7c9619 100644 --- a/src/qt/qt_settingsstoragecontrollers.ui +++ b/src/qt/qt_settingsstoragecontrollers.ui @@ -31,7 +31,7 @@ - HD Controller + HD Controller: @@ -45,7 +45,7 @@ - FD Controller + FD Controller: @@ -117,7 +117,7 @@ - Controller 1 + Controller 1: @@ -130,14 +130,14 @@ - Controller 4 + Controller 4: - Controller 2 + Controller 2: @@ -158,7 +158,7 @@ - Controller 3 + Controller 3: From a05ac8090db3ee69b633f9969f6dc88f0fc2f951 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 7 Jan 2022 01:58:18 +0600 Subject: [PATCH 175/278] Settings dialog string convertsion is done --- src/qt/qt_filefield.cpp | 4 +- src/qt/qt_filefield.ui | 2 +- src/qt/qt_harddiskdialog.cpp | 23 ++++++----- src/qt/qt_harddiskdialog.ui | 20 +++++----- src/qt/qt_mediamenu.cpp | 60 ++++++++++++++-------------- src/qt/qt_newfloppydialog.cpp | 8 ++-- src/qt/qt_newfloppydialog.ui | 6 +-- src/qt/qt_settingsfloppycdrom.cpp | 4 +- src/qt/qt_settingsharddisks.ui | 6 +-- src/qt/qt_settingsmachine.cpp | 2 +- src/qt/qt_settingsotherremovable.cpp | 6 +-- 11 files changed, 72 insertions(+), 69 deletions(-) diff --git a/src/qt/qt_filefield.cpp b/src/qt/qt_filefield.cpp index bbc581182..c99fc4cff 100644 --- a/src/qt/qt_filefield.cpp +++ b/src/qt/qt_filefield.cpp @@ -23,9 +23,9 @@ void FileField::setFileName(const QString &fileName) { void FileField::on_pushButton_clicked() { QString fileName; if (createFile_) { - fileName = QFileDialog::getSaveFileName(this, "Create...", QString(), filter_, &selectedFilter_); + fileName = QFileDialog::getSaveFileName(this, QString(), QString(), filter_, &selectedFilter_); } else { - fileName = QFileDialog::getOpenFileName(this, "Open...", QString(), filter_, &selectedFilter_); + fileName = QFileDialog::getOpenFileName(this, QString(), QString(), filter_, &selectedFilter_); } fileName_ = fileName; diff --git a/src/qt/qt_filefield.ui b/src/qt/qt_filefield.ui index b595378e1..462de5970 100644 --- a/src/qt/qt_filefield.ui +++ b/src/qt/qt_filefield.ui @@ -36,7 +36,7 @@ - Browse + &Specify... diff --git a/src/qt/qt_harddiskdialog.cpp b/src/qt/qt_harddiskdialog.cpp index 1bdb24f97..ff41dc773 100644 --- a/src/qt/qt_harddiskdialog.cpp +++ b/src/qt/qt_harddiskdialog.cpp @@ -58,8 +58,8 @@ HarddiskDialog::HarddiskDialog(bool existing, QWidget *parent) : model = ui->comboBoxBlockSize->model(); model->insertRows(0, 2); - model->setData(model->index(0, 0), tr("Large blocks (2 MiB)")); - model->setData(model->index(1, 0), tr("Small blocks (512 KiB)")); + model->setData(model->index(0, 0), tr("Large blocks (2 MB)")); + model->setData(model->index(1, 0), tr("Small blocks (512 KB)")); ui->comboBoxBlockSize->hide(); ui->labelBlockSize->hide(); @@ -71,7 +71,8 @@ HarddiskDialog::HarddiskDialog(bool existing, QWidget *parent) : for (int i = 0; i < 127; i++) { uint64_t size = ((uint64_t) hdd_table[i][0]) * hdd_table[i][1] * hdd_table[i][2]; uint64_t size_mb = size >> 11LL; - QString text = QString("%1 MiB (CHS: %2, %3, %4)").arg(size_mb).arg(hdd_table[i][0]).arg(hdd_table[i][1]).arg(hdd_table[i][2]); + //QString text = QString("%1 MiB (CHS: %2, %3, %4)").arg(size_mb).arg(hdd_table[i][0]).arg(hdd_table[i][1]).arg(hdd_table[i][2]); + QString text = QString::asprintf(tr("%u MB (CHS: %i, %i, %i)").toUtf8().constData(), (size_mb), (hdd_table[i][0]), (hdd_table[i][1]), (hdd_table[i][2])); Models::AddEntry(model, text, i); } Models::AddEntry(model, tr("Custom..."), 127); @@ -246,7 +247,7 @@ static MVHDGeom create_drive_vhd_diff(const QString& fileName, const QString& pa void HarddiskDialog::onCreateNewFile() { qint64 size = ui->lineEditSize->text().toUInt() << 20U; if (size > 0x1FFFFFFE00ll) { - QMessageBox::critical(this, tr("Disk image too large"), tr("Disk images cannot be larger than 127 GiB")); + QMessageBox::critical(this, tr("Disk image too large"), tr("Disk images cannot be larger than 127 GB.")); return; } @@ -280,7 +281,7 @@ void HarddiskDialog::onCreateNewFile() { QFile file(fileName); if (! file.open(QIODevice::WriteOnly)) { - QMessageBox::critical(this, tr("Unable to write file"), tr("Make sure the file is being saved to a writable directory")); + QMessageBox::critical(this, tr("Unable to write file"), tr("Make sure the file is being saved to a writable directory.")); return; } @@ -288,7 +289,7 @@ void HarddiskDialog::onCreateNewFile() { QDataStream stream(&file); stream.setByteOrder(QDataStream::LittleEndian); if (size >= 0x100000000ll) { - QMessageBox::critical(this, tr("Disk image too large"), tr("HDI disk images cannot be larger than 4 GiB")); + QMessageBox::critical(this, tr("Disk image too large"), tr("HDI disk images cannot be larger than 4 GB.")); return; } uint32_t s = static_cast(size); @@ -337,7 +338,7 @@ void HarddiskDialog::onCreateNewFile() { _86box_geometry = create_drive_vhd_dynamic(fileName, cylinders_, heads_, sectors_, block_size); break; case 5: - QString vhdParent = QFileDialog::getOpenFileName(this, tr("Select the parent VHD"), QString(), tr("VHD files (*.vhd);;All files (*)")); + QString vhdParent = QFileDialog::getOpenFileName(this, tr("Select the parent VHD"), QString(), tr("VHD files (*.VHD *.vhd);;All files (*)")); if (vhdParent.isEmpty()) { return; } @@ -346,7 +347,7 @@ void HarddiskDialog::onCreateNewFile() { } if (img_format != 5) { - QMessageBox::information(this, tr("Disk image created"), tr("Remember to partition and format the newly-created drive")); + QMessageBox::information(this, tr("Disk image created"), tr("Remember to partition and format the newly-created drive.")); } ui->lineEditCylinders->setText(QString::number(_86box_geometry.cyl)); @@ -385,7 +386,7 @@ void HarddiskDialog::onCreateNewFile() { progress.exec(); writer.join(); - QMessageBox::information(this, tr("Disk image created"), tr("Remember to partition and format the newly-created drive")); + QMessageBox::information(this, tr("Disk image created"), tr("Remember to partition and format the newly-created drive.")); } static void adjust_vhd_geometry_for_86box(MVHDGeom *vhd_geometry) { @@ -449,7 +450,7 @@ void HarddiskDialog::onExistingFileSelected(const QString &fileName) { QFile file(fileName); if (! file.open(QIODevice::ReadOnly)) { - QMessageBox::critical(this, tr("Unable to read file"), tr("Make sure the file exists and is readable")); + QMessageBox::critical(this, tr("Unable to read file"), tr("Make sure the file exists and is readable.")); return; } QByteArray fileNameUtf8 = fileName.toUtf8(); @@ -461,7 +462,7 @@ void HarddiskDialog::onExistingFileSelected(const QString &fileName) { stream.setByteOrder(QDataStream::LittleEndian); stream >> sector_size; if (sector_size != 512) { - QMessageBox::critical(this, tr("Unsupported disk image"), tr("HDI or HDX images with a sector size other than 512 are not supported")); + QMessageBox::critical(this, tr("Unsupported disk image"), tr("HDI or HDX images with a sector size other than 512 are not supported.")); return; } diff --git a/src/qt/qt_harddiskdialog.ui b/src/qt/qt_harddiskdialog.ui index 01cbb43ca..2017aca5a 100644 --- a/src/qt/qt_harddiskdialog.ui +++ b/src/qt/qt_harddiskdialog.ui @@ -22,7 +22,7 @@ - File name + File name: @@ -36,14 +36,14 @@ - Cylinders + Cylinders: - Sectors + Sectors: @@ -56,14 +56,14 @@ - Size (MiB) + Size (MB): - Heads + Heads: @@ -77,7 +77,7 @@ - Type + Type: @@ -98,7 +98,7 @@ - Bus + Bus: @@ -108,7 +108,7 @@ - Channel + Channel: @@ -122,7 +122,7 @@ - Format + Image Format: @@ -139,7 +139,7 @@ - Block Size + Block Size: diff --git a/src/qt/qt_mediamenu.cpp b/src/qt/qt_mediamenu.cpp index 051154ad3..f18b4e7c7 100644 --- a/src/qt/qt_mediamenu.cpp +++ b/src/qt/qt_mediamenu.cpp @@ -38,8 +38,8 @@ void MediaMenu::refresh(QMenu *parentMenu) { cassetteMenu = parentMenu->addMenu(""); cassetteMenu->addAction(tr("&New image..."), [this]() { cassetteNewImage(); }); cassetteMenu->addSeparator(); - cassetteMenu->addAction(tr("&Existing image.."), [this]() { cassetteSelectImage(false); }); - cassetteMenu->addAction(tr("&Existing image (&Write-protected)..."), [this]() { cassetteSelectImage(true); }); + cassetteMenu->addAction(tr("&Existing image..."), [this]() { cassetteSelectImage(false); }); + cassetteMenu->addAction(tr("Existing image (&Write-protected)..."), [this]() { cassetteSelectImage(true); }); cassetteMenu->addSeparator(); cassetteRecordPos = cassetteMenu->children().count(); cassetteMenu->addAction(tr("&Record"), [this] { pc_cas_set_mode(cassette, 1); cassetteUpdateMenu(); })->setCheckable(true); @@ -59,10 +59,10 @@ void MediaMenu::refresh(QMenu *parentMenu) { if (machine_has_cartridge(machine)) { for(int i = 0; i < 2; i++) { auto* menu = parentMenu->addMenu(""); - menu->addAction(tr("Image"), [this, i]() { cartridgeSelectImage(i); }); + menu->addAction(tr("&Image..."), [this, i]() { cartridgeSelectImage(i); }); menu->addSeparator(); cartridgeEjectPos = menu->children().count(); - menu->addAction(tr("Eject"), [this, i]() { cartridgeEject(i); }); + menu->addAction(tr("E&ject"), [this, i]() { cartridgeEject(i); }); cartridgeMenus[i] = menu; cartridgeUpdateMenu(i); } @@ -71,16 +71,16 @@ void MediaMenu::refresh(QMenu *parentMenu) { floppyMenus.clear(); MachineStatus::iterateFDD([this, parentMenu](int i) { auto* menu = parentMenu->addMenu(""); - menu->addAction(tr("New Image"), [this, i]() { floppyNewImage(i); }); + menu->addAction(tr("&New image..."), [this, i]() { floppyNewImage(i); }); menu->addSeparator(); - menu->addAction(tr("Existing Image"), [this, i]() { floppySelectImage(i, false); }); - menu->addAction(tr("Existing Image (Write Protected)"), [this, i]() { floppySelectImage(i, true); }); + menu->addAction(tr("&Existing image..."), [this, i]() { floppySelectImage(i, false); }); + menu->addAction(tr("Existing image (&Write-protected)..."), [this, i]() { floppySelectImage(i, true); }); menu->addSeparator(); floppyExportPos = menu->children().count(); - menu->addAction(tr("Export to 86F"), [this, i]() { floppyExportTo86f(i); }); + menu->addAction(tr("E&xport to 86F..."), [this, i]() { floppyExportTo86f(i); }); menu->addSeparator(); floppyEjectPos = menu->children().count(); - menu->addAction(tr("Eject"), [this, i]() { floppyEject(i); }); + menu->addAction(tr("E&ject"), [this, i]() { floppyEject(i); }); floppyMenus[i] = menu; floppyUpdateMenu(i); }); @@ -89,15 +89,15 @@ void MediaMenu::refresh(QMenu *parentMenu) { MachineStatus::iterateCDROM([this, parentMenu](int i) { auto* menu = parentMenu->addMenu(""); cdromMutePos = menu->children().count(); - menu->addAction(tr("Mute"), [this, i]() { cdromMute(i); })->setCheckable(true); + menu->addAction(tr("&Mute"), [this, i]() { cdromMute(i); })->setCheckable(true); menu->addSeparator(); cdromEmptyPos = menu->children().count(); - menu->addAction(tr("Empty"), [this, i]() { cdromEject(i); })->setCheckable(true); + menu->addAction(tr("E&mpty"), [this, i]() { cdromEject(i); })->setCheckable(true); cdromReloadPos = menu->children().count(); - menu->addAction(tr("Reload previous image"), [this, i]() { cdromReload(i); }); + menu->addAction(tr("&Reload previous image"), [this, i]() { cdromReload(i); }); menu->addSeparator(); cdromImagePos = menu->children().count(); - menu->addAction(tr("Image"), [this, i]() { cdromMount(i); })->setCheckable(true); + menu->addAction(tr("&Image"), [this, i]() { cdromMount(i); })->setCheckable(true); cdromMenus[i] = menu; cdromUpdateMenu(i); }); @@ -105,15 +105,15 @@ void MediaMenu::refresh(QMenu *parentMenu) { zipMenus.clear(); MachineStatus::iterateZIP([this, parentMenu](int i) { auto* menu = parentMenu->addMenu(""); - menu->addAction(tr("New Image"), [this, i]() { zipNewImage(i); }); + menu->addAction(tr("&New image..."), [this, i]() { zipNewImage(i); }); menu->addSeparator(); - menu->addAction(tr("Existing Image"), [this, i]() { zipSelectImage(i, false); }); - menu->addAction(tr("Existing Image (Write Protected)"), [this, i]() { zipSelectImage(i, true); }); + menu->addAction(tr("&Existing image..."), [this, i]() { zipSelectImage(i, false); }); + menu->addAction(tr("Existing image (&Write-protected)..."), [this, i]() { zipSelectImage(i, true); }); menu->addSeparator(); zipEjectPos = menu->children().count(); - menu->addAction(tr("Eject"), [this, i]() { zipEject(i); }); + menu->addAction(tr("E&ject"), [this, i]() { zipEject(i); }); zipReloadPos = menu->children().count(); - menu->addAction(tr("Reload previous image"), [this, i]() { zipReload(i); }); + menu->addAction(tr("&Reload previous image"), [this, i]() { zipReload(i); }); zipMenus[i] = menu; zipUpdateMenu(i); }); @@ -121,15 +121,15 @@ void MediaMenu::refresh(QMenu *parentMenu) { moMenus.clear(); MachineStatus::iterateMO([this, parentMenu](int i) { auto* menu = parentMenu->addMenu(""); - menu->addAction(tr("New Image"), [this, i]() { moNewImage(i); }); + menu->addAction(tr("&New image..."), [this, i]() { moNewImage(i); }); menu->addSeparator(); - menu->addAction(tr("Existing Image"), [this, i]() { moSelectImage(i, false); }); - menu->addAction(tr("Existing Image (Write Protected)"), [this, i]() { moSelectImage(i, true); }); + menu->addAction(tr("&Existing image..."), [this, i]() { moSelectImage(i, false); }); + menu->addAction(tr("Existing image (&Write-protected)..."), [this, i]() { moSelectImage(i, true); }); menu->addSeparator(); moEjectPos = menu->children().count(); - menu->addAction(tr("Eject"), [this, i]() { moEject(i); }); + menu->addAction(tr("E&ject"), [this, i]() { moEject(i); }); moReloadPos = menu->children().count(); - menu->addAction(tr("Reload previous image"), [this, i]() { moReload(i); }); + menu->addAction(tr("&Reload previous image"), [this, i]() { moReload(i); }); moMenus[i] = menu; moUpdateMenu(i); }); @@ -195,7 +195,7 @@ void MediaMenu::cassetteUpdateMenu() { recordMenu->setChecked(isSaving); playMenu->setChecked(! isSaving); - cassetteMenu->setTitle(tr("Cassette: %1").arg(name.isEmpty() ? tr("(empty)") : name)); + cassetteMenu->setTitle(QString::asprintf(tr("Cassette: %s").toUtf8().constData(), (name.isEmpty() ? tr("(empty)") : name).toUtf8().constData())); } void MediaMenu::cartridgeSelectImage(int i) { @@ -227,7 +227,8 @@ void MediaMenu::cartridgeUpdateMenu(int i) { auto childs = menu->children(); auto* ejectMenu = dynamic_cast(childs[cartridgeEjectPos]); ejectMenu->setEnabled(!name.isEmpty()); - menu->setTitle(tr("Cartridge %1: %2").arg(QString::number(i+1), name.isEmpty() ? tr("(empty)") : name)); + //menu->setTitle(tr("Cartridge %1: %2").arg(QString::number(i+1), name.isEmpty() ? tr("(empty)") : name)); + menu->setTitle(QString::asprintf(tr("Cartridge %i: %ls").toUtf8().constData(), i + 1, name.isEmpty() ? tr("(empty)").toStdU16String().data() : name.toStdU16String().data())); } void MediaMenu::floppyNewImage(int i) { @@ -241,7 +242,7 @@ void MediaMenu::floppyNewImage(int i) { } void MediaMenu::floppySelectImage(int i, bool wp) { - auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), tr("All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.CQ *.D?? *.d *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)")); + auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), tr("All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)")); floppyMount(i, filename, wp); } @@ -267,7 +268,7 @@ void MediaMenu::floppyEject(int i) { } void MediaMenu::floppyExportTo86f(int i) { - auto filename = QFileDialog::getSaveFileName(parentWidget, tr("Save as 86f"), QString(), tr("Surface images (*.86f)")); + auto filename = QFileDialog::getSaveFileName(parentWidget, tr("Save as 86f"), QString(), tr("Surface images (*.86F *.86f)")); if (! filename.isEmpty()) { QByteArray filenameBytes = filename.toUtf8(); plat_pause(1); @@ -290,7 +291,8 @@ void MediaMenu::floppyUpdateMenu(int i) { exportMenu->setEnabled(!name.isEmpty()); int type = fdd_get_type(i); - floppyMenus[i]->setTitle(tr("Floppy %1 (%2): %3").arg(QString::number(i+1), fdd_getname(type), name.isEmpty() ? tr("(empty)") : name)); + //floppyMenus[i]->setTitle(tr("Floppy %1 (%2): %3").arg(QString::number(i+1), fdd_getname(type), name.isEmpty() ? tr("(empty)") : name)); + floppyMenus[i]->setTitle(QString::asprintf("Floppy %i (%s): %ls", i + 1, fdd_getname(type), name.isEmpty() ? tr("(empty)").toStdU16String().data() : name.toStdU16String().data())); } void MediaMenu::cdromMute(int i) { @@ -304,7 +306,7 @@ void MediaMenu::cdromMount(int i) { QString dir; QFileInfo fi(cdrom[i].image_path); - auto filename = QFileDialog::getOpenFileName(parentWidget, tr("Open"), QString(), tr("CD-ROM images (*.ISO *.CUE *.iso *.cue);;All files (*)")); + auto filename = QFileDialog::getOpenFileName(parentWidget, tr("Open"), QString(), tr("CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)")); if (filename.isEmpty()) { auto* imageMenu = dynamic_cast(cdromMenus[i]->children()[cdromImagePos]); imageMenu->setChecked(false); diff --git a/src/qt/qt_newfloppydialog.cpp b/src/qt/qt_newfloppydialog.cpp index 3be74c64e..cc90946fc 100644 --- a/src/qt/qt_newfloppydialog.cpp +++ b/src/qt/qt_newfloppydialog.cpp @@ -99,17 +99,17 @@ NewFloppyDialog::NewFloppyDialog(MediaType type, QWidget *parent) : switch (type) { case MediaType::Floppy: for (int i = 0; i < floppyTypes.size(); ++i) { - Models::AddEntry(model, floppyTypes[i], i); + Models::AddEntry(model, tr(floppyTypes[i].toUtf8().data()), i); } break; case MediaType::Zip: for (int i = 0; i < zipTypes.size(); ++i) { - Models::AddEntry(model, zipTypes[i], i); + Models::AddEntry(model, tr(zipTypes[i].toUtf8().data()), i); } break; case MediaType::Mo: for (int i = 0; i < moTypes.size(); ++i) { - Models::AddEntry(model, moTypes[i], i); + Models::AddEntry(model, tr(moTypes[i].toUtf8().data()), i); } break; } @@ -198,7 +198,7 @@ void NewFloppyDialog::onCreate() { break; } - QMessageBox::critical(this, "Unable to write file", "Make sure the file is being saved to a writable directory"); + QMessageBox::critical(this, tr("Unable to write file"), tr("Make sure the file is being saved to a writable directory")); reject(); } diff --git a/src/qt/qt_newfloppydialog.ui b/src/qt/qt_newfloppydialog.ui index 5e39e8848..e016f3a9b 100644 --- a/src/qt/qt_newfloppydialog.ui +++ b/src/qt/qt_newfloppydialog.ui @@ -43,14 +43,14 @@ - File Name + File name: - Disk Size + Disk size: @@ -60,7 +60,7 @@ - RPM Mode + RPM mode: diff --git a/src/qt/qt_settingsfloppycdrom.cpp b/src/qt/qt_settingsfloppycdrom.cpp index f42a701d8..3cd040c9b 100644 --- a/src/qt/qt_settingsfloppycdrom.cpp +++ b/src/qt/qt_settingsfloppycdrom.cpp @@ -23,7 +23,7 @@ static void setFloppyType(QAbstractItemModel* model, const QModelIndex& idx, int icon = QIcon(ProgSettings::getIconSetPath() + "/floppy_35.ico"); } - model->setData(idx, fdd_getname(type)); + model->setData(idx, QObject::tr(fdd_getname(type))); model->setData(idx, type, Qt::UserRole); model->setData(idx, icon, Qt::DecorationRole); } @@ -62,7 +62,7 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent) : auto* model = ui->comboBoxFloppyType->model(); int i = 0; while (true) { - QString name = fdd_getname(i); + QString name = tr(fdd_getname(i)); if (name.isEmpty()) { break; } diff --git a/src/qt/qt_settingsharddisks.ui b/src/qt/qt_settingsharddisks.ui index 762315021..b670dd512 100644 --- a/src/qt/qt_settingsharddisks.ui +++ b/src/qt/qt_settingsharddisks.ui @@ -68,21 +68,21 @@ - New + &New... - Existing + &Existing... - Remove + &Remove diff --git a/src/qt/qt_settingsmachine.cpp b/src/qt/qt_settingsmachine.cpp index dee831e39..5260da837 100644 --- a/src/qt/qt_settingsmachine.cpp +++ b/src/qt/qt_settingsmachine.cpp @@ -48,7 +48,7 @@ SettingsMachine::SettingsMachine(QWidget *parent) : auto* waitStatesModel = ui->comboBoxWaitStates->model(); waitStatesModel->insertRows(0, 9); auto idx = waitStatesModel->index(0, 0); - waitStatesModel->setData(idx, "Default", Qt::DisplayRole); + waitStatesModel->setData(idx, tr("Default"), Qt::DisplayRole); waitStatesModel->setData(idx, 0, Qt::UserRole); for (int i = 0; i < 8; ++i) { idx = waitStatesModel->index(i+1, 0); diff --git a/src/qt/qt_settingsotherremovable.cpp b/src/qt/qt_settingsotherremovable.cpp index 64bc8acdc..5aafae0b8 100644 --- a/src/qt/qt_settingsotherremovable.cpp +++ b/src/qt/qt_settingsotherremovable.cpp @@ -40,7 +40,7 @@ static void setMOBus(QAbstractItemModel* model, const QModelIndex& idx, uint8_t static void setMOType(QAbstractItemModel* model, const QModelIndex& idx, uint32_t type) { auto i = idx.siblingAtColumn(1); if (idx.siblingAtColumn(0).data(Qt::UserRole).toUInt() == MO_BUS_DISABLED) { - model->setData(i, "None"); + model->setData(i, QCoreApplication::translate("", "None")); } else { model->setData(i, moDriveTypeName(type)); } @@ -86,8 +86,8 @@ SettingsOtherRemovable::SettingsOtherRemovable(QWidget *parent) : model = new QStandardItemModel(0, 2, this); ui->tableViewMO->setModel(model); - model->setHeaderData(0, Qt::Horizontal, "Bus"); - model->setHeaderData(1, Qt::Horizontal, "Type"); + model->setHeaderData(0, Qt::Horizontal, tr("Bus")); + model->setHeaderData(1, Qt::Horizontal, tr("Type")); model->insertRows(0, MO_NUM); for (int i = 0; i < MO_NUM; i++) { auto idx = model->index(i, 0); From 1e4a256d3bd22dc123a62e075d87990f8a49f8db Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 7 Jan 2022 02:03:42 +0600 Subject: [PATCH 176/278] Sound gain Win32 string conversion --- src/qt/qt_soundgain.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_soundgain.ui b/src/qt/qt_soundgain.ui index b15ce911e..be7f5aaa5 100644 --- a/src/qt/qt_soundgain.ui +++ b/src/qt/qt_soundgain.ui @@ -67,7 +67,7 @@ - Gain: + Gain From e4d0ca4d9784f0267737971d32fcf21b4b1f7fad Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 7 Jan 2022 02:06:18 +0600 Subject: [PATCH 177/278] And another one for Time sync string --- src/qt/qt_settingsmachine.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_settingsmachine.ui b/src/qt/qt_settingsmachine.ui index e4c010f17..e61eca023 100644 --- a/src/qt/qt_settingsmachine.ui +++ b/src/qt/qt_settingsmachine.ui @@ -195,7 +195,7 @@ - Time Synchronization + Time synchronization From 279287565ad3ce1195f5187964896cb8d58838d4 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 7 Jan 2022 14:20:13 +0600 Subject: [PATCH 178/278] Fix compilation on FreeBSD target with Qt --- src/network/slirp/CMakeLists.txt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/network/slirp/CMakeLists.txt b/src/network/slirp/CMakeLists.txt index 7d8c9a044..1f0458bdb 100644 --- a/src/network/slirp/CMakeLists.txt +++ b/src/network/slirp/CMakeLists.txt @@ -24,11 +24,10 @@ endif() if(QT) if(UNIX AND NOT APPLE) find_package(PkgConfig REQUIRED) - pkg_check_modules(GLIB_PKG glib-2.0) + pkg_check_modules(GLIB_PKG IMPORTED_TARGET glib-2.0) if (GLIB_PKG_FOUND) - include_directories(${GLIB_PKG_INCLUDE_DIRS}) - target_link_libraries(slirp glib-2.0) target_compile_definitions(slirp PRIVATE TINYGLIB_USE_GLIB) + target_link_libraries(slirp PkgConfig::GLIB_PKG) else() message(ERROR "GLib development headers are required when compiling with Qt on Unix") endif() From 2cdb87f4808d8ce1142e2a3cc2cb6326b04976a9 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 7 Jan 2022 14:50:38 +0600 Subject: [PATCH 179/278] Fix plat_mmap on FreeBSD --- src/unix/unix.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/unix/unix.c b/src/unix/unix.c index d7db5cbef..f707757fb 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -374,9 +374,9 @@ void * plat_mmap(size_t size, uint8_t executable) { #if defined __APPLE__ && defined MAP_JIT - void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE | (executable ? MAP_JIT : 0), 0, 0); + void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE | (executable ? MAP_JIT : 0), -1, 0); #else - void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE, 0, 0); + void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE, -1, 0); #endif return (ret < 0) ? NULL : ret; } From f8a1339b4416934703dd3218ec4baf0a084daa17 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 7 Jan 2022 14:52:43 +0600 Subject: [PATCH 180/278] Same for old codegen backend --- src/codegen/codegen_x86-64.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/codegen/codegen_x86-64.c b/src/codegen/codegen_x86-64.c index 289411b37..ff1e1c682 100644 --- a/src/codegen/codegen_x86-64.c +++ b/src/codegen/codegen_x86-64.c @@ -67,7 +67,7 @@ void codegen_init() #if _WIN64 codeblock = VirtualAlloc(NULL, BLOCK_SIZE * sizeof(codeblock_t), MEM_COMMIT, PAGE_EXECUTE_READWRITE); #elif defined(__unix__) || defined(__APPLE__) - codeblock = mmap(NULL, BLOCK_SIZE * sizeof(codeblock_t), PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANON | MAP_PRIVATE, 0, 0); + codeblock = mmap(NULL, BLOCK_SIZE * sizeof(codeblock_t), PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANON | MAP_PRIVATE, -1, 0); #else codeblock = malloc(BLOCK_SIZE * sizeof(codeblock_t)); #endif From 54902c451f0e5d534aa0188864ad967b3dd6c2cc Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 7 Jan 2022 14:53:52 +0600 Subject: [PATCH 181/278] ...and for new codegen backend --- src/codegen_new/codegen_allocator.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/codegen_new/codegen_allocator.c b/src/codegen_new/codegen_allocator.c index ad07afd73..7b8b04323 100644 --- a/src/codegen_new/codegen_allocator.c +++ b/src/codegen_new/codegen_allocator.c @@ -39,9 +39,9 @@ void codegen_allocator_init() /* TODO: check deployment target: older Intel-based versions of macOS don't play nice with MAP_JIT. */ #elif defined(__APPLE__) && defined(MAP_JIT) - mem_block_alloc = mmap(0, MEM_BLOCK_NR * MEM_BLOCK_SIZE, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE|MAP_JIT, 0, 0); + mem_block_alloc = mmap(0, MEM_BLOCK_NR * MEM_BLOCK_SIZE, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE|MAP_JIT, -1, 0); #else - mem_block_alloc = mmap(0, MEM_BLOCK_NR * MEM_BLOCK_SIZE, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, 0, 0); + mem_block_alloc = mmap(0, MEM_BLOCK_NR * MEM_BLOCK_SIZE, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, -1, 0); #endif for (c = 0; c < MEM_BLOCK_NR; c++) From 51cb0d48aa9672d9b18278d92189b11aafeaf9de Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 7 Jan 2022 15:00:00 +0600 Subject: [PATCH 182/278] Backport https://github.com/86Box/86Box/commit/2da187c0bd9e0eb7c5f98222032bfee88527b699 to Qt backend --- src/qt/qt_mediamenu.cpp | 2 +- src/qt/qt_platform.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/qt/qt_mediamenu.cpp b/src/qt/qt_mediamenu.cpp index f18b4e7c7..c5053541e 100644 --- a/src/qt/qt_mediamenu.cpp +++ b/src/qt/qt_mediamenu.cpp @@ -292,7 +292,7 @@ void MediaMenu::floppyUpdateMenu(int i) { int type = fdd_get_type(i); //floppyMenus[i]->setTitle(tr("Floppy %1 (%2): %3").arg(QString::number(i+1), fdd_getname(type), name.isEmpty() ? tr("(empty)") : name)); - floppyMenus[i]->setTitle(QString::asprintf("Floppy %i (%s): %ls", i + 1, fdd_getname(type), name.isEmpty() ? tr("(empty)").toStdU16String().data() : name.toStdU16String().data())); + floppyMenus[i]->setTitle(QString::asprintf(tr("Floppy %i (%s): %ls").toUtf8().constData(), i + 1, fdd_getname(type), name.isEmpty() ? tr("(empty)").toStdU16String().data() : name.toStdU16String().data())); } void MediaMenu::cdromMute(int i) { diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index 6211d12de..d053098c1 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -313,9 +313,9 @@ plat_mmap(size_t size, uint8_t executable) return VirtualAlloc(NULL, size, MEM_COMMIT, executable ? PAGE_EXECUTE_READWRITE : PAGE_READWRITE); #elif defined Q_OS_UNIX #if defined Q_OS_DARWIN && defined MAP_JIT - void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE | (executable ? MAP_JIT : 0), 0, 0); + void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE | (executable ? MAP_JIT : 0), -1, 0); #else - void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE, 0, 0); + void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE, -1, 0); #endif return (ret == MAP_FAILED) ? nullptr : ret; #endif From 69325aff02ccec7b5824133364f16f8961bdd193 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 7 Jan 2022 16:21:40 +0600 Subject: [PATCH 183/278] 1. Media menu strings are translated now. 2. Save/Quit dialogs are also translated now. 3. Fix Sound Gain text cutoff. --- src/qt/qt_deviceconfig.cpp | 1 + src/qt/qt_harddiskdialog.cpp | 1 + src/qt/qt_machinestatus.cpp | 14 +++++++------- src/qt/qt_mainwindow.cpp | 4 ++-- src/qt/qt_mediamenu.cpp | 22 ++++++++++++---------- src/qt/qt_settings.cpp | 4 ++-- src/qt/qt_soundgain.ui | 9 ++++++--- 7 files changed, 31 insertions(+), 24 deletions(-) diff --git a/src/qt/qt_deviceconfig.cpp b/src/qt/qt_deviceconfig.cpp index ede8342dd..48f8e59a9 100644 --- a/src/qt/qt_deviceconfig.cpp +++ b/src/qt/qt_deviceconfig.cpp @@ -139,6 +139,7 @@ void DeviceConfig::ConfigureDevice(const _device_* device, int instance) { auto* fileField = new FileField(); fileField->setObjectName(config->name); fileField->setFileName(fileName); + fileField->setFilter(QString(config->file_filter).left(strcspn(config->file_filter, "|"))); dc.ui->formLayout->addRow(config->description, fileField); break; } diff --git a/src/qt/qt_harddiskdialog.cpp b/src/qt/qt_harddiskdialog.cpp index ff41dc773..bf6c34f33 100644 --- a/src/qt/qt_harddiskdialog.cpp +++ b/src/qt/qt_harddiskdialog.cpp @@ -29,6 +29,7 @@ HarddiskDialog::HarddiskDialog(bool existing, QWidget *parent) : { ui->setupUi(this); + ui->fileField->setFilter(tr("Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)")); if (existing) { setWindowTitle(tr("Add Existing Hard Disk")); ui->lineEditCylinders->setEnabled(false); diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index 1f32294df..2deb9330d 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -414,39 +414,39 @@ void MachineStatus::refresh(QStatusBar* sbar) { if ((has_mfm || hdc_name.left(5) == QStringLiteral("st506")) && c_mfm > 0) { d->hdds[HDD_BUS_MFM].label = std::make_unique(); d->hdds[HDD_BUS_MFM].setActive(false); - d->hdds[HDD_BUS_MFM].label->setToolTip(QStringLiteral("Hard Disk (%1)").arg("MFM/RLL")); + d->hdds[HDD_BUS_MFM].label->setToolTip(tr("Hard disk (%s)").replace("%s", "MFM/RLL")); sbar->addWidget(d->hdds[HDD_BUS_MFM].label.get()); } if ((has_esdi || hdc_name.left(4) == QStringLiteral("esdi")) && c_esdi > 0) { d->hdds[HDD_BUS_ESDI].label = std::make_unique(); d->hdds[HDD_BUS_ESDI].setActive(false); - d->hdds[HDD_BUS_ESDI].label->setToolTip(QStringLiteral("Hard Disk (%1)").arg("ESDI")); + d->hdds[HDD_BUS_ESDI].label->setToolTip(tr("Hard disk (%s)").replace("%s", "ESDI")); sbar->addWidget(d->hdds[HDD_BUS_ESDI].label.get()); } if ((has_xta || hdc_name.left(3) == QStringLiteral("xta")) && c_xta > 0) { d->hdds[HDD_BUS_XTA].label = std::make_unique(); d->hdds[HDD_BUS_XTA].setActive(false); - d->hdds[HDD_BUS_XTA].label->setToolTip(QStringLiteral("Hard Disk (%1)").arg("XTA")); + d->hdds[HDD_BUS_XTA].label->setToolTip(tr("Hard disk (%s)").replace("%s", "XTA")); sbar->addWidget(d->hdds[HDD_BUS_XTA].label.get()); } if ((hasIDE() || hdc_name.left(5) == QStringLiteral("xtide") || hdc_name.left(3) == QStringLiteral("ide")) && c_ide > 0) { d->hdds[HDD_BUS_IDE].label = std::make_unique(); d->hdds[HDD_BUS_IDE].setActive(false); - d->hdds[HDD_BUS_IDE].label->setToolTip(QStringLiteral("Hard Disk (%1)").arg("IDE")); + d->hdds[HDD_BUS_IDE].label->setToolTip(tr("Hard disk (%s)").replace("%s", "IDE")); sbar->addWidget(d->hdds[HDD_BUS_IDE].label.get()); } if ((hasSCSI() || (scsi_card_current[0] != 0) || (scsi_card_current[1] != 0) || (scsi_card_current[2] != 0) || (scsi_card_current[3] != 0)) && c_scsi > 0) { d->hdds[HDD_BUS_SCSI].label = std::make_unique(); d->hdds[HDD_BUS_SCSI].setActive(false); - d->hdds[HDD_BUS_SCSI].label->setToolTip(QStringLiteral("Hard Disk (%1)").arg("SCSI")); + d->hdds[HDD_BUS_SCSI].label->setToolTip(tr("Hard disk (%s)").replace("%s", "SCSI")); sbar->addWidget(d->hdds[HDD_BUS_SCSI].label.get()); } if (do_net) { d->net.label = std::make_unique(); d->net.setActive(false); - d->net.label->setToolTip("Network"); + d->net.label->setToolTip(tr("Network")); sbar->addWidget(d->net.label.get()); } d->sound = std::make_unique(); @@ -456,7 +456,7 @@ void MachineStatus::refresh(QStatusBar* sbar) { SoundGain gain(main_window); gain.exec(); }); - d->sound->setToolTip("Sound"); + d->sound->setToolTip(tr("Sound")); sbar->addWidget(d->sound.get()); d->text = std::make_unique(); sbar->addWidget(d->text.get()); diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index d19f7fd7e..c5df24469 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -290,8 +290,8 @@ MainWindow::MainWindow(QWidget *parent) : void MainWindow::closeEvent(QCloseEvent *event) { if (confirm_exit && cpu_thread_run) { - QMessageBox questionbox(QMessageBox::Icon::Question, "86Box", "Are you sure you want to exit 86Box?", QMessageBox::Yes | QMessageBox::No, this); - QCheckBox *chkbox = new QCheckBox("Do not ask me again"); + QMessageBox questionbox(QMessageBox::Icon::Question, "86Box", tr("Are you sure you want to exit 86Box?"), QMessageBox::Yes | QMessageBox::No, this); + QCheckBox *chkbox = new QCheckBox(tr("Don't show this message again")); questionbox.setCheckBox(chkbox); chkbox->setChecked(!confirm_exit); bool confirm_exit_temp = false; diff --git a/src/qt/qt_mediamenu.cpp b/src/qt/qt_mediamenu.cpp index c5053541e..dad010e5e 100644 --- a/src/qt/qt_mediamenu.cpp +++ b/src/qt/qt_mediamenu.cpp @@ -145,7 +145,7 @@ void MediaMenu::cassetteNewImage() { } void MediaMenu::cassetteSelectImage(bool wp) { - auto filename = QFileDialog::getOpenFileName(parentWidget, tr("Open"), QString(), tr("Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*)")); + auto filename = QFileDialog::getOpenFileName(parentWidget, QString(), QString(), tr("Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*)")); cassetteMount(filename, wp); } @@ -199,7 +199,7 @@ void MediaMenu::cassetteUpdateMenu() { } void MediaMenu::cartridgeSelectImage(int i) { - auto filename = QFileDialog::getOpenFileName(parentWidget, tr("Open"), QString(), tr("Cartridge images (*.a *.b *.jrc *.A *.B *.JRC);;All files (*)")); + auto filename = QFileDialog::getOpenFileName(parentWidget, QString(), QString(), tr("Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)")); if (filename.isEmpty()) { return; } @@ -242,7 +242,7 @@ void MediaMenu::floppyNewImage(int i) { } void MediaMenu::floppySelectImage(int i, bool wp) { - auto filename = QFileDialog::getOpenFileName(parentWidget, "Open", QString(), tr("All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)")); + auto filename = QFileDialog::getOpenFileName(parentWidget, QString(), QString(), tr("All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)")); floppyMount(i, filename, wp); } @@ -268,7 +268,7 @@ void MediaMenu::floppyEject(int i) { } void MediaMenu::floppyExportTo86f(int i) { - auto filename = QFileDialog::getSaveFileName(parentWidget, tr("Save as 86f"), QString(), tr("Surface images (*.86F *.86f)")); + auto filename = QFileDialog::getSaveFileName(parentWidget, QString(), QString(), tr("Surface images (*.86F *.86f)")); if (! filename.isEmpty()) { QByteArray filenameBytes = filename.toUtf8(); plat_pause(1); @@ -306,7 +306,7 @@ void MediaMenu::cdromMount(int i) { QString dir; QFileInfo fi(cdrom[i].image_path); - auto filename = QFileDialog::getOpenFileName(parentWidget, tr("Open"), QString(), tr("CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)")); + auto filename = QFileDialog::getOpenFileName(parentWidget, QString(), QString(), tr("CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)")); if (filename.isEmpty()) { auto* imageMenu = dynamic_cast(cdromMenus[i]->children()[cdromImagePos]); imageMenu->setChecked(false); @@ -374,7 +374,8 @@ void MediaMenu::cdromUpdateMenu(int i) { break; } - menu->setTitle(tr("CD-ROM %1 (%2): %3").arg(QString::number(i+1), busName, name.isEmpty() ? tr("(empty)") : name)); + //menu->setTitle(tr("CD-ROM %1 (%2): %3").arg(QString::number(i+1), busName, name.isEmpty() ? tr("(empty)") : name)); + menu->setTitle(QString::asprintf(tr("CD-ROM %i (%s): %s").toUtf8().constData(), i + 1, busName.toUtf8().data(), name.isEmpty() ? tr("(empty)").toUtf8().data() : name.toUtf8().data())); } void MediaMenu::zipNewImage(int i) { @@ -388,7 +389,7 @@ void MediaMenu::zipNewImage(int i) { } void MediaMenu::zipSelectImage(int i, bool wp) { - auto filename = QFileDialog::getOpenFileName(parentWidget, tr("Open"), QString(), tr("ZIP images (*.im? *.zdi *.IM? *.ZDI);;All files (*)")); + auto filename = QFileDialog::getOpenFileName(parentWidget, QString(), QString(), tr("ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)")); zipMount(i, filename, wp); } @@ -462,7 +463,8 @@ void MediaMenu::zipUpdateMenu(int i) { break; } - menu->setTitle(tr("ZIP %1 %2 (%3): %4").arg((zip_drives[i].is_250 > 0) ? "250" : "100", QString::number(i+1), busName, name.isEmpty() ? tr("(empty)") : name)); + //menu->setTitle(tr("ZIP %1 %2 (%3): %4").arg((zip_drives[i].is_250 > 0) ? "250" : "100", QString::number(i+1), busName, name.isEmpty() ? tr("(empty)") : name)); + menu->setTitle(QString::asprintf(tr("ZIP %03i %i (%s): %ls").toUtf8().constData(), (zip_drives[i].is_250 > 0) ? 250 : 100, i + 1, busName.toUtf8().data(), name.isEmpty() ? tr("(empty)").toStdU16String().data() : name.toStdU16String().data())); } void MediaMenu::moNewImage(int i) { @@ -476,7 +478,7 @@ void MediaMenu::moNewImage(int i) { } void MediaMenu::moSelectImage(int i, bool wp) { - auto filename = QFileDialog::getOpenFileName(parentWidget, tr("Open"), QString(), tr("MO images (*.im? *.mdi *.IM? *.MDI);;All files (*)")); + auto filename = QFileDialog::getOpenFileName(parentWidget, QString(), QString(), tr("MO images (*.im? *.mdi *.IM? *.MDI);;All files (*)")); moMount(i, filename, wp); } @@ -550,7 +552,7 @@ void MediaMenu::moUpdateMenu(int i) { break; } - menu->setTitle(tr("MO %1 (%2): %3").arg(QString::number(i+1), busName, name.isEmpty() ? tr("(empty)") : name)); + menu->setTitle(QString::asprintf(tr("MO %i (%ls): %ls").toUtf8().constData(), i + 1, busName.toStdU16String().data(), name.isEmpty() ? tr("(empty)").toStdU16String().data() : name.toStdU16String().data())); } diff --git a/src/qt/qt_settings.cpp b/src/qt/qt_settings.cpp index 0ce21a7a4..388a843b8 100644 --- a/src/qt/qt_settings.cpp +++ b/src/qt/qt_settings.cpp @@ -144,8 +144,8 @@ void Settings::accept() { if (confirm_save) { - QMessageBox questionbox(QMessageBox::Icon::Question, "86Box", "Do you want to save the settings?\n\nThis will hard reset the emulated machine.", QMessageBox::Save | QMessageBox::Cancel, this); - QCheckBox *chkbox = new QCheckBox("Do not ask me again"); + QMessageBox questionbox(QMessageBox::Icon::Question, "86Box", QStringLiteral("%1\n\n%2").arg(tr("Do you want to save the settings?"), tr("This will hard reset the emulated machine.")), QMessageBox::Save | QMessageBox::Cancel, this); + QCheckBox *chkbox = new QCheckBox(tr("Don't show this message again")); questionbox.setCheckBox(chkbox); chkbox->setChecked(!confirm_save); QObject::connect(chkbox, &QCheckBox::stateChanged, [](int state) { diff --git a/src/qt/qt_soundgain.ui b/src/qt/qt_soundgain.ui index be7f5aaa5..8b262a312 100644 --- a/src/qt/qt_soundgain.ui +++ b/src/qt/qt_soundgain.ui @@ -60,15 +60,18 @@ - 30 + -20 10 - 54 - 17 + 131 + 20 Gain + + Qt::AlignCenter + From 4ea797397f78bb3ba075ab4182d47acd5ce3c633 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 7 Jan 2022 16:41:57 +0600 Subject: [PATCH 184/278] Add hard reset prompt, translate the rest of the message dialogs --- src/qt/qt_mainwindow.cpp | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index c5df24469..37a3dac84 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -349,6 +349,26 @@ void MainWindow::on_actionRight_CTRL_is_left_ALT_triggered() { } void MainWindow::on_actionHard_Reset_triggered() { + if (confirm_reset) + { + QMessageBox questionbox(QMessageBox::Icon::Question, "86Box", tr("Are you sure you want to hard reset the emulated machine?"), QMessageBox::NoButton, this); + questionbox.addButton(tr("Don't reset"), QMessageBox::AcceptRole); + questionbox.addButton(tr("Reset"), QMessageBox::RejectRole); + QCheckBox *chkbox = new QCheckBox(tr("Don't show this message again")); + questionbox.setCheckBox(chkbox); + chkbox->setChecked(!confirm_reset); + bool confirm_exit_temp = false; + QObject::connect(chkbox, &QCheckBox::stateChanged, [](int state) { + confirm_reset = (state == Qt::CheckState::Unchecked); + }); + questionbox.exec(); + if (questionbox.result() == QDialog::Rejected) + { + confirm_reset = true; + return; + } + } + config_changed = 2; pc_reset_hard(); } @@ -1253,13 +1273,7 @@ void MainWindow::on_actionAbout_86Box_triggered() githash = QString(" [%1]").arg(EMU_GIT_HASH); #endif msgBox.setText(QString("86Box v%1%2").arg(EMU_VERSION_FULL, githash)); - msgBox.setInformativeText(R"( -An emulator of old computers - -Authors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others. - -Released under the GNU General Public License version 2 or later. See LICENSE for more information. -)"); + msgBox.setInformativeText(tr("An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information.")); msgBox.setWindowTitle("About 86Box"); msgBox.addButton("OK", QMessageBox::ButtonRole::AcceptRole); auto webSiteButton = msgBox.addButton("86box.net", QMessageBox::ButtonRole::HelpRole); From c07ef406e808cd1af684a868e3490de711e42b4b Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 8 Jan 2022 00:53:45 +0600 Subject: [PATCH 185/278] Fix Menu text bugs on macOS Fix cutoff bugs on Sound Gain dialog --- src/qt/languages/de-DE.po | 30 +- src/qt/languages/fi-fi.po | 1170 --------------------------------- src/qt/qt_main.cpp | 13 +- src/qt/qt_mainwindow.cpp | 7 +- src/qt/qt_mainwindow.ui | 8 +- src/qt/qt_newfloppydialog.cpp | 2 +- src/qt/qt_progsettings.hpp | 1 + src/qt/qt_soundgain.ui | 4 +- src/qt/qt_translations.qrc | 1 + 9 files changed, 42 insertions(+), 1194 deletions(-) delete mode 100644 src/qt/languages/fi-fi.po diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po index 4e359c9c8..02de09c47 100644 --- a/src/qt/languages/de-DE.po +++ b/src/qt/languages/de-DE.po @@ -56,7 +56,7 @@ msgid "&VNC" msgstr "&VNC" msgid "Specify dimensions..." -msgstr "Dimensionen spezifizieren..." +msgstr "Fenstergröße einstellen..." msgid "F&orce 4:3 display ratio" msgstr "&4:3-Seitenverhältnis erzwingen" @@ -170,7 +170,7 @@ msgid "Enable &Discord integration" msgstr "&Discord-Integration aktivieren" msgid "Sound &gain..." -msgstr "&Schallverstärkung..." +msgstr "&Klangverstärkung..." msgid "Begin trace\tCtrl+T" msgstr "Tracing starten\tStrg+T" @@ -302,7 +302,7 @@ msgid "Settings" msgstr "Optionen" msgid "Specify Main Window Dimensions" -msgstr "Abmessungen des Hauptfensters einstellen" +msgstr "Fenstergröße einstellen" msgid "OK" msgstr "OK" @@ -344,10 +344,10 @@ msgid "Height:" msgstr "Höhe:" msgid "Lock to this size" -msgstr "Auf diese Größe festlegen" +msgstr "Feste Größe" msgid "Machine type:" -msgstr "Maschinentyp:" +msgstr "Systemtyp:" msgid "Machine:" msgstr "Maschine:" @@ -359,7 +359,7 @@ msgid "CPU type:" msgstr "CPU-Typ:" msgid "Speed:" -msgstr "Takt:" +msgstr "Geschwindigkeit:" msgid "FPU:" msgstr "FPU-Einheit:" @@ -575,7 +575,7 @@ msgid "ISA RTC:" msgstr "ISA-Echtzeituhr:" msgid "ISA Memory Expansion" -msgstr "ISA-Speichererweiterung" +msgstr "ISA-Speichererweiterung:" msgid "Card 1:" msgstr "Steckkarte 1:" @@ -590,10 +590,10 @@ msgid "Card 4:" msgstr "Steckkarte 4:" msgid "ISABugger device" -msgstr "ISABugger-Gerät" +msgstr "ISABugger-Gerät:" msgid "POST card" -msgstr "POST-Code-Karte" +msgstr "POST-Code-Karte:" msgid "Segoe UI" msgstr "Segoe UI" @@ -644,13 +644,13 @@ msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd? msgstr "Alle Images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basissektorimages (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Oberflächenimages (*.86F *.86f)" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "Die Maschine \"%hs\" ist aufgrund von fehlenden ROMs im Verzeichnis roms/machines nicht verfügbar. Es wird auf eine verfügbare Maschine gewechselt." +msgstr "Das System \"%hs\" ist aufgrund von fehlenden ROMs im Verzeichnis roms/machines nicht verfügbar. Es wird auf ein verfügbares System gewechselt." msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." msgstr "Die Videokarte \"%hs\" ist aufgrund von fehlenden ROMs im Verzeichnis roms/video nicht verfügbar. Es wird auf eine verfügbare Videokarte gewechselt." msgid "Machine" -msgstr "Maschine" +msgstr "System" msgid "Display" msgstr "Anzeige" @@ -785,7 +785,7 @@ msgid "Unable to initialize SDL, SDL2.dll is required" msgstr "SDL konnte nicht initialisiert werden, die Datei SDL2.dll wird benötigt" msgid "Are you sure you want to hard reset the emulated machine?" -msgstr "Sind Sie sich sicher, dass Sie einen Hard-Reset für die emulierte Maschine durchführen wollen?" +msgstr "Sind Sie sich sicher, dass Sie einen Hard-Reset für das emulierte System durchführen wollen?" msgid "Are you sure you want to exit 86Box?" msgstr "Sind Sie sich sicher, dass Sie 86Box beenden wollen?" @@ -905,7 +905,7 @@ msgid "You are loading an unsupported configuration" msgstr "Sie laden gerade eine nicht unterstützte Konfiguration" msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "Das Filtern der CPU-Typen basierend auf der ausgewählten Maschine ist für diese Maschine deaktiviert.\n\nDies ermöglicht es, dass man eine sonst nicht mit der ausgewählten Maschine inkompatible CPU auswählen kann. Allerdings kann dies zu Inkompatiblilitäten mit dem BIOS der Maschine oder anderen Programmen kommen.\n\nDas Aktivieren dieser Einstellung wird nicht unterstützt und sämtliche Bugreports können als \"invalid\" geschlossen werden." +msgstr "Das Filtern der CPU-Typen basierend auf dem ausgewählten System ist für dieses System deaktiviert.\n\nDies ermöglicht es, dass man eine sonst nicht mit dem ausgewählten System inkompatible CPU auswählen kann. Allerdings kann dies zu Inkompatiblilitäten mit dem BIOS des Systems oder anderen Programmen kommen.\n\nDas Aktivieren dieser Einstellung wird nicht unterstützt und sämtliche Bugreports können als \"invalid\" geschlossen werden." msgid "Continue" msgstr "Fortfahren" @@ -923,10 +923,10 @@ msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" msgstr "Cartridgeimages (*.A *.a *.B *.b *.JRC *.jrc);;Alle Dateien (*)" msgid "Error initializing renderer" -msgstr "Error initializing renderer" +msgstr "Fehler bei der Rendererinitialisierung" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "Der OpenGL (3.0-Kern)-Renderer konnte nicht initialisiert werden. Bitte benutzen Sie einen anderen Renderer." msgid "Hard disk (%s)" msgstr "Festplatte (%s)" diff --git a/src/qt/languages/fi-fi.po b/src/qt/languages/fi-fi.po deleted file mode 100644 index a8e3e8c5c..000000000 --- a/src/qt/languages/fi-fi.po +++ /dev/null @@ -1,1170 +0,0 @@ -msgid "Translated by" -msgstr "Unknown" - -msgid "&Action" -msgstr "&Toiminto" - -msgid "&Keyboard requires capture" -msgstr "&Vaadi näppäimistön kaappaus" - -msgid "&Right CTRL is left ALT" -msgstr "&Oikea CTRL on vasen ALT" - -msgid "&Hard Reset..." -msgstr "&Uudelleenkäynnistys (kylmä)..." - -msgid "&Ctrl+Alt+Del\tCtrl+F12" -msgstr "&Ctrl+Alt+Del\tCtrl+F12" - -msgid "Ctrl+Alt+&Esc" -msgstr "Ctrl+Alt+&Esc" - -msgid "&Pause" -msgstr "&Tauko" - -msgid "E&xit..." -msgstr "&Poistu..." - -msgid "&View" -msgstr "&Näytä" - -msgid "&Hide status bar" -msgstr "&Piilota tilapalkki" - -msgid "&Resizeable window" -msgstr "&Salli koon muuttaminen" - -msgid "R&emember size && position" -msgstr "&Muista koko ja sijainti" - -msgid "Re&nderer" -msgstr "&Renderöijä" - -msgid "&SDL (Software)" -msgstr "&SDL (ohjelmistopohjainen)" - -msgid "SDL (&Hardware)" -msgstr "SDL (&laitteistokiihdytetty)" - -msgid "SDL (&OpenGL)" -msgstr "SDL (&OpenGL)" - -msgid "Open&GL (3.0 Core)" -msgstr "Open&GL (3.0 Core)" - -msgid "&VNC" -msgstr "&VNC" - -msgid "Specify dimensions..." -msgstr "&Määritä koko..." - -msgid "F&orce 4:3 display ratio" -msgstr "Pakota 4:3 näyttösuhde" - -msgid "&Window scale factor" -msgstr "&Ikkunan kokokerroin" - -msgid "&0.5x" -msgstr "&0.5x" - -msgid "&1x" -msgstr "&1x" - -msgid "1.&5x" -msgstr "1.&5x" - -msgid "&2x" -msgstr "&2x" - -msgid "Filter method" -msgstr "&Suodatusmetodi" - -msgid "&Nearest" -msgstr "&Lähin naapuri" - -msgid "&Linear" -msgstr "Li&neaarinen interpolaatio" - -msgid "Hi&DPI scaling" -msgstr "&Suuri DPI-skaalaus" - -msgid "&Fullscreen\tCtrl+Alt+PageUP" -msgstr "&Koko näytön tila\tCtrl+Alt+PageUP" - -msgid "Fullscreen &stretch mode" -msgstr "Koko näytön &skaalaustila" - -msgid "&Full screen stretch" -msgstr "&Venytä koko näyttöön" - -msgid "&4:3" -msgstr "&4:3" - -msgid "&Square pixels (Keep ratio)" -msgstr "&Tasasivuiset kuvapisteet (säilytä kuvasuhde)" - -msgid "&Integer scale" -msgstr "&Kokonaislukuskaalaus" - -msgid "E&GA/(S)VGA settings" -msgstr "&EGA/(S)VGA asetukset" - -msgid "&Inverted VGA monitor" -msgstr "&VGA näyttö käänteisillä väreillä" - -msgid "VGA screen &type" -msgstr "VGA näytön &tyyppi" - -msgid "RGB &Color" -msgstr "RGB &värit" - -msgid "&RGB Grayscale" -msgstr "&RGB harmaasävyinen" - -msgid "&Amber monitor" -msgstr "&Meripihkanvärinen" - -msgid "&Green monitor" -msgstr "V&ihreä" - -msgid "&White monitor" -msgstr "V&alkoinen" - -msgid "Grayscale &conversion type" -msgstr "&Harmaasävymuunnoksen tyyppi" - -msgid "BT&601 (NTSC/PAL)" -msgstr "BT&601 (NTSC/PAL)" - -msgid "BT&709 (HDTV)" -msgstr "BT&709 (HDTV)" - -msgid "&Average" -msgstr "&Keskiarvo" - -msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" -msgstr "CGA/PCjr/Tandy/E&GA/(S)VGA &yliskannaus" - -msgid "Change contrast for &monochrome display" -msgstr "&Muuta harmaavärinäytön kontrastia" - -msgid "&Media" -msgstr "&Media" - -msgid "&Tools" -msgstr "&Työkalut" - -msgid "&Settings..." -msgstr "&Kokoonpano..." - -msgid "&Update status bar icons" -msgstr "&Päivitä tilapalkin kuvakkeita" - -msgid "Take s&creenshot\tCtrl+F11" -msgstr "Ota &kuvakaappaus\tCtrl+F11" - -msgid "&Preferences..." -msgstr "&Sovellusasetukset..." - -msgid "Enable &Discord integration" -msgstr "Käytä &Discord integraatiota" - -msgid "Sound &gain..." -msgstr "&Äänen tulotaso..." - -msgid "Begin trace\tCtrl+T" -msgstr "Aloita jäljitys\tCtrl+T" - -msgid "End trace\tCtrl+T" -msgstr "Lopeta jäljitys\tCtrl+T" - -msgid "&Logging" -msgstr "&Lokitus" - -msgid "Enable BusLogic logs\tCtrl+F4" -msgstr "BusLogic-lokitus päällä\tCtrl+F4" - -msgid "Enable CD-ROM logs\tCtrl+F5" -msgstr "CD-ROM-lokitus päällä\tCtrl+F5" - -msgid "Enable floppy (86F) logs\tCtrl+F6" -msgstr "Levykelokitus (86F) päällä\tCtrl+F6" - -msgid "Enable floppy controller logs\tCtrl+F7" -msgstr "Levykekontrollerin lokitus päällä\tCtrl+F7" - -msgid "Enable IDE logs\tCtrl+F8" -msgstr "IDE-lokitus päällä\tCtrl+F8" - -msgid "Enable Serial Port logs\tCtrl+F3" -msgstr "Sarjaporttilokitus päällä\tCtrl+F3" - -msgid "Enable Network logs\tCtrl+F9" -msgstr "Verkkolokitus päällä\tCtrl+F9" - -msgid "&Log breakpoint\tCtrl+F10" -msgstr "&Kirjaa keskeytyskohdat\tCtrl+F10" - -msgid "Dump &video RAM\tCtrl+F1" -msgstr "Tallenna &videomuistin vedos\tCtrl+F1" - -msgid "&Help" -msgstr "&Ohje" - -msgid "&Documentation..." -msgstr "&Dokumentaatio..." - -msgid "&About 86Box..." -msgstr "&Tietoja 86Box:sta..." - -msgid "&New image..." -msgstr "&Uusi kasettikuva..." - -msgid "&Existing image..." -msgstr "&Olemassaoleva kasettikuva..." - -msgid "Existing image (&Write-protected)..." -msgstr "Olemassaoleva kasettikuva (&kirjoitussuojattu)..." - -msgid "&Record" -msgstr "&Nauhoita" - -msgid "&Play" -msgstr "&Toista" - -msgid "&Rewind to the beginning" -msgstr "Kelaa &alkuun" - -msgid "&Fast forward to the end" -msgstr "Kelaa &loppuun" - -msgid "E&ject" -msgstr "&Poista kasettipesästä" - -msgid "&Image..." -msgstr "&ROM-moduulikuva..." - -msgid "E&xport to 86F..." -msgstr "&Vie 86F-tiedostoon..." - -msgid "&Mute" -msgstr "&Mykistä" - -msgid "E&mpty" -msgstr "&Tyhjä" - -msgid "&Reload previous image" -msgstr "&Lataa edellinen levykuva uudelleen" - -msgid "&Image" -msgstr "L&evykuva" - -msgid "Target &framerate" -msgstr "&Kuvataajuustavoite" - -msgid "&Sync with video" -msgstr "&Synkronisoi videoon" - -msgid "&25 fps" -msgstr "&25 ruutua/s" - -msgid "&30 fps" -msgstr "&30 ruutua/s" - -msgid "&50 fps" -msgstr "&50 ruutua/s" - -msgid "&60 fps" -msgstr "&60 ruutua/s" - -msgid "&75 fps" -msgstr "&75 ruutua/s" - -msgid "&VSync" -msgstr "&VSync" - -msgid "&Select shader..." -msgstr "Valitse varjostin&ohjelma..." - -msgid "&Remove shader" -msgstr "&Poista varjostinohjelma" - -msgid "Preferences" -msgstr "Sovellusasetukset" - -msgid "Sound Gain" -msgstr "Äänen tulotaso" - -msgid "New Image" -msgstr "Uusi levykuva" - -msgid "Settings" -msgstr "Kokoonpano" - -msgid "Specify Main Window Dimensions" -msgstr "Määritä pääikkunan koko" - -msgid "OK" -msgstr "OK" - -msgid "Cancel" -msgstr "Peruuta" - -msgid "Save these settings as &global defaults" -msgstr "Tallenna nämä asetukset &globaaleiksi oletuksiksi" - -msgid "&Default" -msgstr "&Oletus" - -msgid "Language:" -msgstr "Kieli:" - -msgid "Icon set:" -msgstr "Kuvakkeet:" - -msgid "Gain" -msgstr "Taso" - -msgid "File name:" -msgstr "Tiedostonimi:" - -msgid "Disk size:" -msgstr "Levyn koko:" - -msgid "RPM mode:" -msgstr "RPM tila:" - -msgid "Progress:" -msgstr "Edistyminen:" - -msgid "Width:" -msgstr "Leveys:" - -msgid "Height:" -msgstr "Korkeus:" - -msgid "Lock to this size" -msgstr "Lukitse tähän kokoon" - -msgid "Machine type:" -msgstr "Tietokoneen tyyppi:" - -msgid "Machine:" -msgstr "Tietokone:" - -msgid "Configure" -msgstr "Määritys" - -msgid "CPU type:" -msgstr "Suorittimen tyyppi:" - -msgid "Speed:" -msgstr "Nopeus:" - -msgid "FPU:" -msgstr "Apusuoritin:" - -msgid "Wait states:" -msgstr "Odotustilat:" - -msgid "MB" -msgstr "Mt" - -msgid "Memory:" -msgstr "Muisti:" - -msgid "Time synchronization" -msgstr "Kellon synkronointi" - -msgid "Disabled" -msgstr "Ei käytössä" - -msgid "Enabled (local time)" -msgstr "Käytössä (paikallinen)" - -msgid "Enabled (UTC)" -msgstr "Käytössä (UTC)" - -msgid "Dynamic Recompiler" -msgstr "Dynaaminen uudelleenkääntäjä" - -msgid "Video:" -msgstr "Näytönohjain:" - -msgid "Voodoo Graphics" -msgstr "Voodoo-grafiikkasuoritin" - -msgid "Mouse:" -msgstr "Hiiri:" - -msgid "Joystick:" -msgstr "Peliohjain:" - -msgid "Joystick 1..." -msgstr "Peliohjain 1..." - -msgid "Joystick 2..." -msgstr "Peliohjain 2..." - -msgid "Joystick 3..." -msgstr "Peliohjain 3..." - -msgid "Joystick 4..." -msgstr "Peliohjain 4..." - -msgid "Sound card:" -msgstr "Äänikortti:" - -msgid "MIDI Out Device:" -msgstr "MIDI-ulostulo:" - -msgid "MIDI In Device:" -msgstr "MIDI-sisääntulo:" - -msgid "Standalone MPU-401" -msgstr "Erillinen MPU-401" - -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - -msgid "Use FLOAT32 sound" -msgstr "Käytä FLOAT32-ääntä" - -msgid "Network type:" -msgstr "Verkon tyyppi:" - -msgid "PCap device:" -msgstr "PCap-laite:" - -msgid "Network adapter:" -msgstr "Verkkokortti:" - -msgid "LPT1 Device:" -msgstr "LPT1-laite:" - -msgid "LPT2 Device:" -msgstr "LPT2-laite:" - -msgid "LPT3 Device:" -msgstr "LPT3-laite:" - -msgid "Serial port 1" -msgstr "Sarjaportti 1" - -msgid "Serial port 2" -msgstr "Sarjaportti 2" - -msgid "Serial port 3" -msgstr "Sarjaportti 3" - -msgid "Serial port 4" -msgstr "Sarjaportti 4" - -msgid "Parallel port 1" -msgstr "Rinnakkaisportti 1" - -msgid "Parallel port 2" -msgstr "Rinnakkaisportti 2" - -msgid "Parallel port 3" -msgstr "Rinnakkaisportti 3" - -msgid "HD Controller:" -msgstr "Kiintolevyohjain:" - -msgid "FD Controller:" -msgstr "Levykeohjain:" - -msgid "Tertiary IDE Controller" -msgstr "Tertinäärinen IDE-ohjain" - -msgid "Quaternary IDE Controller" -msgstr "Kvaternaarinen IDE-ohjain" - -msgid "SCSI" -msgstr "SCSI" - -msgid "Controller 1:" -msgstr "Ohjain 1:" - -msgid "Controller 2:" -msgstr "Ohjain 2:" - -msgid "Controller 3:" -msgstr "Ohjain 3:" - -msgid "Controller 4:" -msgstr "Ohjain 4:" - -msgid "Cassette" -msgstr "Kasettiasema" - -msgid "Hard disks:" -msgstr "Kiintolevyt:" - -msgid "&New..." -msgstr "&Uusi..." - -msgid "&Existing..." -msgstr "&Olemassaoleva..." - -msgid "&Remove" -msgstr "&Poista" - -msgid "Bus:" -msgstr "Väylä:" - -msgid "Channel:" -msgstr "Kanava:" - -msgid "ID:" -msgstr "ID:" - -msgid "&Specify..." -msgstr "&Määritä..." - -msgid "Sectors:" -msgstr "Sektorit:" - -msgid "Heads:" -msgstr "Päät:" - -msgid "Cylinders:" -msgstr "Sylinterit:" - -msgid "Size (MB):" -msgstr "Koko (Mt):" - -msgid "Type:" -msgstr "Tyyppi:" - -msgid "Image Format:" -msgstr "Tiedostomuoto:" - -msgid "Block Size:" -msgstr "Lohkon koko:" - -msgid "Floppy drives:" -msgstr "Levykeasemat:" - -msgid "Turbo timings" -msgstr "Turbo-ajoitukset" - -msgid "Check BPB" -msgstr "Tarkista BPB" - -msgid "CD-ROM drives:" -msgstr "CD-ROM-asemat:" - -msgid "MO drives:" -msgstr "Magneettisoptiset asemat (MO):" - -msgid "ZIP drives:" -msgstr "ZIP-asemat:" - -msgid "ZIP 250" -msgstr "ZIP 250" - -msgid "ISA RTC:" -msgstr "ISA-RTC (kello):" - -msgid "ISA Memory Expansion" -msgstr "ISA-muistilaajennus" - -msgid "Card 1:" -msgstr "Kortti 1:" - -msgid "Card 2:" -msgstr "Kortti 2:" - -msgid "Card 3:" -msgstr "Kortti 3:" - -msgid "Card 4:" -msgstr "Kortti 4:" - -msgid "ISABugger device" -msgstr "ISABugger-laite" - -msgid "POST card" -msgstr "POST-kortti" - -msgid "Segoe UI" -msgstr "Segoe UI" - -msgid "86Box" -msgstr "86Box" - -msgid "Error" -msgstr "Virhe" - -msgid "Fatal error" -msgstr "Vakava virhe" - -msgid "" -msgstr "" - -msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." -msgstr "Paina CTRL+ALT+PAGE DOWN palataksesi ikkunoituun tilaan." - -msgid "Speed" -msgstr "Nopeus" - -msgid "ZIP %03i %i (%s): %ls" -msgstr "ZIP %03i %i (%s): %ls" - -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" -msgstr "ZIP-levykuvat (*.IM? *.im? *.ZDI *.zdi)" - -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "86Box ei löytänyt käyttökelpoisia ROM-tiedostoja.\n\nVoit ladata ROM-paketin ja purkaa sen \"roms\" hakemistoon." - -msgid "(empty)" -msgstr "(tyhjä)" - -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" -msgstr "ZIP-levykuvat (*.IM? *.im? *.ZDI *.zdi);;Kaikki tiedostot (*)" - -msgid "Turbo" -msgstr "Turbo" - -msgid "On" -msgstr "Päällä" - -msgid "Off" -msgstr "Pois" - -msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" -msgstr "Kaikki levykuvat (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Perussektorilevykuvat (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Pintalevykuvat (*.86F *.86f)" - -msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "Konetta \"%hs\" ei voi käyttää puuttuvien ROM-tiedostojen vuoksi. Vaihdetaan käyttökelpoiseen koneeseen." - -msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "Näytönohjainta \"%hs\" ei voi käyttää puuttuvien ROM-tiedostojen vuoksi. Vaihdetaan käyttökelpoiseen näytönohjaimeen." - -msgid "Machine" -msgstr "Tietokone" - -msgid "Display" -msgstr "Näyttö" - -msgid "Input devices" -msgstr "Syöttölaitteet" - -msgid "Sound" -msgstr "Ääni" - -msgid "Network" -msgstr "Verkko" - -msgid "Ports (COM & LPT)" -msgstr "Portit (COM & LPT)" - -msgid "Storage controllers" -msgstr "Tallennusohjaimet" - -msgid "Hard disks" -msgstr "Kiintolevyt" - -msgid "Floppy & CD-ROM drives" -msgstr "Levyke ja CD-ROM" - -msgid "Other removable devices" -msgstr "Muut tallennuslaitteet" - -msgid "Other peripherals" -msgstr "Muut oheislaitteet" - -msgid "Surface images (*.86F *.86f)" -msgstr "Pintalevykuvat (*.86F *.86f)" - -msgid "Click to capture mouse" -msgstr "Kaappaa hiiri klikkaamalla" - -msgid "Press F8+F12 to release mouse" -msgstr "Paina F8+F12 vapauttaaksesi hiiren" - -msgid "Press F8+F12 or middle button to release mouse" -msgstr "Paina F8+F12 tai keskipainiketta vapauttaaksesi hiiren" - -msgid "Unable to initialize FluidSynth" -msgstr "FluidSynth:in alustus epäonnistui" - -msgid "Bus" -msgstr "Väylä" - -msgid "File" -msgstr "Tiedosto" - -msgid "C" -msgstr "C" - -msgid "H" -msgstr "H" - -msgid "S" -msgstr "S" - -msgid "KB" -msgstr "kt" - -msgid "Could not initialize the video renderer." -msgstr "Video-renderöijän alustus epäonnistui" - -msgid "Default" -msgstr "Oletus" - -msgid "%i Wait state(s)" -msgstr "%i odotustilaa" - -msgid "Type" -msgstr "Tyyppi" - -msgid "Failed to set up PCap" -msgstr "PCap-asennus epäonnistui" - -msgid "No PCap devices found" -msgstr "PCap-laitteita ei löytynyt" - -msgid "Invalid PCap device" -msgstr "Virheellinen PCap-laite" - -msgid "Standard 2-button joystick(s)" -msgstr "Standardi 2-painikkeinen peliohjain/-ohjaimet" - -msgid "Standard 4-button joystick" -msgstr "Standardi 4-painikkeinen peliohjain" - -msgid "Standard 6-button joystick" -msgstr "Standardi 6-painikkeinen peliohjain" - -msgid "Standard 8-button joystick" -msgstr "Standardi 8-painikkeinen peliohjain" - -msgid "CH Flightstick Pro" -msgstr "CH Flightstick Pro" - -msgid "Microsoft SideWinder Pad" -msgstr "Microsoft SideWinder Pad" - -msgid "Thrustmaster Flight Control System" -msgstr "Thrustmaster Flight Control System" - -msgid "None" -msgstr "Ei mikään" - -msgid "Unable to load keyboard accelerators." -msgstr "Näppäinkiihdyttimien lataus epäonnistui" - -msgid "Unable to register raw input." -msgstr "Raakasyötteen rekisteröinti epäonnistui" - -msgid "%u" -msgstr "%u" - -msgid "%u MB (CHS: %i, %i, %i)" -msgstr "%u Mt (CHS: %i, %i, %i)" - -msgid "Floppy %i (%s): %ls" -msgstr "Levyke %i (%s): %ls" - -msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" -msgstr "Kaikki levykuvat (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Kehittyneet sektorilevykuvat (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Perussektorilevykuvat (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux-levykuvat (*.FDI *.fdi);;Pintalevykuvat (*.86F *.86f *.MFM *.mfm);;Kaikki tiedostot (*)" - -msgid "Unable to initialize FreeType" -msgstr "FreeType:n alustus epäonnistui" - -msgid "Unable to initialize SDL, SDL2.dll is required" -msgstr "SDL:n alustus epäonnistui. Tarvitaan SDL2.dll" - -msgid "Are you sure you want to hard reset the emulated machine?" -msgstr "Oletko varma, että haluat käynnistää emuloidun tietokoneen uudelleen?" - -msgid "Are you sure you want to exit 86Box?" -msgstr "Haluatko varmasti sulkea 86Box:in?" - -msgid "Unable to initialize Ghostscript" -msgstr "Ghostscript:in alustus epäonnistui" - -msgid "MO %i (%ls): %ls" -msgstr "MO %i (%ls): %ls" - -msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" -msgstr "MO-levykuvat (*.IM? *.im? *.MDI *.mdi);;Kaikki tiedostot (*)" - -msgid "Welcome to 86Box!" -msgstr "Tervetuloa 86Box:iin!" - -msgid "Internal controller" -msgstr "Sisäinen ohjain" - -msgid "Exit" -msgstr "Poistu" - -msgid "No ROMs found" -msgstr "ROM-tiedostoja ei löytynyt" - -msgid "Do you want to save the settings?" -msgstr "Tallennetaanko asetukset?" - -msgid "This will hard reset the emulated machine." -msgstr "Tämä käynnistää emuloidun tietokoneen uudelleen." - -msgid "Save" -msgstr "Tallenna" - -msgid "About 86Box" -msgstr "Tietoja 86Box:sta" - -msgid "86Box v" -msgstr "86Box v" - -msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "Vanhojen tietokoneiden emulaattori\n\nTekijät: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho ja muut.\n\nJulkaistu GNU General Public License 2. version tai myöhemmän alaisena. Tarkempia tietoja LICENSE-tiedostossa." - -msgid "Hardware not available" -msgstr "Laitteisto ei ole saatavilla" - -msgid "WinPcap" -msgstr "WinPcap" - -msgid "libpcap" -msgstr "libpcap" - -msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." -msgstr "Varmista, että libpcap on asennettu ja että verkkoyhteytesi on libpcap-yhteensopiva." - -msgid "Invalid configuration" -msgstr "Virheelliset määritykset" - -msgid "freetype.dll" -msgstr "freetype.dll" - -msgid "libfreetype" -msgstr "libfreetype" - -msgid " is required for ESC/P printer emulation." -msgstr " vaaditaan ESC/P-tulostimen emuloimiseksi." - -msgid "gsdll32.dll" -msgstr "gsdll32.dll" - -msgid "libgs" -msgstr "libgs" - -msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." -msgstr " vaaditaan PostScript-tiedostojen automaattiseen muuntamiseen PDF-tiedostoiksi.\n\nKaikki geneeriselle PostScript-tulostimelle lähetetyt asiakirjat tallennetaan PostScript (.ps) -tiedostoina." - -msgid "libfluidsynth.dll" -msgstr "libfluidsynth.dll" - -msgid "libfluidsynth" -msgstr "libfluidsynth" - -msgid " is required for FluidSynth MIDI output." -msgstr " vaaditaan FluidSynth MIDI-ulostuloa varten." - -msgid "Entering fullscreen mode" -msgstr "Siirrytään koko näytön tilaan" - -msgid "Don't show this message again" -msgstr "Älä näytä tätä viestiä uudelleen" - -msgid "Don't exit" -msgstr "Älä poistu" - -msgid "Reset" -msgstr "Käynnistä uudelleen" - -msgid "Don't reset" -msgstr "Älä käynnistä uudelleen" - -msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" -msgstr "CD-ROM-levykuvat (*.ISO *.iso *.CUE *.cue);;Kaikki tiedostot (*)" - -msgid "%hs Device Configuration" -msgstr "%hs - Laitteen määritykset" - -msgid "Monitor in sleep mode" -msgstr "Näyttö lepotilassa" - -msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" -msgstr "OpenGL-varjostinohjelmat (*.GLSL *.glsl);;Kaikki tiedostot (*)" - -msgid "OpenGL options" -msgstr "OpenGL-asetukset" - -msgid "You are loading an unsupported configuration" -msgstr "Olet lataamassa ei-tuettuja määrittelyjä" - -msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "Valittuun tietokoneeseen perustuva suoritintyypin suodatus ei ole käytössä tällä emuloidulla koneella.\n\nTämä mahdollistaa muutoin yhteensopimattoman suorittimen valinnan kyseisen tietokoneen kanssa. Voit kuitenkin kohdata ongelmia tietokoneen BIOS:in tai muun ohjelmiston kanssa.\n\nTämän asetuksen käyttö ei ole virallisesti tuettua ja kaikki tehdyt virheraportit voidaan sulkea epäpätevinä." - -msgid "Continue" -msgstr "Jatka" - -msgid "Cassette: %s" -msgstr "Kasetti: %s" - -msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" -msgstr "Kasetti-tiedostot (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Kaikki tiedostot (*)" - -msgid "Cartridge %i: %ls" -msgstr "ROM-moduuli %i: %ls" - -msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" -msgstr "ROM-moduulikuvat (*.A *.a *.B *.b *.JRC *.jrc);;Kaikki tiedostot (*)" - -msgid "Error initializing renderer" -msgstr "Virhe renderöijän alustuksessa" - -msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "OpenGL (3.0 Core) renderöijän alustus epäonnistui. Käytä toista renderöijää." - -msgid "Hard disk (%s)" -msgstr "Kiintolevy (%s)" - -msgid "%01i:%01i" -msgstr "%01i:%01i" - -msgid "%01i" -msgstr "%01i" - -msgid "MFM/RLL or ESDI CD-ROM drives never existed" -msgstr "MFM/RLL tai ESDI CD-ROM asemia ei ole koskaan ollut olemassa" - -msgid "Custom..." -msgstr "Mukautettu..." - -msgid "Custom (large)..." -msgstr "Mukautettu (suuri)..." - -msgid "Add New Hard Disk" -msgstr "Lisää uusi kiintolevy" - -msgid "Add Existing Hard Disk" -msgstr "Lisää olemassaoleva kiintolevy" - -msgid "HDI disk images cannot be larger than 4 GB." -msgstr "HDI levykuvan suurin mahdollinen koko on 4 Gt." - -msgid "Disk images cannot be larger than 127 GB." -msgstr "Levykuvien suurin mahdollinen koko on 127 Gt." - -msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" -msgstr "Kiintolevykuvat (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Kaikki tiedostot (*)" - -msgid "Unable to read file" -msgstr "Tiedostoa ei voi lukea" - -msgid "Unable to write file" -msgstr "Tiedostoon ei voi kirjoittaa" - -msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "HDI- ja HDX-levykuvien ainoa tuettu sektorikoko on 512" - -msgid "USB is not yet supported" -msgstr "USB-tukea ei vielä ole" - -msgid "Disk image file already exists" -msgstr "Levykuva on jo olemassa" - -msgid "Please specify a valid file name." -msgstr "Anna kelvollinen tiedostonimi." - -msgid "Disk image created" -msgstr "Levykuva luotu" - -msgid "Make sure the file exists and is readable." -msgstr "Varmista, että tiedosto on olemassa ja lukukelpoinen" - -msgid "Make sure the file is being saved to a writable directory." -msgstr "Varmista, että tiedoston tallennuskansioon on kirjoitusoikeus" - -msgid "Disk image too large" -msgstr "Liian suuri levykuva" - -msgid "Remember to partition and format the newly-created drive." -msgstr "Muista osioida ja alustaa juuri luomasi asema." - -msgid "The selected file will be overwritten. Are you sure you want to use it?" -msgstr "Valittu tiedosto ylikirjoitetaan. Oletko varma, että haluat käyttää sitä?" - -msgid "Unsupported disk image" -msgstr "Levynkuvaa ei tueta" - -msgid "Overwrite" -msgstr "Ylikirjoita" - -msgid "Don't overwrite" -msgstr "Älä ylikirjoita" - -msgid "Raw image (.img)" -msgstr "Raaka levykuva (.img)" - -msgid "HDI image (.hdi)" -msgstr "HDI-levykuva (.hdi)" - -msgid "HDX image (.hdx)" -msgstr "HDX-levykuva (.hdx)" - -msgid "Fixed-size VHD (.vhd)" -msgstr "Kiinteä VHD (.vhd)" - -msgid "Dynamic-size VHD (.vhd)" -msgstr "Dynaaminen VHD (.vhd)" - -msgid "Differencing VHD (.vhd)" -msgstr "Differentiaalinen VHD (.vhd)" - -msgid "Large blocks (2 MB)" -msgstr "Suuret lohkot (2 Mt)" - -msgid "Small blocks (512 KB)" -msgstr "Pienet lohkot (512 kt)" - -msgid "VHD files (*.VHD *.vhd);;All files (*)" -msgstr "VHD-tiedostot (*.VHD *.vhd);;Kaikki tiedostot (*)" - -msgid "Select the parent VHD" -msgstr "Valitse ylätason VHD" - -msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" -msgstr "Tämä saattaa tarkoittaa, että ylätason levykuvaa on muokattu differentiaalisen levykuvan luonnin jälkeen.\n\nNäin voi käydä myös, jos levykuvatiedostoja on siirretty tai kopioitu. Lisäksi syynä voi olla levyn luoneessa sovelluksessa oleva ohjelmistovirhe.\n\nKorjataanko aikaleimat?" - -msgid "Parent and child disk timestamps do not match" -msgstr "Ylä- ja alatason levyjen aikaleimat eivät täsmää" - -msgid "Could not fix VHD timestamp." -msgstr "VHD aikaleimaa ei pystytty korjaamaan." - -msgid "%01i:%02i" -msgstr "%01i:%02i" - -msgid "MFM/RLL" -msgstr "MFM/RLL" - -msgid "XTA" -msgstr "XTA" - -msgid "ESDI" -msgstr "ESDI" - -msgid "IDE" -msgstr "IDE" - -msgid "ATAPI" -msgstr "ATAPI" - -msgid "MFM/RLL (%01i:%01i)" -msgstr "MFM/RLL (%01i:%01i)" - -msgid "XTA (%01i:%01i)" -msgstr "XTA (%01i:%01i)" - -msgid "ESDI (%01i:%01i)" -msgstr "ESDI (%01i:%01i)" - -msgid "IDE (%01i:%01i)" -msgstr "IDE (%01i:%01i)" - -msgid "ATAPI (%01i:%01i)" -msgstr "ATAPI (%01i:%01i)" - -msgid "SCSI (%01i:%02i)" -msgstr "SCSI (%01i:%02i)" - -msgid "CD-ROM %i (%s): %s" -msgstr "CD-ROM %i (%s): %s" - -msgid "160 kB" -msgstr "160 kt" - -msgid "180 kB" -msgstr "180 kt" - -msgid "320 kB" -msgstr "320 kt" - -msgid "360 kB" -msgstr "360 kt" - -msgid "640 kB" -msgstr "640 kt" - -msgid "720 kB" -msgstr "720 kt" - -msgid "1.2 MB" -msgstr "1.2 Mt" - -msgid "1.25 MB" -msgstr "1.25 Mt" - -msgid "1.44 MB" -msgstr "1.44 Mt" - -msgid "DMF (cluster 1024)" -msgstr "DMF (lohko 1024)" - -msgid "DMF (cluster 2048)" -msgstr "DMF (lohko 2048)" - -msgid "2.88 MB" -msgstr "2.88 Mt" - -msgid "ZIP 100" -msgstr "ZIP 100" - -msgid "3.5\" 128Mb M.O. (ISO 10090)" -msgstr "3.5\" 128Mt M.O. (ISO 10090)" - -msgid "3.5\" 230Mb M.O. (ISO 13963)" -msgstr "3.5\" 230Mt M.O. (ISO 13963)" - -msgid "3.5\" 540Mb M.O. (ISO 15498)" -msgstr "3.5\" 540Mt M.O. (ISO 15498)" - -msgid "3.5\" 640Mb M.O. (ISO 15498)" -msgstr "3.5\" 640Mt M.O. (ISO 15498)" - -msgid "3.5\" 1.3Gb M.O. (GigaMO)" -msgstr "3.5\" 1.3Gt M.O. (GigaMO)" - -msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5\" 2.3Gt M.O. (GigaMO 2)" - -msgid "5.25\" 600Mb M.O." -msgstr "5.25\" 600Mt M.O." - -msgid "5.25\" 650Mb M.O." -msgstr "5.25\" 650Mt M.O." - -msgid "5.25\" 1Gb M.O." -msgstr "5.25\" 1Gt M.O." - -msgid "5.25\" 1.3Gb M.O." -msgstr "5.25\" 1.3Gt M.O." - -msgid "Perfect RPM" -msgstr "Täydellinen RPM" - -msgid "1%% below perfect RPM" -msgstr "1%% alle täydellisen RPM:n" - -msgid "1.5%% below perfect RPM" -msgstr "1.5%% alle täydellisen RPM:n" - -msgid "2%% below perfect RPM" -msgstr "2%% alle täydellisen RPM:n" - -msgid "(System Default)" -msgstr "(Järjestelmän oletus)" - diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 609245ad0..2cb2437bb 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -106,7 +106,18 @@ protected: if (strcmp(sourceText, "&Fullscreen") == 0) sourceText = "&Fullscreen\tCtrl+Alt+PageUP"; if (strcmp(sourceText, "&Ctrl+Alt+Del") == 0) sourceText = "&Ctrl+Alt+Del\tCtrl+F12"; if (strcmp(sourceText, "Take s&creenshot") == 0) sourceText = "Take s&creenshot\tCtrl+F11"; - return QTranslator::translate("", sourceText, disambiguation, n); + if (strcmp(sourceText, "&Qt (Software)") == 0) + { + QString finalstr = QTranslator::translate("", "&SDL (Software)", disambiguation, n); + finalstr.replace("SDL", "Qt"); + finalstr.replace("(&S)", "(&Q)"); + return finalstr; + } + QString finalstr = QTranslator::translate("", sourceText, disambiguation, n); +#ifdef Q_OS_MACOS + if (finalstr.contains('\t')) finalstr.truncate(finalstr.indexOf('\t')); +#endif + return finalstr; } }; diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 37a3dac84..8e7fdcd28 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -284,6 +284,11 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionChange_contrast_for_monochrome_display->setChecked(true); } +#ifdef Q_OS_MACOS + ui->actionFullscreen->setShortcutVisibleInContextMenu(true); + ui->actionCtrl_Alt_Del->setShortcutVisibleInContextMenu(true); + ui->actionTake_screenshot->setShortcutVisibleInContextMenu(true); +#endif video_setblit(qt_blit); } @@ -1272,7 +1277,7 @@ void MainWindow::on_actionAbout_86Box_triggered() #ifdef EMU_GIT_HASH githash = QString(" [%1]").arg(EMU_GIT_HASH); #endif - msgBox.setText(QString("86Box v%1%2").arg(EMU_VERSION_FULL, githash)); + msgBox.setText(QString("%3%1%2").arg(EMU_VERSION_FULL, githash, tr("86Box v"))); msgBox.setInformativeText(tr("An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information.")); msgBox.setWindowTitle("About 86Box"); msgBox.addButton("OK", QMessageBox::ButtonRole::AcceptRole); diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 424b21e07..e537753dc 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -47,7 +47,7 @@ 0 0 724 - 21 + 20 @@ -258,7 +258,7 @@ true - Qt (Software) + &Qt (Software) @@ -266,7 +266,7 @@ true - Qt (OpenGL) + Qt (&OpenGL) @@ -274,7 +274,7 @@ true - Qt (OpenGL ES) + Qt (OpenGL &ES) diff --git a/src/qt/qt_newfloppydialog.cpp b/src/qt/qt_newfloppydialog.cpp index cc90946fc..e4892ab82 100644 --- a/src/qt/qt_newfloppydialog.cpp +++ b/src/qt/qt_newfloppydialog.cpp @@ -116,7 +116,7 @@ NewFloppyDialog::NewFloppyDialog(MediaType type, QWidget *parent) : model = ui->comboBoxRpm->model(); for (int i = 0; i < rpmModes.size(); ++i) { - Models::AddEntry(model, rpmModes[i], i); + Models::AddEntry(model, tr(rpmModes[i].toUtf8().data()), i); } connect(ui->fileField, &FileField::fileSelected, this, [this](const QString& filename) { diff --git a/src/qt/qt_progsettings.hpp b/src/qt/qt_progsettings.hpp index 0d7800370..cef6ba192 100644 --- a/src/qt/qt_progsettings.hpp +++ b/src/qt/qt_progsettings.hpp @@ -2,6 +2,7 @@ #define QT_PROGSETTINGS_HPP #include +#include namespace Ui { class ProgSettings; diff --git a/src/qt/qt_soundgain.ui b/src/qt/qt_soundgain.ui index 8b262a312..af85e03c5 100644 --- a/src/qt/qt_soundgain.ui +++ b/src/qt/qt_soundgain.ui @@ -16,9 +16,9 @@ - 150 + 140 20 - 81 + 101 241 diff --git a/src/qt/qt_translations.qrc b/src/qt/qt_translations.qrc index 5cf4a7cbb..f8e9ced0b 100644 --- a/src/qt/qt_translations.qrc +++ b/src/qt/qt_translations.qrc @@ -1,5 +1,6 @@ + 86box_cs-CZ.qm 86box_de-DE.qm 86box_en-GB.qm 86box_es-ES.qm From daedb9024efe281d9bfd4b2b658081f7622f44e6 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 8 Jan 2022 01:05:01 +0600 Subject: [PATCH 186/278] Replace hard disk progress dialog title with 86Box since it isn't translated anywhere yet --- src/qt/qt_harddiskdialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_harddiskdialog.cpp b/src/qt/qt_harddiskdialog.cpp index bf6c34f33..dddad90c2 100644 --- a/src/qt/qt_harddiskdialog.cpp +++ b/src/qt/qt_harddiskdialog.cpp @@ -326,7 +326,7 @@ void HarddiskDialog::onCreateNewFile() { switch (img_format) { case 3: { - QProgressDialog progress(tr("Creating disk image"), QString(), 0, 100, this); + QProgressDialog progress(tr("86Box"), QString(), 0, 100, this); connect(this, &HarddiskDialog::fileProgress, &progress, &QProgressDialog::setValue); std::thread writer([&_86box_geometry, fileName, this] { _86box_geometry = create_drive_vhd_fixed(fileName, this, cylinders_, heads_, sectors_); @@ -362,7 +362,7 @@ void HarddiskDialog::onCreateNewFile() { } // formats 0, 1 and 2 - QProgressDialog progress(tr("Creating disk image"), QString(), 0, 100, this); + QProgressDialog progress(tr("86Box"), QString(), 0, 100, this); connect(this, &HarddiskDialog::fileProgress, &progress, &QProgressDialog::setValue); std::thread writer([size, &file, this] { QDataStream stream(&file); From 2e06e6cc0cbd302d2ce2664df895e5439b1a96d2 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 8 Jan 2022 01:16:58 +0600 Subject: [PATCH 187/278] Finish new floppy dialog translation as well --- src/qt/qt_newfloppydialog.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_newfloppydialog.cpp b/src/qt/qt_newfloppydialog.cpp index e4892ab82..a274503ba 100644 --- a/src/qt/qt_newfloppydialog.cpp +++ b/src/qt/qt_newfloppydialog.cpp @@ -101,22 +101,25 @@ NewFloppyDialog::NewFloppyDialog(MediaType type, QWidget *parent) : for (int i = 0; i < floppyTypes.size(); ++i) { Models::AddEntry(model, tr(floppyTypes[i].toUtf8().data()), i); } + ui->fileField->setFilter(tr("All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)")); break; case MediaType::Zip: for (int i = 0; i < zipTypes.size(); ++i) { Models::AddEntry(model, tr(zipTypes[i].toUtf8().data()), i); } + ui->fileField->setFilter(tr("ZIP images (*.IM? *.im? *.ZDI *.zdi)")); break; case MediaType::Mo: for (int i = 0; i < moTypes.size(); ++i) { Models::AddEntry(model, tr(moTypes[i].toUtf8().data()), i); } + ui->fileField->setFilter(tr("MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)")); break; } model = ui->comboBoxRpm->model(); for (int i = 0; i < rpmModes.size(); ++i) { - Models::AddEntry(model, tr(rpmModes[i].toUtf8().data()), i); + Models::AddEntry(model, tr(rpmModes[i].toUtf8().data()).replace("%%", "%"), i); } connect(ui->fileField, &FileField::fileSelected, this, [this](const QString& filename) { From f2f06aa958575d4c4f482e32564c4bfed4c61490 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 8 Jan 2022 16:39:51 +0600 Subject: [PATCH 188/278] Add runtime language switching --- src/qt/languages/en-US.po | 1170 +++++++++++++++++++++++++++++++++ src/qt/qt_main.cpp | 41 +- src/qt/qt_platform.cpp | 49 +- src/qt/qt_progsettings.cpp | 69 ++ src/qt/qt_progsettings.hpp | 32 + src/qt/qt_progsettings.ui | 41 ++ src/qt/qt_settingsmachine.cpp | 2 +- src/qt/qt_translations.qrc | 1 + 8 files changed, 1359 insertions(+), 46 deletions(-) create mode 100644 src/qt/languages/en-US.po diff --git a/src/qt/languages/en-US.po b/src/qt/languages/en-US.po new file mode 100644 index 000000000..3e3abdcbb --- /dev/null +++ b/src/qt/languages/en-US.po @@ -0,0 +1,1170 @@ +msgid "Translated by" +msgstr "Unknown" + +msgid "&Action" +msgstr "&Action" + +msgid "&Keyboard requires capture" +msgstr "&Keyboard requires capture" + +msgid "&Right CTRL is left ALT" +msgstr "&Right CTRL is left ALT" + +msgid "&Hard Reset..." +msgstr "&Hard Reset..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Pause" + +msgid "E&xit..." +msgstr "E&xit..." + +msgid "&View" +msgstr "&View" + +msgid "&Hide status bar" +msgstr "&Hide status bar" + +msgid "&Resizeable window" +msgstr "&Resizeable window" + +msgid "R&emember size && position" +msgstr "R&emember size && position" + +msgid "Re&nderer" +msgstr "Re&nderer" + +msgid "&SDL (Software)" +msgstr "&SDL (Software)" + +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardware)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 Core)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "Specify dimensions..." + +msgid "F&orce 4:3 display ratio" +msgstr "F&orce 4:3 display ratio" + +msgid "&Window scale factor" +msgstr "&Window scale factor" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Filter method" + +msgid "&Nearest" +msgstr "&Nearest" + +msgid "&Linear" +msgstr "&Linear" + +msgid "Hi&DPI scaling" +msgstr "Hi&DPI scaling" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Fullscreen\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Fullscreen &stretch mode" + +msgid "&Full screen stretch" +msgstr "&Full screen stretch" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Square pixels (Keep ratio)" + +msgid "&Integer scale" +msgstr "&Integer scale" + +msgid "E&GA/(S)VGA settings" +msgstr "E&GA/(S)VGA settings" + +msgid "&Inverted VGA monitor" +msgstr "&Inverted VGA monitor" + +msgid "VGA screen &type" +msgstr "VGA screen &type" + +msgid "RGB &Color" +msgstr "RGB &Color" + +msgid "&RGB Grayscale" +msgstr "&RGB Grayscale" + +msgid "&Amber monitor" +msgstr "&Amber monitor" + +msgid "&Green monitor" +msgstr "&Green monitor" + +msgid "&White monitor" +msgstr "&White monitor" + +msgid "Grayscale &conversion type" +msgstr "Grayscale &conversion type" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Average" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" + +msgid "Change contrast for &monochrome display" +msgstr "Change contrast for &monochrome display" + +msgid "&Media" +msgstr "&Media" + +msgid "&Tools" +msgstr "&Tools" + +msgid "&Settings..." +msgstr "&Settings..." + +msgid "&Update status bar icons" +msgstr "&Update status bar icons" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Take s&creenshot\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Preferences..." + +msgid "Enable &Discord integration" +msgstr "Enable &Discord integration" + +msgid "Sound &gain..." +msgstr "Sound &gain..." + +msgid "Begin trace\tCtrl+T" +msgstr "Begin trace\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "End trace\tCtrl+T" + +msgid "&Logging" +msgstr "&Logging" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Enable BusLogic logs\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Enable CD-ROM logs\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Enable floppy (86F) logs\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Enable floppy controller logs\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Enable IDE logs\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Enable Serial Port logs\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Enable Network logs\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Log breakpoint\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "Dump &video RAM\tCtrl+F1" + +msgid "&Help" +msgstr "&Help" + +msgid "&Documentation..." +msgstr "&Documentation..." + +msgid "&About 86Box..." +msgstr "&About 86Box..." + +msgid "&New image..." +msgstr "&New image..." + +msgid "&Existing image..." +msgstr "&Existing image..." + +msgid "Existing image (&Write-protected)..." +msgstr "Existing image (&Write-protected)..." + +msgid "&Record" +msgstr "&Record" + +msgid "&Play" +msgstr "&Play" + +msgid "&Rewind to the beginning" +msgstr "&Rewind to the beginning" + +msgid "&Fast forward to the end" +msgstr "&Fast forward to the end" + +msgid "E&ject" +msgstr "E&ject" + +msgid "&Image..." +msgstr "&Image..." + +msgid "E&xport to 86F..." +msgstr "E&xport to 86F..." + +msgid "&Mute" +msgstr "&Mute" + +msgid "E&mpty" +msgstr "E&mpty" + +msgid "&Reload previous image" +msgstr "&Reload previous image" + +msgid "&Image" +msgstr "&Image" + +msgid "Target &framerate" +msgstr "Target &framerate" + +msgid "&Sync with video" +msgstr "&Sync with video" + +msgid "&25 fps" +msgstr "&25 fps" + +msgid "&30 fps" +msgstr "&30 fps" + +msgid "&50 fps" +msgstr "&50 fps" + +msgid "&60 fps" +msgstr "&60 fps" + +msgid "&75 fps" +msgstr "&75 fps" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Select shader..." + +msgid "&Remove shader" +msgstr "&Remove shader" + +msgid "Preferences" +msgstr "Preferences" + +msgid "Sound Gain" +msgstr "Sound Gain" + +msgid "New Image" +msgstr "New Image" + +msgid "Settings" +msgstr "Settings" + +msgid "Specify Main Window Dimensions" +msgstr "Specify Main Window Dimensions" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Cancel" + +msgid "Save these settings as &global defaults" +msgstr "Save these settings as &global defaults" + +msgid "&Default" +msgstr "&Default" + +msgid "Language:" +msgstr "Language:" + +msgid "Icon set:" +msgstr "Icon set:" + +msgid "Gain" +msgstr "Gain" + +msgid "File name:" +msgstr "File name:" + +msgid "Disk size:" +msgstr "Disk size:" + +msgid "RPM mode:" +msgstr "RPM mode:" + +msgid "Progress:" +msgstr "Progress:" + +msgid "Width:" +msgstr "Width:" + +msgid "Height:" +msgstr "Height:" + +msgid "Lock to this size" +msgstr "Lock to this size" + +msgid "Machine type:" +msgstr "Machine type:" + +msgid "Machine:" +msgstr "Machine:" + +msgid "Configure" +msgstr "Configure" + +msgid "CPU type:" +msgstr "CPU type:" + +msgid "Speed:" +msgstr "Speed:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "Wait states:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Memory:" + +msgid "Time synchronization" +msgstr "Time synchronization" + +msgid "Disabled" +msgstr "Disabled" + +msgid "Enabled (local time)" +msgstr "Enabled (local time)" + +msgid "Enabled (UTC)" +msgstr "Enabled (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Dynamic Recompiler" + +msgid "Video:" +msgstr "Video:" + +msgid "Voodoo Graphics" +msgstr "Voodoo Graphics" + +msgid "Mouse:" +msgstr "Mouse:" + +msgid "Joystick:" +msgstr "Joystick:" + +msgid "Joystick 1..." +msgstr "Joystick 1..." + +msgid "Joystick 2..." +msgstr "Joystick 2..." + +msgid "Joystick 3..." +msgstr "Joystick 3..." + +msgid "Joystick 4..." +msgstr "Joystick 4..." + +msgid "Sound card:" +msgstr "Sound card:" + +msgid "MIDI Out Device:" +msgstr "MIDI Out Device:" + +msgid "MIDI In Device:" +msgstr "MIDI In Device:" + +msgid "Standalone MPU-401" +msgstr "Standalone MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Use FLOAT32 sound" + +msgid "Network type:" +msgstr "Network type:" + +msgid "PCap device:" +msgstr "PCap device:" + +msgid "Network adapter:" +msgstr "Network adapter:" + +msgid "LPT1 Device:" +msgstr "LPT1 Device:" + +msgid "LPT2 Device:" +msgstr "LPT2 Device:" + +msgid "LPT3 Device:" +msgstr "LPT3 Device:" + +msgid "Serial port 1" +msgstr "Serial port 1" + +msgid "Serial port 2" +msgstr "Serial port 2" + +msgid "Serial port 3" +msgstr "Serial port 3" + +msgid "Serial port 4" +msgstr "Serial port 4" + +msgid "Parallel port 1" +msgstr "Parallel port 1" + +msgid "Parallel port 2" +msgstr "Parallel port 2" + +msgid "Parallel port 3" +msgstr "Parallel port 3" + +msgid "HD Controller:" +msgstr "HD Controller:" + +msgid "FD Controller:" +msgstr "FD Controller:" + +msgid "Tertiary IDE Controller" +msgstr "Tertiary IDE Controller" + +msgid "Quaternary IDE Controller" +msgstr "Quaternary IDE Controller" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Controller 1:" + +msgid "Controller 2:" +msgstr "Controller 2:" + +msgid "Controller 3:" +msgstr "Controller 3:" + +msgid "Controller 4:" +msgstr "Controller 4:" + +msgid "Cassette" +msgstr "Cassette" + +msgid "Hard disks:" +msgstr "Hard disks:" + +msgid "&New..." +msgstr "&New..." + +msgid "&Existing..." +msgstr "&Existing..." + +msgid "&Remove" +msgstr "&Remove" + +msgid "Bus:" +msgstr "Bus:" + +msgid "Channel:" +msgstr "Channel:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Specify..." + +msgid "Sectors:" +msgstr "Sectors:" + +msgid "Heads:" +msgstr "Heads:" + +msgid "Cylinders:" +msgstr "Cylinders:" + +msgid "Size (MB):" +msgstr "Size (MB):" + +msgid "Type:" +msgstr "Type:" + +msgid "Image Format:" +msgstr "Image Format:" + +msgid "Block Size:" +msgstr "Block Size:" + +msgid "Floppy drives:" +msgstr "Floppy drives:" + +msgid "Turbo timings" +msgstr "Turbo timings" + +msgid "Check BPB" +msgstr "Check BPB" + +msgid "CD-ROM drives:" +msgstr "CD-ROM drives:" + +msgid "MO drives:" +msgstr "MO drives:" + +msgid "ZIP drives:" +msgstr "ZIP drives:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA RTC:" + +msgid "ISA Memory Expansion" +msgstr "ISA Memory Expansion" + +msgid "Card 1:" +msgstr "Card 1:" + +msgid "Card 2:" +msgstr "Card 2:" + +msgid "Card 3:" +msgstr "Card 3:" + +msgid "Card 4:" +msgstr "Card 4:" + +msgid "ISABugger device" +msgstr "ISABugger device" + +msgid "POST card" +msgstr "POST card" + +msgid "Segoe UI" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Error" + +msgid "Fatal error" +msgstr "Fatal error" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Press CTRL+ALT+PAGE DOWN to return to windowed mode." + +msgid "Speed" +msgstr "Speed" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgstr "ZIP images (*.IM? *.im? *.ZDI *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." + +msgid "(empty)" +msgstr "(empty)" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" +msgstr "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "On" + +msgid "Off" +msgstr "Off" + +msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" +msgstr "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." + +msgid "Machine" +msgstr "Machine" + +msgid "Display" +msgstr "Display" + +msgid "Input devices" +msgstr "Input devices" + +msgid "Sound" +msgstr "Sound" + +msgid "Network" +msgstr "Network" + +msgid "Ports (COM & LPT)" +msgstr "Ports (COM & LPT)" + +msgid "Storage controllers" +msgstr "Storage controllers" + +msgid "Hard disks" +msgstr "Hard disks" + +msgid "Floppy & CD-ROM drives" +msgstr "Floppy & CD-ROM drives" + +msgid "Other removable devices" +msgstr "Other removable devices" + +msgid "Other peripherals" +msgstr "Other peripherals" + +msgid "Surface images (*.86F *.86f)" +msgstr "Surface images (*.86F *.86f)" + +msgid "Click to capture mouse" +msgstr "Click to capture mouse" + +msgid "Press F8+F12 to release mouse" +msgstr "Press F8+F12 to release mouse" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Press F8+F12 or middle button to release mouse" + +msgid "Unable to initialize FluidSynth" +msgstr "Unable to initialize FluidSynth" + +msgid "Bus" +msgstr "Bus" + +msgid "File" +msgstr "File" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Could not initialize the video renderer." + +msgid "Default" +msgstr "Default" + +msgid "%i Wait state(s)" +msgstr "%i Wait state(s)" + +msgid "Type" +msgstr "Type" + +msgid "Failed to set up PCap" +msgstr "Failed to set up PCap" + +msgid "No PCap devices found" +msgstr "No PCap devices found" + +msgid "Invalid PCap device" +msgstr "Invalid PCap device" + +msgid "Standard 2-button joystick(s)" +msgstr "Standard 2-button joystick(s)" + +msgid "Standard 4-button joystick" +msgstr "Standard 4-button joystick" + +msgid "Standard 6-button joystick" +msgstr "Standard 6-button joystick" + +msgid "Standard 8-button joystick" +msgstr "Standard 8-button joystick" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "None" + +msgid "Unable to load keyboard accelerators." +msgstr "Unable to load keyboard accelerators." + +msgid "Unable to register raw input." +msgstr "Unable to register raw input." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Floppy %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgstr "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" + +msgid "Unable to initialize FreeType" +msgstr "Unable to initialize FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Unable to initialize SDL, SDL2.dll is required" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Are you sure you want to hard reset the emulated machine?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Are you sure you want to exit 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Unable to initialize Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgstr "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" + +msgid "Welcome to 86Box!" +msgstr "Welcome to 86Box!" + +msgid "Internal controller" +msgstr "Internal controller" + +msgid "Exit" +msgstr "Exit" + +msgid "No ROMs found" +msgstr "No ROMs found" + +msgid "Do you want to save the settings?" +msgstr "Do you want to save the settings?" + +msgid "This will hard reset the emulated machine." +msgstr "This will hard reset the emulated machine." + +msgid "Save" +msgstr "Save" + +msgid "About 86Box" +msgstr "About 86Box" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." + +msgid "Hardware not available" +msgstr "Hardware not available" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." + +msgid "Invalid configuration" +msgstr "Invalid configuration" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " is required for ESC/P printer emulation." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " is required for FluidSynth MIDI output." + +msgid "Entering fullscreen mode" +msgstr "Entering fullscreen mode" + +msgid "Don't show this message again" +msgstr "Don't show this message again" + +msgid "Don't exit" +msgstr "Don't exit" + +msgid "Reset" +msgstr "Reset" + +msgid "Don't reset" +msgstr "Don't reset" + +msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgstr "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" + +msgid "%hs Device Configuration" +msgstr "%hs Device Configuration" + +msgid "Monitor in sleep mode" +msgstr "Monitor in sleep mode" + +msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" +msgstr "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" + +msgid "OpenGL options" +msgstr "OpenGL options" + +msgid "You are loading an unsupported configuration" +msgstr "You are loading an unsupported configuration" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." + +msgid "Continue" +msgstr "Continue" + +msgid "Cassette: %s" +msgstr "Cassette: %s" + +msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" +msgstr "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" + +msgid "Cartridge %i: %ls" +msgstr "Cartridge %i: %ls" + +msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" +msgstr "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Hard disk (%s)" +msgstr "Hard disk (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL or ESDI CD-ROM drives never existed" + +msgid "Custom..." +msgstr "Custom..." + +msgid "Custom (large)..." +msgstr "Custom (large)..." + +msgid "Add New Hard Disk" +msgstr "Add New Hard Disk" + +msgid "Add Existing Hard Disk" +msgstr "Add Existing Hard Disk" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "HDI disk images cannot be larger than 4 GB." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Disk images cannot be larger than 127 GB." + +msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" +msgstr "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" + +msgid "Unable to read file" +msgstr "Unable to read file" + +msgid "Unable to write file" +msgstr "Unable to write file" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "HDI or HDX images with a sector size other than 512 are not supported." + +msgid "USB is not yet supported" +msgstr "USB is not yet supported" + +msgid "Disk image file already exists" +msgstr "Disk image file already exists" + +msgid "Please specify a valid file name." +msgstr "Please specify a valid file name." + +msgid "Disk image created" +msgstr "Disk image created" + +msgid "Make sure the file exists and is readable." +msgstr "Make sure the file exists and is readable." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Make sure the file is being saved to a writable directory." + +msgid "Disk image too large" +msgstr "Disk image too large" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Remember to partition and format the newly-created drive." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "The selected file will be overwritten. Are you sure you want to use it?" + +msgid "Unsupported disk image" +msgstr "Unsupported disk image" + +msgid "Overwrite" +msgstr "Overwrite" + +msgid "Don't overwrite" +msgstr "Don't overwrite" + +msgid "Raw image (.img)" +msgstr "Raw image (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDI image (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDX image (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "Fixed-size VHD (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "Dynamic-size VHD (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Differencing VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Large blocks (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Small blocks (512 KB)" + +msgid "VHD files (*.VHD *.vhd);;All files (*)" +msgstr "VHD files (*.VHD *.vhd);;All files (*)" + +msgid "Select the parent VHD" +msgstr "Select the parent VHD" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Parent and child disk timestamps do not match" + +msgid "Could not fix VHD timestamp." +msgstr "Could not fix VHD timestamp." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (cluster 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (cluster 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." + +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." + +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." + +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "Perfect RPM" + +msgid "1%% below perfect RPM" +msgstr "1%% below perfect RPM" + +msgid "1.5%% below perfect RPM" +msgstr "1.5%% below perfect RPM" + +msgid "2%% below perfect RPM" +msgstr "2%% below perfect RPM" + +msgid "(System Default)" +msgstr "(System Default)" + diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 2cb2437bb..464d5115f 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -31,6 +31,7 @@ Q_IMPORT_PLUGIN(QWindowsVistaStylePlugin) #include #include "qt_mainwindow.hpp" +#include "qt_progsettings.hpp" #include "cocoa_mouse.hpp" #include "qt_styleoverride.hpp" @@ -97,30 +98,6 @@ main_thread_fn() is_quit = 1; } -class CustomTranslator : public QTranslator -{ -protected: - QString translate(const char *context, const char *sourceText, - const char *disambiguation = nullptr, int n = -1) const override - { - if (strcmp(sourceText, "&Fullscreen") == 0) sourceText = "&Fullscreen\tCtrl+Alt+PageUP"; - if (strcmp(sourceText, "&Ctrl+Alt+Del") == 0) sourceText = "&Ctrl+Alt+Del\tCtrl+F12"; - if (strcmp(sourceText, "Take s&creenshot") == 0) sourceText = "Take s&creenshot\tCtrl+F11"; - if (strcmp(sourceText, "&Qt (Software)") == 0) - { - QString finalstr = QTranslator::translate("", "&SDL (Software)", disambiguation, n); - finalstr.replace("SDL", "Qt"); - finalstr.replace("(&S)", "(&Q)"); - return finalstr; - } - QString finalstr = QTranslator::translate("", sourceText, disambiguation, n); -#ifdef Q_OS_MACOS - if (finalstr.contains('\t')) finalstr.truncate(finalstr.indexOf('\t')); -#endif - return finalstr; - } -}; - int main(int argc, char* argv[]) { QApplication app(argc, argv); Q_INIT_RESOURCE(qt_resources); @@ -133,20 +110,7 @@ int main(int argc, char* argv[]) { while (it.hasNext()) { qDebug() << it.next() << "\n"; } - QTranslator qtTranslator; - qtTranslator.load(QLocale::system(), QStringLiteral("qt_"), QString(), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); - if (app.installTranslator(&qtTranslator)) - { - qDebug() << "Qt translations loaded." << "\n"; - } - CustomTranslator translator; - qDebug() << QLocale::system().name() << "\n"; - auto localetofilename = QLocale::system().name().replace('_', '-'); - if (translator.load(QLatin1String("86box_"), QLatin1String(":/"), QString(), localetofilename + ".qm")) - { - qDebug() << "Translations loaded.\n"; - QCoreApplication::installTranslator(&translator); - } + #ifdef __APPLE__ CocoaEventFilter cocoafilter; app.installNativeEventFilter(&cocoafilter); @@ -157,6 +121,7 @@ int main(int argc, char* argv[]) { { return 0; } + ProgSettings::loadTranslators(&app); if (! pc_init_modules()) { ui_msgbox_header(MBX_FATAL, (void*)IDS_2120, (void*)IDS_2056); return 6; diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index d053098c1..807b64a52 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -18,6 +18,7 @@ #include #include "qt_mainwindow.hpp" +#include "qt_progsettings.hpp" #ifdef Q_OS_UNIX #include @@ -373,15 +374,49 @@ void set_language(uint32_t id) { lang_id = id; } +QMap> ProgSettings::lcid_langcode = +{ + {0x0405, {"cs-CZ", "Czech (Czech Republic)"} }, + {0x0407, {"de-DE", "German (Germany)"} }, + {0x0408, {"en-US", "English (United States)"} }, + {0x0809, {"en-GB", "English (United Kingdom)"} }, + {0x0C0A, {"es-ES", "Spanish (Spain)"} }, + {0x040B, {"fi-FI", "Finnish (Finland)"} }, + {0x040C, {"fr-FR", "French (France)"} }, + {0x041A, {"hr-HR", "Croatian (Croatia)"} }, + {0x040E, {"hu-HU", "Hungarian (Hungary)"} }, + {0x0410, {"it-IT", "Italian (Italy)"} }, + {0x0411, {"ja-JP", "Japanese (Japan)"} }, + {0x0412, {"ko-KR", "Korean (Korea)"} }, + {0x0416, {"pt-BR", "Portuguese (Brazil)"} }, + {0x0816, {"pt-PT", "Portuguese (Portugal)"} }, + {0x0419, {"ru-RU", "Russian (Russia)"} }, + {0x0424, {"sl-SI", "Slovenian (Slovenia)"} }, + {0x041F, {"tr-TR", "Turkish (Turkey)"} }, + {0x0804, {"zh-CN", "Chinese (China)"} }, + {0xFFFF, {"system", "(System Default)"} }, +}; + /* Sets up the program language before initialization. */ uint32_t plat_language_code(char* langcode) { - /* or maybe not */ - return 0; + for (auto& curKey : ProgSettings::lcid_langcode.keys()) + { + if (ProgSettings::lcid_langcode[curKey].first == langcode) + { + return curKey; + } + } + return 0xFFFF; } /* Converts back the language code to LCID */ void plat_language_code_r(uint32_t lcid, char* outbuf, int len) { - /* or maybe not */ + if (!ProgSettings::lcid_langcode.contains(lcid)) + { + qstrncpy(outbuf, "system", len); + return; + } + qstrncpy(outbuf, ProgSettings::lcid_langcode[lcid].first.toUtf8().constData(), len); return; } @@ -489,9 +524,9 @@ size_t c16stombs(char dst[], const uint16_t src[], int len) #endif -static std::map translatedstrings; +QMap ProgSettings::translatedstrings; -static void reload_strings() +void ProgSettings::reloadStrings() { translatedstrings.clear(); translatedstrings[IDS_2077] = QCoreApplication::translate("", "Click to capture mouse").toStdWString(); @@ -536,8 +571,8 @@ static void reload_strings() wchar_t* plat_get_string(int i) { - if (translatedstrings.empty()) reload_strings(); - return translatedstrings[i].data(); + if (ProgSettings::translatedstrings.empty()) ProgSettings::reloadStrings(); + return ProgSettings::translatedstrings[i].data(); } int diff --git a/src/qt/qt_progsettings.cpp b/src/qt/qt_progsettings.cpp index a228b55c1..c0e4623a4 100644 --- a/src/qt/qt_progsettings.cpp +++ b/src/qt/qt_progsettings.cpp @@ -1,3 +1,5 @@ +#include + #include "qt_progsettings.hpp" #include "ui_qt_progsettings.h" #include "qt_mainwindow.hpp" @@ -7,6 +9,7 @@ #include #include #include +#include extern "C" { @@ -19,6 +22,8 @@ extern "C" static QMap iconset_to_qt; extern MainWindow* main_window; +ProgSettings::CustomTranslator* ProgSettings::translator = nullptr; +QTranslator* ProgSettings::qtTranslator = nullptr; QString ProgSettings::getIconSetPath() { QString roms_root; @@ -69,12 +74,29 @@ ProgSettings::ProgSettings(QWidget *parent) : ui->comboBox->setCurrentIndex(ui->comboBox->findData(i.key())); } } + ui->comboBox->setItemData(0, '(' + tr("Default") + ')', Qt::DisplayRole); + + ui->comboBoxLanguage->setItemData(0, 0xFFFF); + for (auto i = lcid_langcode.begin() + 1; i != lcid_langcode.end(); i++) + { + if (i.key() == 0xFFFF) continue; + ui->comboBoxLanguage->addItem(lcid_langcode[i.key()].second, i.key()); + if (i.key() == lang_id) + { + ui->comboBoxLanguage->setCurrentIndex(ui->comboBoxLanguage->findData(i.key())); + } + } } void ProgSettings::accept() { strcpy(icon_set, ui->comboBox->currentData().toString().toUtf8().data()); + lang_id = ui->comboBoxLanguage->currentData().toUInt(); + loadTranslators(QCoreApplication::instance()); + reloadStrings(); + update_mouse_msg(); + main_window->ui->retranslateUi(main_window); QString msg = main_window->status->getMessage(); main_window->status.reset(new MachineStatus(main_window)); main_window->refreshMediaMenu(); @@ -96,3 +118,50 @@ void ProgSettings::on_pushButton_released() ui->comboBox->setCurrentIndex(0); } +void ProgSettings::loadTranslators(QObject *parent) +{ + if (qtTranslator) + { + QApplication::removeTranslator(qtTranslator); + qtTranslator = nullptr; + } + if (translator) + { + QApplication::removeTranslator(translator); + translator = nullptr; + } + qtTranslator = new QTranslator(parent); + translator = new CustomTranslator(parent); + QString localetofilename = ""; + if (lang_id == 0xFFFF || lcid_langcode.contains(lang_id) == false) + { + for (int i = 0; i < QLocale::system().uiLanguages().size(); i++) + { + localetofilename = QLocale::system().uiLanguages()[i]; + if (translator->load(QLatin1String("86box_") + localetofilename, QLatin1String(":/"))) + { + qDebug() << "Translations loaded.\n"; + QCoreApplication::installTranslator(translator); + qtTranslator->load(QLatin1String("qtbase_") + localetofilename.replace('-', '_'), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + if (QApplication::installTranslator(qtTranslator)) + { + qDebug() << "Qt translations loaded." << "\n"; + } + break; + } + } + } + else + { + translator->load(QLatin1String("86box_") + lcid_langcode[lang_id].first, QLatin1String(":/")); + QCoreApplication::installTranslator(translator); + qtTranslator->load(QLatin1String("qtbase_") + QString(lcid_langcode[lang_id].first).replace('-', '_'), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + QCoreApplication::installTranslator(qtTranslator); + } +} + +void ProgSettings::on_pushButtonLanguage_released() +{ + ui->comboBoxLanguage->setCurrentIndex(0); +} + diff --git a/src/qt/qt_progsettings.hpp b/src/qt/qt_progsettings.hpp index cef6ba192..f4ad58bbb 100644 --- a/src/qt/qt_progsettings.hpp +++ b/src/qt/qt_progsettings.hpp @@ -16,11 +16,43 @@ public: explicit ProgSettings(QWidget *parent = nullptr); ~ProgSettings(); static QString getIconSetPath(); + static void loadTranslators(QObject* parent = nullptr); + static void reloadStrings(); + class CustomTranslator : public QTranslator + { + public: + CustomTranslator(QObject* parent = nullptr) : QTranslator(parent) {}; + protected: + QString translate(const char *context, const char *sourceText, + const char *disambiguation = nullptr, int n = -1) const override + { + if (strcmp(sourceText, "&Fullscreen") == 0) sourceText = "&Fullscreen\tCtrl+Alt+PageUP"; + if (strcmp(sourceText, "&Ctrl+Alt+Del") == 0) sourceText = "&Ctrl+Alt+Del\tCtrl+F12"; + if (strcmp(sourceText, "Take s&creenshot") == 0) sourceText = "Take s&creenshot\tCtrl+F11"; + if (strcmp(sourceText, "&Qt (Software)") == 0) + { + QString finalstr = QTranslator::translate("", "&SDL (Software)", disambiguation, n); + finalstr.replace("SDL", "Qt"); + finalstr.replace("(&S)", "(&Q)"); + return finalstr; + } + QString finalstr = QTranslator::translate("", sourceText, disambiguation, n); +#ifdef Q_OS_MACOS + if (finalstr.contains('\t')) finalstr.truncate(finalstr.indexOf('\t')); +#endif + return finalstr; + } + }; + static CustomTranslator* translator; + static QTranslator* qtTranslator; + static QMap> lcid_langcode; + static QMap translatedstrings; protected slots: void accept() override; private slots: void on_pushButton_released(); + void on_pushButtonLanguage_released(); private: Ui::ProgSettings *ui; diff --git a/src/qt/qt_progsettings.ui b/src/qt/qt_progsettings.ui index 6adb8bcfc..2551bdc0b 100644 --- a/src/qt/qt_progsettings.ui +++ b/src/qt/qt_progsettings.ui @@ -73,6 +73,47 @@ Default + + + + 20 + 140 + 91 + 16 + + + + Language: + + + + + + 290 + 190 + 80 + 23 + + + + Default + + + + + + 20 + 160 + 351 + 23 + + + + + (System Default) + + + diff --git a/src/qt/qt_settingsmachine.cpp b/src/qt/qt_settingsmachine.cpp index 5260da837..8a1f12be2 100644 --- a/src/qt/qt_settingsmachine.cpp +++ b/src/qt/qt_settingsmachine.cpp @@ -52,7 +52,7 @@ SettingsMachine::SettingsMachine(QWidget *parent) : waitStatesModel->setData(idx, 0, Qt::UserRole); for (int i = 0; i < 8; ++i) { idx = waitStatesModel->index(i+1, 0); - waitStatesModel->setData(idx, QString("%1 Wait State(s)").arg(i), Qt::DisplayRole); + waitStatesModel->setData(idx, QString::asprintf(tr("%i Wait state(s)").toUtf8().constData(), i), Qt::DisplayRole); waitStatesModel->setData(idx, i+1, Qt::UserRole); } diff --git a/src/qt/qt_translations.qrc b/src/qt/qt_translations.qrc index f8e9ced0b..a5c91336d 100644 --- a/src/qt/qt_translations.qrc +++ b/src/qt/qt_translations.qrc @@ -2,6 +2,7 @@ 86box_cs-CZ.qm 86box_de-DE.qm + 86box_en-US.qm 86box_en-GB.qm 86box_es-ES.qm 86box_fi-FI.qm From 34de2d15cff8365004783e0b201c5ab8f0540880 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sat, 8 Jan 2022 13:40:45 +0200 Subject: [PATCH 189/278] qt: Fix type error --- src/qt/qt_platform.cpp | 45 ++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index 807b64a52..a53634f45 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -374,28 +374,31 @@ void set_language(uint32_t id) { lang_id = id; } -QMap> ProgSettings::lcid_langcode = +extern "C++" { - {0x0405, {"cs-CZ", "Czech (Czech Republic)"} }, - {0x0407, {"de-DE", "German (Germany)"} }, - {0x0408, {"en-US", "English (United States)"} }, - {0x0809, {"en-GB", "English (United Kingdom)"} }, - {0x0C0A, {"es-ES", "Spanish (Spain)"} }, - {0x040B, {"fi-FI", "Finnish (Finland)"} }, - {0x040C, {"fr-FR", "French (France)"} }, - {0x041A, {"hr-HR", "Croatian (Croatia)"} }, - {0x040E, {"hu-HU", "Hungarian (Hungary)"} }, - {0x0410, {"it-IT", "Italian (Italy)"} }, - {0x0411, {"ja-JP", "Japanese (Japan)"} }, - {0x0412, {"ko-KR", "Korean (Korea)"} }, - {0x0416, {"pt-BR", "Portuguese (Brazil)"} }, - {0x0816, {"pt-PT", "Portuguese (Portugal)"} }, - {0x0419, {"ru-RU", "Russian (Russia)"} }, - {0x0424, {"sl-SI", "Slovenian (Slovenia)"} }, - {0x041F, {"tr-TR", "Turkish (Turkey)"} }, - {0x0804, {"zh-CN", "Chinese (China)"} }, - {0xFFFF, {"system", "(System Default)"} }, -}; + QMap> ProgSettings::lcid_langcode = + { + {0x0405, {"cs-CZ", "Czech (Czech Republic)"} }, + {0x0407, {"de-DE", "German (Germany)"} }, + {0x0408, {"en-US", "English (United States)"} }, + {0x0809, {"en-GB", "English (United Kingdom)"} }, + {0x0C0A, {"es-ES", "Spanish (Spain)"} }, + {0x040B, {"fi-FI", "Finnish (Finland)"} }, + {0x040C, {"fr-FR", "French (France)"} }, + {0x041A, {"hr-HR", "Croatian (Croatia)"} }, + {0x040E, {"hu-HU", "Hungarian (Hungary)"} }, + {0x0410, {"it-IT", "Italian (Italy)"} }, + {0x0411, {"ja-JP", "Japanese (Japan)"} }, + {0x0412, {"ko-KR", "Korean (Korea)"} }, + {0x0416, {"pt-BR", "Portuguese (Brazil)"} }, + {0x0816, {"pt-PT", "Portuguese (Portugal)"} }, + {0x0419, {"ru-RU", "Russian (Russia)"} }, + {0x0424, {"sl-SI", "Slovenian (Slovenia)"} }, + {0x041F, {"tr-TR", "Turkish (Turkey)"} }, + {0x0804, {"zh-CN", "Chinese (China)"} }, + {0xFFFF, {"system", "(System Default)"} }, + }; +} /* Sets up the program language before initialization. */ uint32_t plat_language_code(char* langcode) { From 021ec8e50d72e339e6d35c48c4265afa43d0755c Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sat, 8 Jan 2022 15:36:52 +0200 Subject: [PATCH 190/278] qt: Make QT default off to prepare merging to upstream --- CMakeLists.txt | 2 +- src/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f003bcb60..424e08ec3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -110,7 +110,7 @@ option(CPPTHREADS "C++11 threads" option(NEW_DYNAREC "Use the PCem v15 (\"new\") dynamic recompiler" OFF) option(MINITRACE "Enable Chrome tracing using the modified minitrace library" OFF) option(DEV_BRANCH "Development branch" OFF) -option(QT "QT GUI" ON) +option(QT "QT GUI" OFF) # Development branch features # diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 765a714e6..6bc00b432 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -240,7 +240,7 @@ if (APPLE) endif() if (QT) - add_subdirectory(qt) + add_subdirectory(qt) elseif(WIN32) add_subdirectory(win) else() From 62fd64730ad1a5debde105893cd940c89a6b1f08 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 8 Jan 2022 23:17:20 +0600 Subject: [PATCH 191/278] Add icon set fallback feature --- src/qt/qt_machinestatus.cpp | 42 ++++++++++++++-------------- src/qt/qt_progsettings.cpp | 7 +++++ src/qt/qt_progsettings.hpp | 1 + src/qt/qt_settingsfloppycdrom.cpp | 10 +++---- src/qt/qt_settingsharddisks.cpp | 2 +- src/qt/qt_settingsotherremovable.cpp | 8 +++--- 6 files changed, 39 insertions(+), 31 deletions(-) diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index 2deb9330d..b844ade83 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -55,7 +55,7 @@ namespace { QPixmap active; QPixmap empty; QPixmap empty_active; - void load(const QString& basePath); + void load(QString basePath); }; struct Pixmaps { PixmapSetEmpty cartridge; @@ -132,20 +132,20 @@ namespace { static const QString pixmap_active = QStringLiteral("_active"); static const QString pixmap_empty_active = QStringLiteral("_empty_active"); void PixmapSetEmpty::load(const QString &basePath) { - normal = QIcon(basePath.arg(QStringLiteral(""))).pixmap(pixmap_size); - empty = QIcon(basePath.arg(pixmap_empty)).pixmap(pixmap_size); + normal = ProgSettings::loadIcon(basePath.arg(QStringLiteral(""))).pixmap(pixmap_size); + empty = ProgSettings::loadIcon(basePath.arg(pixmap_empty)).pixmap(pixmap_size); } void PixmapSetActive::load(const QString &basePath) { - normal = QIcon(basePath.arg(QStringLiteral(""))).pixmap(pixmap_size); - active = QIcon(basePath.arg(pixmap_active)).pixmap(pixmap_size); + normal = ProgSettings::loadIcon(basePath.arg(QStringLiteral(""))).pixmap(pixmap_size); + active = ProgSettings::loadIcon(basePath.arg(pixmap_active)).pixmap(pixmap_size); } - void PixmapSetEmptyActive::load(const QString &basePath) { - normal = QIcon(basePath.arg(QStringLiteral(""))).pixmap(pixmap_size); - active = QIcon(basePath.arg(pixmap_active)).pixmap(pixmap_size); - empty = QIcon(basePath.arg(pixmap_empty)).pixmap(pixmap_size); - empty_active = QIcon(basePath.arg(pixmap_empty_active)).pixmap(pixmap_size); + void PixmapSetEmptyActive::load(QString basePath) { + normal = ProgSettings::loadIcon(basePath.arg(QStringLiteral(""))).pixmap(pixmap_size); + active = ProgSettings::loadIcon(basePath.arg(pixmap_active)).pixmap(pixmap_size); + empty = ProgSettings::loadIcon(basePath.arg(pixmap_empty)).pixmap(pixmap_size); + empty_active = ProgSettings::loadIcon(basePath.arg(pixmap_empty_active)).pixmap(pixmap_size); } } @@ -153,20 +153,20 @@ struct MachineStatus::States { Pixmaps pixmaps; States(QObject* parent) { - pixmaps.cartridge.load(ProgSettings::getIconSetPath() + "/cartridge%1.ico"); - pixmaps.cassette.load(ProgSettings::getIconSetPath() + "/cassette%1.ico"); - pixmaps.floppy_disabled.normal = QIcon(ProgSettings::getIconSetPath() + QStringLiteral("/floppy_disabled.ico")).pixmap(pixmap_size); + pixmaps.cartridge.load("/cartridge%1.ico"); + pixmaps.cassette.load("/cassette%1.ico"); + pixmaps.floppy_disabled.normal = ProgSettings::loadIcon(QStringLiteral("/floppy_disabled.ico")).pixmap(pixmap_size); pixmaps.floppy_disabled.active = pixmaps.floppy_disabled.normal; pixmaps.floppy_disabled.empty = pixmaps.floppy_disabled.normal; pixmaps.floppy_disabled.empty_active = pixmaps.floppy_disabled.normal; - pixmaps.floppy_525.load(ProgSettings::getIconSetPath() + "/floppy_525%1.ico"); - pixmaps.floppy_35.load(ProgSettings::getIconSetPath() + "/floppy_35%1.ico"); - pixmaps.cdrom.load(ProgSettings::getIconSetPath() + "/cdrom%1.ico"); - pixmaps.zip.load(ProgSettings::getIconSetPath() + "/zip%1.ico"); - pixmaps.mo.load(ProgSettings::getIconSetPath() + "/mo%1.ico"); - pixmaps.hd.load(ProgSettings::getIconSetPath() + "/hard_disk%1.ico"); - pixmaps.net.load(ProgSettings::getIconSetPath() + "/network%1.ico"); - pixmaps.sound = QIcon(ProgSettings::getIconSetPath() + "/sound.ico").pixmap(pixmap_size); + pixmaps.floppy_525.load("/floppy_525%1.ico"); + pixmaps.floppy_35.load("/floppy_35%1.ico"); + pixmaps.cdrom.load("/cdrom%1.ico"); + pixmaps.zip.load("/zip%1.ico"); + pixmaps.mo.load("/mo%1.ico"); + pixmaps.hd.load("/hard_disk%1.ico"); + pixmaps.net.load("/network%1.ico"); + pixmaps.sound = ProgSettings::loadIcon("/sound.ico").pixmap(pixmap_size); cartridge[0].pixmaps = &pixmaps.cartridge; cartridge[1].pixmaps = &pixmaps.cartridge; diff --git a/src/qt/qt_progsettings.cpp b/src/qt/qt_progsettings.cpp index c0e4623a4..8e47cffec 100644 --- a/src/qt/qt_progsettings.cpp +++ b/src/qt/qt_progsettings.cpp @@ -50,6 +50,13 @@ QString ProgSettings::getIconSetPath() return iconset_to_qt[icon_set]; } +QIcon ProgSettings::loadIcon(QString file) +{ + (void)getIconSetPath(); + if (!QFile::exists(iconset_to_qt[icon_set] + file)) return QIcon(iconset_to_qt[""] + file); + return QIcon(iconset_to_qt[icon_set] + file); +} + ProgSettings::ProgSettings(QWidget *parent) : QDialog(parent), ui(new Ui::ProgSettings) diff --git a/src/qt/qt_progsettings.hpp b/src/qt/qt_progsettings.hpp index f4ad58bbb..a21fe9203 100644 --- a/src/qt/qt_progsettings.hpp +++ b/src/qt/qt_progsettings.hpp @@ -16,6 +16,7 @@ public: explicit ProgSettings(QWidget *parent = nullptr); ~ProgSettings(); static QString getIconSetPath(); + static QIcon loadIcon(QString file); static void loadTranslators(QObject* parent = nullptr); static void reloadStrings(); class CustomTranslator : public QTranslator diff --git a/src/qt/qt_settingsfloppycdrom.cpp b/src/qt/qt_settingsfloppycdrom.cpp index 3cd040c9b..b2c2df83f 100644 --- a/src/qt/qt_settingsfloppycdrom.cpp +++ b/src/qt/qt_settingsfloppycdrom.cpp @@ -16,11 +16,11 @@ extern "C" { static void setFloppyType(QAbstractItemModel* model, const QModelIndex& idx, int type) { QIcon icon; if (type == 0) { - icon = QIcon(ProgSettings::getIconSetPath() + "/floppy_disabled.ico"); + icon = ProgSettings::loadIcon("/floppy_disabled.ico"); } else if (type >= 1 && type <= 6) { - icon = QIcon(ProgSettings::getIconSetPath() + "/floppy_525.ico"); + icon = ProgSettings::loadIcon("/floppy_525.ico"); } else { - icon = QIcon(ProgSettings::getIconSetPath() + "/floppy_35.ico"); + icon = ProgSettings::loadIcon("/floppy_35.ico"); } model->setData(idx, QObject::tr(fdd_getname(type))); @@ -32,11 +32,11 @@ static void setCDROMBus(QAbstractItemModel* model, const QModelIndex& idx, uint8 QIcon icon; switch (bus) { case CDROM_BUS_DISABLED: - icon = QIcon(ProgSettings::getIconSetPath() + "/cdrom_disabled.ico"); + icon = ProgSettings::loadIcon("/cdrom_disabled.ico"); break; case CDROM_BUS_ATAPI: case CDROM_BUS_SCSI: - icon = QIcon(ProgSettings::getIconSetPath() + "/cdrom.ico"); + icon = ProgSettings::loadIcon("/cdrom.ico"); break; } diff --git a/src/qt/qt_settingsharddisks.cpp b/src/qt/qt_settingsharddisks.cpp index ecf8df882..1e9d11350 100644 --- a/src/qt/qt_settingsharddisks.cpp +++ b/src/qt/qt_settingsharddisks.cpp @@ -55,7 +55,7 @@ static void addRow(QAbstractItemModel* model, hard_disk_t* hd) { QString busName = Harddrives::BusChannelName(hd->bus, hd->channel); model->setData(model->index(row, ColumnBus), busName); - model->setData(model->index(row, ColumnBus), QIcon(ProgSettings::getIconSetPath() + "/hard_disk.ico"), Qt::DecorationRole); + model->setData(model->index(row, ColumnBus), ProgSettings::loadIcon( "/hard_disk.ico"), Qt::DecorationRole); model->setData(model->index(row, ColumnBus), hd->bus, DataBus); model->setData(model->index(row, ColumnBus), hd->channel, DataBusChannel); QString fileName = hd->fn; diff --git a/src/qt/qt_settingsotherremovable.cpp b/src/qt/qt_settingsotherremovable.cpp index 5aafae0b8..3fa7b0351 100644 --- a/src/qt/qt_settingsotherremovable.cpp +++ b/src/qt/qt_settingsotherremovable.cpp @@ -22,11 +22,11 @@ static void setMOBus(QAbstractItemModel* model, const QModelIndex& idx, uint8_t QIcon icon; switch (bus) { case MO_BUS_DISABLED: - icon = QIcon(ProgSettings::getIconSetPath() + "/mo_disabled.ico"); + icon = ProgSettings::loadIcon("/mo_disabled.ico"); break; case MO_BUS_ATAPI: case MO_BUS_SCSI: - icon = QIcon(ProgSettings::getIconSetPath() + "/mo.ico"); + icon = ProgSettings::loadIcon("/mo.ico"); break; } @@ -51,11 +51,11 @@ static void setZIPBus(QAbstractItemModel* model, const QModelIndex& idx, uint8_t QIcon icon; switch (bus) { case ZIP_BUS_DISABLED: - icon = QIcon(ProgSettings::getIconSetPath() + "/zip_disabled.ico"); + icon = ProgSettings::loadIcon("/zip_disabled.ico"); break; case ZIP_BUS_ATAPI: case ZIP_BUS_SCSI: - icon = QIcon(ProgSettings::getIconSetPath() + "/zip.ico"); + icon = ProgSettings::loadIcon("/zip.ico"); break; } From c5e3d9a75fd7aaa077d8b7d67c46ff353ed3244c Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 8 Jan 2022 23:44:30 +0600 Subject: [PATCH 192/278] Fix Czech selection not appearing --- src/qt/qt_progsettings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_progsettings.cpp b/src/qt/qt_progsettings.cpp index 8e47cffec..47414a2a5 100644 --- a/src/qt/qt_progsettings.cpp +++ b/src/qt/qt_progsettings.cpp @@ -84,7 +84,7 @@ ProgSettings::ProgSettings(QWidget *parent) : ui->comboBox->setItemData(0, '(' + tr("Default") + ')', Qt::DisplayRole); ui->comboBoxLanguage->setItemData(0, 0xFFFF); - for (auto i = lcid_langcode.begin() + 1; i != lcid_langcode.end(); i++) + for (auto i = lcid_langcode.begin(); i != lcid_langcode.end(); i++) { if (i.key() == 0xFFFF) continue; ui->comboBoxLanguage->addItem(lcid_langcode[i.key()].second, i.key()); From 62a4a025b1ea5db20768dc3ec2bd9d3f026b8f6d Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 9 Jan 2022 01:04:59 +0600 Subject: [PATCH 193/278] Port Win32 Discord integration to Linux and macOS --- src/CMakeLists.txt | 2 +- src/{win/win_discord.c => discord.c} | 23 +++++++++++-------- .../86box/{win_discord.h => discord.h} | 11 ++++++++- src/qt/qt_main.cpp | 16 +++++++++++++ src/qt/qt_mainwindow.cpp | 16 ++++++++++++- src/qt/qt_mainwindow.hpp | 2 ++ src/qt/qt_mainwindow.ui | 10 ++++++++ src/qt/qt_platform.cpp | 4 +++- src/win/CMakeLists.txt | 2 +- 9 files changed, 72 insertions(+), 14 deletions(-) rename src/{win/win_discord.c => discord.c} (85%) rename src/include/86box/{win_discord.h => discord.h} (90%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6bc00b432..f8e55fcaa 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -17,7 +17,7 @@ # WIN32 marks us as a GUI app on Windows add_executable(86Box WIN32 MACOSX_BUNDLE 86box.c config.c log.c random.c timer.c io.c acpi.c apm.c - dma.c ddma.c nmi.c pic.c pit.c port_6x.c port_92.c ppi.c pci.c mca.c usb.c fifo8.c + dma.c ddma.c discord.c nmi.c pic.c pit.c port_6x.c port_92.c ppi.c pci.c mca.c usb.c fifo8.c device.c nvr.c nvr_at.c nvr_ps2.c) if(CPPTHREADS) diff --git a/src/win/win_discord.c b/src/discord.c similarity index 85% rename from src/win/win_discord.c rename to src/discord.c index 487157af5..7a9dc1fec 100644 --- a/src/win/win_discord.c +++ b/src/discord.c @@ -19,18 +19,23 @@ #include #include #include -#include #include #define HAVE_STDARG_H #include <86box/86box.h> -#include "cpu.h" +#include "cpu/cpu.h" #include <86box/machine.h> #include <86box/plat.h> #include <86box/plat_dynld.h> -#include <86box/win_discord.h> +#include <86box/discord.h> #include +#ifdef _WIN32 #define PATH_DISCORD_DLL "discord_game_sdk.dll" +#elif defined __APPLE__ +#define PATH_DISCORD_DLL "discord_game_sdk.dylib" +#else +#define PATH_DISCORD_DLL "discord_game_sdk.so" +#endif int discord_loaded = 0; @@ -74,7 +79,7 @@ discord_update_activity(int paused) if(discord_activities == NULL) return; - discord_log("win_discord: discord_update_activity(paused=%d)\n", paused); + discord_log("discord: discord_update_activity(paused=%d)\n", paused); memset(&activity, 0x00, sizeof(activity)); @@ -85,13 +90,13 @@ discord_update_activity(int paused) if (strlen(vm_name) < 100) { - sprintf_s(activity.details, sizeof(activity.details), "Running \"%s\"", vm_name); - sprintf_s(activity.state, sizeof(activity.state), "%s (%s/%s)", strchr(machine_getname(), ']') + 2, cpufamily, cpu_s->name); + snprintf(activity.details, sizeof(activity.details), "Running \"%s\"", vm_name); + snprintf(activity.state, sizeof(activity.state), "%s (%s/%s)", strchr(machine_getname(), ']') + 2, cpufamily, cpu_s->name); } else { strncpy(activity.details, strchr(machine_getname(), ']') + 2, sizeof(activity.details) - 1); - sprintf_s(activity.state, sizeof(activity.state), "%s/%s", cpufamily, cpu_s->name); + snprintf(activity.state, sizeof(activity.state), "%s/%s", cpufamily, cpu_s->name); } activity.timestamps.start = time(NULL); @@ -139,7 +144,7 @@ discord_load() if (discord_handle == NULL) { - discord_log("win_discord: couldn't load " PATH_DISCORD_DLL "\n"); + discord_log("discord: couldn't load " PATH_DISCORD_DLL "\n"); discord_close(); return(0); @@ -165,7 +170,7 @@ discord_init() result = discord_create(DISCORD_VERSION, ¶ms, &discord_core); if (result != DiscordResult_Ok) { - discord_log("win_discord: DiscordCreate returned %d\n", result); + discord_log("discord: DiscordCreate returned %d\n", result); discord_close(); return; } diff --git a/src/include/86box/win_discord.h b/src/include/86box/discord.h similarity index 90% rename from src/include/86box/win_discord.h rename to src/include/86box/discord.h index 9e56b9a32..90621e16d 100644 --- a/src/include/86box/win_discord.h +++ b/src/include/86box/discord.h @@ -17,6 +17,11 @@ #ifndef WIN_DISCORD_H # define WIN_DISCORD_H +#ifdef __cplusplus +extern "C" +{ +#endif + extern int discord_loaded; extern int discord_load(); @@ -25,4 +30,8 @@ extern void discord_close(); extern void discord_update_activity(int paused); extern void discord_run_callbacks(); -#endif \ No newline at end of file +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 464d5115f..16c1e3b53 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -26,6 +26,7 @@ Q_IMPORT_PLUGIN(QWindowsVistaStylePlugin) #include <86box/plat.h> #include <86box/ui.h> #include <86box/video.h> +#include <86box/discord.h> #include #include @@ -127,6 +128,7 @@ int main(int argc, char* argv[]) { return 6; } + discord_load(); main_window = new MainWindow(); main_window->show(); app.installEventFilter(main_window); @@ -148,10 +150,24 @@ int main(int argc, char* argv[]) { // plat_pause(0); if (settings_only) dopause = 1; QTimer onesec; + QTimer discordupdate; QObject::connect(&onesec, &QTimer::timeout, &app, [] { pc_onesec(); }); onesec.start(1000); + if (discord_loaded) { + QTimer::singleShot(1000, &app, [] { + if (enable_discord) { + discord_init(); + discord_update_activity(dopause); + } else + discord_close(); + }); + QObject::connect(&discordupdate, &QTimer::timeout, &app, [] { + discord_run_callbacks(); + }); + discordupdate.start(0); + } /* Initialize the rendering window, or fullscreen. */ auto main_thread = std::thread([] { diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 8e7fdcd28..96504cf23 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -13,6 +13,7 @@ extern "C" { #include <86box/config.h> #include <86box/keyboard.h> #include <86box/plat.h> +#include <86box/discord.h> #include <86box/video.h> #include <86box/vid_ega.h> #include <86box/version.h> @@ -152,6 +153,7 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionHiDPI_scaling->setChecked(dpi_scale); ui->actionHide_status_bar->setChecked(hide_status_bar); ui->actionUpdate_status_bar_icons->setChecked(update_icons); + ui->actionEnable_Discord_integration->setChecked(enable_discord); #if defined Q_OS_WINDOWS || defined Q_OS_MACOS /* Make the option visible only if ANGLE is loaded. */ @@ -420,7 +422,8 @@ void MainWindow::on_actionSettings_triggered() { plat_pause(currentPause); if (settings_only) { cpu_thread_run = 0; - close(); + config_save(); + QApplication::quit(); } } @@ -1392,3 +1395,14 @@ void MainWindow::on_actionPreferences_triggered() progsettings.exec(); } + +void MainWindow::on_actionEnable_Discord_integration_triggered(bool checked) +{ + enable_discord = checked; + if(enable_discord) { + discord_init(); + discord_update_activity(dopause); + } else + discord_close(); +} + diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 7683c526b..d0ff06787 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -103,6 +103,8 @@ private slots: void on_actionPreferences_triggered(); + void on_actionEnable_Discord_integration_triggered(bool checked); + protected: void keyPressEvent(QKeyEvent* event) override; void keyReleaseEvent(QKeyEvent* event) override; diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index e537753dc..de6131694 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -73,6 +73,8 @@ + + @@ -554,6 +556,14 @@ QAction::NoRole + + + true + + + Enable &Discord integration + + diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index a53634f45..44c5c2b4c 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -67,6 +67,7 @@ extern "C" { #include <86box/plat_dynld.h> #include <86box/config.h> #include <86box/ui.h> +#include <86box/discord.h> #include "../cpu/cpu.h" #include <86box/plat.h> @@ -339,7 +340,7 @@ plat_pause(int p) wchar_t title[512]; if ((p == 0) && (time_sync & TIME_SYNC_ENABLED)) - nvr_time_sync(); + nvr_time_sync(); dopause = p; if (p) { @@ -350,6 +351,7 @@ plat_pause(int p) } else { ui_window_title(oldtitle); } + discord_update_activity(dopause); } // because we can't include nvr.h because it's got fields named new diff --git a/src/win/CMakeLists.txt b/src/win/CMakeLists.txt index 36c3dc9ac..63d8296ed 100644 --- a/src/win/CMakeLists.txt +++ b/src/win/CMakeLists.txt @@ -20,7 +20,7 @@ add_library(plat OBJECT win.c win_dynld.c win_cdrom.c win_keyboard.c add_library(ui OBJECT win_ui.c win_icon.c win_stbar.c win_sdl.c win_dialog.c win_about.c win_settings.c win_devconf.c win_snd_gain.c win_specify_dim.c win_new_floppy.c - win_jsconf.c win_media_menu.c win_preferences.c win_discord.c glad.c win_opengl.c + win_jsconf.c win_media_menu.c win_preferences.c glad.c win_opengl.c win_opengl_glslp.c 86Box.rc) if(NOT CPPTHREADS) From dabed16bbfd9103889705acfd394d36bf145ac6a Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 9 Jan 2022 16:41:03 +0600 Subject: [PATCH 194/278] Add OBattler's hard disk tracking code and make use of it for HDD settings --- src/qt/CMakeLists.txt | 2 + src/qt/qt_harddrive_common.hpp | 2 + src/qt/qt_settings.cpp | 5 + src/qt/qt_settings_bus_tracking.cpp | 257 ++++++++++++++++++++++++++++ src/qt/qt_settings_bus_tracking.hpp | 63 +++++++ src/qt/qt_settingsharddisks.cpp | 41 +++++ src/qt/qt_settingsharddisks.hpp | 1 + 7 files changed, 371 insertions(+) create mode 100644 src/qt/qt_settings_bus_tracking.cpp create mode 100644 src/qt/qt_settings_bus_tracking.hpp diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index b1f37c4dc..f87a76fcc 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -71,6 +71,8 @@ add_library(ui STATIC qt_settingsotherperipherals.cpp qt_settingsotherperipherals.hpp qt_settingsotherperipherals.ui + qt_settings_bus_tracking.cpp + qt_settings_bus_tracking.hpp qt_deviceconfig.cpp qt_deviceconfig.hpp diff --git a/src/qt/qt_harddrive_common.hpp b/src/qt/qt_harddrive_common.hpp index 0e0164d54..5d4bbc9e0 100644 --- a/src/qt/qt_harddrive_common.hpp +++ b/src/qt/qt_harddrive_common.hpp @@ -4,10 +4,12 @@ class QString; class QAbstractItemModel; +class SettingsBusTracking; namespace Harddrives { void populateBuses(QAbstractItemModel* model); void populateRemovableBuses(QAbstractItemModel* model); void populateBusChannels(QAbstractItemModel* model, int bus); QString BusChannelName(uint8_t bus, uint8_t channel); + inline SettingsBusTracking* busTrackClass = nullptr; }; diff --git a/src/qt/qt_settings.cpp b/src/qt/qt_settings.cpp index 388a843b8..3c8a074db 100644 --- a/src/qt/qt_settings.cpp +++ b/src/qt/qt_settings.cpp @@ -14,6 +14,8 @@ #include "qt_settingsotherperipherals.hpp" #include "qt_progsettings.hpp" +#include "qt_harddrive_common.hpp" +#include "qt_settings_bus_tracking.hpp" extern "C" { @@ -85,6 +87,7 @@ Settings::Settings(QWidget *parent) : ui->listView->setModel(new SettingsModel(this)); + Harddrives::busTrackClass = new SettingsBusTracking; machine = new SettingsMachine(this); display = new SettingsDisplay(this); input = new SettingsInput(this); @@ -124,6 +127,8 @@ Settings::Settings(QWidget *parent) : Settings::~Settings() { delete ui; + delete Harddrives::busTrackClass; + Harddrives::busTrackClass = nullptr; } void Settings::save() { diff --git a/src/qt/qt_settings_bus_tracking.cpp b/src/qt/qt_settings_bus_tracking.cpp new file mode 100644 index 000000000..f6a1c184e --- /dev/null +++ b/src/qt/qt_settings_bus_tracking.cpp @@ -0,0 +1,257 @@ +#include +#include +#include +#include + +#include "86box/hdd.h" +#include "qt_settings_bus_tracking.hpp" + + +SettingsBusTracking::SettingsBusTracking() +{ + int i; + + mfm_tracking = 0x0000000000000000ULL; + esdi_tracking = 0x0000000000000000ULL; + xta_tracking = 0x0000000000000000ULL; + + for (i = 0; i < 8; i++) { + if (i < 4) + ide_tracking[i] = 0x0000000000000000ULL; + + scsi_tracking[i] = 0x0000000000000000ULL; + } +} + + +uint8_t +SettingsBusTracking::next_free_mfm_channel() +{ + if ((mfm_tracking & 0xff00ULL) && !(mfm_tracking & 0x00ffULL)) + return 0; + + if (!(mfm_tracking & 0xff00ULL) && (mfm_tracking & 0x00ffULL)) + return 1; + + return CHANNEL_NONE; +} + + +uint8_t +SettingsBusTracking::next_free_esdi_channel() +{ + if ((esdi_tracking & 0xff00ULL) && !(esdi_tracking & 0x00ffULL)) + return 0; + + if (!(esdi_tracking & 0xff00ULL) && (esdi_tracking & 0x00ffULL)) + return 1; + + return CHANNEL_NONE; +} + + +uint8_t +SettingsBusTracking::next_free_xta_channel() +{ + if ((xta_tracking & 0xff00ULL) && !(xta_tracking & 0x00ffULL)) + return 0; + + if (!(xta_tracking & 0xff00ULL) && (xta_tracking & 0x00ffULL)) + return 1; + + return CHANNEL_NONE; +} + + +uint8_t +SettingsBusTracking::next_free_ide_channel() +{ + int i, element; + uint64_t mask; + uint8_t ret = CHANNEL_NONE; + + for (i = 0; i < 32; i++) { + element = ((i << 3) >> 6); + mask = 0xffULL << ((uint64_t) ((i << 3) & 0x3f)); + + if (ide_tracking[element] & mask) { + ret = (uint8_t) i; + break; + } + } + + return ret; +} + + +uint8_t +SettingsBusTracking::next_free_scsi_id() +{ + int i, element; + uint64_t mask; + uint8_t ret = CHANNEL_NONE; + + for (i = 0; i < 64; i++) { + element = ((i << 3) >> 6); + mask = 0xffULL << ((uint64_t) ((i << 3) & 0x3f)); + + if (scsi_tracking[element] & mask) { + ret = (uint8_t) i; + break; + } + } + + return ret; +} + + +int +SettingsBusTracking::mfm_bus_full() +{ + int i; + uint64_t mask; + uint8_t count = 0; + + for (i = 0; i < 2; i++) { + mask = 0xffULL << ((uint64_t) ((i << 3) & 0x3f)); + + if (mfm_tracking & mask) + count++; + } + + return (count == 2); +} + + +int +SettingsBusTracking::esdi_bus_full() +{ + int i; + uint64_t mask; + uint8_t count = 0; + + for (i = 0; i < 2; i++) { + mask = 0xffULL << ((uint64_t) ((i << 3) & 0x3f)); + + if (esdi_tracking & mask) + count++; + } + + return (count == 2); +} + + +int +SettingsBusTracking::xta_bus_full() +{ + int i; + uint64_t mask; + uint8_t count = 0; + + for (i = 0; i < 2; i++) { + mask = 0xffULL << ((uint64_t) ((i << 3) & 0x3f)); + + if (xta_tracking & mask) + count++; + } + + return (count == 2); +} + + +int +SettingsBusTracking::ide_bus_full() +{ + int i, element; + uint64_t mask; + uint8_t count = 0; + + for (i = 0; i < 32; i++) { + element = ((i << 3) >> 6); + mask = 0xffULL << ((uint64_t) ((i << 3) & 0x3f)); + + if (ide_tracking[element] & mask) + count++; + } + + return (count == 32); +} + + +int +SettingsBusTracking::scsi_bus_full() +{ + int i, element; + uint64_t mask; + uint8_t count = 0; + + for (i = 0; i < 64; i++) { + element = ((i << 3) >> 6); + mask = 0xffULL << ((uint64_t) ((i << 3) & 0x3f)); + + if (scsi_tracking[element] & mask) + count++; + } + + return (count == 64); +} + + +void +SettingsBusTracking::device_track(int set, uint8_t dev_type, int bus, int channel) +{ + int i, element; + uint64_t mask; + uint8_t count = 0; + fprintf(stderr, "set: %d, dev_type: %hd, bus: %d, channel: %d\n", set, dev_type, bus, channel); + + switch (bus) { + case HDD_BUS_MFM: + mask = ((uint64_t) dev_type) << ((uint64_t) ((channel << 3) & 0x3f)); + + if (set) + mfm_tracking |= mask; + else + mfm_tracking &= ~mask; + break; + + case HDD_BUS_ESDI: + mask = ((uint64_t) dev_type) << ((uint64_t) ((channel << 3) & 0x3f)); + + if (set) + esdi_tracking |= mask; + else + esdi_tracking &= ~mask; + break; + + case HDD_BUS_XTA: + mask = ((uint64_t) dev_type) << ((uint64_t) ((channel << 3) & 0x3f)); + + if (set) + xta_tracking |= mask; + else + xta_tracking &= ~mask; + break; + + case HDD_BUS_IDE: + case HDD_BUS_ATAPI: + element = ((channel << 3) >> 6); + mask = ((uint64_t) dev_type) << ((uint64_t) ((channel << 3) & 0x3f)); + + if (set) + ide_tracking[element] |= mask; + else + ide_tracking[element] &= ~mask; + break; + + case HDD_BUS_SCSI: + element = ((channel << 3) >> 6); + mask = ((uint64_t) dev_type) << ((uint64_t) ((channel << 3) & 0x3f)); + + if (set) + scsi_tracking[element] |= mask; + else + scsi_tracking[element] &= ~mask; + break; + } +} diff --git a/src/qt/qt_settings_bus_tracking.hpp b/src/qt/qt_settings_bus_tracking.hpp new file mode 100644 index 000000000..614e18d8d --- /dev/null +++ b/src/qt/qt_settings_bus_tracking.hpp @@ -0,0 +1,63 @@ +#ifndef QT_SETTINGS_BUS_TRACKING_HPP +#define QT_SETTINGS_BUS_TRACKING_HPP + +#include + +#define TRACK_CLEAR 0 +#define TRACK_SET 1 + +#define DEV_HDD 0x01 +#define DEV_CDROM 0x02 +#define DEV_ZIP 0x04 +#define DEV_MO 0x08 + +#define BUS_MFM 0 +#define BUS_ESDI 1 +#define BUS_XTA 2 +#define BUS_IDE 3 +#define BUS_SCSI 4 + +#define CHANNEL_NONE 0xff + +namespace Ui { +class SettingsBusTracking; +} + +class SettingsBusTracking +{ +public: + explicit SettingsBusTracking(); + ~SettingsBusTracking() = default; + + /* These return 0xff is none is free. */ + uint8_t next_free_mfm_channel(); + uint8_t next_free_esdi_channel(); + uint8_t next_free_xta_channel(); + uint8_t next_free_ide_channel(); + uint8_t next_free_scsi_id(); + + int mfm_bus_full(); + int esdi_bus_full(); + int xta_bus_full(); + int ide_bus_full(); + int scsi_bus_full(); + + /* Set: 0 = Clear the device from the tracking, 1 = Set the device on the tracking. + Device type: 1 = Hard Disk, 2 = CD-ROM, 4 = ZIP, 8 = Magneto-Optical. + Bus: 0 = MFM, 1 = ESDI, 2 = XTA, 3 = IDE, 4 = SCSI. */ + void device_track(int set, uint8_t dev_type, int bus, int channel); + +private: + /* 1 channel, 2 devices per channel, 8 bits per device = 16 bits. */ + uint64_t mfm_tracking; + /* 1 channel, 2 devices per channel, 8 bits per device = 16 bits. */ + uint64_t esdi_tracking; + /* 1 channel, 2 devices per channel, 8 bits per device = 16 bits. */ + uint64_t xta_tracking; + /* 16 channels (prepatation for that weird IDE card), 2 devices per channel, 8 bits per device = 256 bits. */ + uint64_t ide_tracking[4]; + /* 4 buses, 16 devices per bus, 8 bits per device (future-proofing) = 512 bits. */ + uint64_t scsi_tracking[8]; +}; + +#endif // QT_SETTINGS_BUS_TRACKING_HPP diff --git a/src/qt/qt_settingsharddisks.cpp b/src/qt/qt_settingsharddisks.cpp index 1e9d11350..9c9afaf14 100644 --- a/src/qt/qt_settingsharddisks.cpp +++ b/src/qt/qt_settingsharddisks.cpp @@ -10,6 +10,7 @@ extern "C" { #include "qt_harddiskdialog.hpp" #include "qt_harddrive_common.hpp" +#include "qt_settings_bus_tracking.hpp" #include "qt_progsettings.hpp" const int ColumnBus = 0; @@ -21,6 +22,8 @@ const int ColumnSize = 5; const int DataBus = Qt::UserRole; const int DataBusChannel = Qt::UserRole + 1; +const int DataBusPrevious = Qt::UserRole + 2; +const int DataBusChannelPrevious = Qt::UserRole + 3; /* static void @@ -57,7 +60,10 @@ static void addRow(QAbstractItemModel* model, hard_disk_t* hd) { model->setData(model->index(row, ColumnBus), busName); model->setData(model->index(row, ColumnBus), ProgSettings::loadIcon( "/hard_disk.ico"), Qt::DecorationRole); model->setData(model->index(row, ColumnBus), hd->bus, DataBus); + model->setData(model->index(row, ColumnBus), hd->bus, DataBusPrevious); model->setData(model->index(row, ColumnBus), hd->channel, DataBusChannel); + model->setData(model->index(row, ColumnBus), hd->channel, DataBusChannelPrevious); + Harddrives::busTrackClass->device_track(1, DEV_HDD, hd->bus, hd->channel); QString fileName = hd->fn; if (fileName.startsWith(userPath, Qt::CaseInsensitive)) { model->setData(model->index(row, ColumnFilename), fileName.mid(userPath.size())); @@ -132,15 +138,47 @@ void SettingsHarddisks::on_comboBoxBus_currentIndexChanged(int index) { return; } + buschangeinprogress = true; auto idx = ui->tableView->selectionModel()->currentIndex(); if (idx.isValid()) { auto* model = ui->tableView->model(); auto col = idx.siblingAtColumn(ColumnBus); model->setData(col, ui->comboBoxBus->currentData(Qt::UserRole), DataBus); model->setData(col, busChannelName(col), Qt::DisplayRole); + Harddrives::busTrackClass->device_track(0, DEV_HDD, model->data(col, DataBusPrevious).toInt(), model->data(col, DataBusChannelPrevious).toInt()); + model->setData(col, ui->comboBoxBus->currentData(Qt::UserRole), DataBusPrevious); } Harddrives::populateBusChannels(ui->comboBoxChannel->model(), ui->comboBoxBus->currentData().toInt()); + int chanIdx = 0; + + switch (ui->comboBoxBus->currentData().toInt()) + { + case HDD_BUS_MFM: + chanIdx = (Harddrives::busTrackClass->next_free_mfm_channel()); + break; + case HDD_BUS_XTA: + chanIdx = (Harddrives::busTrackClass->next_free_xta_channel()); + break; + case HDD_BUS_ESDI: + chanIdx = (Harddrives::busTrackClass->next_free_esdi_channel()); + break; + case HDD_BUS_ATAPI: + case HDD_BUS_IDE: + chanIdx = (Harddrives::busTrackClass->next_free_ide_channel()); + break; + case HDD_BUS_SCSI: + chanIdx = (Harddrives::busTrackClass->next_free_scsi_id()); + break; + } + + if (idx.isValid()) { + auto* model = ui->tableView->model(); + auto col = idx.siblingAtColumn(ColumnBus); + model->setData(col, chanIdx, DataBusChannelPrevious); + } + ui->comboBoxChannel->setCurrentIndex(chanIdx); + buschangeinprogress = false; } void SettingsHarddisks::on_comboBoxChannel_currentIndexChanged(int index) { @@ -154,6 +192,9 @@ void SettingsHarddisks::on_comboBoxChannel_currentIndexChanged(int index) { auto col = idx.siblingAtColumn(ColumnBus); model->setData(col, ui->comboBoxChannel->currentData(Qt::UserRole), DataBusChannel); model->setData(col, busChannelName(col), Qt::DisplayRole); + if (!buschangeinprogress) Harddrives::busTrackClass->device_track(0, DEV_HDD, model->data(col, DataBus).toInt(), model->data(col, DataBusChannelPrevious).toUInt()); + Harddrives::busTrackClass->device_track(1, DEV_HDD, model->data(col, DataBus).toInt(), model->data(col, DataBusChannel).toUInt()); + model->setData(col, ui->comboBoxChannel->currentData(Qt::UserRole), DataBusChannelPrevious); } } diff --git a/src/qt/qt_settingsharddisks.hpp b/src/qt/qt_settingsharddisks.hpp index 0289d2ccb..b10e79029 100644 --- a/src/qt/qt_settingsharddisks.hpp +++ b/src/qt/qt_settingsharddisks.hpp @@ -30,6 +30,7 @@ private slots: private: Ui::SettingsHarddisks *ui; + bool buschangeinprogress = false; }; #endif // QT_SETTINGSHARDDISKS_HPP From 78f96ee6ba4ecaeb814d9e161a22d0eb8e4a5a4b Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 9 Jan 2022 16:48:23 +0600 Subject: [PATCH 195/278] Disable add/existing buttons if hard disk is full --- src/qt/qt_settingsharddisks.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/qt/qt_settingsharddisks.cpp b/src/qt/qt_settingsharddisks.cpp index 9c9afaf14..ac3ec67ca 100644 --- a/src/qt/qt_settingsharddisks.cpp +++ b/src/qt/qt_settingsharddisks.cpp @@ -98,6 +98,11 @@ SettingsHarddisks::SettingsHarddisks(QWidget *parent) : addRow(model, &hdd[i]); } } + if (model->rowCount() == HDD_NUM) + { + ui->pushButtonNew->setEnabled(false); + ui->pushButtonExisting->setEnabled(false); + } ui->tableView->resizeColumnsToContents(); ui->tableView->horizontalHeader()->setSectionResizeMode(ColumnFilename, QHeaderView::Stretch); @@ -234,6 +239,11 @@ static void addDriveFromDialog(Ui::SettingsHarddisks* ui, const HarddiskDialog& addRow(ui->tableView->model(), &hd); ui->tableView->resizeColumnsToContents(); ui->tableView->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch); + if (ui->tableView->model()->rowCount() == HDD_NUM) + { + ui->pushButtonNew->setEnabled(false); + ui->pushButtonExisting->setEnabled(false); + } } void SettingsHarddisks::on_pushButtonNew_clicked() { @@ -263,5 +273,7 @@ void SettingsHarddisks::on_pushButtonRemove_clicked() { auto* model = ui->tableView->model(); model->removeRow(idx.row()); + ui->pushButtonNew->setEnabled(true); + ui->pushButtonExisting->setEnabled(true); } From 42b3b5623a590c797bebbfbe3649ca12777c92c6 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 9 Jan 2022 16:48:41 +0600 Subject: [PATCH 196/278] Default to 8x for CD-ROM speeds --- src/qt/qt_settingsfloppycdrom.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qt/qt_settingsfloppycdrom.cpp b/src/qt/qt_settingsfloppycdrom.cpp index b2c2df83f..e61156d0e 100644 --- a/src/qt/qt_settingsfloppycdrom.cpp +++ b/src/qt/qt_settingsfloppycdrom.cpp @@ -171,6 +171,7 @@ void SettingsFloppyCDROM::onCDROMRowChanged(const QModelIndex ¤t) { if (! match.isEmpty()) { ui->comboBoxChannel->setCurrentIndex(match.first().row()); } + else ui->comboBoxChannel->setCurrentIndex(8); ui->comboBoxSpeed->setCurrentIndex(speed); } From 7555282d30d15eacf9c638d08bc25fa76a814031 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sun, 9 Jan 2022 16:54:37 +0200 Subject: [PATCH 197/278] qt: add hide_tool_bar setting variable --- src/qt/qt_platform.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index 44c5c2b4c..6f3a05c98 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -80,6 +80,7 @@ int rctrl_is_lalt = 0; int update_icons = 0; int kbd_req_capture = 0; int hide_status_bar = 0; +int hide_tool_bar = 0; uint32_t lang_id = 0x0409, lang_sys = 0x0409; // Multilangual UI variables, for now all set to LCID of en-US int stricmp(const char* s1, const char* s2) From 06002ed322fcc13b02cff12a8a0ed23e097f6015 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sun, 9 Jan 2022 17:00:16 +0200 Subject: [PATCH 198/278] qt: Add toolbar --- src/qt/qt_mainwindow.cpp | 49 +++++++++++++++++++++++++++++---- src/qt/qt_mainwindow.hpp | 1 + src/qt/qt_mainwindow.ui | 33 ++++++++++++++++++++++ src/qt/qt_specifydimensions.cpp | 8 +++++- 4 files changed, 85 insertions(+), 6 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 96504cf23..9ca71aca2 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -67,6 +67,7 @@ MainWindow::MainWindow(QWidget *parent) : ui->stackedWidget->setMouseTracking(true); statusBar()->setVisible(!hide_status_bar); statusBar()->setStyleSheet("QStatusBar::item {border: None;}"); + ui->toolBar->setVisible(!hide_tool_bar); this->setWindowIcon(QIcon(":/settings/win/icons/86Box-yellow.ico")); this->setWindowFlag(Qt::MSWindowsFixedSizeDialogHint, vid_resize != 1); @@ -118,7 +119,12 @@ MainWindow::MainWindow(QWidget *parent) : connect(this, &MainWindow::resizeContents, this, [this](int w, int h) { if (!QApplication::platformName().contains("eglfs") && vid_resize == 0) { w = w / (!dpi_scale ? this->screen()->devicePixelRatio() : 1); - int modifiedHeight = (h / (!dpi_scale ? this->screen()->devicePixelRatio() : 1)) + menuBar()->height() + (statusBar()->height() * !hide_status_bar); + + int modifiedHeight = (h / (!dpi_scale ? this->screen()->devicePixelRatio() : 1)) + + menuBar()->height() + + (statusBar()->height() * !hide_status_bar) + + (ui->toolBar->height() * !hide_tool_bar); + ui->stackedWidget->resize(w, h); if (vid_resize == 0) { setFixedSize(w, modifiedHeight); @@ -152,6 +158,7 @@ MainWindow::MainWindow(QWidget *parent) : ui->menuWindow_scale_factor->setEnabled(vid_resize == 0); ui->actionHiDPI_scaling->setChecked(dpi_scale); ui->actionHide_status_bar->setChecked(hide_status_bar); + ui->actionHide_tool_bar->setChecked(hide_tool_bar); ui->actionUpdate_status_bar_icons->setChecked(update_icons); ui->actionEnable_Discord_integration->setChecked(enable_discord); @@ -335,7 +342,11 @@ void MainWindow::showEvent(QShowEvent *event) { setGeometry(window_x, window_y, window_w, window_h + menuBar()->height() + (hide_status_bar ? 0 : statusBar()->height())); } if (vid_resize == 2) { - setFixedSize(fixed_size_x, fixed_size_y + menuBar()->height() + (hide_status_bar ? 0 : statusBar()->height())); + setFixedSize(fixed_size_x, fixed_size_y + + menuBar()->height() + + (hide_status_bar ? 0 : statusBar()->height()) + + (hide_tool_bar ? 0 : ui->toolBar->height())); + scrnsz_x = fixed_size_x; scrnsz_y = fixed_size_y; } @@ -955,15 +966,21 @@ void MainWindow::on_actionFullscreen_triggered() { showNormal(); ui->menubar->show(); if (!hide_status_bar) ui->statusbar->show(); + if (!hide_tool_bar) ui->toolBar->show(); video_fullscreen = 0; if (vid_resize != 1) { - if (vid_resize == 2) setFixedSize(fixed_size_x, fixed_size_y + menuBar()->height() + (!hide_status_bar ? statusBar()->height() : 0)); + if (vid_resize == 2) setFixedSize(fixed_size_x, fixed_size_y + + menuBar()->height() + + (!hide_status_bar ? statusBar()->height() : 0) + + (!hide_tool_bar ? ui->toolBar->height() : 0)); + emit resizeContents(scrnsz_x, scrnsz_y); } } else { setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); ui->menubar->hide(); ui->statusbar->hide(); + ui->toolBar->hide(); showFullScreen(); video_fullscreen = 1; } @@ -1345,8 +1362,30 @@ void MainWindow::on_actionHide_status_bar_triggered() hide_status_bar ^= 1; ui->actionHide_status_bar->setChecked(hide_status_bar); statusBar()->setVisible(!hide_status_bar); - if (vid_resize >= 2) setFixedSize(fixed_size_x, fixed_size_y + menuBar()->height() + (hide_status_bar ? 0 : statusBar()->height())); - else { + if (vid_resize >= 2) { + setFixedSize(fixed_size_x, fixed_size_y + + menuBar()->height() + + (hide_status_bar ? 0 : statusBar()->height()) + + (hide_tool_bar ? 0 : ui->toolBar->height())); + } else { + int vid_resize_orig = vid_resize; + vid_resize = 0; + emit resizeContents(scrnsz_x, scrnsz_y); + vid_resize = vid_resize_orig; + } +} + +void MainWindow::on_actionHide_tool_bar_triggered() +{ + hide_tool_bar ^= 1; + ui->actionHide_tool_bar->setChecked(hide_tool_bar); + ui->toolBar->setVisible(!hide_tool_bar); + if (vid_resize >= 2) { + setFixedSize(fixed_size_x, fixed_size_y + + menuBar()->height() + + (hide_status_bar ? 0 : statusBar()->height()) + + (hide_tool_bar ? 0 : ui->toolBar->height())); + } else { int vid_resize_orig = vid_resize; vid_resize = 0; emit resizeContents(scrnsz_x, scrnsz_y); diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index d0ff06787..4d3335618 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -90,6 +90,7 @@ private slots: void on_actionSpecify_dimensions_triggered(); void on_actionHiDPI_scaling_triggered(); void on_actionHide_status_bar_triggered(); + void on_actionHide_tool_bar_triggered(); void on_actionUpdate_status_bar_icons_triggered(); void refreshMediaMenu(); diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index de6131694..4af8fe6d3 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -144,6 +144,7 @@ + @@ -183,6 +184,27 @@ + + + toolBar + + + false + + + false + + + TopToolBarArea + + + false + + + + + + true @@ -564,6 +586,17 @@ Enable &Discord integration + + + true + + + Hide tool bar + + + Hide tool bar + + diff --git a/src/qt/qt_specifydimensions.cpp b/src/qt/qt_specifydimensions.cpp index ca4aa5706..4a5b0ea0f 100644 --- a/src/qt/qt_specifydimensions.cpp +++ b/src/qt/qt_specifydimensions.cpp @@ -45,7 +45,13 @@ void SpecifyDimensions::on_SpecifyDimensions_accepted() window_remember = 0; fixed_size_x = ui->spinBoxWidth->value(); fixed_size_y = ui->spinBoxHeight->value(); - main_window->setFixedSize(ui->spinBoxWidth->value(), ui->spinBoxHeight->value() + (!hide_status_bar ? main_window->statusBar()->height() : 0) + main_window->menuBar()->height()); + + main_window->setFixedSize(ui->spinBoxWidth->value(), + ui->spinBoxHeight->value() + + (!hide_status_bar ? main_window->statusBar()->height() : 0) + + (!hide_tool_bar ? main_window->ui->toolBar->height() : 0) + + main_window->menuBar()->height()); + emit main_window->updateMenuResizeOptions(); main_window->show(); main_window->ui->stackedWidget->switchRenderer((RendererStack::Renderer)vid_api); From 541c8e9f515aff83a2306e3c6cd3f07b5b3f77ae Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sun, 9 Jan 2022 17:38:11 +0200 Subject: [PATCH 199/278] qt: Add placeholder icons for toolbar --- src/qt/icons/placeholder.png | Bin 0 -> 4869 bytes src/qt/qt_mainwindow.ui | 20 +++++++++++++++++++- src/qt_resources.qrc | 3 +++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/qt/icons/placeholder.png diff --git a/src/qt/icons/placeholder.png b/src/qt/icons/placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..4088713a43eebfa242f4a4b90cc9d22abe3666a0 GIT binary patch literal 4869 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!totE)mHN`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsJtamObgQ7LVKi&0V`$R6YuvK4`NljeYZ<-;J{VbIQJ3^h*V^ zDLDvPF&*D>fB&wZ{QS3{^n4C<<~sPO@TBUw7b{}t+hlLbyLOwu`nAlHH2H)MmbGi_ zO>;iy7j0tqopSMWdDoU4=F^1=JAL=tY24yD`Jvx*Aa7i;Cd+O{RK`p;XXMd7wBhwiW>UD3%abvSm~&B)5+^^wKm7sU%#cxHTN zVYKX?y!Z1do1mN3UwZ#AcD01&DOj)>zj?cI&Y#K;XL&x(P1W4}w0V#2?oQ_k$8T4M zUapQVpC0Srad_Lx+hJ+^!s0D4&o(s(eXRQOSclV z!_KIf^gZNQB`Ra@lQApu^N$s=d1p6suhV>WTKn9YYkOX~Twi=*&hJ9=w~MAf6TZhY z@n`b;lppNt_43|U&Oh^6&`REPef#$vr)=_n*Ie1dUl*Gir&wZkI%am+!;TuavnLjt zD;4iA{mhxa@7Rl88T0u&d*6NBU-{^a_3=lqLw_d;#o1;5Ir8!6v|F3QJ9qBm{deT$ z|K0V^j=TE*NdKW6{{Q~_H>d4p_SgLA@2b0TXa9fmOCQ@c6+iuFmJ<6NlzZ3o7Xt%h zYo@bvfTy!FEE_T~RLrTJXzOt}K%~__c&XM@zA}Np69IE|I=U>pM7t9fZV`f|(bwG4@$t~(+BxOtAMX9lurM%j z)lE~z6|+*8JTf$#9WBbd{=-6X#hwG|hQa}Jp0Zpaki+rLv6`t1_oY< z%#etZ2wxwo zkg&dz0$52&wyjcxZ-9bxeo?A|iJpm`fv#&sW|@(a9hZVlQA(Oskc%7Ch@zAer{{GxPyLrY6beFGzXBO~3Slr-Jq%Dj@q3f;V7WsngNGh9-OlZ!G7 zN;32F6hLMsCgqow*eWS;DJUpF4X?;8@b!fopH~bGh2;EP{ffi_eM3D1{oGuAWF5sN zu4N_obrgqG7NqJ2r55Lx7A2>;mZj#EC?gw@k_^{hP+F7&_D)K&erir?ZfaghvA&_6 zA&Qmmp1uKa9iSjc&&(|V>#E2tKv7wenT7}~6yJbkz}`W2NJVY|+*}mZFu#KpgTu(m zB|o_oBqaiV#$rLM85sfn(MMXG^rqNS;cuDMaNrAcy% zNs6(N1(H#odBr7(dC93DqbhO>^fEJ3tWwg<49(3AlXVSE4GncoQj-mJ6H`+xb(51U zlMO8_l8p@v%#n=nFUm~M%uCEcb`{8|l*|+>!^AXm3o|n_-PA8bh!dFfyYP=H%G26);k8R;1yL;`XW zOVaX-a&48uGxJjN%Zm|GA(^?U!6k{H@H8|tF*G+ZGBGtYGc-0aH$x~2OD!tS%+CXv zYG|NmWCE4}MU0hyQD$mhNg^nv+A0}>#Vc|PtelHd6HD@oLh|!-Y?VNcQZUjpGyo@X z1sh1Tcw`or8UBUO3)+)6VJpFT^8mRhK5Fl#=40X<_5YZiK*tg7M3Q4x`}3{X_iJ7N#;o=Xr>qE zr$9n`(p+M2DT(` zcNb8Ph=Jj!^X_^E1_sUokH}&M2EM}}%y>M1MG6B01AB?5uPggAMoxYu?((^BCNMBC zgn7C+hFF|lJK2+qL4k)^_~ZZhzHm(~-i^zHcKM1k2{?HQWh^;)Ofll98vDY<_JR`> zu4LU2n33anPHdk-gwfe+-+ykAiU0mFoz0v@&T4V + + + :/menuicons/qt/icons/placeholder.png:/menuicons/qt/icons/placeholder.png + &Hard Reset... + + + :/menuicons/qt/icons/placeholder.png:/menuicons/qt/icons/placeholder.png + &Ctrl+Alt+Del @@ -241,6 +249,10 @@ + + + :/menuicons/qt/icons/placeholder.png:/menuicons/qt/icons/placeholder.png + Ctrl+Alt+&Esc @@ -249,6 +261,10 @@ true + + + :/menuicons/qt/icons/placeholder.png:/menuicons/qt/icons/placeholder.png + &Pause @@ -606,6 +622,8 @@ 1 - + + + diff --git a/src/qt_resources.qrc b/src/qt_resources.qrc index 0db4552e9..940f4fd93 100644 --- a/src/qt_resources.qrc +++ b/src/qt_resources.qrc @@ -48,4 +48,7 @@ win/icons/86Box-red.ico win/icons/86Box-yellow.ico + + qt/icons/placeholder.png + From df3a11b11bbc3ea748c04b3ea28ebe57bd6090c7 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Mon, 10 Jan 2022 01:12:23 +0600 Subject: [PATCH 200/278] Complete the bus tracking implementation with fixes --- src/qt/qt_settings_bus_tracking.cpp | 4 ++-- src/qt/qt_settings_bus_tracking.hpp | 10 +++++----- src/qt/qt_settingsfloppycdrom.cpp | 9 +++++++++ src/qt/qt_settingsotherremovable.cpp | 18 ++++++++++++++++++ 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/qt/qt_settings_bus_tracking.cpp b/src/qt/qt_settings_bus_tracking.cpp index f6a1c184e..c367b6389 100644 --- a/src/qt/qt_settings_bus_tracking.cpp +++ b/src/qt/qt_settings_bus_tracking.cpp @@ -74,7 +74,7 @@ SettingsBusTracking::next_free_ide_channel() element = ((i << 3) >> 6); mask = 0xffULL << ((uint64_t) ((i << 3) & 0x3f)); - if (ide_tracking[element] & mask) { + if (!(ide_tracking[element] & mask)) { ret = (uint8_t) i; break; } @@ -95,7 +95,7 @@ SettingsBusTracking::next_free_scsi_id() element = ((i << 3) >> 6); mask = 0xffULL << ((uint64_t) ((i << 3) & 0x3f)); - if (scsi_tracking[element] & mask) { + if (!(scsi_tracking[element] & mask)) { ret = (uint8_t) i; break; } diff --git a/src/qt/qt_settings_bus_tracking.hpp b/src/qt/qt_settings_bus_tracking.hpp index 614e18d8d..0272b4359 100644 --- a/src/qt/qt_settings_bus_tracking.hpp +++ b/src/qt/qt_settings_bus_tracking.hpp @@ -49,15 +49,15 @@ public: private: /* 1 channel, 2 devices per channel, 8 bits per device = 16 bits. */ - uint64_t mfm_tracking; + uint64_t mfm_tracking{0}; /* 1 channel, 2 devices per channel, 8 bits per device = 16 bits. */ - uint64_t esdi_tracking; + uint64_t esdi_tracking{0}; /* 1 channel, 2 devices per channel, 8 bits per device = 16 bits. */ - uint64_t xta_tracking; + uint64_t xta_tracking{0}; /* 16 channels (prepatation for that weird IDE card), 2 devices per channel, 8 bits per device = 256 bits. */ - uint64_t ide_tracking[4]; + uint64_t ide_tracking[4]{0, 0, 0, 0}; /* 4 buses, 16 devices per bus, 8 bits per device (future-proofing) = 512 bits. */ - uint64_t scsi_tracking[8]; + uint64_t scsi_tracking[8]{0, 0, 0, 0, 0, 0, 0, 0}; }; #endif // QT_SETTINGS_BUS_TRACKING_HPP diff --git a/src/qt/qt_settingsfloppycdrom.cpp b/src/qt/qt_settingsfloppycdrom.cpp index e61156d0e..6253cb739 100644 --- a/src/qt/qt_settingsfloppycdrom.cpp +++ b/src/qt/qt_settingsfloppycdrom.cpp @@ -11,6 +11,7 @@ extern "C" { #include "qt_models_common.hpp" #include "qt_harddrive_common.hpp" +#include "qt_settings_bus_tracking.hpp" #include "qt_progsettings.hpp" static void setFloppyType(QAbstractItemModel* model, const QModelIndex& idx, int type) { @@ -109,6 +110,7 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent) : auto idx = model->index(i, 0); setCDROMBus(model, idx, cdrom[i].bus_type, cdrom[i].res); setCDROMSpeed(model, idx.siblingAtColumn(1), cdrom[i].speed); + Harddrives::busTrackClass->device_track(1, DEV_CDROM, cdrom[i].bus_type, cdrom[i].bus_type == CDROM_BUS_ATAPI ? cdrom[i].ide_channel : cdrom[i].scsi_device_id); } ui->tableViewCDROM->resizeColumnsToContents(); ui->tableViewCDROM->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); @@ -208,19 +210,26 @@ void SettingsFloppyCDROM::on_comboBoxSpeed_activated(int index) { void SettingsFloppyCDROM::on_comboBoxBus_activated(int) { + auto i = ui->tableViewCDROM->selectionModel()->currentIndex().siblingAtColumn(0); + Harddrives::busTrackClass->device_track(0, DEV_CDROM, ui->tableViewCDROM->model()->data(i, Qt::UserRole).toInt(), ui->tableViewCDROM->model()->data(i, Qt::UserRole + 1).toInt()); + ui->comboBoxChannel->setCurrentIndex(ui->comboBoxBus->currentData().toUInt() == CDROM_BUS_ATAPI ? Harddrives::busTrackClass->next_free_ide_channel() : Harddrives::busTrackClass->next_free_scsi_id()); setCDROMBus( ui->tableViewCDROM->model(), ui->tableViewCDROM->selectionModel()->currentIndex(), ui->comboBoxBus->currentData().toUInt(), ui->comboBoxChannel->currentData().toUInt()); + Harddrives::busTrackClass->device_track(1, DEV_CDROM, ui->tableViewCDROM->model()->data(i, Qt::UserRole).toInt(), ui->tableViewCDROM->model()->data(i, Qt::UserRole + 1).toInt()); } void SettingsFloppyCDROM::on_comboBoxChannel_activated(int) { + auto i = ui->tableViewCDROM->selectionModel()->currentIndex().siblingAtColumn(0); + Harddrives::busTrackClass->device_track(0, DEV_CDROM, ui->tableViewCDROM->model()->data(i, Qt::UserRole).toInt(), ui->tableViewCDROM->model()->data(i, Qt::UserRole + 1).toInt()); setCDROMBus( ui->tableViewCDROM->model(), ui->tableViewCDROM->selectionModel()->currentIndex(), ui->comboBoxBus->currentData().toUInt(), ui->comboBoxChannel->currentData().toUInt()); + Harddrives::busTrackClass->device_track(1, DEV_CDROM, ui->tableViewCDROM->model()->data(i, Qt::UserRole).toInt(), ui->tableViewCDROM->model()->data(i, Qt::UserRole + 1).toInt()); } diff --git a/src/qt/qt_settingsotherremovable.cpp b/src/qt/qt_settingsotherremovable.cpp index 3fa7b0351..c6f089f80 100644 --- a/src/qt/qt_settingsotherremovable.cpp +++ b/src/qt/qt_settingsotherremovable.cpp @@ -12,6 +12,7 @@ extern "C" { #include "qt_models_common.hpp" #include "qt_harddrive_common.hpp" +#include "qt_settings_bus_tracking.hpp" #include "qt_progsettings.hpp" static QString moDriveTypeName(int i) { @@ -93,6 +94,7 @@ SettingsOtherRemovable::SettingsOtherRemovable(QWidget *parent) : auto idx = model->index(i, 0); setMOBus(model, idx, mo_drives[i].bus_type, mo_drives[i].res); setMOType(model, idx.siblingAtColumn(1), mo_drives[i].type); + Harddrives::busTrackClass->device_track(1, DEV_MO, mo_drives[i].bus_type, mo_drives[i].bus_type == MO_BUS_ATAPI ? mo_drives[i].ide_channel : mo_drives[i].scsi_device_id); } ui->tableViewMO->resizeColumnsToContents(); ui->tableViewMO->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); @@ -114,6 +116,7 @@ SettingsOtherRemovable::SettingsOtherRemovable(QWidget *parent) : auto idx = model->index(i, 0); setZIPBus(model, idx, zip_drives[i].bus_type, zip_drives[i].res); setZIPType(model, idx, zip_drives[i].is_250 > 0); + Harddrives::busTrackClass->device_track(1, DEV_ZIP, zip_drives[i].bus_type, zip_drives[i].bus_type == ZIP_BUS_ATAPI ? zip_drives[i].ide_channel : zip_drives[i].scsi_device_id); } ui->tableViewZIP->resizeColumnsToContents(); ui->tableViewZIP->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); @@ -200,6 +203,10 @@ void SettingsOtherRemovable::on_comboBoxMOBus_currentIndexChanged(int index) { } void SettingsOtherRemovable::on_comboBoxMOBus_activated(int) { + auto i = ui->tableViewMO->selectionModel()->currentIndex().siblingAtColumn(0); + Harddrives::busTrackClass->device_track(0, DEV_MO, ui->tableViewMO->model()->data(i, Qt::UserRole).toInt(), ui->tableViewMO->model()->data(i, Qt::UserRole + 1).toInt()); + ui->comboBoxMOChannel->setCurrentIndex(ui->comboBoxMOBus->currentData().toUInt() == MO_BUS_ATAPI ? Harddrives::busTrackClass->next_free_ide_channel() : Harddrives::busTrackClass->next_free_scsi_id()); + ui->tableViewMO->model()->data(i, Qt::UserRole + 1); setMOBus( ui->tableViewMO->model(), ui->tableViewMO->selectionModel()->currentIndex(), @@ -211,14 +218,18 @@ void SettingsOtherRemovable::on_comboBoxMOBus_activated(int) { ui->comboBoxMOType->currentData().toUInt()); ui->tableViewMO->resizeColumnsToContents(); ui->tableViewMO->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); + Harddrives::busTrackClass->device_track(1, DEV_MO, ui->tableViewMO->model()->data(i, Qt::UserRole).toInt(), ui->tableViewMO->model()->data(i, Qt::UserRole + 1).toInt()); } void SettingsOtherRemovable::on_comboBoxMOChannel_activated(int) { + auto i = ui->tableViewMO->selectionModel()->currentIndex().siblingAtColumn(0); + Harddrives::busTrackClass->device_track(0, DEV_MO, ui->tableViewMO->model()->data(i, Qt::UserRole).toInt(), ui->tableViewMO->model()->data(i, Qt::UserRole + 1).toInt()); setMOBus( ui->tableViewMO->model(), ui->tableViewMO->selectionModel()->currentIndex(), ui->comboBoxMOBus->currentData().toUInt(), ui->comboBoxMOChannel->currentData().toUInt()); + Harddrives::busTrackClass->device_track(1, DEV_MO, ui->tableViewMO->model()->data(i, Qt::UserRole).toInt(), ui->tableViewMO->model()->data(i, Qt::UserRole + 1).toInt()); } void SettingsOtherRemovable::on_comboBoxMOType_activated(int) { @@ -243,19 +254,26 @@ void SettingsOtherRemovable::on_comboBoxZIPBus_currentIndexChanged(int index) { } void SettingsOtherRemovable::on_comboBoxZIPBus_activated(int) { + auto i = ui->tableViewZIP->selectionModel()->currentIndex().siblingAtColumn(0); + Harddrives::busTrackClass->device_track(0, DEV_ZIP, ui->tableViewZIP->model()->data(i, Qt::UserRole).toInt(), ui->tableViewZIP->model()->data(i, Qt::UserRole + 1).toInt()); + ui->comboBoxZIPChannel->setCurrentIndex(ui->comboBoxZIPBus->currentData().toUInt() == ZIP_BUS_ATAPI ? Harddrives::busTrackClass->next_free_ide_channel() : Harddrives::busTrackClass->next_free_scsi_id()); setZIPBus( ui->tableViewZIP->model(), ui->tableViewZIP->selectionModel()->currentIndex(), ui->comboBoxZIPBus->currentData().toUInt(), ui->comboBoxZIPChannel->currentData().toUInt()); + Harddrives::busTrackClass->device_track(1, DEV_ZIP, ui->tableViewZIP->model()->data(i, Qt::UserRole).toInt(), ui->tableViewZIP->model()->data(i, Qt::UserRole + 1).toInt()); } void SettingsOtherRemovable::on_comboBoxZIPChannel_activated(int) { + auto i = ui->tableViewZIP->selectionModel()->currentIndex().siblingAtColumn(0); + Harddrives::busTrackClass->device_track(0, DEV_ZIP, ui->tableViewZIP->model()->data(i, Qt::UserRole).toInt(), ui->tableViewZIP->model()->data(i, Qt::UserRole + 1).toInt()); setZIPBus( ui->tableViewZIP->model(), ui->tableViewZIP->selectionModel()->currentIndex(), ui->comboBoxZIPBus->currentData().toUInt(), ui->comboBoxZIPChannel->currentData().toUInt()); + Harddrives::busTrackClass->device_track(1, DEV_ZIP, ui->tableViewZIP->model()->data(i, Qt::UserRole).toInt(), ui->tableViewZIP->model()->data(i, Qt::UserRole + 1).toInt()); } void SettingsOtherRemovable::on_checkBoxZIP250_stateChanged(int state) { From c5a69dea4569826a2dea6220e8f5be6e9c5399e4 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Mon, 10 Jan 2022 01:15:49 +0600 Subject: [PATCH 201/278] Fix free ID return value for MFM/RLL/XTA --- src/qt/qt_settings_bus_tracking.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/qt/qt_settings_bus_tracking.cpp b/src/qt/qt_settings_bus_tracking.cpp index c367b6389..e7e3c7a36 100644 --- a/src/qt/qt_settings_bus_tracking.cpp +++ b/src/qt/qt_settings_bus_tracking.cpp @@ -28,10 +28,10 @@ uint8_t SettingsBusTracking::next_free_mfm_channel() { if ((mfm_tracking & 0xff00ULL) && !(mfm_tracking & 0x00ffULL)) - return 0; + return 1; if (!(mfm_tracking & 0xff00ULL) && (mfm_tracking & 0x00ffULL)) - return 1; + return 0; return CHANNEL_NONE; } @@ -41,10 +41,10 @@ uint8_t SettingsBusTracking::next_free_esdi_channel() { if ((esdi_tracking & 0xff00ULL) && !(esdi_tracking & 0x00ffULL)) - return 0; + return 1; if (!(esdi_tracking & 0xff00ULL) && (esdi_tracking & 0x00ffULL)) - return 1; + return 0; return CHANNEL_NONE; } @@ -54,10 +54,10 @@ uint8_t SettingsBusTracking::next_free_xta_channel() { if ((xta_tracking & 0xff00ULL) && !(xta_tracking & 0x00ffULL)) - return 0; + return 1; if (!(xta_tracking & 0xff00ULL) && (xta_tracking & 0x00ffULL)) - return 1; + return 0; return CHANNEL_NONE; } From 0b6ba2d09c20194ef988317f73fceef56a0a08eb Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sun, 9 Jan 2022 22:27:07 +0200 Subject: [PATCH 202/278] qt: Add margin for status bar icons --- src/qt/qt_mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 9ca71aca2..6afd1c646 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -66,7 +66,7 @@ MainWindow::MainWindow(QWidget *parent) : ui->setupUi(this); ui->stackedWidget->setMouseTracking(true); statusBar()->setVisible(!hide_status_bar); - statusBar()->setStyleSheet("QStatusBar::item {border: None;}"); + statusBar()->setStyleSheet("QStatusBar::item {border: None; } QStatusBar QLabel { margin-right: 4px; }"); ui->toolBar->setVisible(!hide_tool_bar); this->setWindowIcon(QIcon(":/settings/win/icons/86Box-yellow.ico")); From e69e4d04245ff1a6c3db0961b1c66955b5bda105 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Mon, 10 Jan 2022 08:06:30 +0200 Subject: [PATCH 203/278] qt: Re-order toolbar buttons and add settings --- src/qt/qt_mainwindow.ui | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 1b06de30e..e52524f83 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -47,7 +47,7 @@ 0 0 724 - 20 + 21 @@ -200,10 +200,13 @@ false - + + - + + + @@ -275,6 +278,10 @@ + + + :/menuicons/qt/icons/placeholder.png:/menuicons/qt/icons/placeholder.png + &Settings... From 554504dcb6c4be6aa7032011fe90af2bb3e301fd Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Mon, 10 Jan 2022 19:12:19 +0200 Subject: [PATCH 204/278] qt: toolbar icon size to 16x16, hide icons from menu --- src/qt/qt_mainwindow.ui | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index e52524f83..258432ff9 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -191,6 +191,12 @@ false + + + 16 + 16 + + false @@ -232,6 +238,9 @@ &Hard Reset... + + false + @@ -247,6 +256,9 @@ Ctrl+F12 + + false + false @@ -259,6 +271,9 @@ Ctrl+Alt+&Esc + + false + @@ -271,6 +286,9 @@ &Pause + + false + @@ -288,6 +306,9 @@ QAction::PreferencesRole + + false + From 86814d7ae3b7d74cb6ef41bca94c472c51ee0e40 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Mon, 10 Jan 2022 19:15:07 +0200 Subject: [PATCH 205/278] qt: tweak status bar margin to match win32 ui --- src/qt/qt_mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 6afd1c646..36cdadc5b 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -66,7 +66,7 @@ MainWindow::MainWindow(QWidget *parent) : ui->setupUi(this); ui->stackedWidget->setMouseTracking(true); statusBar()->setVisible(!hide_status_bar); - statusBar()->setStyleSheet("QStatusBar::item {border: None; } QStatusBar QLabel { margin-right: 4px; }"); + statusBar()->setStyleSheet("QStatusBar::item {border: None; } QStatusBar QLabel { margin-right: 2px; margin-bottom: 1px; }"); ui->toolBar->setVisible(!hide_tool_bar); this->setWindowIcon(QIcon(":/settings/win/icons/86Box-yellow.ico")); From 9e0b945c707ffa8122f4b99263d65f992a0bb24a Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Wed, 12 Jan 2022 20:12:47 +0200 Subject: [PATCH 206/278] qt: Fix full screen strecth modes, implement -F switch Patches from Cacodemon345 --- src/qt/qt_mainwindow.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 96504cf23..2de91a279 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -292,6 +292,15 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionTake_screenshot->setShortcutVisibleInContextMenu(true); #endif video_setblit(qt_blit); + + if (start_in_fullscreen) { + connect(ui->stackedWidget, &RendererStack::blitToRenderer, this, [this] () { + if (start_in_fullscreen) { + QTimer::singleShot(100, ui->actionFullscreen, &QAction::trigger); + start_in_fullscreen = 0; + } + }); + } } void MainWindow::closeEvent(QCloseEvent *event) { @@ -967,6 +976,7 @@ void MainWindow::on_actionFullscreen_triggered() { showFullScreen(); video_fullscreen = 1; } + ui->stackedWidget->rendererWindow->onResize(width(), height()); } void MainWindow::getTitle_(wchar_t *title) From 4c048375743072744834d9fecb299aa90386f949 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Wed, 12 Jan 2022 20:38:27 +0200 Subject: [PATCH 207/278] Fix discord.h filename change on include --- src/win/win_ui.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/win/win_ui.c b/src/win/win_ui.c index c2740f0c7..7179b108b 100644 --- a/src/win/win_ui.c +++ b/src/win/win_ui.c @@ -43,7 +43,7 @@ #include <86box/ui.h> #include <86box/win.h> #include <86box/version.h> -# include <86box/win_discord.h> +#include <86box/discord.h> #ifdef MTR_ENABLED #include From bcb18d73b1b5f5ac412ca6f630cb3840ac9dc7df Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Wed, 12 Jan 2022 23:19:08 +0200 Subject: [PATCH 208/278] qt: disable toolbar context menu --- src/qt/qt_mainwindow.ui | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 258432ff9..903c1091b 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -185,12 +185,18 @@ + + Qt::PreventContextMenu + - toolBar + toolBar false + + Qt::TopToolBarArea + 16 From 09cfd79c6022ab95bca8c1b16db1b8e00fa71d26 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Thu, 13 Jan 2022 00:48:52 +0200 Subject: [PATCH 209/278] qt: disable automatic mnemonics Fixes alt entering menu --- src/qt/qt_main.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 16c1e3b53..292045bfe 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -48,6 +48,8 @@ extern "C" { extern int qt_nvr_save(void); } +void qt_set_sequence_auto_mnemonic(bool b); + void main_thread_fn() { @@ -101,6 +103,7 @@ main_thread_fn() int main(int argc, char* argv[]) { QApplication app(argc, argv); + qt_set_sequence_auto_mnemonic(false); Q_INIT_RESOURCE(qt_resources); Q_INIT_RESOURCE(qt_translations); QSurfaceFormat fmt = QSurfaceFormat::defaultFormat(); From 2bed0de1622c8c78e105f891183115c3a51730c5 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Thu, 13 Jan 2022 08:33:29 +0200 Subject: [PATCH 210/278] qt: Add status text and icons to toolbar --- src/qt/icons/placeholder.png | Bin 4869 -> 0 bytes src/qt/qt_mainwindow.cpp | 14 ++++++++++++-- src/qt/qt_mainwindow.ui | 31 +++++++++++++++++++++++++------ src/qt_resources.qrc | 8 +++++++- 4 files changed, 44 insertions(+), 9 deletions(-) delete mode 100644 src/qt/icons/placeholder.png diff --git a/src/qt/icons/placeholder.png b/src/qt/icons/placeholder.png deleted file mode 100644 index 4088713a43eebfa242f4a4b90cc9d22abe3666a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4869 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!totE)mHN`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsJtamObgQ7LVKi&0V`$R6YuvK4`NljeYZ<-;J{VbIQJ3^h*V^ zDLDvPF&*D>fB&wZ{QS3{^n4C<<~sPO@TBUw7b{}t+hlLbyLOwu`nAlHH2H)MmbGi_ zO>;iy7j0tqopSMWdDoU4=F^1=JAL=tY24yD`Jvx*Aa7i;Cd+O{RK`p;XXMd7wBhwiW>UD3%abvSm~&B)5+^^wKm7sU%#cxHTN zVYKX?y!Z1do1mN3UwZ#AcD01&DOj)>zj?cI&Y#K;XL&x(P1W4}w0V#2?oQ_k$8T4M zUapQVpC0Srad_Lx+hJ+^!s0D4&o(s(eXRQOSclV z!_KIf^gZNQB`Ra@lQApu^N$s=d1p6suhV>WTKn9YYkOX~Twi=*&hJ9=w~MAf6TZhY z@n`b;lppNt_43|U&Oh^6&`REPef#$vr)=_n*Ie1dUl*Gir&wZkI%am+!;TuavnLjt zD;4iA{mhxa@7Rl88T0u&d*6NBU-{^a_3=lqLw_d;#o1;5Ir8!6v|F3QJ9qBm{deT$ z|K0V^j=TE*NdKW6{{Q~_H>d4p_SgLA@2b0TXa9fmOCQ@c6+iuFmJ<6NlzZ3o7Xt%h zYo@bvfTy!FEE_T~RLrTJXzOt}K%~__c&XM@zA}Np69IE|I=U>pM7t9fZV`f|(bwG4@$t~(+BxOtAMX9lurM%j z)lE~z6|+*8JTf$#9WBbd{=-6X#hwG|hQa}Jp0Zpaki+rLv6`t1_oY< z%#etZ2wxwo zkg&dz0$52&wyjcxZ-9bxeo?A|iJpm`fv#&sW|@(a9hZVlQA(Oskc%7Ch@zAer{{GxPyLrY6beFGzXBO~3Slr-Jq%Dj@q3f;V7WsngNGh9-OlZ!G7 zN;32F6hLMsCgqow*eWS;DJUpF4X?;8@b!fopH~bGh2;EP{ffi_eM3D1{oGuAWF5sN zu4N_obrgqG7NqJ2r55Lx7A2>;mZj#EC?gw@k_^{hP+F7&_D)K&erir?ZfaghvA&_6 zA&Qmmp1uKa9iSjc&&(|V>#E2tKv7wenT7}~6yJbkz}`W2NJVY|+*}mZFu#KpgTu(m zB|o_oBqaiV#$rLM85sfn(MMXG^rqNS;cuDMaNrAcy% zNs6(N1(H#odBr7(dC93DqbhO>^fEJ3tWwg<49(3AlXVSE4GncoQj-mJ6H`+xb(51U zlMO8_l8p@v%#n=nFUm~M%uCEcb`{8|l*|+>!^AXm3o|n_-PA8bh!dFfyYP=H%G26);k8R;1yL;`XW zOVaX-a&48uGxJjN%Zm|GA(^?U!6k{H@H8|tF*G+ZGBGtYGc-0aH$x~2OD!tS%+CXv zYG|NmWCE4}MU0hyQD$mhNg^nv+A0}>#Vc|PtelHd6HD@oLh|!-Y?VNcQZUjpGyo@X z1sh1Tcw`or8UBUO3)+)6VJpFT^8mRhK5Fl#=40X<_5YZiK*tg7M3Q4x`}3{X_iJ7N#;o=Xr>qE zr$9n`(p+M2DT(` zcNb8Ph=Jj!^X_^E1_sUokH}&M2EM}}%y>M1MG6B01AB?5uPggAMoxYu?((^BCNMBC zgn7C+hFF|lJK2+qL4k)^_~ZZhzHm(~-i^zHcKM1k2{?HQWh^;)Ofll98vDY<_JR`> zu4LU2n33anPHdk-gwfe+-+ykAiU0mFoz0v@&T4VsetStyleSheet("QStatusBar::item {border: None; } QStatusBar QLabel { margin-right: 2px; margin-bottom: 1px; }"); ui->toolBar->setVisible(!hide_tool_bar); + auto toolbar_spacer = new QWidget(); + toolbar_spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + ui->toolBar->addWidget(toolbar_spacer); + + auto toolbar_label = new QLabel(); + ui->toolBar->addWidget(toolbar_label); + this->setWindowIcon(QIcon(":/settings/win/icons/86Box-yellow.ico")); this->setWindowFlag(Qt::MSWindowsFixedSizeDialogHint, vid_resize != 1); this->setWindowFlag(Qt::WindowMaximizeButtonHint, vid_resize == 1); + this->setWindowTitle(QString("%1 - %2 %3").arg(vm_name, EMU_NAME_W, EMU_VERSION_FULL_W)); + connect(this, &MainWindow::showMessageForNonQtThread, this, &MainWindow::showMessage_, Qt::BlockingQueuedConnection); - connect(this, &MainWindow::setTitle, this, [this](const QString& title) { - setWindowTitle(title); + connect(this, &MainWindow::setTitle, this, [this,toolbar_label](const QString& title) { + if (!hide_tool_bar) + toolbar_label->setText(title); }); connect(this, &MainWindow::getTitleForNonQtThread, this, &MainWindow::getTitle_, Qt::BlockingQueuedConnection); diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index 903c1091b..d7ffb8589 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -203,6 +203,9 @@ 16 + + Qt::ToolButtonIconOnly + false @@ -213,10 +216,11 @@ false + + - @@ -239,7 +243,7 @@ - :/menuicons/qt/icons/placeholder.png:/menuicons/qt/icons/placeholder.png + :/menuicons/win/icons/hard_reset.ico:/menuicons/win/icons/hard_reset.ico &Hard Reset... @@ -251,7 +255,7 @@ - :/menuicons/qt/icons/placeholder.png:/menuicons/qt/icons/placeholder.png + :/menuicons/win/icons/send_cad.ico:/menuicons/win/icons/send_cad.ico &Ctrl+Alt+Del @@ -272,7 +276,7 @@ - :/menuicons/qt/icons/placeholder.png:/menuicons/qt/icons/placeholder.png + :/menuicons/win/icons/send_cae.ico:/menuicons/win/icons/send_cae.ico Ctrl+Alt+&Esc @@ -287,7 +291,7 @@ - :/menuicons/qt/icons/placeholder.png:/menuicons/qt/icons/placeholder.png + :/menuicons/win/icons/pause.ico:/menuicons/win/icons/pause.ico &Pause @@ -304,7 +308,7 @@ - :/menuicons/qt/icons/placeholder.png:/menuicons/qt/icons/placeholder.png + :/menuicons/win/icons/settings.ico:/menuicons/win/icons/settings.ico &Settings... @@ -647,6 +651,21 @@ Hide tool bar + + + false + + + + :/menuicons/win/icons/acpi_shutdown.ico:/menuicons/win/icons/acpi_shutdown.ico + + + ACPI Shutdown + + + ACPI Shutdown + + diff --git a/src/qt_resources.qrc b/src/qt_resources.qrc index 940f4fd93..045c3659d 100644 --- a/src/qt_resources.qrc +++ b/src/qt_resources.qrc @@ -49,6 +49,12 @@ win/icons/86Box-yellow.ico - qt/icons/placeholder.png + win/icons/acpi_shutdown.ico + win/icons/hard_reset.ico + win/icons/pause.ico + win/icons/run.ico + win/icons/send_cad.ico + win/icons/send_cae.ico + win/icons/settings.ico From b7434b9fcd44252e5871b6078eecdf1e27988437 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Thu, 13 Jan 2022 09:28:38 +0200 Subject: [PATCH 211/278] qt: missing QString include --- src/qt/qt_mainwindow.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index ec4500bd1..1b51f1dca 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -34,6 +34,7 @@ extern "C" { #include #include #include +#include #include #include From 6b9e196bb746ef69c40de97596b8ccbc77f84bdf Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 12 Jan 2022 01:09:43 +0600 Subject: [PATCH 212/278] Implement fullscreen prompt (cherry picked from commit 7b69723788dab622652f2f11afc823f5d9cbcd86) --- src/qt/qt_mainwindow.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 2de91a279..7ad3b7dd0 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -970,6 +970,19 @@ void MainWindow::on_actionFullscreen_triggered() { emit resizeContents(scrnsz_x, scrnsz_y); } } else { + if (video_fullscreen_first) + { + QMessageBox questionbox(QMessageBox::Icon::Information, tr("Entering fullscreen mode"), tr("Press CTRL+ALT+PAGE DOWN to return to windowed mode."), QMessageBox::Ok, this); + QCheckBox *chkbox = new QCheckBox(tr("Don't show this message again")); + questionbox.setCheckBox(chkbox); + chkbox->setChecked(!video_fullscreen_first); + bool confirm_exit_temp = false; + QObject::connect(chkbox, &QCheckBox::stateChanged, [](int state) { + video_fullscreen_first = (state == Qt::CheckState::Unchecked); + }); + questionbox.exec(); + config_save(); + } setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); ui->menubar->hide(); ui->statusbar->hide(); From 31d3d6309b1a03b0fad73cdee242ec7684cdf0bc Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 14 Jan 2022 12:39:49 +0600 Subject: [PATCH 213/278] Copy lines from buffer32 one by one (cherry picked from commit 00a75d4e602ec3ba6d214eeae4500c90dc77fc5f) --- src/qt/qt_rendererstack.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index c736baa5d..78e8e99d8 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -240,7 +240,11 @@ void RendererStack::blit(int x, int y, int w, int h) sw = this->w = w; sh = this->h = h; auto imagebits = imagebufs[currentBuf].get(); - video_copy(imagebits + y * (2048 * 4) + x * 4, &(buffer32->line[y][x]), h * 2048 * sizeof(uint32_t)); + for (int y1 = y; y1 < (y + h - 1); y1++) + { + auto scanline = imagebits + (y1 * (2048) * 4) + (x * 4); + video_copy(scanline, &(buffer32->line[y1][x]), w * 4); + } if (screenshots) { From 7093e9259677bf68cefc38bfdd5849339d17f912 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Fri, 14 Jan 2022 17:02:03 +0200 Subject: [PATCH 214/278] qt: fix title formating --- src/qt/qt_mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 9f3b8ec31..7ac725221 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -81,7 +81,7 @@ MainWindow::MainWindow(QWidget *parent) : this->setWindowFlag(Qt::MSWindowsFixedSizeDialogHint, vid_resize != 1); this->setWindowFlag(Qt::WindowMaximizeButtonHint, vid_resize == 1); - this->setWindowTitle(QString("%1 - %2 %3").arg(vm_name, EMU_NAME_W, EMU_VERSION_FULL_W)); + this->setWindowTitle(QString("%1 - %2 %3").arg(vm_name, EMU_NAME, EMU_VERSION_FULL)); connect(this, &MainWindow::showMessageForNonQtThread, this, &MainWindow::showMessage_, Qt::BlockingQueuedConnection); From 5742ae4747cbb68b484f506420c93c43cfbf9430 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Fri, 14 Jan 2022 20:25:17 +0200 Subject: [PATCH 215/278] qt: split the ui window title string on non-win32 --- src/qt/qt_mainwindow.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 7ac725221..9460e766c 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -87,7 +87,15 @@ MainWindow::MainWindow(QWidget *parent) : connect(this, &MainWindow::setTitle, this, [this,toolbar_label](const QString& title) { if (!hide_tool_bar) +#ifdef _WIN32 toolbar_label->setText(title); +#else + { + /* get the percentage and mouse message, TODO: refactor ui_window_title() */ + auto parts = title.split(" - "); + toolbar_label->setText(QString("%1 - %2").arg(parts[1],parts.last())); + } +#endif }); connect(this, &MainWindow::getTitleForNonQtThread, this, &MainWindow::getTitle_, Qt::BlockingQueuedConnection); From d4ca5e093db4fe987a504c7205233339cf79739f Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Fri, 14 Jan 2022 21:32:19 +0200 Subject: [PATCH 216/278] qt: tweak program settings layout --- src/qt/qt_progsettings.ui | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/qt/qt_progsettings.ui b/src/qt/qt_progsettings.ui index 2551bdc0b..9944cd6c3 100644 --- a/src/qt/qt_progsettings.ui +++ b/src/qt/qt_progsettings.ui @@ -6,8 +6,8 @@ 0 0 - 400 - 300 + 370 + 228 @@ -16,8 +16,8 @@ - 30 - 240 + 20 + 190 341 32 @@ -32,8 +32,8 @@ - 20 - 80 + 10 + 30 351 25 @@ -50,9 +50,9 @@ - 20 - 60 - 54 + 10 + 10 + 351 17 @@ -63,8 +63,8 @@ - 290 - 110 + 280 + 60 80 25 @@ -76,9 +76,9 @@ - 20 - 140 - 91 + 10 + 90 + 351 16 @@ -89,8 +89,8 @@ - 290 - 190 + 280 + 140 80 23 @@ -102,8 +102,8 @@ - 20 - 160 + 10 + 110 351 23 From 188f1a1b7e9b625d7d155ec96d5b7a0ebae2e3bb Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sat, 15 Jan 2022 00:07:01 +0200 Subject: [PATCH 217/278] qt: fix plat_fopen() encoding --- src/qt/qt_platform.cpp | 66 +----------------------------------------- 1 file changed, 1 insertion(+), 65 deletions(-) diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index 6f3a05c98..f3de30485 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -131,71 +131,7 @@ plat_timer_read(void) FILE * plat_fopen(const char *path, const char *mode) { - /* - QString filepath(path); - if (filepath.isEmpty()) { - return nullptr; - } - - qWarning() << "plat_fopen" << filepath; - bool ok = false; - QFile file(filepath); - auto mode_len = strlen(mode); - for (size_t i = 0; i < mode_len; ++i) { - switch (mode[i]) { - case 'r': - ok = file.open(QIODevice::ReadOnly); - break; - case 'w': - ok = file.open(QIODevice::ReadWrite); - break; - case 'b': - case 't': - break; - default: - qWarning() << "Unhandled open mode" << mode[i]; - } - } - - if (ok) { - qDebug() << "filehandle" << file.handle(); - QFile returned; - qDebug() << "\t" << returned.open(file.handle(), file.openMode(), QFileDevice::FileHandleFlag::DontCloseHandle); - return fdopen(returned.handle(), mode); - } else { - return nullptr; - } - */ - -/* Not sure if any this is necessary, fopen seems to work on Windows -Manaatti -#ifdef Q_OS_WINDOWS - wchar_t *pathw, *modew; - int len; - FILE *fp; - - if (acp_utf8) - return fopen(path, mode); - else { - len = mbstoc16s(NULL, path, 0) + 1; - pathw = malloc(sizeof(wchar_t) * len); - mbstoc16s(pathw, path, len); - - len = mbstoc16s(NULL, mode, 0) + 1; - modew = malloc(sizeof(wchar_t) * len); - mbstoc16s(modew, mode, len); - - fp = _wfopen(pathw, modew); - - free(pathw); - free(modew); - - return fp; - } -#endif -#ifdef Q_OS_UNIX -*/ - return fopen(path, mode); -//#endif + return fopen(QString::fromUtf8(path).toLocal8Bit(), mode); } FILE * From 07446719a4b874cc098d3957d2a4299c22391a67 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sat, 15 Jan 2022 01:39:22 +0200 Subject: [PATCH 218/278] qt: fix non-win32 status message when no mouse --- src/qt/qt_mainwindow.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 9460e766c..aaf36132b 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -93,7 +93,10 @@ MainWindow::MainWindow(QWidget *parent) : { /* get the percentage and mouse message, TODO: refactor ui_window_title() */ auto parts = title.split(" - "); - toolbar_label->setText(QString("%1 - %2").arg(parts[1],parts.last())); + if (parts.size() < 5) + toolbar_label->setText(parts[1]); + else + toolbar_label->setText(QString("%1 - %2").arg(parts[1], parts.last())); } #endif }); From 8c8e2219d8332da7cf4c955c49dbf2ed1e12e905 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sat, 15 Jan 2022 21:45:34 +0200 Subject: [PATCH 219/278] qt: Refactor renderers buffer ownership Invert the way buffers are created; make renderer create buffers for renderer stack. Use QImage bits as the buffer for software renderer. --- src/qt/qt_hardwarerenderer.cpp | 23 ++++++++++---- src/qt/qt_hardwarerenderer.hpp | 15 +++++++++- src/qt/qt_renderercomon.cpp | 7 ----- src/qt/qt_renderercomon.hpp | 9 ++++-- src/qt/qt_rendererstack.cpp | 21 +++++-------- src/qt/qt_rendererstack.hpp | 9 ++---- src/qt/qt_softwarerenderer.cpp | 55 +++++++++++++++++++++++++++++----- src/qt/qt_softwarerenderer.hpp | 13 ++++++-- 8 files changed, 108 insertions(+), 44 deletions(-) diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index f6d6142b9..ca0e60efb 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -2,6 +2,7 @@ #include #include #include +#include extern "C" { #include <86box/86box.h> @@ -21,7 +22,7 @@ void HardwareRenderer::initializeGL() { m_context->makeCurrent(this); initializeOpenGLFunctions(); - m_texture = new QOpenGLTexture(image); + m_texture = new QOpenGLTexture(QImage(2048,2048, QImage::Format::Format_RGB32)); m_blt = new QOpenGLTextureBlitter; m_blt->setRedBlueSwizzle(true); m_blt->create(); @@ -160,19 +161,19 @@ void HardwareRenderer::setRenderType(RenderType type) { setFormat(format); } -void HardwareRenderer::onBlit(const std::unique_ptr* img, int x, int y, int w, int h, std::atomic_flag* in_use) { +void HardwareRenderer::onBlit(int buf_idx, int x, int y, int w, int h) { auto tval = this; void* nuldata = 0; if (memcmp(&tval, &nuldata, sizeof(void*)) == 0) return; - if (!m_texture || !img || !img->get() || (m_texture && !m_texture->isCreated())) + if (!m_texture || !m_texture->isCreated()) { - in_use->clear(); + buf_usage[buf_idx].clear(); source.setRect(x, y, w, h); return; } m_context->makeCurrent(this); - m_texture->setData(QOpenGLTexture::PixelFormat::RGBA, QOpenGLTexture::PixelType::UInt8, (const void*)img->get()); - in_use->clear(); + m_texture->setData(QOpenGLTexture::PixelFormat::RGBA, QOpenGLTexture::PixelType::UInt8, (const void*)imagebufs[buf_idx].get()); + buf_usage[buf_idx].clear(); source.setRect(x, y, w, h); update(); } @@ -189,3 +190,13 @@ bool HardwareRenderer::event(QEvent *event) if (!eventDelegate(event, res)) return QOpenGLWindow::event(event); return res; } + +std::vector> HardwareRenderer::getBuffers() +{ + std::vector> buffers; + + buffers.push_back(std::make_tuple(imagebufs[0].get(), &buf_usage[0])); + buffers.push_back(std::make_tuple(imagebufs[1].get(), &buf_usage[1])); + + return buffers; +} \ No newline at end of file diff --git a/src/qt/qt_hardwarerenderer.hpp b/src/qt/qt_hardwarerenderer.hpp index 2a453ab49..b87399e8e 100644 --- a/src/qt/qt_hardwarerenderer.hpp +++ b/src/qt/qt_hardwarerenderer.hpp @@ -15,6 +15,9 @@ #include #include +#include +#include +#include #include #include "qt_renderercomon.hpp" @@ -44,9 +47,17 @@ public: void resizeGL(int w, int h) override; void initializeGL() override; void paintGL() override; + std::vector> getBuffers() override; HardwareRenderer(QWidget* parent = nullptr, RenderType rtype = RenderType::OpenGL) : QOpenGLWindow(QOpenGLWindow::NoPartialUpdate, parent->windowHandle()), QOpenGLFunctions() { + imagebufs[0] = std::unique_ptr(new uint8_t[2048 * 2048 * 4]); + imagebufs[1] = std::unique_ptr(new uint8_t[2048 * 2048 * 4]); + + buf_usage = std::vector(2); + buf_usage[0].clear(); + buf_usage[1].clear(); + setMinimumSize(QSize(16, 16)); setFlags(Qt::FramelessWindowHint); parentWidget = parent; @@ -71,9 +82,11 @@ public: void setRenderType(RenderType type); public slots: - void onBlit(const std::unique_ptr* img, int, int, int, int, std::atomic_flag* in_use); + void onBlit(int buf_idx, int x, int y, int w, int h); protected: + std::array, 2> imagebufs; + void resizeEvent(QResizeEvent *event) override; bool event(QEvent* event) override; }; diff --git a/src/qt/qt_renderercomon.cpp b/src/qt/qt_renderercomon.cpp index ed55e9a71..f094f7cbd 100644 --- a/src/qt/qt_renderercomon.cpp +++ b/src/qt/qt_renderercomon.cpp @@ -16,13 +16,6 @@ extern "C" { RendererCommon::RendererCommon() = default; extern MainWindow* main_window; -void RendererCommon::onPaint(QPaintDevice* device) { - QPainter painter(device); - painter.setRenderHint(QPainter::SmoothPixmapTransform, video_filter_method > 0 ? true : false); - painter.fillRect(0, 0, device->width(), device->height(), QColorConstants::Black); - painter.setCompositionMode(QPainter::CompositionMode_Plus); - painter.drawImage(destination, image, source); -} static void integer_scale(double *d, double *g) { double ratio; diff --git a/src/qt/qt_renderercomon.hpp b/src/qt/qt_renderercomon.hpp index 063d6f1bc..a62aa9aa2 100644 --- a/src/qt/qt_renderercomon.hpp +++ b/src/qt/qt_renderercomon.hpp @@ -4,6 +4,10 @@ #include #include +#include +#include +#include + class QWidget; class RendererCommon @@ -12,11 +16,12 @@ public: RendererCommon(); void onResize(int width, int height); + virtual std::vector> getBuffers() = 0; protected: - void onPaint(QPaintDevice* device); bool eventDelegate(QEvent* event, bool& result); - QImage image{QSize(2048, 2048), QImage::Format_RGB32}; QRect source, destination; QWidget* parentWidget{nullptr}; + + std::vector buf_usage; }; diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 78e8e99d8..d11b4a0b5 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -27,12 +27,6 @@ RendererStack::RendererStack(QWidget *parent) : ui(new Ui::RendererStack) { ui->setupUi(this); - imagebufs[0].reset(new uint8_t[2048 * 2048 * 4]); - imagebufs[1].reset(new uint8_t[2048 * 2048 * 4]); - - buffers_in_use = std::vector(2); - buffers_in_use[0].clear(); - buffers_in_use[1].clear(); #ifdef WAYLAND if (QApplication::platformName().contains("wayland")) { @@ -182,7 +176,7 @@ void RendererStack::switchRenderer(Renderer renderer) { switch (renderer) { case Renderer::Software: { - auto sw = new SoftwareRenderer(this); + auto sw = new SoftwareRenderer(this); rendererWindow = sw; connect(this, &RendererStack::blitToRenderer, sw, &SoftwareRenderer::onBlit, Qt::QueuedConnection); current.reset(this->createWindowContainer(sw, this)); @@ -216,13 +210,14 @@ void RendererStack::switchRenderer(Renderer renderer) { break; } } + + imagebufs = std::move(rendererWindow->getBuffers()); + current->setFocusPolicy(Qt::NoFocus); current->setFocusProxy(this); addWidget(current.get()); this->setStyleSheet("background-color: black"); - for (auto& in_use : buffers_in_use) - in_use.clear(); endblit(); } @@ -230,7 +225,7 @@ void RendererStack::switchRenderer(Renderer renderer) { // called from blitter thread void RendererStack::blit(int x, int y, int w, int h) { - if ((w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL) || buffers_in_use[currentBuf].test_and_set()) + if ((w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL) || std::get(imagebufs[currentBuf])->test_and_set()) { video_blit_complete(); return; @@ -239,7 +234,7 @@ void RendererStack::blit(int x, int y, int w, int h) sy = y; sw = this->w = w; sh = this->h = h; - auto imagebits = imagebufs[currentBuf].get(); + uint8_t* imagebits = std::get(imagebufs[currentBuf]); for (int y1 = y; y1 < (y + h - 1); y1++) { auto scanline = imagebits + (y1 * (2048) * 4) + (x * 4); @@ -251,6 +246,6 @@ void RendererStack::blit(int x, int y, int w, int h) video_screenshot((uint32_t *)imagebits, x, y, 2048); } video_blit_complete(); - blitToRenderer(&imagebufs[currentBuf], sx, sy, sw, sh, &buffers_in_use[currentBuf]); - currentBuf = (currentBuf + 1) % 2; + emit blitToRenderer(currentBuf, sx, sy, sw, sh); + currentBuf = (currentBuf + 1) % imagebufs.size(); } diff --git a/src/qt/qt_rendererstack.hpp b/src/qt/qt_rendererstack.hpp index 7a82fc527..46c004c0f 100644 --- a/src/qt/qt_rendererstack.hpp +++ b/src/qt/qt_rendererstack.hpp @@ -7,7 +7,7 @@ #include #include #include -#include +#include namespace Ui { class RendererStack; @@ -46,7 +46,7 @@ public: RendererCommon* rendererWindow{nullptr}; signals: - void blitToRenderer(const std::unique_ptr* img, int, int, int, int, std::atomic_flag* in_use); + void blitToRenderer(int buf_idx, int x, int y, int w, int h); public slots: void blit(int x, int y, int w, int h); @@ -64,13 +64,10 @@ private: int x, y, w, h, sx, sy, sw, sh; int currentBuf = 0; - std::array, 2> imagebufs; + std::vector> imagebufs; std::unique_ptr current; - /* atomic flag for each buffer to not overload the renderer */ - std::vector buffers_in_use; - friend class MainWindow; }; diff --git a/src/qt/qt_softwarerenderer.cpp b/src/qt/qt_softwarerenderer.cpp index 962260fd8..3b7ccb2d6 100644 --- a/src/qt/qt_softwarerenderer.cpp +++ b/src/qt/qt_softwarerenderer.cpp @@ -1,20 +1,40 @@ #include "qt_softwarerenderer.hpp" #include +#include -SoftwareRenderer::SoftwareRenderer(QWidget *parent) : QRasterWindow(parent->windowHandle()) { parentWidget = parent; } +extern "C" { +#include <86box/86box.h> +#include <86box/video.h> +} -void SoftwareRenderer::paintEvent(QPaintEvent *event) { - (void) event; +SoftwareRenderer::SoftwareRenderer(QWidget *parent) + : QRasterWindow(parent->windowHandle()) +{ + parentWidget = parent; + + images[0] = std::make_unique(QSize(2048, 2048), QImage::Format_RGB32); + images[1] = std::make_unique(QSize(2048, 2048), QImage::Format_RGB32); + + buf_usage = std::vector(2); + buf_usage[0].clear(); + buf_usage[1].clear(); +} + +void SoftwareRenderer::paintEvent(QPaintEvent* event) { + (void)event; onPaint(this); } -void SoftwareRenderer::onBlit(const std::unique_ptr* img, int x, int y, int w, int h, std::atomic_flag* in_use) { +void SoftwareRenderer::onBlit(int buf_idx, int x, int y, int w, int h) { + /* TODO: should look into deleteLater() */ auto tval = this; void* nuldata = 0; if (memcmp(&tval, &nuldata, sizeof(void*)) == 0) return; - memcpy(image.bits(), img->get(), 2048 * 2048 * 4); - in_use->clear(); - source.setRect(x, y, w, h); + + cur_image = buf_idx; + buf_usage[(buf_idx + 1) % 2].clear(); + + source.setRect(x, y, w, h), update(); } @@ -29,3 +49,24 @@ bool SoftwareRenderer::event(QEvent *event) if (!eventDelegate(event, res)) return QRasterWindow::event(event); return res; } + +void SoftwareRenderer::onPaint(QPaintDevice* device) { + if (cur_image == -1) + return; + + QPainter painter(device); + painter.setRenderHint(QPainter::SmoothPixmapTransform, video_filter_method > 0 ? true : false); + painter.fillRect(0, 0, device->width(), device->height(), QColorConstants::Black); + painter.setCompositionMode(QPainter::CompositionMode_Plus); + painter.drawImage(destination, *images[cur_image], source); +} + +std::vector> SoftwareRenderer::getBuffers() +{ + std::vector> buffers; + + buffers.push_back(std::make_tuple(images[0]->bits(), &buf_usage[0])); + buffers.push_back(std::make_tuple(images[1]->bits(), &buf_usage[1])); + + return buffers; +} \ No newline at end of file diff --git a/src/qt/qt_softwarerenderer.hpp b/src/qt/qt_softwarerenderer.hpp index c60ab110c..6daf18337 100644 --- a/src/qt/qt_softwarerenderer.hpp +++ b/src/qt/qt_softwarerenderer.hpp @@ -3,6 +3,8 @@ #include #include +#include +#include #include #include "qt_renderercomon.hpp" @@ -12,11 +14,18 @@ class SoftwareRenderer : public QRasterWindow, public RendererCommon public: explicit SoftwareRenderer(QWidget *parent = nullptr); - void paintEvent(QPaintEvent *event) override; + void paintEvent(QPaintEvent* event) override; + + std::vector> getBuffers() override; + public slots: - void onBlit(const std::unique_ptr* img, int, int, int, int, std::atomic_flag* in_use); + void onBlit(int buf_idx, int x, int y, int w, int h); protected: + std::array, 2> images; + int cur_image = -1; + + void onPaint(QPaintDevice* device); void resizeEvent(QResizeEvent *event) override; bool event(QEvent *event) override; }; From f250e5eea4bfae2bf68efbf33b41d707affd0c04 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Thu, 20 Jan 2022 20:19:18 +0200 Subject: [PATCH 220/278] qt: Unify toolbar and title on mac (from dob205) --- src/qt/qt_mainwindow.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index aaf36132b..e75eb0501 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -64,6 +64,7 @@ MainWindow::MainWindow(QWidget *parent) : MediaMenu::ptr = mm; status = std::make_unique(this); + setUnifiedTitleAndToolBarOnMac(true); ui->setupUi(this); ui->stackedWidget->setMouseTracking(true); statusBar()->setVisible(!hide_status_bar); From 48b7f652fb2e36cc27757de1c8aa1be8bbcb10ef Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Fri, 21 Jan 2022 19:02:05 +0200 Subject: [PATCH 221/278] qt: Update translations from rc --- src/qt/languages/cs-CZ.po | 21 + src/qt/languages/de-DE.po | 27 +- src/qt/languages/en-GB.po | 21 + src/qt/languages/es-ES.po | 21 + src/qt/languages/fi-FI.po | 21 + src/qt/languages/fr-FR.po | 21 + src/qt/languages/hr-HR.po | 27 +- src/qt/languages/hu-HU.po | 21 + src/qt/languages/it-IT.po | 21 + src/qt/languages/ja-JP.po | 217 ++++--- src/qt/languages/ko-KR.po | 21 + src/qt/languages/pl-PL.po | 1191 ++++++++++++++++++++++++++++++++++++ src/qt/languages/pt-BR.po | 25 +- src/qt/languages/pt-PT.po | 21 + src/qt/languages/ru-RU.po | 21 + src/qt/languages/sl-SI.po | 21 + src/qt/languages/tr-TR.po | 21 + src/qt/languages/zh-CN.po | 21 + src/qt/qt_platform.cpp | 1 + src/qt/qt_translations.qrc | 1 + 20 files changed, 1656 insertions(+), 106 deletions(-) create mode 100644 src/qt/languages/pl-PL.po diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index 856d4466a..69c561054 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -31,6 +31,9 @@ msgstr "&Zobrazení" msgid "&Hide status bar" msgstr "&Schovat stavový řádek" +msgid "Hide &toolbar" +msgstr "Schovat panel &nástrojů" + msgid "&Resizeable window" msgstr "&Měnitelná velikost okna" @@ -928,6 +931,24 @@ msgstr "Error initializing renderer" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgid "Resume execution" +msgstr "Obnovit" + +msgid "Pause execution" +msgstr "Pozastavit" + +msgid "Press Ctrl+Alt+Del" +msgstr "Stisknout Ctrl+Alt+Delete" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Stisknout Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Resetovat" + +msgid "ACPI shutdown" +msgstr "Vypnout skrze rozhraní ACPI" + msgid "Hard disk (%s)" msgstr "Pevný disk (%s)" diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po index 02de09c47..1df141044 100644 --- a/src/qt/languages/de-DE.po +++ b/src/qt/languages/de-DE.po @@ -31,6 +31,9 @@ msgstr "&Ansicht" msgid "&Hide status bar" msgstr "&Statusleiste ausblenden" +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + msgid "&Resizeable window" msgstr "&Größenverstellbares Fenster" @@ -590,10 +593,10 @@ msgid "Card 4:" msgstr "Steckkarte 4:" msgid "ISABugger device" -msgstr "ISABugger-Gerät:" +msgstr "ISABugger-Gerät" msgid "POST card" -msgstr "POST-Code-Karte:" +msgstr "POST-Code-Karte" msgid "Segoe UI" msgstr "Segoe UI" @@ -770,7 +773,7 @@ msgid "%u" msgstr "%u" msgid "%u MB (CHS: %i, %i, %i)" -msgstr "%u MB (ZKS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" msgid "Floppy %i (%s): %ls" msgstr "Diskette %i (%s): %ls" @@ -928,6 +931,24 @@ msgstr "Fehler bei der Rendererinitialisierung" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." msgstr "Der OpenGL (3.0-Kern)-Renderer konnte nicht initialisiert werden. Bitte benutzen Sie einen anderen Renderer." +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + msgid "Hard disk (%s)" msgstr "Festplatte (%s)" diff --git a/src/qt/languages/en-GB.po b/src/qt/languages/en-GB.po index 479f87a47..b8c1f5e0e 100644 --- a/src/qt/languages/en-GB.po +++ b/src/qt/languages/en-GB.po @@ -31,6 +31,9 @@ msgstr "&View" msgid "&Hide status bar" msgstr "&Hide status bar" +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + msgid "&Resizeable window" msgstr "&Resizeable window" @@ -928,6 +931,24 @@ msgstr "Error initializing renderer" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + msgid "Hard disk (%s)" msgstr "Hard disk (%s)" diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po index e79a35ea0..2d291c9a4 100644 --- a/src/qt/languages/es-ES.po +++ b/src/qt/languages/es-ES.po @@ -31,6 +31,9 @@ msgstr "&Vista" msgid "&Hide status bar" msgstr "&Ocultar barra de estado" +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + msgid "&Resizeable window" msgstr "&Ventana redimensionable" @@ -928,6 +931,24 @@ msgstr "Error initializing renderer" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + msgid "Hard disk (%s)" msgstr "Disco duro (%s)" diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index a8e3e8c5c..d6fa4c95b 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -31,6 +31,9 @@ msgstr "&Näytä" msgid "&Hide status bar" msgstr "&Piilota tilapalkki" +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + msgid "&Resizeable window" msgstr "&Salli koon muuttaminen" @@ -928,6 +931,24 @@ msgstr "Virhe renderöijän alustuksessa" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." msgstr "OpenGL (3.0 Core) renderöijän alustus epäonnistui. Käytä toista renderöijää." +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + msgid "Hard disk (%s)" msgstr "Kiintolevy (%s)" diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po index 74459d77c..5b4c5d88f 100644 --- a/src/qt/languages/fr-FR.po +++ b/src/qt/languages/fr-FR.po @@ -31,6 +31,9 @@ msgstr "&Vue" msgid "&Hide status bar" msgstr "&Masquer la barre de status" +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + msgid "&Resizeable window" msgstr "Fenètre &Retaillable" @@ -928,6 +931,24 @@ msgstr "Error initializing renderer" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + msgid "Hard disk (%s)" msgstr "Disque dur (%s)" diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index a01994047..139f13b55 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -31,6 +31,9 @@ msgstr "&Pogled" msgid "&Hide status bar" msgstr "&Sakrij statusni redak" +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + msgid "&Resizeable window" msgstr "&Prozor s promjenjivim veličinama" @@ -572,7 +575,7 @@ msgid "ZIP 250" msgstr "ZIP 250" msgid "ISA RTC:" -msgstr "Ura u stvarnom vrijemenu RTC:" +msgstr "Sat stvarnog vremena (RTC):" msgid "ISA Memory Expansion" msgstr "Proširenje memorije ISA" @@ -923,10 +926,28 @@ msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" msgstr "Slike kasete (*.A *.a *.B *.b *.JRC *.jrc);;Sve datoteke (*)" msgid "Error initializing renderer" -msgstr "Error initializing renderer" +msgstr "Nije moguće inicijalizirati renderer" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "Nije moguće inicijalizirati OpenGL (3.0 jezgra) renderer. Molimte koristite drugi renderer." + +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" msgid "Hard disk (%s)" msgstr "Tvrdi disk (%s)" diff --git a/src/qt/languages/hu-HU.po b/src/qt/languages/hu-HU.po index e2c410de1..b57a4e33c 100644 --- a/src/qt/languages/hu-HU.po +++ b/src/qt/languages/hu-HU.po @@ -31,6 +31,9 @@ msgstr "&Nézet" msgid "&Hide status bar" msgstr "Állapotsor &elrejtése" +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + msgid "&Resizeable window" msgstr "&Átméretezhető ablak" @@ -928,6 +931,24 @@ msgstr "Hiba történt a renderelő inicializálásakor" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." msgstr "Az OpenGL (3.0 Core) megjelenítő-motort nem sikerült inicializálni. Kérem használjon másik renderelőt." +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + msgid "Hard disk (%s)" msgstr "Merevlemez (%s)" diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po index 44821a80f..0e44ba315 100644 --- a/src/qt/languages/it-IT.po +++ b/src/qt/languages/it-IT.po @@ -31,6 +31,9 @@ msgstr "&Visualizza" msgid "&Hide status bar" msgstr "&Nascondi barra di stato" +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + msgid "&Resizeable window" msgstr "&Finestra ridimensionabile" @@ -928,6 +931,24 @@ msgstr "Error initializing renderer" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + msgid "Hard disk (%s)" msgstr "Hard disk (%s)" diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po index 156396e7e..cbb5798b8 100644 --- a/src/qt/languages/ja-JP.po +++ b/src/qt/languages/ja-JP.po @@ -11,7 +11,7 @@ msgid "&Right CTRL is left ALT" msgstr "右CTRLを左ALTへ(&R)" msgid "&Hard Reset..." -msgstr "再起動(&H)..." +msgstr "ハードリセット(&H)..." msgid "&Ctrl+Alt+Del\tCtrl+F12" msgstr "Ctrl+Alt+Del(&C)\tCtrl+F12" @@ -31,11 +31,14 @@ msgstr "表示(&V)" msgid "&Hide status bar" msgstr "ステータスバーを隠す(&H)" +msgid "Hide &toolbar" +msgstr "ツールバーを隠す(&T)" + msgid "&Resizeable window" -msgstr "ウィンドウのサイズを変更可能にする(&R)" +msgstr "ウィンドウのサイズをリサイズ可能(&R)" msgid "R&emember size && position" -msgstr "ウィンドウのサイズと位置を記憶する(&E)" +msgstr "ウィンドウのサイズと位置を記憶(&E)" msgid "Re&nderer" msgstr "レンダラー(&N)" @@ -56,13 +59,13 @@ msgid "&VNC" msgstr "VNC(&V)" msgid "Specify dimensions..." -msgstr "ウィンドウのサイズを指定する..." +msgstr "ウィンドウのサイズを指定..." msgid "F&orce 4:3 display ratio" -msgstr "画面比率を4:3に合わせる(&O)" +msgstr "4:3アスペクト比を固定(&O)" msgid "&Window scale factor" -msgstr "ウィンドウの倍率(&W)" +msgstr "ウィンドウの表示倍率(&W)" msgid "&0.5x" msgstr "0.5x(&0)" @@ -80,19 +83,19 @@ msgid "Filter method" msgstr "フィルター方式" msgid "&Nearest" -msgstr "ニアレストネイバー(&N)" +msgstr "最近傍補間(&N)" msgid "&Linear" -msgstr "リニア補間(&L)" +msgstr "線形補間(&L)" msgid "Hi&DPI scaling" -msgstr "高DPIスケール(&D)" +msgstr "HiDPIスケーリング(&D)" msgid "&Fullscreen\tCtrl+Alt+PageUP" msgstr "フルスクリーン(&F)\tCtrl+Alt+PageUP" msgid "Fullscreen &stretch mode" -msgstr "フルスクリーンの比率(&S)" +msgstr "フルスクリーンのスケール(&S)" msgid "&Full screen stretch" msgstr "フルスクリーンに拡大(&F)" @@ -101,37 +104,37 @@ msgid "&4:3" msgstr "4:3(&4)" msgid "&Square pixels (Keep ratio)" -msgstr "正方形のピクセル(維持率)(&S)" +msgstr "正方形ピクセル(アスペクト比を維持)(&S)" msgid "&Integer scale" -msgstr "定数倍(&I)" +msgstr "整数倍(&I)" msgid "E&GA/(S)VGA settings" msgstr "E&GA/(S)VGAの設定" msgid "&Inverted VGA monitor" -msgstr "色反転VGAモニター(&I)" +msgstr "色を反転(&I)" msgid "VGA screen &type" -msgstr "VGA画面タイプ(&T)" +msgstr "画面タイプ(&T)" msgid "RGB &Color" -msgstr "RGBカラー(&C)" +msgstr "RGB(カラー)(&C)" msgid "&RGB Grayscale" -msgstr "RGBグレースケール(&R)" +msgstr "RGB(グレースケール)(&R)" msgid "&Amber monitor" -msgstr "橙色モニター(&A)" +msgstr "モニター(琥珀色)(&A)" msgid "&Green monitor" -msgstr "緑色モニター(&G)" +msgstr "モニター(緑色)(&G)" msgid "&White monitor" -msgstr "白色モニター(&W)" +msgstr "モニター(白色)(&W)" msgid "Grayscale &conversion type" -msgstr "グレースケール表示方式(&C)" +msgstr "グレースケール変換タイプ(&C)" msgid "BT&601 (NTSC/PAL)" msgstr "BT601 (NTSC/PAL)(&6)" @@ -140,13 +143,13 @@ msgid "BT&709 (HDTV)" msgstr "BT709 (HDTV)(&7)" msgid "&Average" -msgstr "平均値(&A)" +msgstr "平均(&A)" msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" msgstr "CGA/PCjr/Tandy/EGA/(S)VGAオーバースキャン(&G)" msgid "Change contrast for &monochrome display" -msgstr "単色モニター用対比転換(&M)" +msgstr "単色モニター用コントラストを変更(&M)" msgid "&Media" msgstr "メディア(&M)" @@ -158,7 +161,7 @@ msgid "&Settings..." msgstr "設定(&S)..." msgid "&Update status bar icons" -msgstr "ステータスバーのアイコンを更新する(&U)" +msgstr "ステータスバーのアイコンを更新(&U)" msgid "Take s&creenshot\tCtrl+F11" msgstr "スクリーンショットを撮る(&C)\tCtrl+F11" @@ -167,10 +170,10 @@ msgid "&Preferences..." msgstr "環境設定(&P)..." msgid "Enable &Discord integration" -msgstr "Discordとの連携を可能にする(&D)" +msgstr "Discordとの連携機能(&D)" msgid "Sound &gain..." -msgstr "音量ゲイン(&G)..." +msgstr "音量を調節(&G)..." msgid "Begin trace\tCtrl+T" msgstr "トレース開始\tCtrl+T" @@ -182,31 +185,31 @@ msgid "&Logging" msgstr "ログ(&L)" msgid "Enable BusLogic logs\tCtrl+F4" -msgstr "BusLogicのログを有効にする\tCtrl+F4" +msgstr "BusLogicのログを有効\tCtrl+F4" msgid "Enable CD-ROM logs\tCtrl+F5" -msgstr "CD-ROMのログを有効にする\tCtrl+F5" +msgstr "CD-ROMのログを有効\tCtrl+F5" msgid "Enable floppy (86F) logs\tCtrl+F6" -msgstr "フロッピー(86F)のログを有効にする\tCtrl+F6" +msgstr "フロッピー(86F)のログを有効\tCtrl+F6" msgid "Enable floppy controller logs\tCtrl+F7" -msgstr "フロッピーコントローラーのログを有効にする\tCtrl+F7" +msgstr "フロッピーコントローラーのログを有効\tCtrl+F7" msgid "Enable IDE logs\tCtrl+F8" -msgstr "IDEのログを有効にする\tCtrl+F8" +msgstr "IDEのログを有効\tCtrl+F8" msgid "Enable Serial Port logs\tCtrl+F3" -msgstr "シリアルポートのログを有効にする\tCtrl+F3" +msgstr "シリアルポートのログを有効\tCtrl+F3" msgid "Enable Network logs\tCtrl+F9" -msgstr "ネットワークのログを有効にする\tCtrl+F9" +msgstr "ネットワークのログを有効\tCtrl+F9" msgid "&Log breakpoint\tCtrl+F10" -msgstr "ブレークポイントのログを有効にする(&L)\tCtrl+F10" +msgstr "ブレークポイントのログを有効(&L)\tCtrl+F10" msgid "Dump &video RAM\tCtrl+F1" -msgstr "ビデオRAMのダンプを有効にする(&V)\tCtrl+F1" +msgstr "ビデオRAMのダンプを有効(&V)\tCtrl+F1" msgid "&Help" msgstr "ヘルプ(&H)" @@ -215,28 +218,28 @@ msgid "&Documentation..." msgstr "ドキュメント(&D)..." msgid "&About 86Box..." -msgstr "86Boxについて(&A)..." +msgstr "86Boxのバージョン情報(&A)..." msgid "&New image..." -msgstr "新規のイメージ(&N)..." +msgstr "新規イメージ(&N)..." msgid "&Existing image..." -msgstr "既存のイメージ(&E)..." +msgstr "既存のイメージを開く(&E)..." msgid "Existing image (&Write-protected)..." -msgstr "既存のイメージ(ライトプロテクト付き) (&W)..." +msgstr "既存のイメージを開く(書き込み保護)(&W)..." msgid "&Record" -msgstr "録音する(&R)" +msgstr "録音(&R)" msgid "&Play" -msgstr "再生する(&P)" +msgstr "再生(&P)" msgid "&Rewind to the beginning" msgstr "冒頭に巻き戻す(&R)" msgid "&Fast forward to the end" -msgstr "最後まで早送りする(&F)" +msgstr "最後まで早送り(&F)" msgid "E&ject" msgstr "取り出す(&J)" @@ -245,7 +248,7 @@ msgid "&Image..." msgstr "イメージ(&I)..." msgid "E&xport to 86F..." -msgstr "86Fへのエクスポート(&X)..." +msgstr "86Fイメージにエクスポート(&X)..." msgid "&Mute" msgstr "ミュート(&M)" @@ -254,7 +257,7 @@ msgid "E&mpty" msgstr "空(&M)" msgid "&Reload previous image" -msgstr "前のイメージを再読み込み (&R)" +msgstr "前のイメージを再読み込み(&R)" msgid "&Image" msgstr "イメージ(&I)" @@ -263,7 +266,7 @@ msgid "Target &framerate" msgstr "目標フレームレート(&F)" msgid "&Sync with video" -msgstr "ビデオとの同期(&S)" +msgstr "ビデオと同期(&S)" msgid "&25 fps" msgstr "25 fps(&2)" @@ -281,13 +284,13 @@ msgid "&75 fps" msgstr "75 fps(&7)" msgid "&VSync" -msgstr "VSync(&V)" +msgstr "垂直同期(VSync)(&V)" msgid "&Select shader..." -msgstr "シェーダの選択(&S)..." +msgstr "シェーダーを選択(&S)..." msgid "&Remove shader" -msgstr "シェーダの削除(&R)" +msgstr "シェーダーを削除(&R)" msgid "Preferences" msgstr "環境設定" @@ -329,13 +332,13 @@ msgid "File name:" msgstr "ファイル名:" msgid "Disk size:" -msgstr "ディスクの容量:" +msgstr "ディスクサイズ:" msgid "RPM mode:" -msgstr "RPMモード:" +msgstr "回転数モード:" msgid "Progress:" -msgstr "進行:" +msgstr "進行状況:" msgid "Width:" msgstr "幅:" @@ -374,19 +377,19 @@ msgid "Memory:" msgstr "メモリ:" msgid "Time synchronization" -msgstr "時刻同期化" +msgstr "時刻同期機能" msgid "Disabled" -msgstr "使用しない" +msgstr "無効にする" msgid "Enabled (local time)" -msgstr "使用する (現地時間)" +msgstr "有効にする (現地時間)" msgid "Enabled (UTC)" -msgstr "使用する (UTC)" +msgstr "有効にする (UTC)" msgid "Dynamic Recompiler" -msgstr "動的再コンパイル" +msgstr "動的リコンパイラ" msgid "Video:" msgstr "ビデオカード:" @@ -422,7 +425,7 @@ msgid "MIDI In Device:" msgstr "MIDI入力デバイス:" msgid "Standalone MPU-401" -msgstr "MPU-401を単独使用" +msgstr "独立型MPU-401" msgid "Innovation SSI-2001" msgstr "Innovation SSI-2001" @@ -434,7 +437,7 @@ msgid "Gravis Ultrasound" msgstr "Gravis Ultrasound" msgid "Use FLOAT32 sound" -msgstr "FLOAT32サウンドを使用" +msgstr "FLOAT32サウンドを使用する" msgid "Network type:" msgstr "ネットワークタイプ:" @@ -443,7 +446,7 @@ msgid "PCap device:" msgstr "PCapデバイス:" msgid "Network adapter:" -msgstr "ネットワークカード:" +msgstr "ネットワークアダプター:" msgid "LPT1 Device:" msgstr "LPT1デバイス:" @@ -539,10 +542,10 @@ msgid "Cylinders:" msgstr "シリンダー:" msgid "Size (MB):" -msgstr "容量(MB):" +msgstr "サイズ(MB):" msgid "Type:" -msgstr "形式:" +msgstr "タイプ:" msgid "Image Format:" msgstr "イメージ形式:" @@ -623,7 +626,7 @@ msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" msgstr "ZIPイメージ (*.IM? *.im? *.ZDI *.zdi)" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "86Boxで使用可能なROMイメージが見つかりませんでした。\n\nROMセットをダウンロードして、《roms》ディレクトリに解凍してください。" +msgstr "86Boxで使用可能なROMイメージが見つかりませんでした。\n\nROMセットをダウンロードして、「roms」ディレクトリに解凍してください。" msgid "(empty)" msgstr "(空)" @@ -644,10 +647,10 @@ msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd? msgstr "すべてのイメージ (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;基本的なセクターイメージ (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;表面イメージ (*.86F *.86f)" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "roms/machinesディレクトリにROMがないため、マシン《%hs》は使用できません。使用可能なマシンに切り替えます。" +msgstr "roms/machinesディレクトリにROMがないため、マシン「%hs」は使用できません。使用可能なマシンに切り替えます。" msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "roms/videoディレクトリにROMがないため、ビデオカード《%hs》は使用できません。使用可能なビデオカードに切り替えます。" +msgstr "roms/videoディレクトリにROMがないため、ビデオカード「%hs」は使用できません。使用可能なビデオカードに切り替えます。" msgid "Machine" msgstr "マシン" @@ -680,19 +683,19 @@ msgid "Other removable devices" msgstr "その他のリムーバブルデバイス" msgid "Other peripherals" -msgstr "その他の周辺機器" +msgstr "その他の周辺装置" msgid "Surface images (*.86F *.86f)" msgstr "表面イメージ (*.86F *.86f)" msgid "Click to capture mouse" -msgstr "クリックするとマウスを直接入力します" +msgstr "クリックするとマウスをキャプチャします" msgid "Press F8+F12 to release mouse" -msgstr "F12+F8キーでマウスの直接入力を解除します" +msgstr "F8+F12キーでマウスを解放します" msgid "Press F8+F12 or middle button to release mouse" -msgstr "F12+F8キーまたは中クリックでマウスの直接入力を解除します" +msgstr "F8+F12キーまたは中ボタンでマウスを解放します" msgid "Unable to initialize FluidSynth" msgstr "FluidSynthが初期化できません" @@ -725,7 +728,7 @@ msgid "%i Wait state(s)" msgstr "%iつの待機状態" msgid "Type" -msgstr "形式" +msgstr "タイプ" msgid "Failed to set up PCap" msgstr "PCapのセットアップに失敗しました" @@ -737,16 +740,16 @@ msgid "Invalid PCap device" msgstr "不正なPCapデバイスです" msgid "Standard 2-button joystick(s)" -msgstr "標準2ボタンジョイスティック" +msgstr "標準ジョイスティック(2ボタン)" msgid "Standard 4-button joystick" -msgstr "標準4ボタンジョイスティック" +msgstr "標準ジョイスティック(4ボタン)" msgid "Standard 6-button joystick" -msgstr "標準6ボタンジョイスティック" +msgstr "標準ジョイスティック(6ボタン)" msgid "Standard 8-button joystick" -msgstr "標準8ボタンジョイスティック" +msgstr "標準ジョイスティック(8ボタン)" msgid "CH Flightstick Pro" msgstr "CH Flightstick Pro" @@ -761,10 +764,10 @@ msgid "None" msgstr "なし" msgid "Unable to load keyboard accelerators." -msgstr "キーボードアクセラレーターを読み込めません。" +msgstr "キーボードアクセラレータを読み込めません。" msgid "Unable to register raw input." -msgstr "Raw入力が登録できません。" +msgstr "生の入力が登録できません。" msgid "%u" msgstr "%u" @@ -785,7 +788,7 @@ msgid "Unable to initialize SDL, SDL2.dll is required" msgstr "SDLが初期化できません。SDL2.dllが必要です" msgid "Are you sure you want to hard reset the emulated machine?" -msgstr "起動中のマシンを再起動しますか?" +msgstr "使用中のマシンをハードリセットしますか?" msgid "Are you sure you want to exit 86Box?" msgstr "86Boxを終了しますか?" @@ -800,10 +803,10 @@ msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" msgstr "光磁気イメージ (*.IM? *.im? *.MDI *.mdi);;すべてのファイル (*)" msgid "Welcome to 86Box!" -msgstr "86Boxへようこそ!" +msgstr "86Boxへようこそ!" msgid "Internal controller" -msgstr "内部のコントローラー" +msgstr "内蔵コントローラー" msgid "Exit" msgstr "終了" @@ -815,19 +818,19 @@ msgid "Do you want to save the settings?" msgstr "設定を保存しますか?" msgid "This will hard reset the emulated machine." -msgstr "保存すると使用中のマシンが再起動されます。" +msgstr "保存すると使用中のマシンがハードリセットされます。" msgid "Save" msgstr "保存" msgid "About 86Box" -msgstr "86Boxについて" +msgstr "86Boxのバージョン情報" msgid "86Box v" msgstr "86Box v" msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "古いコンピュータのエミュレータ\n\n著者: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nGNU General Public License version 2以降でリリースされています。詳しくは LICENSE をご覧ください。" +msgstr "古いパソコンのエミュレーター\n\n著者: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nGNU General Public License version 2以降でリリースされています。詳しくは LICENSE をご覧ください。" msgid "Hardware not available" msgstr "ハードウェアが利用できません" @@ -860,7 +863,7 @@ msgid "libgs" msgstr "libgs" msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." -msgstr "はPostScriptファイルをPDFに自動変換させる為に必要です。\n\n汎用PostScriptプリンターに送った任意のドキュメントはPostScript(.ps)ファイルとして保存されます。" +msgstr "PostScriptファイルをPDFに自動変換するにはlibgsが必要です。\n\n汎用PostScriptプリンターに送信されたドキュメントは、PostScript(.ps)ファイルとして保存されます。" msgid "libfluidsynth.dll" msgstr "libfluidsynth.dll" @@ -872,10 +875,10 @@ msgid " is required for FluidSynth MIDI output." msgstr "FluidSynthのMIDI出力にはlibfluidsynthが必要です。" msgid "Entering fullscreen mode" -msgstr "フルスクリーンモードに転換します" +msgstr "フルスクリーンに切り替えています" msgid "Don't show this message again" -msgstr "今後このメッセージを表示しない" +msgstr "今後、このメッセージを表示しない" msgid "Don't exit" msgstr "終了しない" @@ -899,7 +902,7 @@ msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" msgstr "OpenGLシェーダー (*.GLSL *.glsl);;すべてのファイル (*)" msgid "OpenGL options" -msgstr "OpenGLの設定" +msgstr "OpenGL設定" msgid "You are loading an unsupported configuration" msgstr "サポートされていない設定を読み込んでいます" @@ -908,7 +911,7 @@ msgid "CPU type filtering based on selected machine is disabled for this emulate msgstr "選択したマシンに基づくCPUタイプのフィルタリングは、このエミュレートされたマシンでは無効になっています。\n\nこれにより、選択したマシンと互換性のないCPUが選択できます。ただし、マシンのBIOSまたは他のソフトウェアとの互換性が失われる可能性があります。\n\nこの設定の有効化は公式サポートができません。また、バグレポートが無効として閉じられる場合があります。" msgid "Continue" -msgstr "つづく" +msgstr "続行" msgid "Cassette: %s" msgstr "カセット: %s" @@ -926,7 +929,25 @@ msgid "Error initializing renderer" msgstr "レンダラーの初期化エラー" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "OpenGL(3.0コア)レンダラーが初期化できませんでした。別のレンダラーを使用してください。" +msgstr "OpenGL (3.0コア) レンダラーが初期化できませんでした。別のレンダラーを使用してください。" + +msgid "Resume execution" +msgstr "実行を再開" + +msgid "Pause execution" +msgstr "実行を一時停止" + +msgid "Press Ctrl+Alt+Del" +msgstr "Ctrl+Alt+DELを押し" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Ctrl+Alt+Escを押し" + +msgid "Hard reset" +msgstr "ハードリセット" + +msgid "ACPI shutdown" +msgstr "ACPIシャットダウン" msgid "Hard disk (%s)" msgstr "ハードディスク (%s)" @@ -944,7 +965,7 @@ msgid "Custom..." msgstr "カスタム..." msgid "Custom (large)..." -msgstr "カスタム(大)..." +msgstr "カスタム (大型)..." msgid "Add New Hard Disk" msgstr "新規のディスクを追加" @@ -953,10 +974,10 @@ msgid "Add Existing Hard Disk" msgstr "既定のディスクを追加" msgid "HDI disk images cannot be larger than 4 GB." -msgstr "HDIのディスクイメージは4GB以上にはできません。" +msgstr "HDIディスクイメージは4GBを超えることはできません。" msgid "Disk images cannot be larger than 127 GB." -msgstr "ディスクイメージは127GB以上にはできません。" +msgstr "ディスクイメージは127GBを超えることはできません。" msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" msgstr "ハードディスクイメージ (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;すべてのファイル (*)" @@ -968,10 +989,10 @@ msgid "Unable to write file" msgstr "ファイルの書き込みができません" msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "512バイト以外のセクターサイズを持ったHDIまたはHDX形式のイメージはサポートしません。" +msgstr "512以外のセクタサイズを持つHDIまたはHDXイメージはサポートされていません。" msgid "USB is not yet supported" -msgstr "USBはまだサポートしません" +msgstr "USBはまだサポートされていません" msgid "Disk image file already exists" msgstr "ディスクイメージファイルが既に存在します" @@ -983,19 +1004,19 @@ msgid "Disk image created" msgstr "ディスクイメージが作成されました" msgid "Make sure the file exists and is readable." -msgstr "ファイルが存在し、読み取り可能であることを確認します。" +msgstr "ファイルが存在し、読み取り可能であることを確認してください。" msgid "Make sure the file is being saved to a writable directory." msgstr "ファイルが書き込み可能なディレクトリに保存されていることを確認してください。" msgid "Disk image too large" -msgstr "ディスクイメージが大きすぎます" +msgstr "ディスクイメージのサイズが大きすぎます" msgid "Remember to partition and format the newly-created drive." -msgstr "新規ディスクのパーティション設定とフォーマットを必ずしといてください。" +msgstr "新規ドライブをパーティション分割し、フォーマットを必ずしといてください。" msgid "The selected file will be overwritten. Are you sure you want to use it?" -msgstr "選択したファイルは上書きされます。使っていいですか?" +msgstr "選択したファイルが上書きされます。使っていいですか?" msgid "Unsupported disk image" msgstr "サポートされていないディスクイメージ" @@ -1016,13 +1037,13 @@ msgid "HDX image (.hdx)" msgstr "HDXイメージ (.hdx)" msgid "Fixed-size VHD (.vhd)" -msgstr "固定サイズのVHD (.vhd)" +msgstr "VHD(容量固定)(.vhd)" msgid "Dynamic-size VHD (.vhd)" -msgstr "ダイナミックサイズのVHD (.vhd)" +msgstr "VHD(容量可変)(.vhd)" msgid "Differencing VHD (.vhd)" -msgstr "ディファレンシングVHD (.vhd)" +msgstr "VHD(差分)(.vhd)" msgid "Large blocks (2 MB)" msgstr "大型ブロック (2 MB)" diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index 4d9baeaa4..8999a95e9 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -31,6 +31,9 @@ msgstr "표시(&V)" msgid "&Hide status bar" msgstr "상태 바 숨기기(&H)" +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + msgid "&Resizeable window" msgstr "창 크기 조절 가능하게 하기(&R)" @@ -928,6 +931,24 @@ msgstr "Error initializing renderer" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + msgid "Hard disk (%s)" msgstr "하드 디스크 (%s)" diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po new file mode 100644 index 000000000..22fc4526e --- /dev/null +++ b/src/qt/languages/pl-PL.po @@ -0,0 +1,1191 @@ +msgid "Translated by" +msgstr "Unknown" + +msgid "&Action" +msgstr "&Akcje" + +msgid "&Keyboard requires capture" +msgstr "&Klawaitura wymaga przechwytu myszy" + +msgid "&Right CTRL is left ALT" +msgstr "&Prawy CTRL to lewy Alt" + +msgid "&Hard Reset..." +msgstr "&Twardy reset..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Pauza" + +msgid "E&xit..." +msgstr "W&yjdź..." + +msgid "&View" +msgstr "&Widok" + +msgid "&Hide status bar" +msgstr "&Ukryj pasek statusu" + +msgid "Hide &toolbar" +msgstr "Ukryj &pasek narzędzi" + +msgid "&Resizeable window" +msgstr "&Okno o zmiennym rozmiarze" + +msgid "R&emember size && position" +msgstr "P&amiętaj rozmiar &i pozycję" + +msgid "Re&nderer" +msgstr "Re&nderer" + +msgid "&SDL (Software)" +msgstr "&SDL (Software)" + +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardware)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 Core)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "Określ rozmiary..." + +msgid "F&orce 4:3 display ratio" +msgstr "&Wymuś proporcje wyświetlania 4:3" + +msgid "&Window scale factor" +msgstr "&Czynnik skalowania okna" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Metoda filtrowania" + +msgid "&Nearest" +msgstr "&Nearest" + +msgid "&Linear" +msgstr "&Linear" + +msgid "Hi&DPI scaling" +msgstr "Skalowanie Hi&DPI" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Pełny ekran\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Fullscreen &stretch mode" + +msgid "&Full screen stretch" +msgstr "&Tryb rozciągania na pełnym ekranie" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Kwadratowe piksele (Zachowaj proporcje)" + +msgid "&Integer scale" +msgstr "&Skalowanie całkowite" + +msgid "E&GA/(S)VGA settings" +msgstr "Ustawienia E&GA/(S)VGA" + +msgid "&Inverted VGA monitor" +msgstr "&Odwrócony monitor VGA" + +msgid "VGA screen &type" +msgstr "Rodzaj ekranu &VGA" + +msgid "RGB &Color" +msgstr "RGB - &Kolorowy" + +msgid "&RGB Grayscale" +msgstr "&RGB - Skala szarości" + +msgid "&Amber monitor" +msgstr "&Bursztynowy monitor" + +msgid "&Green monitor" +msgstr "&Zielony monitor" + +msgid "&White monitor" +msgstr "&Biały monitor" + +msgid "Grayscale &conversion type" +msgstr "Typ konwersji &w skali szarości" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Średni" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "Overscan dla CGA/PCjr/Tandy/E&GA/(S)VGA" + +msgid "Change contrast for &monochrome display" +msgstr "Zmień kontrast dla &monochromatycznego ekranu" + +msgid "&Media" +msgstr "&Nośnik" + +msgid "&Tools" +msgstr "&Narzędzia" + +msgid "&Settings..." +msgstr "&Ustawienia..." + +msgid "&Update status bar icons" +msgstr "&Aktualizuj ikony na pasku statusu" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Zrób &zrzut ekranu\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Preferencje..." + +msgid "Enable &Discord integration" +msgstr "Włącz integrację z &Discord" + +msgid "Sound &gain..." +msgstr "Wzmocnienie &dźwięku..." + +msgid "Begin trace\tCtrl+T" +msgstr "Rozpocznij śledzenie\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Zakończ śledzenie\tCtrl+T" + +msgid "&Logging" +msgstr "&Logowanie" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Włącz logu BusLogic\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Włącz logi CD-ROM\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Włącz logi dyskietek (86F)\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Włącz logi kontrolera dyskietek\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Włącz logi IDE\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Włącz logi portu szeregowego\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Włącz logi sieci\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Punkt przerwania dziennika\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "Zrzuć pamięć &wideo\tCtrl+F1" + +msgid "&Help" +msgstr "&Pomoc" + +msgid "&Documentation..." +msgstr "&Dokumentacja..." + +msgid "&About 86Box..." +msgstr "&O 86Box..." + +msgid "&New image..." +msgstr "&Nowy obraz..." + +msgid "&Existing image..." +msgstr "&Istniejący obraz..." + +msgid "Existing image (&Write-protected)..." +msgstr "Istniejący obraz (&Chroniony przed zapisem)..." + +msgid "&Record" +msgstr "&Nagraj" + +msgid "&Play" +msgstr "&Odtwórz" + +msgid "&Rewind to the beginning" +msgstr "&Przewiń do początku" + +msgid "&Fast forward to the end" +msgstr "&Przewiń do końca" + +msgid "E&ject" +msgstr "W&yjmij" + +msgid "&Image..." +msgstr "&Obraz..." + +msgid "E&xport to 86F..." +msgstr "E&ksportuj do 86F..." + +msgid "&Mute" +msgstr "&Ścisz" + +msgid "E&mpty" +msgstr "P&usty" + +msgid "&Reload previous image" +msgstr "&Przeładuj poprzedni obraz" + +msgid "&Image" +msgstr "&Obraz" + +msgid "Target &framerate" +msgstr "Docelowa &liczba klatek na sekundę" + +msgid "&Sync with video" +msgstr "&Zsynchronizuj z wideo" + +msgid "&25 fps" +msgstr "&25 fps" + +msgid "&30 fps" +msgstr "&30 fps" + +msgid "&50 fps" +msgstr "&50 fps" + +msgid "&60 fps" +msgstr "&60 fps" + +msgid "&75 fps" +msgstr "&75 fps" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Wybierz shader..." + +msgid "&Remove shader" +msgstr "&Usuń shader" + +msgid "Preferences" +msgstr "Preferencje" + +msgid "Sound Gain" +msgstr "Wzmocnienie dźwięku" + +msgid "New Image" +msgstr "Nowy obraz" + +msgid "Settings" +msgstr "Ustawienia" + +msgid "Specify Main Window Dimensions" +msgstr "Określ rozmiary okna" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Anuluj" + +msgid "Save these settings as &global defaults" +msgstr "Zapisz ustawienia jako &globalne ustawienia domyślne" + +msgid "&Default" +msgstr "&Domyślny" + +msgid "Language:" +msgstr "Język:" + +msgid "Icon set:" +msgstr "Zestaw ikon:" + +msgid "Gain" +msgstr "Wzmacniacz" + +msgid "File name:" +msgstr "Nazwa pliku:" + +msgid "Disk size:" +msgstr "Rozmiar dysku:" + +msgid "RPM mode:" +msgstr "Tryb RPM:" + +msgid "Progress:" +msgstr "Postęp:" + +msgid "Width:" +msgstr "Szerokość:" + +msgid "Height:" +msgstr "Wysokość:" + +msgid "Lock to this size" +msgstr "Stały rozmiar" + +msgid "Machine type:" +msgstr "Rodzaj maszyny:" + +msgid "Machine:" +msgstr "Maszyna:" + +msgid "Configure" +msgstr "Konfiguruj" + +msgid "CPU type:" +msgstr "Rodzaj procesora:" + +msgid "Speed:" +msgstr "Szybkość:" + +msgid "FPU:" +msgstr "Jednostka FPU:" + +msgid "Wait states:" +msgstr "Stany oczekiwania:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Pamięć:" + +msgid "Time synchronization" +msgstr "Synchronizacja czasu" + +msgid "Disabled" +msgstr "Wyłączona" + +msgid "Enabled (local time)" +msgstr "Włączona (czas lokalny)" + +msgid "Enabled (UTC)" +msgstr "Włączona (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Dynamiczny rekompilator" + +msgid "Video:" +msgstr "Wideo:" + +msgid "Voodoo Graphics" +msgstr "Grafika Voodoo" + +msgid "Mouse:" +msgstr "Mysz:" + +msgid "Joystick:" +msgstr "Joystick:" + +msgid "Joystick 1..." +msgstr "Joystick 1..." + +msgid "Joystick 2..." +msgstr "Joystick 2..." + +msgid "Joystick 3..." +msgstr "Joystick 3..." + +msgid "Joystick 4..." +msgstr "Joystick 4..." + +msgid "Sound card:" +msgstr "Karta dźwiękowa:" + +msgid "MIDI Out Device:" +msgstr "Urządzenie wyjściowe MIDI:" + +msgid "MIDI In Device:" +msgstr "Urządzenie wejściowe MIDI:" + +msgid "Standalone MPU-401" +msgstr "Samodzielne urządzenie MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Użyj dźwięku FLOAT32" + +msgid "Network type:" +msgstr "Rodzaj sieci:" + +msgid "PCap device:" +msgstr "Urządzenie PCap:" + +msgid "Network adapter:" +msgstr "Karta sieciowa:" + +msgid "LPT1 Device:" +msgstr "Urządzenie LPT1:" + +msgid "LPT2 Device:" +msgstr "Urządzenie LPT2:" + +msgid "LPT3 Device:" +msgstr "Urządzenie LPT3:" + +msgid "Serial port 1" +msgstr "Port szeregowy 1" + +msgid "Serial port 2" +msgstr "Port szeregowy 2" + +msgid "Serial port 3" +msgstr "Port szeregowy 3" + +msgid "Serial port 4" +msgstr "Port Szeregowy 4" + +msgid "Parallel port 1" +msgstr "Port równoległy 1" + +msgid "Parallel port 2" +msgstr "Port równoległy 2" + +msgid "Parallel port 3" +msgstr "Port równoległy 3" + +msgid "HD Controller:" +msgstr "Kontroler dysku twardego:" + +msgid "FD Controller:" +msgstr "Kontroler dyskietek:" + +msgid "Tertiary IDE Controller" +msgstr "Trzeciorzędowy kontroler IDE" + +msgid "Quaternary IDE Controller" +msgstr "Czwartorzędowy kontroler IDE" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Kontroler 1:" + +msgid "Controller 2:" +msgstr "Kontroler 2:" + +msgid "Controller 3:" +msgstr "Kontroler 3:" + +msgid "Controller 4:" +msgstr "Kontroler 4:" + +msgid "Cassette" +msgstr "Kaseta" + +msgid "Hard disks:" +msgstr "Dyski twarde:" + +msgid "&New..." +msgstr "&Nowy..." + +msgid "&Existing..." +msgstr "&Istniejący..." + +msgid "&Remove" +msgstr "&Usuń" + +msgid "Bus:" +msgstr "Magistrala:" + +msgid "Channel:" +msgstr "Kanał:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Określ..." + +msgid "Sectors:" +msgstr "Sektory:" + +msgid "Heads:" +msgstr "Głowice:" + +msgid "Cylinders:" +msgstr "Cylindry:" + +msgid "Size (MB):" +msgstr "Rozmiar (MB):" + +msgid "Type:" +msgstr "Rodzaj:" + +msgid "Image Format:" +msgstr "Format obrazu:" + +msgid "Block Size:" +msgstr "Rozmiar bloku:" + +msgid "Floppy drives:" +msgstr "Napędy dyskietek:" + +msgid "Turbo timings" +msgstr "Rozrządy Turbo" + +msgid "Check BPB" +msgstr "Sprawdzaj BPB" + +msgid "CD-ROM drives:" +msgstr "Napędy CD-ROM:" + +msgid "MO drives:" +msgstr "Napędy MO:" + +msgid "ZIP drives:" +msgstr "Napędy ZIP:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA RTC:" + +msgid "ISA Memory Expansion" +msgstr "Rozszerzenie pamięci ISA" + +msgid "Card 1:" +msgstr "Karta 1:" + +msgid "Card 2:" +msgstr "Karta 2:" + +msgid "Card 3:" +msgstr "Karta 3:" + +msgid "Card 4:" +msgstr "Karta 4:" + +msgid "ISABugger device" +msgstr "Urządzenie ISABugger" + +msgid "POST card" +msgstr "Karta POST" + +msgid "Segoe UI" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Błąd" + +msgid "Fatal error" +msgstr "Fatalny błąd" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Naciśnij klawisze CTRL+ALT+PAGE DOWN aby wrócić to trybu okna." + +msgid "Speed" +msgstr "Szybkość" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgstr "Obrazy ZIP (*.IM? *.im? *.ZDI *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box nie może znaleźć obrazów ROM nadających się do użytku.\n\nProszę pobrać zestaw obrazów ROM ze strony download, i rozpakować je do katalogu \"roms\"." + +msgid "(empty)" +msgstr "(pusty)" + +msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" +msgstr "Obrazy ZIP (*.IM? *.im? *.ZDI *.zdi);;Wszystkie pliki (*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Włącz" + +msgid "Off" +msgstr "Wyłącz" + +msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" +msgstr "Wszystkie obrazy (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Podstawowe obrazy sektorów(*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Obrazy powierzchniowe (*.86F *.86f)" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Maszyna \"%hs\" nie jest dostępna, ponieważ brakuje obrazów ROM w katalogu roms/machines. Przełączanie na dostępną maszynę." + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Karta wideo \"%hs\" nie jest dostępna, ponieważ brakuje obrazów ROM w katalogu roms/video. Przełączanie na dostępną kartę wideo." + +msgid "Machine" +msgstr "Maszyna" + +msgid "Display" +msgstr "Ekran" + +msgid "Input devices" +msgstr "Urządzenia wejściowe" + +msgid "Sound" +msgstr "Dźwięk" + +msgid "Network" +msgstr "Sieć" + +msgid "Ports (COM & LPT)" +msgstr "Porty (COM & LPT)" + +msgid "Storage controllers" +msgstr "Kontrolery pamięci" + +msgid "Hard disks" +msgstr "Dyski twarde" + +msgid "Floppy & CD-ROM drives" +msgstr "Napędy dyskietek i CD-ROM" + +msgid "Other removable devices" +msgstr "Inne urządzenia wymienne" + +msgid "Other peripherals" +msgstr "Inne urządzenia peryferyjne" + +msgid "Surface images (*.86F *.86f)" +msgstr "Obrazy powierzchniowe (*.86F *.86f)" + +msgid "Click to capture mouse" +msgstr "Kliknij w celu przechwycenia myszy" + +msgid "Press F8+F12 to release mouse" +msgstr "Naciśnij klawisze F8+F12 w celu uwolnienia myszy" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Naciśnij klawisze F8+F12 lub środkowy przycisk w celu uwolnienia myszy" + +msgid "Unable to initialize FluidSynth" +msgstr "Nie można zainicjować FluidSynth" + +msgid "Bus" +msgstr "Magistrala" + +msgid "File" +msgstr "Plik" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Nie można zainicjować renderera wideo." + +msgid "Default" +msgstr "Domyślny" + +msgid "%i Wait state(s)" +msgstr "%i Stany oczekiwania" + +msgid "Type" +msgstr "Rodzaj" + +msgid "Failed to set up PCap" +msgstr "Nie udało się ustawić PCap" + +msgid "No PCap devices found" +msgstr "Nie znaleziono urządzeń PCap" + +msgid "Invalid PCap device" +msgstr "Nieprawidłowe urządzenie PCap" + +msgid "Standard 2-button joystick(s)" +msgstr "Standardowe joysticki 2-przyciskowe" + +msgid "Standard 4-button joystick" +msgstr "Standardowy joystick 4-przyciskowy" + +msgid "Standard 6-button joystick" +msgstr "Standardowy joystick 6-przyciskowy" + +msgid "Standard 8-button joystick" +msgstr "Standardowy joystick 8-przyciskowy" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Żaden" + +msgid "Unable to load keyboard accelerators." +msgstr "Nie można załadować akceleratorów klawiaturowych." + +msgid "Unable to register raw input." +msgstr "Nie można zarejestrować surowych danych wejściowych." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Dyskietka %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgstr "Wszystkie obrazy (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Zaawansowane obrazy sektorów (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Podstawowe obrazy sektorów (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Obrazy powierzchniowe (*.86F *.86f *.MFM *.mfm);;All files (*)" + +msgid "Unable to initialize FreeType" +msgstr "Nie można zainicjować FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Nie można zainicjować SDL, wymagany SDL2.dll" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Jesteś pewien że chcesz wykonać twardy reset emulowanej maszyny?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Jesteś pewien że chcesz zakończyć 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Nie można zainicjować Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgstr "Obrazy MO (*.IM? *.im? *.MDI *.mdi);;All files (*)" + +msgid "Welcome to 86Box!" +msgstr "Witamy w 86Box!" + +msgid "Internal controller" +msgstr "Kontroler wewnętrzny" + +msgid "Exit" +msgstr "Zakończ" + +msgid "No ROMs found" +msgstr "Nie znaleziono obrazów ROM" + +msgid "Do you want to save the settings?" +msgstr "Czy chcesz zapisać ustawienia?" + +msgid "This will hard reset the emulated machine." +msgstr "To spowoduje twardy reset wirtualnej maszyny." + +msgid "Save" +msgstr "Zapisz" + +msgid "About 86Box" +msgstr "O 86Box" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Emulator starych komputerów\n\nAutorzy: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, i inni.\n\nPrzetłumaczony przez: Fanta-Shokata\n\nWydany na licencji GNU General Public License w wersji 2 lub nowszej. Zobacz LICENSE aby uzyskać więcej informacji." + +msgid "Hardware not available" +msgstr "Sprzęt niedostępny" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Sprawdź, czy libpcap jest zainstalowany i czy posiadasz połączenie sieciowe kompatybilne z libpcap." + +msgid "Invalid configuration" +msgstr "Nieprawidłowa konfiguracja" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " jest wymagany do emulacji drukarki ESC-P." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " jest wymagany do automatycznej konwersji plików PostScript do PDF.\n\nDokumenty wysłane do ogólnej drukarki PostScript zostaną zapisane jako pliki PostScript (.ps)." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " jest wymagany dla wyjścia FluidSynth MIDI." + +msgid "Entering fullscreen mode" +msgstr "Przechodzenie do trybu pełnoekranowego" + +msgid "Don't show this message again" +msgstr "Nie pokazuj więcej tego komunikatu" + +msgid "Don't exit" +msgstr "Nie kończ" + +msgid "Reset" +msgstr "Przywróć" + +msgid "Don't reset" +msgstr "Nie przywracaj" + +msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgstr "Obrazy CD-ROM (*.ISO *.iso *.CUE *.cue);;All files (*)" + +msgid "%hs Device Configuration" +msgstr "Konfiguracja urządzenia %hs" + +msgid "Monitor in sleep mode" +msgstr "Monitor w trybie czuwania" + +msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" +msgstr "Shadery OpenGL (*.GLSL *.glsl);;Wszystkie pliki (*)" + +msgid "OpenGL options" +msgstr "Opcje OpenGL" + +msgid "You are loading an unsupported configuration" +msgstr "Ładujesz nieobsługiwaną konfigurację" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "Wybór rodzaju procesora oparty na wybranej maszynie jest wyłączony dla tej emulowanej maszyny.\n\nPozwala to na wybór procesora który jest niekompatybilny z wybraną maszyną. Jednak możesz napotkać niezgodności z BIOS-em maszyny lub innym oprogramowaniem.\n\nAktywacja tego ustawienia nie jest wspierana i każde zgłoszenie błędu może zostać zamknięte jako nieważne." + +msgid "Continue" +msgstr "Kontynuuj" + +msgid "Cassette: %s" +msgstr "Kaseta: %s" + +msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" +msgstr "Obrazy kaset (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Wszystkie pliki (*)" + +msgid "Cartridge %i: %ls" +msgstr "Kartrydż %i: %ls" + +msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" +msgstr "Obrazy kartrydżu (*.A *.a *.B *.b *.JRC *.jrc);;Wszystkie pliki (*)" + +msgid "Error initializing renderer" +msgstr "Błąd inicjalizacji renderera" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "Nie można zainicjować renderera OpenGL (3.0 Core). Użyj innego." + +msgid "Resume execution" +msgstr "Wznów wykonywanie" + +msgid "Pause execution" +msgstr "Zatrzymaj wykonywanie" + +msgid "Press Ctrl+Alt+Del" +msgstr "Naciśnij Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Naciśnij Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Twardy reset" + +msgid "ACPI shutdown" +msgstr "Wyłączenie ACPI" + +msgid "Hard disk (%s)" +msgstr "Dysk twardy (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "Napędy CD-ROM MFM/RLL lub ESDI nigdy nie istniały" + +msgid "Custom..." +msgstr "Niestandardowy..." + +msgid "Custom (large)..." +msgstr "Niestandardowy (duży)..." + +msgid "Add New Hard Disk" +msgstr "Dodaj nowy dysk twardy" + +msgid "Add Existing Hard Disk" +msgstr "Dodaj istniejący dysk twardy" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "Obrazy dysków HDI nie mogą być większe niż 4 GB." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Obrazy dysków nie mogą być większe niż 127 GB." + +msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" +msgstr "Obrazy dysku twardego (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Wszystkie pliki (*)" + +msgid "Unable to read file" +msgstr "Nie można odczytać pliku" + +msgid "Unable to write file" +msgstr "Nie można zapisać pliku" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "Obrazy HDI lub HDX z rozmiarem sektora innym niż 512 nie są wspierane." + +msgid "USB is not yet supported" +msgstr "USB nie jest jeszcze wspierane" + +msgid "Disk image file already exists" +msgstr "Plik obrazu dysku już istnieje" + +msgid "Please specify a valid file name." +msgstr "Określ prawidłową nazwę pliku." + +msgid "Disk image created" +msgstr "Utworzono obraz dysku" + +msgid "Make sure the file exists and is readable." +msgstr "Sprawdź, czy plik istnieje i nadaje się do odczytu." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Sprawdź, czy plik jest zapiyswany w katalogu z możliwością zapisu." + +msgid "Disk image too large" +msgstr "Obraz dysku jest za duży" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Nie zapomnij o partycjonowaniu u sformatowaniu nowo utworzego dysku" + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Wybrany plik zostanie nadpisany. Czy na pewno chcesz użyć tego pliku?" + +msgid "Unsupported disk image" +msgstr "Niewspierany obraz dysku" + +msgid "Overwrite" +msgstr "Nadpisz" + +msgid "Don't overwrite" +msgstr "Nie nadpisuj" + +msgid "Raw image (.img)" +msgstr "Obraz surowy (.img)" + +msgid "HDI image (.hdi)" +msgstr "Obraz HDI (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "Obraz HDX (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD o stałym rozmiarze (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD o dynamicznym rozmiarze (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "VHD różnicujący (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Duże bloki (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Małe bloki (512 KB)" + +msgid "VHD files (*.VHD *.vhd);;All files (*)" +msgstr "Pliki VHD (*.VHD *.vhd);;Wszystkie pliki (*)" + +msgid "Select the parent VHD" +msgstr "Wybierz nadrzędny plik VHD" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Może to oznaczać, że obraz nadrzędny został zmodyfikowany po utworzeniu obrazu różnicującego.\n\nMoże się to również zdarzyć, jeśli pliki obrazów przeniesione lub skopiowane, lub wystąpił błąd w programie, który utworzył ten dysk\n\nCzy chcesz naprawić sygnatury czasowe?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Sygnatury czasowe dysku nadrzędnego i podrzędnego nie zgadzają się" + +msgid "Could not fix VHD timestamp." +msgstr "Nie można naprawić sygnatury czasowej VHD." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1,2 MB" + +msgid "1.25 MB" +msgstr "1,25 MB" + +msgid "1.44 MB" +msgstr "1,44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (klaster 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (klaster 2048)" + +msgid "2.88 MB" +msgstr "2,88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1,3Gb M.O. (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2,3Gb M.O. (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." + +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." + +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." + +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1,3Gb M.O." + +msgid "Perfect RPM" +msgstr "Idealne obroty" + +msgid "1%% below perfect RPM" +msgstr "1%% poniżej idealnych obrotów" + +msgid "1.5%% below perfect RPM" +msgstr "1.5%% poniżej idealnych obrotów" + +msgid "2%% below perfect RPM" +msgstr "2%% poniżej idealnych obrotów" + +msgid "(System Default)" +msgstr "(Domyślne ustawienie systemowe)" + diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index 3cb0a00bf..6d6e792c3 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -31,6 +31,9 @@ msgstr "&Exibir" msgid "&Hide status bar" msgstr "&Ocultar barra de status" +msgid "Hide &toolbar" +msgstr "Ocultar &barra de ferramenta" + msgid "&Resizeable window" msgstr "&Janela redimensionável" @@ -548,7 +551,7 @@ msgid "Image Format:" msgstr "Formato:" msgid "Block Size:" -msgstr "Tamanho do bloco:" +msgstr "Bloco:" msgid "Floppy drives:" msgstr "Unidades de disquete:" @@ -803,7 +806,7 @@ msgid "Welcome to 86Box!" msgstr "Bem-vindo ao 86Box!" msgid "Internal controller" -msgstr "Controle interno" +msgstr "Controlador interno" msgid "Exit" msgstr "Sair" @@ -928,6 +931,24 @@ msgstr "Erro ao inicializar o renderizador" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." msgstr "O renderizador OpenGL (Núcleo 3.0) não pôde ser inicializado. Use outro renderizador." +msgid "Resume execution" +msgstr "Continuar a execução" + +msgid "Pause execution" +msgstr "Pausar a execução" + +msgid "Press Ctrl+Alt+Del" +msgstr "Pressionar Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Pressionar Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Reinicialização completa" + +msgid "ACPI shutdown" +msgstr "Desligamento por ACPI" + msgid "Hard disk (%s)" msgstr "Disco rígido (%s)" diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index a0ea962a5..b15fa5786 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -31,6 +31,9 @@ msgstr "&Ver" msgid "&Hide status bar" msgstr "&Ocultar barra de estado" +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + msgid "&Resizeable window" msgstr "&Janela redimensionável" @@ -928,6 +931,24 @@ msgstr "Error initializing renderer" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + msgid "Hard disk (%s)" msgstr "Disco rígido (%s)" diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index 2488b4be6..475f92713 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -31,6 +31,9 @@ msgstr "&Вид" msgid "&Hide status bar" msgstr "&Скрыть строку статуса" +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + msgid "&Resizeable window" msgstr "&Изменяемый размер окна" @@ -928,6 +931,24 @@ msgstr "Error initializing renderer" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + msgid "Hard disk (%s)" msgstr "Жёсткий диск (%s)" diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index 747ae40b9..e77f37a9b 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -31,6 +31,9 @@ msgstr "&Pogled" msgid "&Hide status bar" msgstr "&Skrij statusno vrstico" +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + msgid "&Resizeable window" msgstr "S&premenljiva velikost okna" @@ -928,6 +931,24 @@ msgstr "Error initializing renderer" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + msgid "Hard disk (%s)" msgstr "Trdi disk (%s)" diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po index de5417e87..90067ee71 100644 --- a/src/qt/languages/tr-TR.po +++ b/src/qt/languages/tr-TR.po @@ -31,6 +31,9 @@ msgstr "&Görüntüleme" msgid "&Hide status bar" msgstr "&Durum çubuğunu gizle" +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + msgid "&Resizeable window" msgstr "&Yeniden boyutlandırılabilir pencere" @@ -928,6 +931,24 @@ msgstr "Error initializing renderer" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + msgid "Hard disk (%s)" msgstr "Hard disk (%s)" diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po index f983e347c..6bbe7d8ab 100644 --- a/src/qt/languages/zh-CN.po +++ b/src/qt/languages/zh-CN.po @@ -31,6 +31,9 @@ msgstr "查看(&V)" msgid "&Hide status bar" msgstr "隐藏状态栏(&H)" +msgid "Hide &toolbar" +msgstr "隐藏工具栏(&T)" + msgid "&Resizeable window" msgstr "窗口大小可调(&R)" @@ -928,6 +931,24 @@ msgstr "初始化渲染器时出错" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." msgstr "无法初始化 OpenGL (3.0 核心) 渲染器。请使用其他渲染器。" +msgid "Resume execution" +msgstr "恢复执行" + +msgid "Pause execution" +msgstr "暂停执行" + +msgid "Press Ctrl+Alt+Del" +msgstr "按 Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "按 Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "硬重置" + +msgid "ACPI shutdown" +msgstr "ACPI 关机" + msgid "Hard disk (%s)" msgstr "硬盘 (%s)" diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index f3de30485..5cdefc7f7 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -329,6 +329,7 @@ extern "C++" {0x0410, {"it-IT", "Italian (Italy)"} }, {0x0411, {"ja-JP", "Japanese (Japan)"} }, {0x0412, {"ko-KR", "Korean (Korea)"} }, + {0x0415, {"pl-PL", "Polish (Poland)"} }, {0x0416, {"pt-BR", "Portuguese (Brazil)"} }, {0x0816, {"pt-PT", "Portuguese (Portugal)"} }, {0x0419, {"ru-RU", "Russian (Russia)"} }, diff --git a/src/qt/qt_translations.qrc b/src/qt/qt_translations.qrc index a5c91336d..a011726f5 100644 --- a/src/qt/qt_translations.qrc +++ b/src/qt/qt_translations.qrc @@ -12,6 +12,7 @@ 86box_it-IT.qm 86box_ja-JP.qm 86box_ko-KR.qm + 86box_pl-PL.qm 86box_pt-BR.qm 86box_pt-PT.qm 86box_ru-RU.qm From 7fdeff18519ff6c4e3295d1c1f9a676b99716efa Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Fri, 21 Jan 2022 19:08:58 +0200 Subject: [PATCH 222/278] qt: macos patches from dob205 --- cmake/llvm-macos-aarch64.cmake | 22 +++++++++ src/CMakeLists.txt | 86 +++++++++++++++++++++++++++------- src/mac/CMakeLists.txt | 5 +- 3 files changed, 93 insertions(+), 20 deletions(-) create mode 100644 cmake/llvm-macos-aarch64.cmake diff --git a/cmake/llvm-macos-aarch64.cmake b/cmake/llvm-macos-aarch64.cmake new file mode 100644 index 000000000..da9ccb449 --- /dev/null +++ b/cmake/llvm-macos-aarch64.cmake @@ -0,0 +1,22 @@ +# +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. +# +# This file is part of the 86Box distribution. +# +# CMake toolchain file defining Clang compiler flags +# for AArch64 (ARM64)-based Apple Silicon targets. +# +# Authors: David Hrdlička, +# dob205 +# +# Copyright 2021 David Hrdlička. +# Copyright 2022 dob205. +# + +string(APPEND CMAKE_C_FLAGS_INIT " -march=armv8.5-a+simd") +string(APPEND CMAKE_CXX_FLAGS_INIT " -march=armv8.5-a+simd") + +include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc.cmake) \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f8e55fcaa..9bed3bccc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -176,28 +176,78 @@ else() install(TARGETS 86Box) endif() +# prepare everything for Qt5 bundle creation +if (APPLE AND QT) + set(prefix "86Box.app/Contents") + set(INSTALL_RUNTIME_DIR "${prefix}/MacOS") + set(INSTALL_CMAKE_DIR "${prefix}/Resources") +endif() + +# loads a macro to install Qt5 plugins on macOS +# based on https://stackoverflow.com/questions/35612687/cmake-macos-x-bundle-with-bundleutiliies-for-qt-application +macro(install_qt5_plugin _qt_plugin_name _qt_plugins_var _prefix) + get_target_property(_qt_plugin_path "${_qt_plugin_name}" LOCATION) + if(EXISTS "${_qt_plugin_path}") + get_filename_component(_qt_plugin_file "${_qt_plugin_path}" NAME) + get_filename_component(_qt_plugin_type "${_qt_plugin_path}" PATH) + get_filename_component(_qt_plugin_type "${_qt_plugin_type}" NAME) + set(_qt_plugin_dest "${_prefix}/PlugIns/${_qt_plugin_type}") + install(FILES "${_qt_plugin_path}" + DESTINATION "${_qt_plugin_dest}") + set(${_qt_plugins_var} + "${${_qt_plugins_var}};\$ENV{DEST_DIR}\${CMAKE_INSTALL_PREFIX}/${_qt_plugin_dest}/${_qt_plugin_file}") + else() + message(FATAL_ERROR "QT plugin ${_qt_plugin_name} not found") + endif() +endmacro() + # Install our dependencies to the macOS bundle if(APPLE) - install(CODE " - include(BundleUtilities) - get_filename_component(CMAKE_INSTALL_PREFIX_ABSOLUTE \${CMAKE_INSTALL_PREFIX} ABSOLUTE) - fixup_bundle(\"\${CMAKE_INSTALL_PREFIX_ABSOLUTE}/86Box.app\" \"\" \"\")" - COMPONENT Runtime) + if (NOT QT) + install(CODE " + include(BundleUtilities) + get_filename_component(CMAKE_INSTALL_PREFIX_ABSOLUTE \${CMAKE_INSTALL_PREFIX} ABSOLUTE) + fixup_bundle(\"\${CMAKE_INSTALL_PREFIX_ABSOLUTE}/86Box.app\" \"\" \"\")" + COMPONENT Runtime) + endif() + + if(QT) + # using the install_qt5_plugin to add Qt plugins into the macOS app bundle + if (USE_QT6) + install_qt5_plugin("Qt6::QCocoaIntegrationPlugin" QT_PLUGINS ${prefix}) + else() + install_qt5_plugin("Qt5::QCocoaIntegrationPlugin" QT_PLUGINS ${prefix}) + endif() + + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/qt.conf" + "[Paths]\nPlugins = ${_qt_plugin_dir}\n") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/qt.conf" + DESTINATION "${INSTALL_CMAKE_DIR}") - if (QT) - # needed for Qt packaging - # get the macdeployqt path - get_target_property(_qmake_executable Qt${QT_MAJOR}::qmake IMPORTED_LOCATION) - get_filename_component(_qt_bin_dir "${_qmake_executable}" DIRECTORY) - find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${_qt_bin_dir}") + # Note Mac specific extension .app + set(APPS "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/86Box.app") - # excecute macdeployqt - add_custom_command(TARGET 86Box POST_BUILD - COMMAND "${MACDEPLOYQT_EXECUTABLE}" - "$/../.." - -always-overwrite - COMMENT "Running macdeployqt..." - ) + # Directories to look for dependencies + set(DIRS "${CMAKE_BINARY_DIR}") + + # Path used for searching by FIND_XXX(), with appropriate suffixes added + if(CMAKE_PREFIX_PATH) + foreach(dir ${CMAKE_PREFIX_PATH}) + list(APPEND DIRS "${dir}/bin" "${dir}/lib") + endforeach() + endif() + + # Append Qt's lib folder which is two levels above Qt5Widgets_DIR + list(APPEND DIRS "${Qt5Widgets_DIR}/../..") + + include(InstallRequiredSystemLibraries) + + message(STATUS "APPS: ${APPS}") + message(STATUS "QT_PLUGINS: ${QT_PLUGINS}") + message(STATUS "DIRS: ${DIRS}") + + install(CODE "include(BundleUtilities) + fixup_bundle(\"${APPS}\" \"${QT_PLUGINS}\" \"${DIRS}\")") endif() endif() diff --git a/src/mac/CMakeLists.txt b/src/mac/CMakeLists.txt index 91759690f..6682d5bcd 100644 --- a/src/mac/CMakeLists.txt +++ b/src/mac/CMakeLists.txt @@ -48,6 +48,7 @@ configure_file(Info.plist.in Info.plist @ONLY) set_target_properties(86Box PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) -#set(XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "YES") -#set(XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "-") +set(CMAKE_XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS "-o linker-signed") +set(XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "YES") +set(XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "-") #set(XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${CMAKE_CURRENT_SOURCE_DIR}/mac/codesign/dev/app.entitlements) \ No newline at end of file From 7995be4adb917a567a61db60b28ce9c365fe1394 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sat, 22 Jan 2022 01:10:11 +0200 Subject: [PATCH 223/278] qt: Add VM-manager message handling on windows --- src/qt/CMakeLists.txt | 7 +++- src/qt/qt_main.cpp | 31 +++++++++++++++-- src/qt/qt_mainwindow.cpp | 10 ++++++ src/qt/qt_mainwindow.hpp | 3 ++ src/qt/qt_platform.cpp | 6 ++++ src/qt/qt_winmanagerfilter.cpp | 62 ++++++++++++++++++++++++++++++++++ src/qt/qt_winmanagerfilter.hpp | 58 +++++++++++++++++++++++++++++++ 7 files changed, 174 insertions(+), 3 deletions(-) create mode 100644 src/qt/qt_winmanagerfilter.cpp create mode 100644 src/qt/qt_winmanagerfilter.hpp diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index f87a76fcc..a9c1f1697 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -121,7 +121,12 @@ if (APPLE) endif() if (WIN32) - target_sources(ui PRIVATE qt_winrawinputfilter.hpp qt_winrawinputfilter.cpp) + target_sources(ui PRIVATE + qt_winrawinputfilter.hpp + qt_winrawinputfilter.cpp + qt_winmanagerfilter.hpp + qt_winmanagerfilter.cpp + ) endif() target_link_libraries( diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 292045bfe..5dc99afb5 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -20,6 +20,8 @@ Q_IMPORT_PLUGIN(QWindowsVistaStylePlugin) #ifdef Q_OS_WINDOWS #include "qt_winrawinputfilter.hpp" +#include "qt_winmanagerfilter.hpp" +#include <86box/win.h> #endif #include <86box/86box.h> @@ -30,6 +32,7 @@ Q_IMPORT_PLUGIN(QWindowsVistaStylePlugin) #include #include +#include #include "qt_mainwindow.hpp" #include "qt_progsettings.hpp" @@ -102,7 +105,7 @@ main_thread_fn() } int main(int argc, char* argv[]) { - QApplication app(argc, argv); + QApplication app(argc, argv); qt_set_sequence_auto_mnemonic(false); Q_INIT_RESOURCE(qt_resources); Q_INIT_RESOURCE(qt_translations); @@ -137,6 +140,30 @@ int main(int argc, char* argv[]) { app.installEventFilter(main_window); #ifdef Q_OS_WINDOWS + /* Setup VM-manager messages */ + std::unique_ptr wmfilter; + if (source_hwnd) + { + wmfilter.reset(new WindowsManagerFilter()); + QObject::connect(wmfilter.get(), WindowsManagerFilter::showsettings, main_window, MainWindow::showSettings); + QObject::connect(wmfilter.get(), WindowsManagerFilter::pause, [](){ plat_pause(dopause ^ 1); }); + QObject::connect(wmfilter.get(), WindowsManagerFilter::reset, main_window, MainWindow::hardReset); + QObject::connect(wmfilter.get(), WindowsManagerFilter::shutdown, [](){ plat_power_off(); }); + QObject::connect(wmfilter.get(), WindowsManagerFilter::ctrlaltdel, [](){ pc_send_cad(); }); + app.installNativeEventFilter(wmfilter.get()); + + HWND main_hwnd = (HWND)main_window->winId(); + + /* Send main window HWND to manager */ + PostMessage((HWND)(uintptr_t)source_hwnd, WM_SENDHWND, (WPARAM)unique_id, (LPARAM)main_hwnd); + + /* Send shutdown message to manager */ + QObject::connect(&app, &QApplication::destroyed, [main_hwnd](QObject*) { + PostMessage((HWND)(uintptr_t)source_hwnd, WM_HAS_SHUTDOWN, (WPARAM)0, (LPARAM)main_hwnd); + }); + } + + /* Setup raw input */ auto rawInputFilter = WindowsRawInputFilter::Register(main_window); if (rawInputFilter) { @@ -144,7 +171,7 @@ int main(int argc, char* argv[]) { QObject::disconnect(main_window, &MainWindow::pollMouse, 0, 0); QObject::connect(main_window, &MainWindow::pollMouse, (WindowsRawInputFilter*)rawInputFilter.get(), &WindowsRawInputFilter::mousePoll, Qt::DirectConnection); main_window->setSendKeyboardInput(false); - } + } #endif pc_reset_hard_init(); diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index e75eb0501..81489113c 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -1491,3 +1491,13 @@ void MainWindow::on_actionEnable_Discord_integration_triggered(bool checked) discord_close(); } +void MainWindow::showSettings() +{ + if (findChild() == nullptr) + ui->actionSettings->trigger(); +} + +void MainWindow::hardReset() +{ + ui->actionHard_Reset->trigger(); +} \ No newline at end of file diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 4d3335618..c9f22ede2 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -47,6 +47,9 @@ signals: void showMessageForNonQtThread(const QString& header, const QString& message); void getTitleForNonQtThread(wchar_t* title); +public slots: + void showSettings(); + void hardReset(); private slots: void on_actionFullscreen_triggered(); void on_actionSettings_triggered(); diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index 5cdefc7f7..b210ab69d 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -56,6 +56,7 @@ extern "C" { #ifdef Q_OS_WINDOWS #define NOMINMAX #include +#include <86box/win.h> #else #include #endif @@ -289,6 +290,11 @@ plat_pause(int p) ui_window_title(oldtitle); } discord_update_activity(dopause); + +#ifdef Q_OS_WINDOWS + if (source_hwnd) + PostMessage((HWND)(uintptr_t)source_hwnd, WM_SENDSTATUS, (WPARAM)!!p, (LPARAM)(HWND)main_window->winId()); +#endif } // because we can't include nvr.h because it's got fields named new diff --git a/src/qt/qt_winmanagerfilter.cpp b/src/qt/qt_winmanagerfilter.cpp new file mode 100644 index 000000000..205d4ea16 --- /dev/null +++ b/src/qt/qt_winmanagerfilter.cpp @@ -0,0 +1,62 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Windows VM-managers native messages filter + * + * Authors: + * Teemu Korhonen + * + * Copyright 2022 Teemu Korhonen + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "qt_winmanagerfilter.hpp" + +#include <86box/win.h> + +bool WindowsManagerFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *result) +{ + if (eventType == "windows_generic_MSG") + { + MSG *msg = static_cast(message); + + switch (msg->message) + { + case WM_SHOWSETTINGS: + emit showsettings(); + return true; + case WM_PAUSE: + emit pause(); + return true; + case WM_HARDRESET: + emit reset(); + return true; + case WM_SHUTDOWN: + emit shutdown(); + return true; + case WM_CTRLALTDEL: + emit ctrlaltdel(); + return true; + } + } + + return false; +} \ No newline at end of file diff --git a/src/qt/qt_winmanagerfilter.hpp b/src/qt/qt_winmanagerfilter.hpp new file mode 100644 index 000000000..9f43e1b5c --- /dev/null +++ b/src/qt/qt_winmanagerfilter.hpp @@ -0,0 +1,58 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Header file for Windows VM-managers native messages filter + * + * Authors: + * Teemu Korhonen + * + * Copyright 2022 Teemu Korhonen + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef QT_WINDOWSMANAGERFILTER_HPP +#define QT_WINDOWSMANAGERFILTER_HPP + +#include +#include + +#if QT_VERSION_MAJOR >= 6 +#define result_t qintptr +#else +#define result_t long +#endif + +class WindowsManagerFilter : public QObject, public QAbstractNativeEventFilter +{ + Q_OBJECT + +public: + bool nativeEventFilter(const QByteArray &eventType, void *message, result_t *result) override; + +signals: + void pause(); + void ctrlaltdel(); + void showsettings(); + void reset(); + void shutdown(); +}; + +#endif From 3d0b100199802ae28bdb42f47abdc523c257cc75 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sat, 22 Jan 2022 02:41:02 +0200 Subject: [PATCH 224/278] qt: Send dialog status to VM-manager & fix pause - Manager is notified of modal dialogs blocking the main window. - Pause command from manager uses action to prevent desyncing pause status in the menus and toolbar. --- src/qt/qt_main.cpp | 12 ++++++++++-- src/qt/qt_mainwindow.cpp | 5 +++++ src/qt/qt_mainwindow.hpp | 1 + src/qt/qt_winmanagerfilter.cpp | 15 +++++++++++++++ src/qt/qt_winmanagerfilter.hpp | 10 ++++++++++ 5 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 5dc99afb5..a09b45b6a 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -144,15 +144,23 @@ int main(int argc, char* argv[]) { std::unique_ptr wmfilter; if (source_hwnd) { + HWND main_hwnd = (HWND)main_window->winId(); + wmfilter.reset(new WindowsManagerFilter()); QObject::connect(wmfilter.get(), WindowsManagerFilter::showsettings, main_window, MainWindow::showSettings); - QObject::connect(wmfilter.get(), WindowsManagerFilter::pause, [](){ plat_pause(dopause ^ 1); }); + QObject::connect(wmfilter.get(), WindowsManagerFilter::pause, main_window, MainWindow::togglePause); QObject::connect(wmfilter.get(), WindowsManagerFilter::reset, main_window, MainWindow::hardReset); QObject::connect(wmfilter.get(), WindowsManagerFilter::shutdown, [](){ plat_power_off(); }); QObject::connect(wmfilter.get(), WindowsManagerFilter::ctrlaltdel, [](){ pc_send_cad(); }); + QObject::connect(wmfilter.get(), WindowsManagerFilter::dialogstatus, [main_hwnd](bool open){ + PostMessage((HWND)(uintptr_t)source_hwnd, WM_SENDDLGSTATUS, (WPARAM)(open ? 1 : 0), (LPARAM)main_hwnd); + }); + + /* Native filter to catch VM-managers commands */ app.installNativeEventFilter(wmfilter.get()); - HWND main_hwnd = (HWND)main_window->winId(); + /* Filter to catch main window being blocked (by modal dialog) */ + main_window->installEventFilter(wmfilter.get()); /* Send main window HWND to manager */ PostMessage((HWND)(uintptr_t)source_hwnd, WM_SENDHWND, (WPARAM)unique_id, (LPARAM)main_hwnd); diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 81489113c..d82adc421 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -1500,4 +1500,9 @@ void MainWindow::showSettings() void MainWindow::hardReset() { ui->actionHard_Reset->trigger(); +} + +void MainWindow::togglePause() +{ + ui->actionPause->trigger(); } \ No newline at end of file diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index c9f22ede2..76effef48 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -50,6 +50,7 @@ signals: public slots: void showSettings(); void hardReset(); + void togglePause(); private slots: void on_actionFullscreen_triggered(); void on_actionSettings_triggered(); diff --git a/src/qt/qt_winmanagerfilter.cpp b/src/qt/qt_winmanagerfilter.cpp index 205d4ea16..cdaa6734e 100644 --- a/src/qt/qt_winmanagerfilter.cpp +++ b/src/qt/qt_winmanagerfilter.cpp @@ -30,6 +30,7 @@ #include "qt_winmanagerfilter.hpp" +#include #include <86box/win.h> bool WindowsManagerFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *result) @@ -59,4 +60,18 @@ bool WindowsManagerFilter::nativeEventFilter(const QByteArray &eventType, void * } return false; +} + +bool WindowsManagerFilter::eventFilter(QObject *obj, QEvent *event) +{ + if (event->type() == QEvent::WindowBlocked) + { + emit dialogstatus(1); + } + else if (event->type() == QEvent::WindowUnblocked) + { + emit dialogstatus(0); + } + + return QObject::eventFilter(obj, event); } \ No newline at end of file diff --git a/src/qt/qt_winmanagerfilter.hpp b/src/qt/qt_winmanagerfilter.hpp index 9f43e1b5c..405d84aed 100644 --- a/src/qt/qt_winmanagerfilter.hpp +++ b/src/qt/qt_winmanagerfilter.hpp @@ -33,6 +33,8 @@ #include #include +#include +#include #if QT_VERSION_MAJOR >= 6 #define result_t qintptr @@ -40,6 +42,10 @@ #define result_t long #endif +/* + * Filters native events for messages from VM-manager and + * window blocked events to notify about open modal dialogs. + */ class WindowsManagerFilter : public QObject, public QAbstractNativeEventFilter { Q_OBJECT @@ -53,6 +59,10 @@ signals: void showsettings(); void reset(); void shutdown(); + void dialogstatus(bool open); + +protected: + bool eventFilter(QObject *obj, QEvent *event) override; }; #endif From 5f8fc15afb2381fefe9066afadf6e68b76c3f5b8 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sat, 22 Jan 2022 12:40:15 +0200 Subject: [PATCH 225/278] qt: Add missing address-of operators --- src/qt/qt_main.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index a09b45b6a..8039b78cd 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -147,12 +147,12 @@ int main(int argc, char* argv[]) { HWND main_hwnd = (HWND)main_window->winId(); wmfilter.reset(new WindowsManagerFilter()); - QObject::connect(wmfilter.get(), WindowsManagerFilter::showsettings, main_window, MainWindow::showSettings); - QObject::connect(wmfilter.get(), WindowsManagerFilter::pause, main_window, MainWindow::togglePause); - QObject::connect(wmfilter.get(), WindowsManagerFilter::reset, main_window, MainWindow::hardReset); - QObject::connect(wmfilter.get(), WindowsManagerFilter::shutdown, [](){ plat_power_off(); }); - QObject::connect(wmfilter.get(), WindowsManagerFilter::ctrlaltdel, [](){ pc_send_cad(); }); - QObject::connect(wmfilter.get(), WindowsManagerFilter::dialogstatus, [main_hwnd](bool open){ + QObject::connect(wmfilter.get(), &WindowsManagerFilter::showsettings, main_window, &MainWindow::showSettings); + QObject::connect(wmfilter.get(), &WindowsManagerFilter::pause, main_window, &MainWindow::togglePause); + QObject::connect(wmfilter.get(), &WindowsManagerFilter::reset, main_window, &MainWindow::hardReset); + QObject::connect(wmfilter.get(), &WindowsManagerFilter::shutdown, [](){ plat_power_off(); }); + QObject::connect(wmfilter.get(), &WindowsManagerFilter::ctrlaltdel, [](){ pc_send_cad(); }); + QObject::connect(wmfilter.get(), &WindowsManagerFilter::dialogstatus, [main_hwnd](bool open){ PostMessage((HWND)(uintptr_t)source_hwnd, WM_SENDDLGSTATUS, (WPARAM)(open ? 1 : 0), (LPARAM)main_hwnd); }); From 6ba6cf3bddadf118601a7ee9758b11ae103c77e5 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sat, 22 Jan 2022 17:16:04 +0200 Subject: [PATCH 226/278] qt: update en-US.po --- src/qt/languages/en-US.po | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/qt/languages/en-US.po b/src/qt/languages/en-US.po index 3e3abdcbb..69534be54 100644 --- a/src/qt/languages/en-US.po +++ b/src/qt/languages/en-US.po @@ -31,6 +31,9 @@ msgstr "&View" msgid "&Hide status bar" msgstr "&Hide status bar" +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + msgid "&Resizeable window" msgstr "&Resizeable window" @@ -928,6 +931,24 @@ msgstr "Error initializing renderer" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + msgid "Hard disk (%s)" msgstr "Hard disk (%s)" From dd6b368e0e4c5ef79c9be6e918b9912a2b8c3d02 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sat, 22 Jan 2022 22:00:44 +0200 Subject: [PATCH 227/278] qt: Read font name and size from translation Updated .po files to include FONT_NAME and FONT_SIZE to allow using them as font in qt. --- src/qt/languages/cs-CZ.po | 56 +++++++++++++++++++------------------- src/qt/languages/de-DE.po | 56 +++++++++++++++++++------------------- src/qt/languages/en-GB.po | 56 +++++++++++++++++++------------------- src/qt/languages/en-US.po | 56 +++++++++++++++++++------------------- src/qt/languages/es-ES.po | 56 +++++++++++++++++++------------------- src/qt/languages/fi-FI.po | 56 +++++++++++++++++++------------------- src/qt/languages/fr-FR.po | 56 +++++++++++++++++++------------------- src/qt/languages/hr-HR.po | 56 +++++++++++++++++++------------------- src/qt/languages/hu-HU.po | 56 +++++++++++++++++++------------------- src/qt/languages/it-IT.po | 56 +++++++++++++++++++------------------- src/qt/languages/ja-JP.po | 56 +++++++++++++++++++------------------- src/qt/languages/ko-KR.po | 56 +++++++++++++++++++------------------- src/qt/languages/pl-PL.po | 56 +++++++++++++++++++------------------- src/qt/languages/pt-BR.po | 56 +++++++++++++++++++------------------- src/qt/languages/pt-PT.po | 56 +++++++++++++++++++------------------- src/qt/languages/ru-RU.po | 56 +++++++++++++++++++------------------- src/qt/languages/sl-SI.po | 56 +++++++++++++++++++------------------- src/qt/languages/tr-TR.po | 56 +++++++++++++++++++------------------- src/qt/languages/zh-CN.po | 56 +++++++++++++++++++------------------- src/qt/qt_mainwindow.cpp | 16 +++++++++++ src/qt/qt_mainwindow.hpp | 1 + src/win/languages/hu-HU.rc | 2 +- 22 files changed, 550 insertions(+), 533 deletions(-) diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index 69c561054..97b5222f0 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -1,6 +1,3 @@ -msgid "Translated by" -msgstr "Unknown" - msgid "&Action" msgstr "&Akce" @@ -598,7 +595,10 @@ msgstr "Zařízení ISABugger" msgid "POST card" msgstr "Karta pro kódy POST" -msgid "Segoe UI" +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" msgstr "Segoe UI" msgid "86Box" @@ -622,8 +622,8 @@ msgstr "Rychlost" msgid "ZIP %03i %i (%s): %ls" msgstr "ZIP %03i %i (%s): %ls" -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" -msgstr "Obrazy ZIP disků (*.IM? *.im? *.ZDI *.zdi)" +msgid "ZIP images (*.im? *.zdi)" +msgstr "Obrazy ZIP disků (*.im? *.zdi)" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box nenalezl žádné použitelné image pamětí ROM.\n\nStáhněte sadu obrazů ROM a extrahujte ji do složky \"roms\"." @@ -631,8 +631,8 @@ msgstr "86Box nenalezl žádné použitelné image pamětí ROM.\n\ndownload a ROM set and extract it into the \"roms\" directory." msgstr "86Box konnte keine nutzbaren ROM-Dateien finden.\n\nBitte besuchen Sie download, laden ein ROM-Set herunter und extrahieren dies in das \"roms\"-Verzeichnis." @@ -631,8 +631,8 @@ msgstr "86Box konnte keine nutzbaren ROM-Dateien finden.\n\nBitte besuchen Sie < msgid "(empty)" msgstr "(leer)" -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" -msgstr "ZIP-Images (*.IM? *.im? *.ZDI *.zdi);;Alle Dateien (*)" +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "ZIP-Images (*.im? *.zdi);;Alle Dateien (*.*)" msgid "Turbo" msgstr "Turbo" @@ -643,8 +643,8 @@ msgstr "An" msgid "Off" msgstr "Aus" -msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" -msgstr "Alle Images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basissektorimages (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Oberflächenimages (*.86F *.86f)" +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "Alle Images (*.86f *.dsk *.flp *.im? *.*fd?);;Basissektorimages (*.dsk *.flp *.im? *.img *.*fd?);;Oberflächenimages (*.86f)" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "Das System \"%hs\" ist aufgrund von fehlenden ROMs im Verzeichnis roms/machines nicht verfügbar. Es wird auf ein verfügbares System gewechselt." @@ -685,8 +685,8 @@ msgstr "Andere Wechsellaufwerke" msgid "Other peripherals" msgstr "Andere Peripheriegeräte" -msgid "Surface images (*.86F *.86f)" -msgstr "Oberflächenimages (*.86F *.86f)" +msgid "Surface images (*.86f)" +msgstr "Oberflächenimages (*.86f)" msgid "Click to capture mouse" msgstr "Zum Einfangen des Mauszeigers bitte klicken" @@ -778,8 +778,8 @@ msgstr "%u MB (CHS: %i, %i, %i)" msgid "Floppy %i (%s): %ls" msgstr "Diskette %i (%s): %ls" -msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" -msgstr "Alle Images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Fortgeschrittene Sektorimages (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basissektorimages (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Fluximages (*.FDI *.fdi);;Oberflächenimages (*.86F *.86f *.MFM *.mfm);;Alle Dateien (*)" +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "Alle Images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Fortgeschrittene Sektorimages (*.imd *.json *.td0);;Basissektorimages (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Fluximages (*.fdi);;Oberflächenimages (*.86f *.mfm);;Alle Dateien (*.*)" msgid "Unable to initialize FreeType" msgstr "FreeType konnte nicht initialisiert werden" @@ -799,8 +799,8 @@ msgstr "Ghostscript konnte nicht initialisiert werden" msgid "MO %i (%ls): %ls" msgstr "MO %i (%ls): %ls" -msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" -msgstr "MO-Images (*.IM? *.im? *.MDI *.mdi);;Alle Dateien (*)" +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "MO-Images (*.im? *.mdi);;Alle Dateien (*.*)" msgid "Welcome to 86Box!" msgstr "Willkommen bei 86Box!" @@ -889,8 +889,8 @@ msgstr "Zurücksetzen" msgid "Don't reset" msgstr "Nicht zurücksetzen" -msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" -msgstr "CD-ROM-Images (*.ISO *.iso *.CUE *.cue);;Alle Dateien (*)" +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "CD-ROM-Images (*.iso *.cue);;Alle Dateien (*.*)" msgid "%hs Device Configuration" msgstr "%hs-Gerätekonfiguration" @@ -898,8 +898,8 @@ msgstr "%hs-Gerätekonfiguration" msgid "Monitor in sleep mode" msgstr "Monitor im Standbymodus" -msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" -msgstr "OpenGL-Shader (*.GLSL *.glsl);;Alle Dateien (*)" +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "OpenGL-Shader (*.glsl);;Alle Dateien (*.*)" msgid "OpenGL options" msgstr "OpenGL-Optionen" @@ -916,14 +916,14 @@ msgstr "Fortfahren" msgid "Cassette: %s" msgstr "Kassette: %s" -msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" -msgstr "Kassettenimages (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Alle Dateien (*)" +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Kassettenimages (*.pcm *.raw *.wav *.cas);;Alle Dateien (*.*)" msgid "Cartridge %i: %ls" msgstr "Cartridge %i: %ls" -msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" -msgstr "Cartridgeimages (*.A *.a *.B *.b *.JRC *.jrc);;Alle Dateien (*)" +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "Cartridgeimages (*.a *.b *.jrc);;Alle Dateien (*.*)" msgid "Error initializing renderer" msgstr "Fehler bei der Rendererinitialisierung" @@ -979,8 +979,8 @@ msgstr "HDI-Diskimages können nicht größer als 4 GB groß sein." msgid "Disk images cannot be larger than 127 GB." msgstr "Festplattenimages können nicht größer als 127 GB groß sein." -msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" -msgstr "Festplattenimages (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Alle Dateien (*)" +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Festplattenimages (*.hd? *.im? *.vhd);;Alle Dateien (*.*)" msgid "Unable to read file" msgstr "Die Datei konnte nicht gelesen werden" @@ -1051,8 +1051,8 @@ msgstr "Große Blöcke (2 MB)" msgid "Small blocks (512 KB)" msgstr "Kleine Blöcke (512 KB)" -msgid "VHD files (*.VHD *.vhd);;All files (*)" -msgstr "VHD-Dateien (*.VHD *.vhd);;Alle Dateien (*)" +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "VHD-Dateien (*.vhd);;Alle Dateien (*.*)" msgid "Select the parent VHD" msgstr "Eltern-VHD-Datei bitte auswählen" diff --git a/src/qt/languages/en-GB.po b/src/qt/languages/en-GB.po index b8c1f5e0e..c58e85eb0 100644 --- a/src/qt/languages/en-GB.po +++ b/src/qt/languages/en-GB.po @@ -1,6 +1,3 @@ -msgid "Translated by" -msgstr "Unknown" - msgid "&Action" msgstr "&Action" @@ -598,7 +595,10 @@ msgstr "ISABugger device" msgid "POST card" msgstr "POST card" -msgid "Segoe UI" +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" msgstr "Segoe UI" msgid "86Box" @@ -622,8 +622,8 @@ msgstr "Speed" msgid "ZIP %03i %i (%s): %ls" msgstr "ZIP %03i %i (%s): %ls" -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" -msgstr "ZIP images (*.IM? *.im? *.ZDI *.zdi)" +msgid "ZIP images (*.im? *.zdi)" +msgstr "ZIP images (*.im? *.zdi)" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." @@ -631,8 +631,8 @@ msgstr "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." @@ -631,8 +631,8 @@ msgstr "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box no pudo encontrar ninguna imagen ROM usable.\n\nPor favor descarga un grupo de imágenes y extráelas en el directorio \"roms\"." @@ -631,8 +631,8 @@ msgstr "86Box no pudo encontrar ninguna imagen ROM usable.\n\nPor favor download a ROM set and extract it into the \"roms\" directory." msgstr "86Box ei löytänyt käyttökelpoisia ROM-tiedostoja.\n\nVoit ladata ROM-paketin ja purkaa sen \"roms\" hakemistoon." @@ -631,8 +631,8 @@ msgstr "86Box ei löytänyt käyttökelpoisia ROM-tiedostoja.\n\nVoit download a ROM set and extract it into the \"roms\" directory." msgstr "86Box n'a pas pu trouver d'images ROM utilisables.\n\nS'il vous plait, téléchargez un ensemble ROM et extrayez-le dans le répertoire \"roms\"." @@ -631,8 +631,8 @@ msgstr "86Box n'a pas pu trouver d'images ROM utilisables.\n\nS'il vous plait, < msgid "(empty)" msgstr "(vide)" -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" -msgstr "Images ZIP (*.IM? *.im? *.ZDI *.zdi);;Tous les fichiers (*)" +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "Images ZIP (*.im? *.zdi);;Tous les fichiers (*.*)" msgid "Turbo" msgstr "Turbo" @@ -643,8 +643,8 @@ msgstr "Activé" msgid "Off" msgstr "Désactivé" -msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" -msgstr "Tous les images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Images basiques du secteur (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Images de la surface (*.86F *.86f)" +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "Tous les images (*.86f *.dsk *.flp *.im? *.*fd?);;Images basiques du secteur (*.dsk *.flp *.im? *.img *.*fd?);;Images de la surface (*.86f)" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "La machine \"%hs\" n'est pas disponible en raison de l'absence de ROMs dans le répertoire roms/machines. Basculer vers une machine disponible." @@ -685,8 +685,8 @@ msgstr "Autres dispositifs amovibles" msgid "Other peripherals" msgstr "Autres périfériques" -msgid "Surface images (*.86F *.86f)" -msgstr "Images de surface (*.86F *.86f)" +msgid "Surface images (*.86f)" +msgstr "Images de surface (*.86f)" msgid "Click to capture mouse" msgstr "Cliquer pour capturer la souris" @@ -778,8 +778,8 @@ msgstr "%u Mo (CTS: %i, %i, %i)" msgid "Floppy %i (%s): %ls" msgstr "Disquette %i (%s): %ls" -msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" -msgstr "Toutes les images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Images du secteur avancés (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Images du secteur basiques (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Images du flux (*.FDI *.fdi);;Images de surface (*.86F *.86f *.MFM *.mfm);;Tous les fichiers (*)" +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "Toutes les images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Images du secteur avancés (*.imd *.json *.td0);;Images du secteur basiques (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Images du flux (*.fdi);;Images de surface (*.86f *.mfm);;Tous les fichiers (*.*)" msgid "Unable to initialize FreeType" msgstr "Impossible d'initialiser FreeType" @@ -799,8 +799,8 @@ msgstr "Impossible d'initialiser Ghostscript" msgid "MO %i (%ls): %ls" msgstr "Magnéto-optique %i (%ls): %ls" -msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" -msgstr "Images magnéto-optiques (*.IM? *.im? *.MDI *.mdi);;Tous les fichiers (*)" +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "Images magnéto-optiques (*.im? *.mdi);;Tous les fichiers (*.*)" msgid "Welcome to 86Box!" msgstr "Bienvenue dans 86Box !" @@ -889,8 +889,8 @@ msgstr "Réinitialiser" msgid "Don't reset" msgstr "Ne pas réinitialiser" -msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" -msgstr "Images CD-ROM (*.ISO *.iso *.CUE *.cue);;Tous les fichiers (*)" +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "Images CD-ROM (*.iso *.cue);;Tous les fichiers (*.*)" msgid "%hs Device Configuration" msgstr "Configuration du dispositif %hs" @@ -898,8 +898,8 @@ msgstr "Configuration du dispositif %hs" msgid "Monitor in sleep mode" msgstr "Moniteur en mode veille" -msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" -msgstr "Shaders OpenGL (*.GLSL *.glsl);;Tous les fichiers (*)" +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "Shaders OpenGL (*.glsl);;Tous les fichiers (*.*)" msgid "OpenGL options" msgstr "Options OpenGL" @@ -916,14 +916,14 @@ msgstr "Continuer" msgid "Cassette: %s" msgstr "Cassette: %s" -msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" -msgstr "Images cassette (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Tous les fichiers (*)" +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Images cassette (*.pcm *.raw *.wav *.cas);;Tous les fichiers (*.*)" msgid "Cartridge %i: %ls" msgstr "Cartouche %i: %ls" -msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" -msgstr "Images cartouche (*.A *.a *.B *.b *.JRC *.jrc);;Tous les fichiers (*)" +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "Images cartouche (*.a *.b *.jrc);;Tous les fichiers (*.*)" msgid "Error initializing renderer" msgstr "Error initializing renderer" @@ -979,8 +979,8 @@ msgstr "Les images de disque HDI ne peuvent pas avoir une taille supériure à G msgid "Disk images cannot be larger than 127 GB." msgstr "Les images de disque ne peuvent pas avoir un taille supérieure à 127 Go." -msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" -msgstr "Images de dique dur (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Tous les fichiers (*)" +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Images de dique dur (*.hd? *.im? *.vhd);;Tous les fichiers (*.*)" msgid "Unable to read file" msgstr "Impossible de lire le fichier" @@ -1051,8 +1051,8 @@ msgstr "Blocs grands (2 MB)" msgid "Small blocks (512 KB)" msgstr "Blocs petits (512 KB)" -msgid "VHD files (*.VHD *.vhd);;All files (*)" -msgstr "Fichiers VHD (*.VHD *.vhd);;Tous les fichiers (*)" +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "Fichiers VHD (*.vhd);;Tous les fichiers (*.*)" msgid "Select the parent VHD" msgstr "Sélectionnez le VHD parent" diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index 139f13b55..7f33a8c7f 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -1,6 +1,3 @@ -msgid "Translated by" -msgstr "Unknown" - msgid "&Action" msgstr "&Radnje" @@ -598,7 +595,10 @@ msgstr "Uređaj ISABugger" msgid "POST card" msgstr "Kartica POST" -msgid "Segoe UI" +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" msgstr "Segoe UI" msgid "86Box" @@ -622,8 +622,8 @@ msgstr "Brzina" msgid "ZIP %03i %i (%s): %ls" msgstr "ZIP %03i %i (%s): %ls" -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" -msgstr "ZIP slike (*.IM? *.im? *.ZDI *.zdi)" +msgid "ZIP images (*.im? *.zdi)" +msgstr "ZIP slike (*.im? *.zdi)" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box nije mogao pronaći upotrebljive ROM datoteke.\n\nMolimte posjetite sknite paket s ROM datotekama i ekstrahirajte paket u \"roms\" mapu." @@ -631,8 +631,8 @@ msgstr "86Box nije mogao pronaći upotrebljive ROM datoteke.\n\nMolimte posjetit msgid "(empty)" msgstr "(prazno)" -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" -msgstr "ZIP slike (*.IM? *.im? *.ZDI *.zdi);;Sve datoteke (*)" +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "ZIP slike (*.im? *.zdi);;Sve datoteke (*.*)" msgid "Turbo" msgstr "Turbo" @@ -643,8 +643,8 @@ msgstr "Uključeno" msgid "Off" msgstr "Isključeno" -msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" -msgstr "Sve slike (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;BOsnovne sektorske slike (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Površinske slike (*.86F *.86f)" +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "Sve slike (*.86f *.dsk *.flp *.im? *.*fd?);;BOsnovne sektorske slike (*.dsk *.flp *.im? *.img *.*fd?);;Površinske slike (*.86f)" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "Sistem \"%hs\" nije dostupan jer ne postoje potrebni ROM-ovi u mapu roms/machines. Prebacivanje na dostupno računalo." @@ -685,8 +685,8 @@ msgstr "Ostali uklonjivi uređaji" msgid "Other peripherals" msgstr "Ostali periferni uređaji" -msgid "Surface images (*.86F *.86f)" -msgstr "Površinske slike (*.86F *.86f)" +msgid "Surface images (*.86f)" +msgstr "Površinske slike (*.86f)" msgid "Click to capture mouse" msgstr "Kliknite da uhvatite miš" @@ -778,8 +778,8 @@ msgstr "%u MB (CHS: %i, %i, %i)" msgid "Floppy %i (%s): %ls" msgstr "Disketa %i (%s): %ls" -msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" -msgstr "Sve slike (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Napredne sektorske slike (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Osnovne sektorske slike (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux slike (*.FDI *.fdi);;Površinske slike (*.86F *.86f *.MFM *.mfm);;Sve datoteke (*)" +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "Sve slike (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Napredne sektorske slike (*.imd *.json *.td0);;Osnovne sektorske slike (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux slike (*.fdi);;Površinske slike (*.86f *.mfm);;Sve datoteke (*.*)" msgid "Unable to initialize FreeType" msgstr "Nije moguće inicijalizirati FreeType" @@ -799,8 +799,8 @@ msgstr "Nije moguće inicijalizirati GhostScript" msgid "MO %i (%ls): %ls" msgstr "MO %i (%ls): %ls" -msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" -msgstr "MO slike (*.IM? *.im? *.MDI *.mdi);;Svi datoteke (*)" +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "MO slike (*.im? *.mdi);;Svi datoteke (*.*)" msgid "Welcome to 86Box!" msgstr "Dobrodošli u 86Box!" @@ -889,8 +889,8 @@ msgstr "Resetiraj" msgid "Don't reset" msgstr "Ne resetiraj" -msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" -msgstr "CD-ROM slike (*.ISO *.iso *.CUE *.cue);;Sve datoteke (*)" +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "CD-ROM slike (*.iso *.cue);;Sve datoteke (*.*)" msgid "%hs Device Configuration" msgstr "Konfiguracija uređaja %hs " @@ -898,8 +898,8 @@ msgstr "Konfiguracija uređaja %hs " msgid "Monitor in sleep mode" msgstr "Ekran u stanju mirovanja" -msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" -msgstr "OpenGL shaderi (*.GLSL *.glsl);;Sve datoteke (*)" +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "OpenGL shaderi (*.glsl);;Sve datoteke (*.*)" msgid "OpenGL options" msgstr "OpenGL opcije" @@ -916,14 +916,14 @@ msgstr "Nastavi" msgid "Cassette: %s" msgstr "Audio kaseta: %s" -msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" -msgstr "Slike audio kasete (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Sve datoteke (*)" +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Slike audio kasete (*.pcm *.raw *.wav *.cas);;Sve datoteke (*.*)" msgid "Cartridge %i: %ls" msgstr "Kaseta %i: %ls" -msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" -msgstr "Slike kasete (*.A *.a *.B *.b *.JRC *.jrc);;Sve datoteke (*)" +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "Slike kasete (*.a *.b *.jrc);;Sve datoteke (*.*)" msgid "Error initializing renderer" msgstr "Nije moguće inicijalizirati renderer" @@ -979,8 +979,8 @@ msgstr "HDI disk image datoteke ne mogu biti veće od 4 GB." msgid "Disk images cannot be larger than 127 GB." msgstr "Slike tvrdog diska ne mogu biti veće od 127 GB." -msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" -msgstr "Slike za tvrde diskove (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Sve datoteke (*)" +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Slike za tvrde diskove (*.hd? *.im? *.vhd);;Sve datoteke (*.*)" msgid "Unable to read file" msgstr "Nije moguće pročitati datoteku" @@ -1051,8 +1051,8 @@ msgstr "Veliki blokovi (2 MB)" msgid "Small blocks (512 KB)" msgstr "Mali blokovi (512 KB)" -msgid "VHD files (*.VHD *.vhd);;All files (*)" -msgstr "VHD slike (*.VHD *.vhd);;Sve datoteke (*)" +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "VHD slike (*.vhd);;Sve datoteke (*.*)" msgid "Select the parent VHD" msgstr "Izaberi matičnu sliku VHD" diff --git a/src/qt/languages/hu-HU.po b/src/qt/languages/hu-HU.po index b57a4e33c..94bf0ed5c 100644 --- a/src/qt/languages/hu-HU.po +++ b/src/qt/languages/hu-HU.po @@ -1,6 +1,3 @@ -msgid "Translated by" -msgstr "Laci bá'" - msgid "&Action" msgstr "&Művelet" @@ -598,7 +595,10 @@ msgstr "ISABugger eszköz" msgid "POST card" msgstr "POST kártya" -msgid "Segoe UI" +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" msgstr "Segoe UI" msgid "86Box" @@ -622,8 +622,8 @@ msgstr "Sebesség" msgid "ZIP %03i %i (%s): %ls" msgstr "ZIP %03i %i (%s): %ls" -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" -msgstr "ZIP-lemezképek (*.IM? *.im? *.ZDI *.zdi)" +msgid "ZIP images (*.im? *.zdi)" +msgstr "ZIP-lemezképek (*.im? *.zdi)" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "A 86Box nem talált használható ROM-képeket\n\nKérem töltse le a ROM készletet és bontsa ki a \"roms\" könyvtárba." @@ -631,8 +631,8 @@ msgstr "A 86Box nem talált használható ROM-képeket\n\nKérem download a ROM set and extract it into the \"roms\" directory." msgstr "86Box non può trovare immagini ROM utilizzabili.\n\nPlease download a ROM set and extract it into the \"roms\" directory." @@ -631,8 +631,8 @@ msgstr "86Box non può trovare immagini ROM utilizzabili.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Boxで使用可能なROMイメージが見つかりませんでした。\n\nROMセットをダウンロードして、「roms」ディレクトリに解凍してください。" @@ -631,8 +631,8 @@ msgstr "86Boxで使用可能なROMイメージが見つかりませんでした msgid "(empty)" msgstr "(空)" -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" -msgstr "ZIPイメージ (*.IM? *.im? *.ZDI *.zdi);;すべてのファイル (*)" +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "ZIPイメージ (*.im? *.zdi);;すべてのファイル (*.*)" msgid "Turbo" msgstr "高速" @@ -643,8 +643,8 @@ msgstr "オン" msgid "Off" msgstr "オフ" -msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" -msgstr "すべてのイメージ (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;基本的なセクターイメージ (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;表面イメージ (*.86F *.86f)" +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "すべてのイメージ (*.86f *.dsk *.flp *.im? *.*fd?);;基本的なセクターイメージ (*.dsk *.flp *.im? *.img *.*fd?);;表面イメージ (*.86f)" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "roms/machinesディレクトリにROMがないため、マシン「%hs」は使用できません。使用可能なマシンに切り替えます。" @@ -685,8 +685,8 @@ msgstr "その他のリムーバブルデバイス" msgid "Other peripherals" msgstr "その他の周辺装置" -msgid "Surface images (*.86F *.86f)" -msgstr "表面イメージ (*.86F *.86f)" +msgid "Surface images (*.86f)" +msgstr "表面イメージ (*.86f)" msgid "Click to capture mouse" msgstr "クリックするとマウスをキャプチャします" @@ -778,8 +778,8 @@ msgstr "%u MB (CHS: %i, %i, %i)" msgid "Floppy %i (%s): %ls" msgstr "フロッピー %i (%s): %ls" -msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" -msgstr "すべてのイメージ (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;アドバンスドセクターイメージ (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;基本セクターイメージ (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;フラックスイメージ (*.FDI *.fdi);;表面イメージ (*.86F *.86f *.MFM *.mfm);;すべてのファイル (*)" +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "すべてのイメージ (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;アドバンスドセクターイメージ (*.imd *.json *.td0);;基本セクターイメージ (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;フラックスイメージ (*.fdi);;表面イメージ (*.86f *.mfm);;すべてのファイル (*.*)" msgid "Unable to initialize FreeType" msgstr "FreeTypeが初期化できません" @@ -799,8 +799,8 @@ msgstr "Ghostscriptが初期化できません" msgid "MO %i (%ls): %ls" msgstr "光磁気 %i (%ls): %ls" -msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" -msgstr "光磁気イメージ (*.IM? *.im? *.MDI *.mdi);;すべてのファイル (*)" +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "光磁気イメージ (*.im? *.mdi);;すべてのファイル (*.*)" msgid "Welcome to 86Box!" msgstr "86Boxへようこそ!" @@ -889,8 +889,8 @@ msgstr "リセット" msgid "Don't reset" msgstr "リセットしない" -msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" -msgstr "CD-ROMイメージ (*.ISO *.iso *.CUE *.cue);;すべてのファイル (*)" +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "CD-ROMイメージ (*.iso *.cue);;すべてのファイル (*.*)" msgid "%hs Device Configuration" msgstr "%hs デバイスの設定" @@ -898,8 +898,8 @@ msgstr "%hs デバイスの設定" msgid "Monitor in sleep mode" msgstr "モニターのスリープモード" -msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" -msgstr "OpenGLシェーダー (*.GLSL *.glsl);;すべてのファイル (*)" +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "OpenGLシェーダー (*.glsl);;すべてのファイル (*.*)" msgid "OpenGL options" msgstr "OpenGL設定" @@ -916,14 +916,14 @@ msgstr "続行" msgid "Cassette: %s" msgstr "カセット: %s" -msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" -msgstr "カセットイメージ (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;すべてのファイル (*)" +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "カセットイメージ (*.pcm *.raw *.wav *.cas);;すべてのファイル (*.*)" msgid "Cartridge %i: %ls" msgstr "カートリッジ %i: %ls" -msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" -msgstr "カートリッジイメージ (*.A *.a *.B *.b *.JRC *.jrc);;すべてのファイル (*)" +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "カートリッジイメージ (*.a *.b *.jrc);;すべてのファイル (*.*)" msgid "Error initializing renderer" msgstr "レンダラーの初期化エラー" @@ -979,8 +979,8 @@ msgstr "HDIディスクイメージは4GBを超えることはできません。 msgid "Disk images cannot be larger than 127 GB." msgstr "ディスクイメージは127GBを超えることはできません。" -msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" -msgstr "ハードディスクイメージ (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;すべてのファイル (*)" +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "ハードディスクイメージ (*.hd? *.im? *.vhd);;すべてのファイル (*.*)" msgid "Unable to read file" msgstr "ファイルの読み込みができません" @@ -1051,8 +1051,8 @@ msgstr "大型ブロック (2 MB)" msgid "Small blocks (512 KB)" msgstr "小型ブロック (512 KB)" -msgid "VHD files (*.VHD *.vhd);;All files (*)" -msgstr "VHDファイル (*.VHD *.vhd);;すべてのファイル (*)" +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "VHDファイル (*.vhd);;すべてのファイル (*.*)" msgid "Select the parent VHD" msgstr "親VHDの選択" diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index 8999a95e9..a2bd49c10 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -1,6 +1,3 @@ -msgid "Translated by" -msgstr "Unknown" - msgid "&Action" msgstr "동작(&A)" @@ -598,7 +595,10 @@ msgstr "ISABugger 장치" msgid "POST card" msgstr "POST 카드" -msgid "Segoe UI" +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" msgstr "Malgun Gothic" msgid "86Box" @@ -622,8 +622,8 @@ msgstr "속도" msgid "ZIP %03i %i (%s): %ls" msgstr "ZIP %03i %i (%s): %ls" -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" -msgstr "ZIP 이미지 (*.IM? *.im? *.ZDI *.zdi)" +msgid "ZIP images (*.im? *.zdi)" +msgstr "ZIP 이미지 (*.im? *.zdi)" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box에서 사용 가능한 ROM 이미지를 찾을 수 없습니다.\n\nROM 세트를다운로드 후 \"roms\" 디렉토리에 압축을 풀어 주세요." @@ -631,8 +631,8 @@ msgstr "86Box에서 사용 가능한 ROM 이미지를 찾을 수 없습니다.\n msgid "(empty)" msgstr "(비었음)" -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" -msgstr "ZIP 이미지 (*.IM? *.im? *.ZDI *.zdi);;모든 파일 (*)" +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "ZIP 이미지 (*.im? *.zdi);;모든 파일 (*.*)" msgid "Turbo" msgstr "터보" @@ -643,8 +643,8 @@ msgstr "켜짐" msgid "Off" msgstr "꺼짐" -msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" -msgstr "모든 이미지 (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;기본 섹터 이미지 (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;표면 이미지 (*.86F *.86f)" +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "모든 이미지 (*.86f *.dsk *.flp *.im? *.*fd?);;기본 섹터 이미지 (*.dsk *.flp *.im? *.img *.*fd?);;표면 이미지 (*.86f)" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "roms/machines 디렉토리에 필요한 롬파일이 없어 기종 \"%hs\"을(를) 사용할 수 없습니다. 사용 가능한 기종으로 변경합니다." @@ -685,8 +685,8 @@ msgstr "기타 이동식 저장장치" msgid "Other peripherals" msgstr "기타 주변기기" -msgid "Surface images (*.86F *.86f)" -msgstr "표면 이미지 (*.86F *.86f)" +msgid "Surface images (*.86f)" +msgstr "표면 이미지 (*.86f)" msgid "Click to capture mouse" msgstr "이 창을 클릭하면 마우스를 사용합니다" @@ -778,8 +778,8 @@ msgstr "%u MB (CHS: %i, %i, %i)" msgid "Floppy %i (%s): %ls" msgstr "플로피 %i (%s): %ls" -msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" -msgstr "모든 이미지 (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;어드밴스드 섹터 이미지 (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;기본 섹터 이미지 (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;플럭스 이미지 (*.FDI *.fdi);;표면 이미지 (*.86F *.86f *.MFM *.mfm);;모든 파일 (*)" +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "모든 이미지 (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;어드밴스드 섹터 이미지 (*.imd *.json *.td0);;기본 섹터 이미지 (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;플럭스 이미지 (*.fdi);;표면 이미지 (*.86f *.mfm);;모든 파일 (*.*)" msgid "Unable to initialize FreeType" msgstr "FreeType을 초기화할 수 없습니다" @@ -799,8 +799,8 @@ msgstr "Ghostscript를 초기화할 수 없습니다" msgid "MO %i (%ls): %ls" msgstr "광자기 %i (%ls): %ls" -msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" -msgstr "광자기 이미지 (*.IM? *.im? *.MDI *.mdi);;모든 파일 (*)" +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "광자기 이미지 (*.im? *.mdi);;모든 파일 (*.*)" msgid "Welcome to 86Box!" msgstr "86Box에 어서오세요!" @@ -889,8 +889,8 @@ msgstr "재시작" msgid "Don't reset" msgstr "재시작 안함" -msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" -msgstr "CD-ROM 이미지 (*.ISO *.iso *.CUE *.cue);;모든 파일 (*)" +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "CD-ROM 이미지 (*.iso *.cue);;모든 파일 (*.*)" msgid "%hs Device Configuration" msgstr "%hs 장치 설정" @@ -898,8 +898,8 @@ msgstr "%hs 장치 설정" msgid "Monitor in sleep mode" msgstr "모니터 절전 모드" -msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" -msgstr "OpenGL 쉐이더 (*.GLSL *.glsl);;모든 파일 (*)" +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "OpenGL 쉐이더 (*.glsl);;모든 파일 (*.*)" msgid "OpenGL options" msgstr "OpenGL 설정" @@ -916,14 +916,14 @@ msgstr "계속" msgid "Cassette: %s" msgstr "카세트: %s" -msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" -msgstr "카세트 이미지 (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;모든 파일 (*)" +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "카세트 이미지 (*.pcm *.raw *.wav *.cas);;모든 파일 (*.*)" msgid "Cartridge %i: %ls" msgstr "카트리지 %i: %ls" -msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" -msgstr "카트리지 이미지 (*.A *.a *.B *.b *.JRC *.jrc);;모든 파일 (*)" +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "카트리지 이미지 (*.a *.b *.jrc);;모든 파일 (*.*)" msgid "Error initializing renderer" msgstr "Error initializing renderer" @@ -979,8 +979,8 @@ msgstr "HDI 디스크 이미지는 4GB 이상으로 지정할 수 없습니다" msgid "Disk images cannot be larger than 127 GB." msgstr "디스크 이미지는 127GB 이상으로 지정할 수 없습니다" -msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" -msgstr "하드 디스크 이미지 (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;모든 파일 (*)" +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "하드 디스크 이미지 (*.hd? *.im? *.vhd);;모든 파일 (*.*)" msgid "Unable to read file" msgstr "파일을 읽을 수 없습니다" @@ -1051,8 +1051,8 @@ msgstr "대형 블록 (2 MB)" msgid "Small blocks (512 KB)" msgstr "소형 블록 (512 KB)" -msgid "VHD files (*.VHD *.vhd);;All files (*)" -msgstr "VHD 파일 (*.VHD *.vhd);;모든 파일 (*)" +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "VHD 파일 (*.vhd);;모든 파일 (*.*)" msgid "Select the parent VHD" msgstr "부모 VHD 선택" diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po index 22fc4526e..a2a255cfb 100644 --- a/src/qt/languages/pl-PL.po +++ b/src/qt/languages/pl-PL.po @@ -1,6 +1,3 @@ -msgid "Translated by" -msgstr "Unknown" - msgid "&Action" msgstr "&Akcje" @@ -598,7 +595,10 @@ msgstr "Urządzenie ISABugger" msgid "POST card" msgstr "Karta POST" -msgid "Segoe UI" +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" msgstr "Segoe UI" msgid "86Box" @@ -622,8 +622,8 @@ msgstr "Szybkość" msgid "ZIP %03i %i (%s): %ls" msgstr "ZIP %03i %i (%s): %ls" -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" -msgstr "Obrazy ZIP (*.IM? *.im? *.ZDI *.zdi)" +msgid "ZIP images (*.im? *.zdi)" +msgstr "Obrazy ZIP (*.im? *.zdi)" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box nie może znaleźć obrazów ROM nadających się do użytku.\n\nProszę pobrać zestaw obrazów ROM ze strony download, i rozpakować je do katalogu \"roms\"." @@ -631,8 +631,8 @@ msgstr "86Box nie może znaleźć obrazów ROM nadających się do użytku.\n\nP msgid "(empty)" msgstr "(pusty)" -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" -msgstr "Obrazy ZIP (*.IM? *.im? *.ZDI *.zdi);;Wszystkie pliki (*)" +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "Obrazy ZIP (*.im? *.zdi);;Wszystkie pliki (*.*)" msgid "Turbo" msgstr "Turbo" @@ -643,8 +643,8 @@ msgstr "Włącz" msgid "Off" msgstr "Wyłącz" -msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" -msgstr "Wszystkie obrazy (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Podstawowe obrazy sektorów(*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Obrazy powierzchniowe (*.86F *.86f)" +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "Wszystkie obrazy (*.86f *.dsk *.flp *.im? *.*fd?);;Podstawowe obrazy sektorów(*.dsk *.flp *.im? *.img *.*fd?);;Obrazy powierzchniowe (*.86f)" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "Maszyna \"%hs\" nie jest dostępna, ponieważ brakuje obrazów ROM w katalogu roms/machines. Przełączanie na dostępną maszynę." @@ -685,8 +685,8 @@ msgstr "Inne urządzenia wymienne" msgid "Other peripherals" msgstr "Inne urządzenia peryferyjne" -msgid "Surface images (*.86F *.86f)" -msgstr "Obrazy powierzchniowe (*.86F *.86f)" +msgid "Surface images (*.86f)" +msgstr "Obrazy powierzchniowe (*.86f)" msgid "Click to capture mouse" msgstr "Kliknij w celu przechwycenia myszy" @@ -778,8 +778,8 @@ msgstr "%u MB (CHS: %i, %i, %i)" msgid "Floppy %i (%s): %ls" msgstr "Dyskietka %i (%s): %ls" -msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" -msgstr "Wszystkie obrazy (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Zaawansowane obrazy sektorów (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Podstawowe obrazy sektorów (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Obrazy powierzchniowe (*.86F *.86f *.MFM *.mfm);;All files (*)" +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "Wszystkie obrazy (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Zaawansowane obrazy sektorów (*.imd *.json *.td0);;Podstawowe obrazy sektorów (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Obrazy powierzchniowe (*.86f *.mfm);;All files (*.*)" msgid "Unable to initialize FreeType" msgstr "Nie można zainicjować FreeType" @@ -799,8 +799,8 @@ msgstr "Nie można zainicjować Ghostscript" msgid "MO %i (%ls): %ls" msgstr "MO %i (%ls): %ls" -msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" -msgstr "Obrazy MO (*.IM? *.im? *.MDI *.mdi);;All files (*)" +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "Obrazy MO (*.im? *.mdi);;All files (*.*)" msgid "Welcome to 86Box!" msgstr "Witamy w 86Box!" @@ -889,8 +889,8 @@ msgstr "Przywróć" msgid "Don't reset" msgstr "Nie przywracaj" -msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" -msgstr "Obrazy CD-ROM (*.ISO *.iso *.CUE *.cue);;All files (*)" +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "Obrazy CD-ROM (*.iso *.cue);;All files (*.*)" msgid "%hs Device Configuration" msgstr "Konfiguracja urządzenia %hs" @@ -898,8 +898,8 @@ msgstr "Konfiguracja urządzenia %hs" msgid "Monitor in sleep mode" msgstr "Monitor w trybie czuwania" -msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" -msgstr "Shadery OpenGL (*.GLSL *.glsl);;Wszystkie pliki (*)" +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "Shadery OpenGL (*.glsl);;Wszystkie pliki (*.*)" msgid "OpenGL options" msgstr "Opcje OpenGL" @@ -916,14 +916,14 @@ msgstr "Kontynuuj" msgid "Cassette: %s" msgstr "Kaseta: %s" -msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" -msgstr "Obrazy kaset (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Wszystkie pliki (*)" +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Obrazy kaset (*.pcm *.raw *.wav *.cas);;Wszystkie pliki (*.*)" msgid "Cartridge %i: %ls" msgstr "Kartrydż %i: %ls" -msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" -msgstr "Obrazy kartrydżu (*.A *.a *.B *.b *.JRC *.jrc);;Wszystkie pliki (*)" +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "Obrazy kartrydżu (*.a *.b *.jrc);;Wszystkie pliki (*.*)" msgid "Error initializing renderer" msgstr "Błąd inicjalizacji renderera" @@ -979,8 +979,8 @@ msgstr "Obrazy dysków HDI nie mogą być większe niż 4 GB." msgid "Disk images cannot be larger than 127 GB." msgstr "Obrazy dysków nie mogą być większe niż 127 GB." -msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" -msgstr "Obrazy dysku twardego (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Wszystkie pliki (*)" +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Obrazy dysku twardego (*.hd? *.im? *.vhd);;Wszystkie pliki (*.*)" msgid "Unable to read file" msgstr "Nie można odczytać pliku" @@ -1051,8 +1051,8 @@ msgstr "Duże bloki (2 MB)" msgid "Small blocks (512 KB)" msgstr "Małe bloki (512 KB)" -msgid "VHD files (*.VHD *.vhd);;All files (*)" -msgstr "Pliki VHD (*.VHD *.vhd);;Wszystkie pliki (*)" +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "Pliki VHD (*.vhd);;Wszystkie pliki (*.*)" msgid "Select the parent VHD" msgstr "Wybierz nadrzędny plik VHD" diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index 6d6e792c3..d8b971294 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -1,6 +1,3 @@ -msgid "Translated by" -msgstr "Unknown" - msgid "&Action" msgstr "&Ação" @@ -598,7 +595,10 @@ msgstr "Dispositivo ISABugger" msgid "POST card" msgstr "Placa de diagnóstico" -msgid "Segoe UI" +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" msgstr "Segoe UI" msgid "86Box" @@ -622,8 +622,8 @@ msgstr "Velocidade" msgid "ZIP %03i %i (%s): %ls" msgstr "ZIP %03i %i (%s): %ls" -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" -msgstr "Imagens ZIP (*.IM? *.im? *.ZDI *.zdi)" +msgid "ZIP images (*.im? *.zdi)" +msgstr "Imagens ZIP (*.im? *.zdi)" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "O 86Box não conseguiu encontrar nenhuma imagem de ROM utilizável.\n\nPor favor, baixe um conjunto de ROM e extraia no diretório \"roms\"." @@ -631,8 +631,8 @@ msgstr "O 86Box não conseguiu encontrar nenhuma imagem de ROM utilizável.\n\nP msgid "(empty)" msgstr "(vazio)" -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" -msgstr "Imagens ZIP (*.IM? *.im? *.ZDI *.zdi);;Todos os arquivos (*)" +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "Imagens ZIP (*.im? *.zdi);;Todos os arquivos (*.*)" msgid "Turbo" msgstr "Turbo" @@ -643,8 +643,8 @@ msgstr "Lig." msgid "Off" msgstr "Desl." -msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" -msgstr "Todas as imagens (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Imagens de setor básico (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Imagens de superfície (*.86F *.86f)" +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "Todas as imagens (*.86f *.dsk *.flp *.im? *.*fd?);;Imagens de setor básico (*.dsk *.flp *.im? *.img *.*fd?);;Imagens de superfície (*.86f)" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "A máquina \"%hs\" não está disponível devido à falta de ROMs no diretório roms/machines. Mudando para uma máquina disponível." @@ -685,8 +685,8 @@ msgstr "Dispos. removíveis" msgid "Other peripherals" msgstr "Outros periféricos" -msgid "Surface images (*.86F *.86f)" -msgstr "Imagens de superfície (*.86F *.86f)" +msgid "Surface images (*.86f)" +msgstr "Imagens de superfície (*.86f)" msgid "Click to capture mouse" msgstr "Clique para capturar o mouse" @@ -778,8 +778,8 @@ msgstr "%u MB (CHS: %i, %i, %i)" msgid "Floppy %i (%s): %ls" msgstr "Disquete %i (%s): %ls" -msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" -msgstr "Todas as imagens (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Imagens de setor avançado (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Imagens de setor básico (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Imagens de fluxo (*.FDI *.fdi);;Imagens de superfície (*.86F *.86f *.MFM *.mfm);;Todos os arquivos (*)" +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "Todas as imagens (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Imagens de setor avançado (*.imd *.json *.td0);;Imagens de setor básico (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Imagens de fluxo (*.fdi);;Imagens de superfície (*.86f *.mfm);;Todos os arquivos (*.*)" msgid "Unable to initialize FreeType" msgstr "Não foi possível inicializar o FreeType" @@ -799,8 +799,8 @@ msgstr "Não é possível inicializar o Ghostscript" msgid "MO %i (%ls): %ls" msgstr "Magneto-óptico %i (%ls): %ls" -msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" -msgstr "Imagens magneto-ópticas (*.IM? *.im? *.MDI *.mdi);;Todos os arquivos (*)" +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "Imagens magneto-ópticas (*.im? *.mdi);;Todos os arquivos (*.*)" msgid "Welcome to 86Box!" msgstr "Bem-vindo ao 86Box!" @@ -889,8 +889,8 @@ msgstr "Reiniciar" msgid "Don't reset" msgstr "Não reiniciar" -msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" -msgstr "Imagens de CD-ROM (*.ISO *.iso *.CUE *.cue);;Todos os arquivos (*)" +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "Imagens de CD-ROM (*.iso *.cue);;Todos os arquivos (*.*)" msgid "%hs Device Configuration" msgstr "Configuração do dispositivo %hs" @@ -898,8 +898,8 @@ msgstr "Configuração do dispositivo %hs" msgid "Monitor in sleep mode" msgstr "Monitor em modo de suspensão" -msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" -msgstr "Shaders OpenGL (*.GLSL *.glsl);;Todos os arquivos (*)" +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "Shaders OpenGL (*.glsl);;Todos os arquivos (*.*)" msgid "OpenGL options" msgstr "Opções do OpenGL" @@ -916,14 +916,14 @@ msgstr "Continuar" msgid "Cassette: %s" msgstr "Cassete: %s" -msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" -msgstr "Imagens de cassete (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Todos os arquivos (*)" +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Imagens de cassete (*.pcm *.raw *.wav *.cas);;Todos os arquivos (*.*)" msgid "Cartridge %i: %ls" msgstr "Cartucho %i: %ls" -msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" -msgstr "Imagens de cartucho (*.A *.a *.B *.b *.JRC *.jrc);;Todos os arquivos (*)" +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "Imagens de cartucho (*.a *.b *.jrc);;Todos os arquivos (*.*)" msgid "Error initializing renderer" msgstr "Erro ao inicializar o renderizador" @@ -979,8 +979,8 @@ msgstr "As imagens de disco HDI não podem ser maiores do que 4GB." msgid "Disk images cannot be larger than 127 GB." msgstr "As imagens de disco não podem ser maiores do que 127GB." -msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" -msgstr "Imagens de disco rígido (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Todos os arquivos (*)" +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Imagens de disco rígido (*.hd? *.im? *.vhd);;Todos os arquivos (*.*)" msgid "Unable to read file" msgstr "Não foi possível ler o arquivo" @@ -1051,8 +1051,8 @@ msgstr "Blocos grandes (2 MB)" msgid "Small blocks (512 KB)" msgstr "Blocos pequenos (512 KB)" -msgid "VHD files (*.VHD *.vhd);;All files (*)" -msgstr "Arquivos VHD (*.VHD *.vhd);;Todos os arquivos (*)" +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "Arquivos VHD (*.vhd);;Todos os arquivos (*.*)" msgid "Select the parent VHD" msgstr "Selecione o VHD pai" diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index b15fa5786..42626b6d5 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -1,6 +1,3 @@ -msgid "Translated by" -msgstr "Unknown" - msgid "&Action" msgstr "&Ação" @@ -598,7 +595,10 @@ msgstr "Dispositivo ISABugger" msgid "POST card" msgstr "Placa POST" -msgid "Segoe UI" +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" msgstr "Segoe UI" msgid "86Box" @@ -622,8 +622,8 @@ msgstr "Velocidade" msgid "ZIP %03i %i (%s): %ls" msgstr "ZIP %03i %i (%s): %ls" -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" -msgstr "Imagens ZIP (*.IM? *.im? *.ZDI *.zdi)" +msgid "ZIP images (*.im? *.zdi)" +msgstr "Imagens ZIP (*.im? *.zdi)" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "O 86Box não conseguiu encontrar nenhuma imagem ROM utilizável.\n\nPor favor, vá a href=\"https://github.com/86Box/roms/releases/latest\">descarregue um pacote ROM e instale-o na pasta \"roms\"." @@ -631,8 +631,8 @@ msgstr "O 86Box não conseguiu encontrar nenhuma imagem ROM utilizável.\n\nPor msgid "(empty)" msgstr "(empty)" -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" -msgstr "Imagens ZIP (*.IM? *.im? *.ZDI *.zdi);;Todos os ficheiros (*)" +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "Imagens ZIP (*.im? *.zdi);;Todos os ficheiros (*.*)" msgid "Turbo" msgstr "Turbo" @@ -643,8 +643,8 @@ msgstr "Ativado" msgid "Off" msgstr "Desativado" -msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" -msgstr "Todas as imagens (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Imagens básicas de sector (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Imagens de superfície (*.86F *.86f)" +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "Todas as imagens (*.86f *.dsk *.flp *.im? *.*fd?);;Imagens básicas de sector (*.dsk *.flp *.im? *.img *.*fd?);;Imagens de superfície (*.86f)" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "A máquina \"%hs\" não está disponível devido à falta de ROMs na pasta roms/machines. A mudar para uma máquina disponível." @@ -685,8 +685,8 @@ msgstr "Outros dispostivos removíveis" msgid "Other peripherals" msgstr "Outros dispositivos" -msgid "Surface images (*.86F *.86f)" -msgstr "Imagens de superfície (*.86F *.86f)" +msgid "Surface images (*.86f)" +msgstr "Imagens de superfície (*.86f)" msgid "Click to capture mouse" msgstr "Clique para capturar o rato" @@ -778,8 +778,8 @@ msgstr "%u MB (CCS: %i, %i, %i)" msgid "Floppy %i (%s): %ls" msgstr "Disquete %i (%s): %ls" -msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" -msgstr "Todas as imagens (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Imagens avançadas de sector (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Imagens básicas de sector (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Imagens de fluxo (*.FDI *.fdi);;Imagens de superfície (*.86F *.86f *.MFM *.mfm);;Todos os ficheiros (*)" +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "Todas as imagens (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Imagens avançadas de sector (*.imd *.json *.td0);;Imagens básicas de sector (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Imagens de fluxo (*.fdi);;Imagens de superfície (*.86f *.mfm);;Todos os ficheiros (*.*)" msgid "Unable to initialize FreeType" msgstr "Não foi possível inicializar o FreeType" @@ -799,8 +799,8 @@ msgstr "Não foi possível inicializar o Ghostscript" msgid "MO %i (%ls): %ls" msgstr "Magneto-óptico %i (%ls): %ls" -msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" -msgstr "Imagens magneto-ópticas (*.IM? *.im? *.MDI *.mdi);;Todas as imagens (*)" +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "Imagens magneto-ópticas (*.im? *.mdi);;Todas as imagens (*.*)" msgid "Welcome to 86Box!" msgstr "Bem-vindos ao 86Box!" @@ -889,8 +889,8 @@ msgstr "Reiniciar" msgid "Don't reset" msgstr "Não reiniciar" -msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" -msgstr "Imagens CD-ROM (*.ISO *.iso *.CUE *.cue);;Todos os ficheiros (*)" +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "Imagens CD-ROM (*.iso *.cue);;Todos os ficheiros (*.*)" msgid "%hs Device Configuration" msgstr "Configuração de dispositivo %hs" @@ -898,8 +898,8 @@ msgstr "Configuração de dispositivo %hs" msgid "Monitor in sleep mode" msgstr "Ecrã em modo de sono" -msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" -msgstr "Shaders OpenGL (*.GLSL *.glsl);;Todos os ficheiros (*)" +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "Shaders OpenGL (*.glsl);;Todos os ficheiros (*.*)" msgid "OpenGL options" msgstr "Opções de OpenGL" @@ -916,14 +916,14 @@ msgstr "Continuar" msgid "Cassette: %s" msgstr "Cassete: %s" -msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" -msgstr "Imagens de cassete (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Todos os ficheiros (*)" +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Imagens de cassete (*.pcm *.raw *.wav *.cas);;Todos os ficheiros (*.*)" msgid "Cartridge %i: %ls" msgstr "Cartucho %i: %ls" -msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" -msgstr "Imagens de cartucho (*.A *.a *.B *.b *.JRC *.jrc);;Todos os ficheiros (*)" +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "Imagens de cartucho (*.a *.b *.jrc);;Todos os ficheiros (*.*)" msgid "Error initializing renderer" msgstr "Error initializing renderer" @@ -979,8 +979,8 @@ msgstr "As imagens de disco HDI não podem ter mais de 4 GB." msgid "Disk images cannot be larger than 127 GB." msgstr "As imagens de disco não podem ter mais de 127 GB." -msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" -msgstr "Imagens de disco rígido (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Todos os ficheiros (*)" +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Imagens de disco rígido (*.hd? *.im? *.vhd);;Todos os ficheiros (*.*)" msgid "Unable to read file" msgstr "Não foi possível ler o ficheiro" @@ -1051,8 +1051,8 @@ msgstr "Blocos grandes (2 MB)" msgid "Small blocks (512 KB)" msgstr "Blocos pequenos (512 KB)" -msgid "VHD files (*.VHD *.vhd);;All files (*)" -msgstr "Ficheiros VHD (*.VHD *.vhd);;Todos os ficheiros (*)" +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "Ficheiros VHD (*.vhd);;Todos os ficheiros (*.*)" msgid "Select the parent VHD" msgstr "Seleccione o VHD pai" diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index 475f92713..cb7c0b792 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -1,6 +1,3 @@ -msgid "Translated by" -msgstr "Unknown" - msgid "&Action" msgstr "&Действие" @@ -598,7 +595,10 @@ msgstr "Устройство ISABugger" msgid "POST card" msgstr "Карта POST" -msgid "Segoe UI" +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" msgstr "Segoe UI" msgid "86Box" @@ -622,8 +622,8 @@ msgstr "Скорость" msgid "ZIP %03i %i (%s): %ls" msgstr "ZIP %03i %i (%s): %ls" -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" -msgstr "Образы ZIP (*.IM? *.im? *.ZDI *.zdi)" +msgid "ZIP images (*.im? *.zdi)" +msgstr "Образы ZIP (*.im? *.zdi)" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box не смог найти ни одного подходящего для использования файла с ПЗУ.\n\nПожалуйста скачайте набор ПЗУ и извлеките его в каталог \"roms\"." @@ -631,8 +631,8 @@ msgstr "86Box не смог найти ни одного подходящего msgid "(empty)" msgstr "(пусто)" -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)" -msgstr "Образы ZIP (*.IM? *.im? *.ZDI *.zdi);;Все файлы (*)" +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "Образы ZIP (*.im? *.zdi);;Все файлы (*.*)" msgid "Turbo" msgstr "Турбо" @@ -643,8 +643,8 @@ msgstr "Вкл" msgid "Off" msgstr "Выкл" -msgid "All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)" -msgstr "Все образы (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Простые посекторные образы (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface образы (*.86F *.86f)" +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "Все образы (*.86f *.dsk *.flp *.im? *.*fd?);;Простые посекторные образы (*.dsk *.flp *.im? *.img *.*fd?);;Surface образы (*.86f)" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "Системная плата \"%hs\" недоступна из-за отсутствия файла её ПЗУ в каталоге roms/machines. Переключение на доступную системную плату." @@ -685,8 +685,8 @@ msgstr "Другие съёмные устр-ва" msgid "Other peripherals" msgstr "Другая периферия" -msgid "Surface images (*.86F *.86f)" -msgstr "Образы Surface (*.86F *.86f)" +msgid "Surface images (*.86f)" +msgstr "Образы Surface (*.86f)" msgid "Click to capture mouse" msgstr "Щёлкните мышью для захвата курсора" @@ -778,8 +778,8 @@ msgstr "%u МБ (CHS: %i, %i, %i)" msgid "Floppy %i (%s): %ls" msgstr "Дисковод %i (%s): %ls" -msgid "All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)" -msgstr "Все образы (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Расширенные образы секторов (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Основные образы секторов (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Образы Flux (*.FDI *.fdi);;Образы Surface (*.86F *.86f *.MFM *.mfm);;Все файлы (*)" +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "Все образы (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Расширенные образы секторов (*.imd *.json *.td0);;Основные образы секторов (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Образы Flux (*.fdi);;Образы Surface (*.86f *.mfm);;Все файлы (*.*)" msgid "Unable to initialize FreeType" msgstr "Невозможно инициализировать FreeType" @@ -799,8 +799,8 @@ msgstr "Невозможно инициализировать Ghostscript" msgid "MO %i (%ls): %ls" msgstr "Магнитооптический %i (%ls): %ls" -msgid "MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)" -msgstr "Образы магнитооптических дисков (*.IM? *.im? *.MDI *.mdi);;Все файлы (*)" +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "Образы магнитооптических дисков (*.im? *.mdi);;Все файлы (*.*)" msgid "Welcome to 86Box!" msgstr "Добро пожаловать в 86Box!" @@ -889,8 +889,8 @@ msgstr "Перезагрузить" msgid "Don't reset" msgstr "Не перезагружать" -msgid "CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)" -msgstr "Образы CD-ROM (*.ISO *.iso *.CUE *.cue);;Все файлы (*)" +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "Образы CD-ROM (*.iso *.cue);;Все файлы (*.*)" msgid "%hs Device Configuration" msgstr "Конфигурация устройства %hs" @@ -898,8 +898,8 @@ msgstr "Конфигурация устройства %hs" msgid "Monitor in sleep mode" msgstr "Монитор в спящем режиме" -msgid "OpenGL Shaders (*.GLSL *.glsl);;All files (*)" -msgstr "Шейдеры OpenGL (*.GLSL *.glsl);;Все файлы (*)" +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "Шейдеры OpenGL (*.glsl);;Все файлы (*.*)" msgid "OpenGL options" msgstr "Параметры OpenGL" @@ -916,14 +916,14 @@ msgstr "Продолжить" msgid "Cassette: %s" msgstr "Кассета: %s" -msgid "Cassette images (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;All files (*)" -msgstr "Образы кассет (*.PCM *.pcm *.RAW *.raw *.WAV *.wav *.CAS *.cas);;Все файлы (*)" +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Образы кассет (*.pcm *.raw *.wav *.cas);;Все файлы (*.*)" msgid "Cartridge %i: %ls" msgstr "Картридж %i: %ls" -msgid "Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)" -msgstr "Образы картриджей (*.A *.a *.B *.b *.JRC *.jrc);;Все файлы (*)" +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "Образы картриджей (*.a *.b *.jrc);;Все файлы (*.*)" msgid "Error initializing renderer" msgstr "Error initializing renderer" @@ -979,8 +979,8 @@ msgstr "Размер образов дисков HDI не может превы msgid "Disk images cannot be larger than 127 GB." msgstr "Размер образов дисков не может превышать 127 ГБ." -msgid "Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)" -msgstr "Образы жёстких дисков (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;Все файлы (*)" +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Образы жёстких дисков (*.hd? *.im? *.vhd);;Все файлы (*.*)" msgid "Unable to read file" msgstr "Невозможно прочитать файл" @@ -1051,8 +1051,8 @@ msgstr "Большие блоки (2 МБ)" msgid "Small blocks (512 KB)" msgstr "Маленькие блоки (512 КБ)" -msgid "VHD files (*.VHD *.vhd);;All files (*)" -msgstr "Файлы VHD (*.VHD *.vhd);;Все файлы (*)" +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "Файлы VHD (*.vhd);;Все файлы (*.*)" msgid "Select the parent VHD" msgstr "Выберите родительский VHD" diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index e77f37a9b..dd034d4ae 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -1,6 +1,3 @@ -msgid "Translated by" -msgstr "Unknown" - msgid "&Action" msgstr "&Dejanja" @@ -598,7 +595,10 @@ msgstr "Naprava ISABugger" msgid "POST card" msgstr "Kartica POST" -msgid "Segoe UI" +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" msgstr "Segoe UI" msgid "86Box" @@ -622,8 +622,8 @@ msgstr "Hitrost" msgid "ZIP %03i %i (%s): %ls" msgstr "ZIP %03i %i (%s): %ls" -msgid "ZIP images (*.IM? *.im? *.ZDI *.zdi)" -msgstr "ZIP slike (*.IM? *.im? *.ZDI *.zdi)" +msgid "ZIP images (*.im? *.zdi)" +msgstr "ZIP slike (*.im? *.zdi)" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box ni našel nobenih uporabnih ROM slik.\n\nProsim prenesite set ROM-ov in ga razširite v mapo \"roms\"." @@ -631,8 +631,8 @@ msgstr "86Box ni našel nobenih uporabnih ROM slik.\n\nProsim download a ROM set and extract it into the \"roms\" directory." msgstr "86Box hiç bir kullanılabilir ROM imajı bulamadı.\n\nLütfen ROM setini indirin ve onu \"Roms\" klasörüne çıkarın." @@ -631,8 +631,8 @@ msgstr "86Box hiç bir kullanılabilir ROM imajı bulamadı.\n\nLütfen download a ROM set and extract it into the \"roms\" directory." msgstr "86Box 找不到任何可用的 ROM 镜像。\n\n请下载ROM 包并将其解压到 \"roms\" 文件夹。" @@ -631,8 +631,8 @@ msgstr "86Box 找不到任何可用的 ROM 镜像。\n\n请(this); MediaMenu::ptr = mm; status = std::make_unique(this); @@ -1505,4 +1509,16 @@ void MainWindow::hardReset() void MainWindow::togglePause() { ui->actionPause->trigger(); +} + +void MainWindow::changeEvent(QEvent* event) +{ + if (event->type() == QEvent::LanguageChange) + { + auto font_name = tr("FONT_NAME"); + auto font_size = tr("FONT_SIZE"); + setFont(QFont(font_name, font_size.toInt())); + } + + QWidget::changeEvent(event); } \ No newline at end of file diff --git a/src/qt/qt_mainwindow.hpp b/src/qt/qt_mainwindow.hpp index 76effef48..2d74af987 100644 --- a/src/qt/qt_mainwindow.hpp +++ b/src/qt/qt_mainwindow.hpp @@ -118,6 +118,7 @@ protected: bool eventFilter(QObject* receiver, QEvent* event) override; void showEvent(QShowEvent* event) override; void closeEvent(QCloseEvent* event) override; + void changeEvent(QEvent* event) override; private: Ui::MainWindow *ui; diff --git a/src/win/languages/hu-HU.rc b/src/win/languages/hu-HU.rc index ae7e51924..edc9f9192 100644 --- a/src/win/languages/hu-HU.rc +++ b/src/win/languages/hu-HU.rc @@ -4,7 +4,7 @@ // Translated by Laci bá', 2021 // -#define TRANSLATORS_NAME "Laci bá'" +//#define TRANSLATORS_NAME "Laci bá'" #ifdef _WIN32 LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT From d890cd2ebbf0a42d4fde74b592b728f663be7f1f Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sat, 22 Jan 2022 22:02:57 +0200 Subject: [PATCH 228/278] qt: Update pause action status when paused without using action --- src/qt/qt_main.cpp | 4 ---- src/qt/qt_mainwindow.cpp | 3 ++- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 8039b78cd..6df56c6e6 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -113,10 +113,6 @@ int main(int argc, char* argv[]) { fmt.setSwapInterval(0); QSurfaceFormat::setDefaultFormat(fmt); app.setStyle(new StyleOverride()); - QDirIterator it(":", QDirIterator::Subdirectories); - while (it.hasNext()) { - qDebug() << it.next() << "\n"; - } #ifdef __APPLE__ CocoaEventFilter cocoafilter; diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index c24d8bcd1..209ed27b8 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -79,7 +79,7 @@ MainWindow::MainWindow(QWidget *parent) : toolbar_spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); ui->toolBar->addWidget(toolbar_spacer); - auto toolbar_label = new QLabel(); + auto toolbar_label = new QLabel(); ui->toolBar->addWidget(toolbar_label); this->setWindowIcon(QIcon(":/settings/win/icons/86Box-yellow.ico")); @@ -104,6 +104,7 @@ MainWindow::MainWindow(QWidget *parent) : toolbar_label->setText(QString("%1 - %2").arg(parts[1], parts.last())); } #endif + ui->actionPause->setChecked(dopause); }); connect(this, &MainWindow::getTitleForNonQtThread, this, &MainWindow::getTitle_, Qt::BlockingQueuedConnection); From 067b49c8482e59077127df49d8b8efdacc3240fc Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sun, 23 Jan 2022 18:38:43 +0200 Subject: [PATCH 229/278] qt: fix .po line endings --- src/qt/languages/cs-CZ.po | 2382 ++++++++++++++++++------------------- src/qt/languages/de-DE.po | 2382 ++++++++++++++++++------------------- src/qt/languages/en-GB.po | 2382 ++++++++++++++++++------------------- src/qt/languages/es-ES.po | 2382 ++++++++++++++++++------------------- src/qt/languages/fi-FI.po | 2382 ++++++++++++++++++------------------- src/qt/languages/fr-FR.po | 2382 ++++++++++++++++++------------------- src/qt/languages/hr-HR.po | 2382 ++++++++++++++++++------------------- src/qt/languages/hu-HU.po | 2382 ++++++++++++++++++------------------- src/qt/languages/it-IT.po | 2382 ++++++++++++++++++------------------- src/qt/languages/ja-JP.po | 2382 ++++++++++++++++++------------------- src/qt/languages/ko-KR.po | 2382 ++++++++++++++++++------------------- src/qt/languages/pt-BR.po | 2382 ++++++++++++++++++------------------- src/qt/languages/pt-PT.po | 2382 ++++++++++++++++++------------------- src/qt/languages/ru-RU.po | 2382 ++++++++++++++++++------------------- src/qt/languages/sl-SI.po | 2382 ++++++++++++++++++------------------- src/qt/languages/tr-TR.po | 2382 ++++++++++++++++++------------------- src/qt/languages/zh-CN.po | 2382 ++++++++++++++++++------------------- 17 files changed, 20247 insertions(+), 20247 deletions(-) diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index 97b5222f0..f3844b13d 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -1,1191 +1,1191 @@ -msgid "&Action" -msgstr "&Akce" - -msgid "&Keyboard requires capture" -msgstr "&Klávesnice vyžaduje záběr" - -msgid "&Right CTRL is left ALT" -msgstr "&Pravý Ctrl je levý Alt" - -msgid "&Hard Reset..." -msgstr "&Resetovat" - -msgid "&Ctrl+Alt+Del\tCtrl+F12" -msgstr "&Ctrl+Alt+Del\tCtrl+F12" - -msgid "Ctrl+Alt+&Esc" -msgstr "Ctrl+Alt+&Esc" - -msgid "&Pause" -msgstr "P&ozastavit" - -msgid "E&xit..." -msgstr "&Ukončit" - -msgid "&View" -msgstr "&Zobrazení" - -msgid "&Hide status bar" -msgstr "&Schovat stavový řádek" - -msgid "Hide &toolbar" -msgstr "Schovat panel &nástrojů" - -msgid "&Resizeable window" -msgstr "&Měnitelná velikost okna" - -msgid "R&emember size && position" -msgstr "&Pamatovat velikost a pozici" - -msgid "Re&nderer" -msgstr "&Renderer" - -msgid "&SDL (Software)" -msgstr "&SDL (Software)" - -msgid "SDL (&Hardware)" -msgstr "SDL (&Hardware)" - -msgid "SDL (&OpenGL)" -msgstr "SDL (&OpenGL)" - -msgid "Open&GL (3.0 Core)" -msgstr "Open&GL (3.0 Core)" - -msgid "&VNC" -msgstr "&VNC" - -msgid "Specify dimensions..." -msgstr "&Zadat velikost..." - -msgid "F&orce 4:3 display ratio" -msgstr "&Dodržovat poměr stran 4:3" - -msgid "&Window scale factor" -msgstr "&Násobek zvětšení okna" - -msgid "&0.5x" -msgstr "&0.5x" - -msgid "&1x" -msgstr "&1x" - -msgid "1.&5x" -msgstr "1.&5x" - -msgid "&2x" -msgstr "&2x" - -msgid "Filter method" -msgstr "Metoda &filtrování" - -msgid "&Nearest" -msgstr "&Nejbližší" - -msgid "&Linear" -msgstr "&Lineární" - -msgid "Hi&DPI scaling" -msgstr "Š&kálování HiDPI" - -msgid "&Fullscreen\tCtrl+Alt+PageUP" -msgstr "&Celá obrazovka\tCtrl+Alt+PageUP" - -msgid "Fullscreen &stretch mode" -msgstr "Režím roztá&hnutí při celé obrazovce" - -msgid "&Full screen stretch" -msgstr "&Roztáhnout" - -msgid "&4:3" -msgstr "&4:3" - -msgid "&Square pixels (Keep ratio)" -msgstr "&Zachovat poměr stran" - -msgid "&Integer scale" -msgstr "&Celočíselné škálování" - -msgid "E&GA/(S)VGA settings" -msgstr "Nastavení pro E&GA a (S)VGA" - -msgid "&Inverted VGA monitor" -msgstr "&Převrátit barvy" - -msgid "VGA screen &type" -msgstr "&Typ VGA monitoru" - -msgid "RGB &Color" -msgstr "RGB &barevný" - -msgid "&RGB Grayscale" -msgstr "&Odstíny šedi" - -msgid "&Amber monitor" -msgstr "&Jantarová obrazovka" - -msgid "&Green monitor" -msgstr "&Zelená obrazovka" - -msgid "&White monitor" -msgstr "&Bílá obrazovka" - -msgid "Grayscale &conversion type" -msgstr "Převod na &odstíny šedi" - -msgid "BT&601 (NTSC/PAL)" -msgstr "BT&601 (NTSC/PAL)" - -msgid "BT&709 (HDTV)" -msgstr "BT&709 (HDTV)" - -msgid "&Average" -msgstr "&Průměr" - -msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" -msgstr "Přesah obrazu CGA/PCjr/Tandy/E&GA/(S)VGA" - -msgid "Change contrast for &monochrome display" -msgstr "&Upravit kontrast černobílé obrazovky" - -msgid "&Media" -msgstr "&Média" - -msgid "&Tools" -msgstr "&Nástroje" - -msgid "&Settings..." -msgstr "&Nastavení..." - -msgid "&Update status bar icons" -msgstr "&Aktualizovat ikony stavového řádku" - -msgid "Take s&creenshot\tCtrl+F11" -msgstr "Pořídit &screenshot\tCtrl+F11" - -msgid "&Preferences..." -msgstr "&Předvolby..." - -msgid "Enable &Discord integration" -msgstr "Povolit integraci s &Discordem" - -msgid "Sound &gain..." -msgstr "&Zesílení zvuku" - -msgid "Begin trace\tCtrl+T" -msgstr "Začít trace\tCtrl+T" - -msgid "End trace\tCtrl+T" -msgstr "Zastavit trace\tCtrl+T" - -msgid "&Logging" -msgstr "&Záznamy" - -msgid "Enable BusLogic logs\tCtrl+F4" -msgstr "Povolit záznamy BusLogic\tCtrl+F4" - -msgid "Enable CD-ROM logs\tCtrl+F5" -msgstr "Povolit záznamy CD-ROM\tCtrl+F5" - -msgid "Enable floppy (86F) logs\tCtrl+F6" -msgstr "Povolit záznamy diskety (86F)\tCtrl+F6" - -msgid "Enable floppy controller logs\tCtrl+F7" -msgstr "Povolit záznamy disketového řadiče\tCtrl+F7" - -msgid "Enable IDE logs\tCtrl+F8" -msgstr "Povolit záznamy IDE\tCtrl+F8" - -msgid "Enable Serial Port logs\tCtrl+F3" -msgstr "Povolit záznamy sériového portu\tCtrl+F3" - -msgid "Enable Network logs\tCtrl+F9" -msgstr "Povolit záznamy sítě\tCtrl+F9" - -msgid "&Log breakpoint\tCtrl+F10" -msgstr "Zaznamenat do &logu zarážku\tCtrl+F10" - -msgid "Dump &video RAM\tCtrl+F1" -msgstr "Zaznamenat obsah &video RAM\tCtrl+F1" - -msgid "&Help" -msgstr "Ná&pověda" - -msgid "&Documentation..." -msgstr "&Dokumentace" - -msgid "&About 86Box..." -msgstr "&O programu 86Box" - -msgid "&New image..." -msgstr "&Nový obraz..." - -msgid "&Existing image..." -msgstr "&Existující obraz..." - -msgid "Existing image (&Write-protected)..." -msgstr "Existující obraz (&ochrana proti zápisu)..." - -msgid "&Record" -msgstr "&Nahrávat" - -msgid "&Play" -msgstr "&Přehrát" - -msgid "&Rewind to the beginning" -msgstr "Přetočit na &začátek" - -msgid "&Fast forward to the end" -msgstr "Přetočit na &konec" - -msgid "E&ject" -msgstr "&Vyjmout" - -msgid "&Image..." -msgstr "&Obraz..." - -msgid "E&xport to 86F..." -msgstr "E&xportovat do 86F..." - -msgid "&Mute" -msgstr "&Ztišit" - -msgid "E&mpty" -msgstr "&Vyjmout" - -msgid "&Reload previous image" -msgstr "&Načíst znova předchozí obraz" - -msgid "&Image" -msgstr "&Obraz..." - -msgid "Target &framerate" -msgstr "&Cílová snímková frekvence" - -msgid "&Sync with video" -msgstr "&Synchronizovat s obrazem" - -msgid "&25 fps" -msgstr "&25 fps" - -msgid "&30 fps" -msgstr "&30 fps" - -msgid "&50 fps" -msgstr "&50 fps" - -msgid "&60 fps" -msgstr "&60 fps" - -msgid "&75 fps" -msgstr "&75 fps" - -msgid "&VSync" -msgstr "&VSync" - -msgid "&Select shader..." -msgstr "&Zvolit shader..." - -msgid "&Remove shader" -msgstr "&Odebrat shader" - -msgid "Preferences" -msgstr "Předvolby" - -msgid "Sound Gain" -msgstr "Zesílení zvuku" - -msgid "New Image" -msgstr "Nový obraz" - -msgid "Settings" -msgstr "Nastavení" - -msgid "Specify Main Window Dimensions" -msgstr "Zadat rozměry hlavního okna" - -msgid "OK" -msgstr "OK" - -msgid "Cancel" -msgstr "Storno" - -msgid "Save these settings as &global defaults" -msgstr "Uložit toto nastavení jako &globální výchozí stav" - -msgid "&Default" -msgstr "&Výchozí" - -msgid "Language:" -msgstr "Jazyk:" - -msgid "Icon set:" -msgstr "Sada ikon:" - -msgid "Gain" -msgstr "Zesílení" - -msgid "File name:" -msgstr "Název souboru:" - -msgid "Disk size:" -msgstr "Velikost disku:" - -msgid "RPM mode:" -msgstr "Režím ot./m:" - -msgid "Progress:" -msgstr "Průběh:" - -msgid "Width:" -msgstr "Šířka:" - -msgid "Height:" -msgstr "Výška:" - -msgid "Lock to this size" -msgstr "Uzamknout na tyto rozměry" - -msgid "Machine type:" -msgstr "Typ počítače:" - -msgid "Machine:" -msgstr "Počítač:" - -msgid "Configure" -msgstr "Nastavit" - -msgid "CPU type:" -msgstr "Procesor:" - -msgid "Speed:" -msgstr "Rychlost:" - -msgid "FPU:" -msgstr "Koprocesor:" - -msgid "Wait states:" -msgstr "Čekací stavy:" - -msgid "MB" -msgstr "MB" - -msgid "Memory:" -msgstr "Pamět:" - -msgid "Time synchronization" -msgstr "Synchronizace času" - -msgid "Disabled" -msgstr "Vypnuta" - -msgid "Enabled (local time)" -msgstr "Zapnuta (místní čas)" - -msgid "Enabled (UTC)" -msgstr "Zapnuta (UTC)" - -msgid "Dynamic Recompiler" -msgstr "Dynamický překladač" - -msgid "Video:" -msgstr "Grafika:" - -msgid "Voodoo Graphics" -msgstr "Použít grafický akcelerátor Voodoo" - -msgid "Mouse:" -msgstr "Myš:" - -msgid "Joystick:" -msgstr "Joystick:" - -msgid "Joystick 1..." -msgstr "Joystick 1..." - -msgid "Joystick 2..." -msgstr "Joystick 2..." - -msgid "Joystick 3..." -msgstr "Joystick 3..." - -msgid "Joystick 4..." -msgstr "Joystick 4..." - -msgid "Sound card:" -msgstr "Zvuková karta:" - -msgid "MIDI Out Device:" -msgstr "MIDI výstup:" - -msgid "MIDI In Device:" -msgstr "MIDI vstup:" - -msgid "Standalone MPU-401" -msgstr "Samostatný MPU-401" - -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - -msgid "Use FLOAT32 sound" -msgstr "Použít zvuk FLOAT32" - -msgid "Network type:" -msgstr "Druh sítě:" - -msgid "PCap device:" -msgstr "PCap zařízení:" - -msgid "Network adapter:" -msgstr "Síťový adaptér:" - -msgid "LPT1 Device:" -msgstr "Zařízení na LPT1" - -msgid "LPT2 Device:" -msgstr "Zařízení na LPT2" - -msgid "LPT3 Device:" -msgstr "Zařízení na LPT3" - -msgid "Serial port 1" -msgstr "Povolit port COM1" - -msgid "Serial port 2" -msgstr "Povolit port COM2" - -msgid "Serial port 3" -msgstr "Povolit port COM3" - -msgid "Serial port 4" -msgstr "Povolit port COM4" - -msgid "Parallel port 1" -msgstr "Povolit port LPT1" - -msgid "Parallel port 2" -msgstr "Povolit port LPT2" - -msgid "Parallel port 3" -msgstr "Povolit port LPT3" - -msgid "HD Controller:" -msgstr "Řadič disku:" - -msgid "FD Controller:" -msgstr "Disketový řadič:" - -msgid "Tertiary IDE Controller" -msgstr "Třetí řadič IDE" - -msgid "Quaternary IDE Controller" -msgstr "Čtvrtý řadič IDE" - -msgid "SCSI" -msgstr "SCSI" - -msgid "Controller 1:" -msgstr "Řadič 1:" - -msgid "Controller 2:" -msgstr "Řadič 2:" - -msgid "Controller 3:" -msgstr "Řadič 3:" - -msgid "Controller 4:" -msgstr "Řadič 4:" - -msgid "Cassette" -msgstr "Kazeta" - -msgid "Hard disks:" -msgstr "Pevné disky:" - -msgid "&New..." -msgstr "&Nový..." - -msgid "&Existing..." -msgstr "&Existující..." - -msgid "&Remove" -msgstr "&Odebrat" - -msgid "Bus:" -msgstr "Sběrnice:" - -msgid "Channel:" -msgstr "Kanál:" - -msgid "ID:" -msgstr "ID:" - -msgid "&Specify..." -msgstr "&Zadat..." - -msgid "Sectors:" -msgstr "Sektory:" - -msgid "Heads:" -msgstr "Hlavy:" - -msgid "Cylinders:" -msgstr "Cylindry:" - -msgid "Size (MB):" -msgstr "Velikost (MB):" - -msgid "Type:" -msgstr "Typ:" - -msgid "Image Format:" -msgstr "Formát obrazu:" - -msgid "Block Size:" -msgstr "Velikost bloků:" - -msgid "Floppy drives:" -msgstr "Disketové mechaniky:" - -msgid "Turbo timings" -msgstr "Turbo časování" - -msgid "Check BPB" -msgstr "Kontrola BPB" - -msgid "CD-ROM drives:" -msgstr "Mechaniky CD-ROM:" - -msgid "MO drives:" -msgstr "Magnetooptické mechaniky:" - -msgid "ZIP drives:" -msgstr "Mechaniky ZIP:" - -msgid "ZIP 250" -msgstr "ZIP 250" - -msgid "ISA RTC:" -msgstr "ISA hodiny:" - -msgid "ISA Memory Expansion" -msgstr "ISA rozšíření paměti" - -msgid "Card 1:" -msgstr "Karta 1:" - -msgid "Card 2:" -msgstr "Karta 2:" - -msgid "Card 3:" -msgstr "Karta 3:" - -msgid "Card 4:" -msgstr "Karta 4:" - -msgid "ISABugger device" -msgstr "Zařízení ISABugger" - -msgid "POST card" -msgstr "Karta pro kódy POST" - -msgid "FONT_SIZE" -msgstr "9" - -msgid "FONT_NAME" -msgstr "Segoe UI" - -msgid "86Box" -msgstr "86Box" - -msgid "Error" -msgstr "Chyba" - -msgid "Fatal error" -msgstr "Kritická chyba" - -msgid "" -msgstr "" - -msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." -msgstr "Stiskněte Ctrl+Alt+Page Down pro návrat z režimu celé obrazovky." - -msgid "Speed" -msgstr "Rychlost" - -msgid "ZIP %03i %i (%s): %ls" -msgstr "ZIP %03i %i (%s): %ls" - -msgid "ZIP images (*.im? *.zdi)" -msgstr "Obrazy ZIP disků (*.im? *.zdi)" - -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "86Box nenalezl žádné použitelné image pamětí ROM.\n\nStáhněte sadu obrazů ROM a extrahujte ji do složky \"roms\"." - -msgid "(empty)" -msgstr "(prázdné)" - -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "Obrazy ZIP disků (*.im? *.zdi);;All files (*.*)" - -msgid "Turbo" -msgstr "Turbo" - -msgid "On" -msgstr "Zap." - -msgid "Off" -msgstr "Vyp." - -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "Všechny obrazy disků (*.86f *.dsk *.flp *.im? *.*fd?);;Základní sektorové obrazy (*.dsk *.flp *.im? *.img *.*fd?);;Obrazy povrchu (*.86f)" - -msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "Počítač \"%hs\" není dostupný, jelikož chybí obraz jeho paměti ROM ve složce \"roms/machines\". Konfigurace se přepne na jiný dostupný počítač." - -msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "Video adaptér \"%hs\" není dostupný, jelikož chybí obraz jeho paměti ROM ve složce \"roms/video\". Konfigurace se přepne na jiný dostupný adaptér." - -msgid "Machine" -msgstr "Počítač" - -msgid "Display" -msgstr "Obraz" - -msgid "Input devices" -msgstr "Vstupní zařízení" - -msgid "Sound" -msgstr "Zvuk" - -msgid "Network" -msgstr "Síť" - -msgid "Ports (COM & LPT)" -msgstr "COM a LPT porty" - -msgid "Storage controllers" -msgstr "Řadiče úložiště" - -msgid "Hard disks" -msgstr "Pevné disky" - -msgid "Floppy & CD-ROM drives" -msgstr "Disketové a CD-ROM mechaniky" - -msgid "Other removable devices" -msgstr "Další vyměnitelná zařízení" - -msgid "Other peripherals" -msgstr "Jiné příslušenství" - -msgid "Surface images (*.86f)" -msgstr "Obrazy povrchu (*.86f)" - -msgid "Click to capture mouse" -msgstr "Klikněte pro zabraní myši" - -msgid "Press F8+F12 to release mouse" -msgstr "Stiskněte F8+F12 pro uvolnění myši" - -msgid "Press F8+F12 or middle button to release mouse" -msgstr "Stiskněte F8+F12 nebo prostřední tlačítko pro uvolnění myši" - -msgid "Unable to initialize FluidSynth" -msgstr "Nastala chyba při inicializaci knihovny FluidSynth." - -msgid "Bus" -msgstr "Sběrnice" - -msgid "File" -msgstr "Soubor" - -msgid "C" -msgstr "C" - -msgid "H" -msgstr "H" - -msgid "S" -msgstr "S" - -msgid "KB" -msgstr "KB" - -msgid "Could not initialize the video renderer." -msgstr "Nastala chyba při inicializaci video rendereru." - -msgid "Default" -msgstr "Výchozí" - -msgid "%i Wait state(s)" -msgstr "%i čekací stav(y)" - -msgid "Type" -msgstr "Typ" - -msgid "Failed to set up PCap" -msgstr "Nastala chyba při inicializaci knihovny PCap" - -msgid "No PCap devices found" -msgstr "Nebyla nalezena žádná PCap zařízení" - -msgid "Invalid PCap device" -msgstr "Neplatné PCap zařízení" - -msgid "Standard 2-button joystick(s)" -msgstr "Standardní 2tlačítkový joystick" - -msgid "Standard 4-button joystick" -msgstr "Standardní 4tlačítkový joystick" - -msgid "Standard 6-button joystick" -msgstr "Standardní 6tlačítkový joystick" - -msgid "Standard 8-button joystick" -msgstr "Standardní 8tlačítkový joystick" - -msgid "CH Flightstick Pro" -msgstr "CH Flightstick Pro" - -msgid "Microsoft SideWinder Pad" -msgstr "Microsoft SideWinder Pad" - -msgid "Thrustmaster Flight Control System" -msgstr "Thrustmaster Flight Control System" - -msgid "None" -msgstr "Žadné" - -msgid "Unable to load keyboard accelerators." -msgstr "Nebylo možné nahrát klávesnicové zkratky." - -msgid "Unable to register raw input." -msgstr "Nebylo možné zaregistrovat raw input." - -msgid "%u" -msgstr "%u" - -msgid "%u MB (CHS: %i, %i, %i)" -msgstr "%u MB (CHS: %i, %i, %i)" - -msgid "Floppy %i (%s): %ls" -msgstr "Disketová mechanika %i (%s): %ls" - -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "Všechny obrazy (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Rozšířené sektorové obrazy (*.imd *.json *.td0);;Základní sektorové obrazy (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Obrazy magnetického toku (*.fdi);;Obrazy povrchu (*.86f *.mfm);;Všechny soubory (*.*)" - -msgid "Unable to initialize FreeType" -msgstr "Nastala chyba při inicializaci knihovny FreeType" - -msgid "Unable to initialize SDL, SDL2.dll is required" -msgstr "Nastala chyba při inicializaci knihovny SDL, je potřeba SDL2.dll" - -msgid "Are you sure you want to hard reset the emulated machine?" -msgstr "Opravdu chcete resetovat emulovaný počítač?" - -msgid "Are you sure you want to exit 86Box?" -msgstr "Opravdu chcete ukončit 86Box?" - -msgid "Unable to initialize Ghostscript" -msgstr "Nastala chyba při inicializaci knihovny Ghostscript" - -msgid "MO %i (%ls): %ls" -msgstr "MO %i (%ls): %ls" - -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "Obrazy MO (*.im? *.mdi);;Všechny soubory (*.*)" - -msgid "Welcome to 86Box!" -msgstr "Vítejte v programu 86Box!" - -msgid "Internal controller" -msgstr "Vestavěný řadič" - -msgid "Exit" -msgstr "Ukončit" - -msgid "No ROMs found" -msgstr "Nebyly nalezeny žádné obrazy ROM" - -msgid "Do you want to save the settings?" -msgstr "Chcete uložit nastavení?" - -msgid "This will hard reset the emulated machine." -msgstr "Pokračováním se resetuje emulovaný počítač." - -msgid "Save" -msgstr "Uložit" - -msgid "About 86Box" -msgstr "O programu 86Box" - -msgid "86Box v" -msgstr "86Box v" - -msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "Emulátor starých počítačů\n\nAutoři: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nZveřejněno pod licencí GNU General Public License verze 2 nebo novější. Viz soubor LICENSE pro více informací." - -msgid "Hardware not available" -msgstr "Hardware není dostupný" - -msgid "WinPcap" -msgstr "WinPcap" - -msgid "libpcap" -msgstr "libpcap" - -msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." -msgstr "Ujistěte se, že je nainstalován libpcap a používáte síťové připojení s ním kompatibilní." - -msgid "Invalid configuration" -msgstr "Neplatná konfigurace" - -msgid "freetype.dll" -msgstr "freetype.dll" - -msgid "libfreetype" -msgstr "libfreetype" - -msgid " is required for ESC/P printer emulation." -msgstr " je potřeba pro emulaci ESC/P tiskáren." - -msgid "gsdll32.dll" -msgstr "gsdll32.dll" - -msgid "libgs" -msgstr "libgs" - -msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." -msgstr " je potřeba pro automatický převod PostScript dokumentů do PDF.\n\nJakékoliv dokumenty vytisknuté přes obecnou PostScriptovou tiskárnu budou uloženy jako PostScript (.ps) soubory." - -msgid "libfluidsynth.dll" -msgstr "libfluidsynth.dll" - -msgid "libfluidsynth" -msgstr "libfluidsynth" - -msgid " is required for FluidSynth MIDI output." -msgstr " je potřeba pro MIDI výstup přes knihovnu FluidSynth." - -msgid "Entering fullscreen mode" -msgstr "Vstup do režimu celé obrazovky" - -msgid "Don't show this message again" -msgstr "Nezobrazovat dále tuto zprávu" - -msgid "Don't exit" -msgstr "Neukončovat" - -msgid "Reset" -msgstr "Resetovat" - -msgid "Don't reset" -msgstr "Neresetovat" - -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "Obraz CD-ROM disku (*.iso *.cue);;Všechny soubory (*.*)" - -msgid "%hs Device Configuration" -msgstr "Konfigurace zařízení %hs" - -msgid "Monitor in sleep mode" -msgstr "Monitor je v režimu spánku" - -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "Shadery OpenGL (*.glsl);;All files (*.*)" - -msgid "OpenGL options" -msgstr "Možnosti OpenGL" - -msgid "You are loading an unsupported configuration" -msgstr "Pokoušíte se spustit nepodporovanou konfiguraci" - -msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "Pro tuto konfiguraci bylo vypnuto filtrování procesorů podle zvoleného počítače.\n\nToto umožňuje zvolit procesor, který by jinak se zvoleným počítačem nebyl kompatibilní. Můžou však nastat potíže s BIOSem nebo jiným softwarem.\n\nPovolení tohoto nastavení není oficiálně podporováno a jakákoliv hlášení o chybách mohou být uzavřeny jako neplatné." - -msgid "Continue" -msgstr "Pokračovat" - -msgid "Cassette: %s" -msgstr "Kazeta: %s" - -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Kazetové nahrávky (*.pcm *.raw *.wav *.cas);;Všechny soubory (*.*)" - -msgid "Cartridge %i: %ls" -msgstr "Cartridge %i: %ls" - -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "Obrazy cartridge (*.a *.b *.jrc);;Všechny soubory (*.*)" - -msgid "Error initializing renderer" -msgstr "Error initializing renderer" - -msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." - -msgid "Resume execution" -msgstr "Obnovit" - -msgid "Pause execution" -msgstr "Pozastavit" - -msgid "Press Ctrl+Alt+Del" -msgstr "Stisknout Ctrl+Alt+Delete" - -msgid "Press Ctrl+Alt+Esc" -msgstr "Stisknout Ctrl+Alt+Esc" - -msgid "Hard reset" -msgstr "Resetovat" - -msgid "ACPI shutdown" -msgstr "Vypnout skrze rozhraní ACPI" - -msgid "Hard disk (%s)" -msgstr "Pevný disk (%s)" - -msgid "%01i:%01i" -msgstr "%01i:%01i" - -msgid "%01i" -msgstr "%01i" - -msgid "MFM/RLL or ESDI CD-ROM drives never existed" -msgstr "CD-ROM mechaniky pro rozhraní MFM/RLL nebo ESDI nikdy neexistovaly" - -msgid "Custom..." -msgstr "Vlastní..." - -msgid "Custom (large)..." -msgstr "Vlastní (velký)..." - -msgid "Add New Hard Disk" -msgstr "Přidat nový pevný disk" - -msgid "Add Existing Hard Disk" -msgstr "Přidat existující pevný disk" - -msgid "HDI disk images cannot be larger than 4 GB." -msgstr "Obraz disku formátu HDI nemůžou být větší než 4 GB." - -msgid "Disk images cannot be larger than 127 GB." -msgstr "Obraz disku nemůžou být větší než 127 GB." - -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Obrazy pevného disku (*.hd? *.im? *.vhd);;Všechny soubory (*.*)" - -msgid "Unable to read file" -msgstr "Nebylo možné přečíst soubor" - -msgid "Unable to write file" -msgstr "Nebylo možné zapisovat do souboru" - -msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "Obraz disku ve formátu HDI nebo HDX s velikostí sektoru jinou než 512 bajtů nejsou podporovány." - -msgid "USB is not yet supported" -msgstr "USB zatím není podporováno." - -msgid "Disk image file already exists" -msgstr "Soubor obrazu disku již existuje" - -msgid "Please specify a valid file name." -msgstr "Zadejte platný název souboru." - -msgid "Disk image created" -msgstr "Obraz disku byl vytvořen" - -msgid "Make sure the file exists and is readable." -msgstr "Ujistěte se, že soubor existuje a lze jej přečíst." - -msgid "Make sure the file is being saved to a writable directory." -msgstr "Ujistěte se, že se do složky, kde se má soubor uložit, dá zapisovat." - -msgid "Disk image too large" -msgstr "Obraz disku je příliš velký" - -msgid "Remember to partition and format the newly-created drive." -msgstr "Nezapomeňte nově vytvořený disk rozdělit a naformátovat." - -msgid "The selected file will be overwritten. Are you sure you want to use it?" -msgstr "Zvolený soubor bude přepsán. Opravdu jej chcete použít?" - -msgid "Unsupported disk image" -msgstr "Nepodporovaný obraz disku" - -msgid "Overwrite" -msgstr "Přepsat" - -msgid "Don't overwrite" -msgstr "Nepřepisovat" - -msgid "Raw image (.img)" -msgstr "Surový obraz (.img)" - -msgid "HDI image (.hdi)" -msgstr "HDI obraz (.hdi)" - -msgid "HDX image (.hdx)" -msgstr "HDX obraz (.hdx)" - -msgid "Fixed-size VHD (.vhd)" -msgstr "VHD s pevnou velikostí (.vhd)" - -msgid "Dynamic-size VHD (.vhd)" -msgstr "VHD s dynamickou velikostí (.vhd)" - -msgid "Differencing VHD (.vhd)" -msgstr "Rozdílový VHD (.vhd)" - -msgid "Large blocks (2 MB)" -msgstr "Velké bloky (2 MB)" - -msgid "Small blocks (512 KB)" -msgstr "Malé bloky (512 KB)" - -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "Soubory VHD (*.vhd);;Všechny soubory (*.*)" - -msgid "Select the parent VHD" -msgstr "Vyberte nadřazený virtuální disk" - -msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" -msgstr "To může znamenat, že se obsahy nadřazeného disku změnily po vytvoření rozdílového disku.\n\nTato chyba také může nastat, pokud byl obraz disku kopírován nebo přesunut, nebo kvůli chybě v programu, který jej vytvořil.\n\nChcete časová razítka opravit?" - -msgid "Parent and child disk timestamps do not match" -msgstr "Časová razítka nadřazeného a podřazeného disku nesouhlasí" - -msgid "Could not fix VHD timestamp." -msgstr "Nebylo možné opravit časové razítko VHD." - -msgid "%01i:%02i" -msgstr "%01i:%02i" - -msgid "MFM/RLL" -msgstr "MFM/RLL" - -msgid "XTA" -msgstr "XTA" - -msgid "ESDI" -msgstr "ESDI" - -msgid "IDE" -msgstr "IDE" - -msgid "ATAPI" -msgstr "ATAPI" - -msgid "MFM/RLL (%01i:%01i)" -msgstr "MFM/RLL (%01i:%01i)" - -msgid "XTA (%01i:%01i)" -msgstr "XTA (%01i:%01i)" - -msgid "ESDI (%01i:%01i)" -msgstr "ESDI (%01i:%01i)" - -msgid "IDE (%01i:%01i)" -msgstr "IDE (%01i:%01i)" - -msgid "ATAPI (%01i:%01i)" -msgstr "ATAPI (%01i:%01i)" - -msgid "SCSI (%01i:%02i)" -msgstr "SCSI (%01i:%02i)" - -msgid "CD-ROM %i (%s): %s" -msgstr "CD-ROM %i (%s): %s" - -msgid "160 kB" -msgstr "160 kB" - -msgid "180 kB" -msgstr "180 kB" - -msgid "320 kB" -msgstr "320 kB" - -msgid "360 kB" -msgstr "360 kB" - -msgid "640 kB" -msgstr "640 kB" - -msgid "720 kB" -msgstr "720 kB" - -msgid "1.2 MB" -msgstr "1.2 MB" - -msgid "1.25 MB" -msgstr "1.25 MB" - -msgid "1.44 MB" -msgstr "1.44 MB" - -msgid "DMF (cluster 1024)" -msgstr "DMF (cluster 1024)" - -msgid "DMF (cluster 2048)" -msgstr "DMF (cluster 2048)" - -msgid "2.88 MB" -msgstr "2.88 MB" - -msgid "ZIP 100" -msgstr "ZIP 100" - -msgid "3.5\" 128Mb M.O. (ISO 10090)" -msgstr "3.5\" 128Mb M.O. (ISO 10090)" - -msgid "3.5\" 230Mb M.O. (ISO 13963)" -msgstr "3.5\" 230Mb M.O. (ISO 13963)" - -msgid "3.5\" 540Mb M.O. (ISO 15498)" -msgstr "3.5\" 540Mb M.O. (ISO 15498)" - -msgid "3.5\" 640Mb M.O. (ISO 15498)" -msgstr "3.5\" 640Mb M.O. (ISO 15498)" - -msgid "3.5\" 1.3Gb M.O. (GigaMO)" -msgstr "3.5\" 1.3Gb M.O. (GigaMO)" - -msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" - -msgid "5.25\" 600Mb M.O." -msgstr "5.25\" 600Mb M.O." - -msgid "5.25\" 650Mb M.O." -msgstr "5.25\" 650Mb M.O." - -msgid "5.25\" 1Gb M.O." -msgstr "5.25\" 1Gb M.O." - -msgid "5.25\" 1.3Gb M.O." -msgstr "5.25\" 1.3Gb M.O." - -msgid "Perfect RPM" -msgstr "Dokonalé otáčky za minutu" - -msgid "1%% below perfect RPM" -msgstr "1%% pod dokonalými ot./m" - -msgid "1.5%% below perfect RPM" -msgstr "1.5%% pod dokonalými ot./m" - -msgid "2%% below perfect RPM" -msgstr "2%% pod dokonalými ot./m" - -msgid "(System Default)" -msgstr "(Výchozí nastavení systému)" - +msgid "&Action" +msgstr "&Akce" + +msgid "&Keyboard requires capture" +msgstr "&Klávesnice vyžaduje záběr" + +msgid "&Right CTRL is left ALT" +msgstr "&Pravý Ctrl je levý Alt" + +msgid "&Hard Reset..." +msgstr "&Resetovat" + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "P&ozastavit" + +msgid "E&xit..." +msgstr "&Ukončit" + +msgid "&View" +msgstr "&Zobrazení" + +msgid "&Hide status bar" +msgstr "&Schovat stavový řádek" + +msgid "Hide &toolbar" +msgstr "Schovat panel &nástrojů" + +msgid "&Resizeable window" +msgstr "&Měnitelná velikost okna" + +msgid "R&emember size && position" +msgstr "&Pamatovat velikost a pozici" + +msgid "Re&nderer" +msgstr "&Renderer" + +msgid "&SDL (Software)" +msgstr "&SDL (Software)" + +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardware)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 Core)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "&Zadat velikost..." + +msgid "F&orce 4:3 display ratio" +msgstr "&Dodržovat poměr stran 4:3" + +msgid "&Window scale factor" +msgstr "&Násobek zvětšení okna" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Metoda &filtrování" + +msgid "&Nearest" +msgstr "&Nejbližší" + +msgid "&Linear" +msgstr "&Lineární" + +msgid "Hi&DPI scaling" +msgstr "Š&kálování HiDPI" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Celá obrazovka\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Režím roztá&hnutí při celé obrazovce" + +msgid "&Full screen stretch" +msgstr "&Roztáhnout" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Zachovat poměr stran" + +msgid "&Integer scale" +msgstr "&Celočíselné škálování" + +msgid "E&GA/(S)VGA settings" +msgstr "Nastavení pro E&GA a (S)VGA" + +msgid "&Inverted VGA monitor" +msgstr "&Převrátit barvy" + +msgid "VGA screen &type" +msgstr "&Typ VGA monitoru" + +msgid "RGB &Color" +msgstr "RGB &barevný" + +msgid "&RGB Grayscale" +msgstr "&Odstíny šedi" + +msgid "&Amber monitor" +msgstr "&Jantarová obrazovka" + +msgid "&Green monitor" +msgstr "&Zelená obrazovka" + +msgid "&White monitor" +msgstr "&Bílá obrazovka" + +msgid "Grayscale &conversion type" +msgstr "Převod na &odstíny šedi" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Průměr" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "Přesah obrazu CGA/PCjr/Tandy/E&GA/(S)VGA" + +msgid "Change contrast for &monochrome display" +msgstr "&Upravit kontrast černobílé obrazovky" + +msgid "&Media" +msgstr "&Média" + +msgid "&Tools" +msgstr "&Nástroje" + +msgid "&Settings..." +msgstr "&Nastavení..." + +msgid "&Update status bar icons" +msgstr "&Aktualizovat ikony stavového řádku" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Pořídit &screenshot\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Předvolby..." + +msgid "Enable &Discord integration" +msgstr "Povolit integraci s &Discordem" + +msgid "Sound &gain..." +msgstr "&Zesílení zvuku" + +msgid "Begin trace\tCtrl+T" +msgstr "Začít trace\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Zastavit trace\tCtrl+T" + +msgid "&Logging" +msgstr "&Záznamy" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Povolit záznamy BusLogic\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Povolit záznamy CD-ROM\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Povolit záznamy diskety (86F)\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Povolit záznamy disketového řadiče\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Povolit záznamy IDE\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Povolit záznamy sériového portu\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Povolit záznamy sítě\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "Zaznamenat do &logu zarážku\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "Zaznamenat obsah &video RAM\tCtrl+F1" + +msgid "&Help" +msgstr "Ná&pověda" + +msgid "&Documentation..." +msgstr "&Dokumentace" + +msgid "&About 86Box..." +msgstr "&O programu 86Box" + +msgid "&New image..." +msgstr "&Nový obraz..." + +msgid "&Existing image..." +msgstr "&Existující obraz..." + +msgid "Existing image (&Write-protected)..." +msgstr "Existující obraz (&ochrana proti zápisu)..." + +msgid "&Record" +msgstr "&Nahrávat" + +msgid "&Play" +msgstr "&Přehrát" + +msgid "&Rewind to the beginning" +msgstr "Přetočit na &začátek" + +msgid "&Fast forward to the end" +msgstr "Přetočit na &konec" + +msgid "E&ject" +msgstr "&Vyjmout" + +msgid "&Image..." +msgstr "&Obraz..." + +msgid "E&xport to 86F..." +msgstr "E&xportovat do 86F..." + +msgid "&Mute" +msgstr "&Ztišit" + +msgid "E&mpty" +msgstr "&Vyjmout" + +msgid "&Reload previous image" +msgstr "&Načíst znova předchozí obraz" + +msgid "&Image" +msgstr "&Obraz..." + +msgid "Target &framerate" +msgstr "&Cílová snímková frekvence" + +msgid "&Sync with video" +msgstr "&Synchronizovat s obrazem" + +msgid "&25 fps" +msgstr "&25 fps" + +msgid "&30 fps" +msgstr "&30 fps" + +msgid "&50 fps" +msgstr "&50 fps" + +msgid "&60 fps" +msgstr "&60 fps" + +msgid "&75 fps" +msgstr "&75 fps" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Zvolit shader..." + +msgid "&Remove shader" +msgstr "&Odebrat shader" + +msgid "Preferences" +msgstr "Předvolby" + +msgid "Sound Gain" +msgstr "Zesílení zvuku" + +msgid "New Image" +msgstr "Nový obraz" + +msgid "Settings" +msgstr "Nastavení" + +msgid "Specify Main Window Dimensions" +msgstr "Zadat rozměry hlavního okna" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Storno" + +msgid "Save these settings as &global defaults" +msgstr "Uložit toto nastavení jako &globální výchozí stav" + +msgid "&Default" +msgstr "&Výchozí" + +msgid "Language:" +msgstr "Jazyk:" + +msgid "Icon set:" +msgstr "Sada ikon:" + +msgid "Gain" +msgstr "Zesílení" + +msgid "File name:" +msgstr "Název souboru:" + +msgid "Disk size:" +msgstr "Velikost disku:" + +msgid "RPM mode:" +msgstr "Režím ot./m:" + +msgid "Progress:" +msgstr "Průběh:" + +msgid "Width:" +msgstr "Šířka:" + +msgid "Height:" +msgstr "Výška:" + +msgid "Lock to this size" +msgstr "Uzamknout na tyto rozměry" + +msgid "Machine type:" +msgstr "Typ počítače:" + +msgid "Machine:" +msgstr "Počítač:" + +msgid "Configure" +msgstr "Nastavit" + +msgid "CPU type:" +msgstr "Procesor:" + +msgid "Speed:" +msgstr "Rychlost:" + +msgid "FPU:" +msgstr "Koprocesor:" + +msgid "Wait states:" +msgstr "Čekací stavy:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Pamět:" + +msgid "Time synchronization" +msgstr "Synchronizace času" + +msgid "Disabled" +msgstr "Vypnuta" + +msgid "Enabled (local time)" +msgstr "Zapnuta (místní čas)" + +msgid "Enabled (UTC)" +msgstr "Zapnuta (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Dynamický překladač" + +msgid "Video:" +msgstr "Grafika:" + +msgid "Voodoo Graphics" +msgstr "Použít grafický akcelerátor Voodoo" + +msgid "Mouse:" +msgstr "Myš:" + +msgid "Joystick:" +msgstr "Joystick:" + +msgid "Joystick 1..." +msgstr "Joystick 1..." + +msgid "Joystick 2..." +msgstr "Joystick 2..." + +msgid "Joystick 3..." +msgstr "Joystick 3..." + +msgid "Joystick 4..." +msgstr "Joystick 4..." + +msgid "Sound card:" +msgstr "Zvuková karta:" + +msgid "MIDI Out Device:" +msgstr "MIDI výstup:" + +msgid "MIDI In Device:" +msgstr "MIDI vstup:" + +msgid "Standalone MPU-401" +msgstr "Samostatný MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Použít zvuk FLOAT32" + +msgid "Network type:" +msgstr "Druh sítě:" + +msgid "PCap device:" +msgstr "PCap zařízení:" + +msgid "Network adapter:" +msgstr "Síťový adaptér:" + +msgid "LPT1 Device:" +msgstr "Zařízení na LPT1" + +msgid "LPT2 Device:" +msgstr "Zařízení na LPT2" + +msgid "LPT3 Device:" +msgstr "Zařízení na LPT3" + +msgid "Serial port 1" +msgstr "Povolit port COM1" + +msgid "Serial port 2" +msgstr "Povolit port COM2" + +msgid "Serial port 3" +msgstr "Povolit port COM3" + +msgid "Serial port 4" +msgstr "Povolit port COM4" + +msgid "Parallel port 1" +msgstr "Povolit port LPT1" + +msgid "Parallel port 2" +msgstr "Povolit port LPT2" + +msgid "Parallel port 3" +msgstr "Povolit port LPT3" + +msgid "HD Controller:" +msgstr "Řadič disku:" + +msgid "FD Controller:" +msgstr "Disketový řadič:" + +msgid "Tertiary IDE Controller" +msgstr "Třetí řadič IDE" + +msgid "Quaternary IDE Controller" +msgstr "Čtvrtý řadič IDE" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Řadič 1:" + +msgid "Controller 2:" +msgstr "Řadič 2:" + +msgid "Controller 3:" +msgstr "Řadič 3:" + +msgid "Controller 4:" +msgstr "Řadič 4:" + +msgid "Cassette" +msgstr "Kazeta" + +msgid "Hard disks:" +msgstr "Pevné disky:" + +msgid "&New..." +msgstr "&Nový..." + +msgid "&Existing..." +msgstr "&Existující..." + +msgid "&Remove" +msgstr "&Odebrat" + +msgid "Bus:" +msgstr "Sběrnice:" + +msgid "Channel:" +msgstr "Kanál:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Zadat..." + +msgid "Sectors:" +msgstr "Sektory:" + +msgid "Heads:" +msgstr "Hlavy:" + +msgid "Cylinders:" +msgstr "Cylindry:" + +msgid "Size (MB):" +msgstr "Velikost (MB):" + +msgid "Type:" +msgstr "Typ:" + +msgid "Image Format:" +msgstr "Formát obrazu:" + +msgid "Block Size:" +msgstr "Velikost bloků:" + +msgid "Floppy drives:" +msgstr "Disketové mechaniky:" + +msgid "Turbo timings" +msgstr "Turbo časování" + +msgid "Check BPB" +msgstr "Kontrola BPB" + +msgid "CD-ROM drives:" +msgstr "Mechaniky CD-ROM:" + +msgid "MO drives:" +msgstr "Magnetooptické mechaniky:" + +msgid "ZIP drives:" +msgstr "Mechaniky ZIP:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA hodiny:" + +msgid "ISA Memory Expansion" +msgstr "ISA rozšíření paměti" + +msgid "Card 1:" +msgstr "Karta 1:" + +msgid "Card 2:" +msgstr "Karta 2:" + +msgid "Card 3:" +msgstr "Karta 3:" + +msgid "Card 4:" +msgstr "Karta 4:" + +msgid "ISABugger device" +msgstr "Zařízení ISABugger" + +msgid "POST card" +msgstr "Karta pro kódy POST" + +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Chyba" + +msgid "Fatal error" +msgstr "Kritická chyba" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Stiskněte Ctrl+Alt+Page Down pro návrat z režimu celé obrazovky." + +msgid "Speed" +msgstr "Rychlost" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.im? *.zdi)" +msgstr "Obrazy ZIP disků (*.im? *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box nenalezl žádné použitelné image pamětí ROM.\n\nStáhněte sadu obrazů ROM a extrahujte ji do složky \"roms\"." + +msgid "(empty)" +msgstr "(prázdné)" + +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "Obrazy ZIP disků (*.im? *.zdi);;All files (*.*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Zap." + +msgid "Off" +msgstr "Vyp." + +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "Všechny obrazy disků (*.86f *.dsk *.flp *.im? *.*fd?);;Základní sektorové obrazy (*.dsk *.flp *.im? *.img *.*fd?);;Obrazy povrchu (*.86f)" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Počítač \"%hs\" není dostupný, jelikož chybí obraz jeho paměti ROM ve složce \"roms/machines\". Konfigurace se přepne na jiný dostupný počítač." + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Video adaptér \"%hs\" není dostupný, jelikož chybí obraz jeho paměti ROM ve složce \"roms/video\". Konfigurace se přepne na jiný dostupný adaptér." + +msgid "Machine" +msgstr "Počítač" + +msgid "Display" +msgstr "Obraz" + +msgid "Input devices" +msgstr "Vstupní zařízení" + +msgid "Sound" +msgstr "Zvuk" + +msgid "Network" +msgstr "Síť" + +msgid "Ports (COM & LPT)" +msgstr "COM a LPT porty" + +msgid "Storage controllers" +msgstr "Řadiče úložiště" + +msgid "Hard disks" +msgstr "Pevné disky" + +msgid "Floppy & CD-ROM drives" +msgstr "Disketové a CD-ROM mechaniky" + +msgid "Other removable devices" +msgstr "Další vyměnitelná zařízení" + +msgid "Other peripherals" +msgstr "Jiné příslušenství" + +msgid "Surface images (*.86f)" +msgstr "Obrazy povrchu (*.86f)" + +msgid "Click to capture mouse" +msgstr "Klikněte pro zabraní myši" + +msgid "Press F8+F12 to release mouse" +msgstr "Stiskněte F8+F12 pro uvolnění myši" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Stiskněte F8+F12 nebo prostřední tlačítko pro uvolnění myši" + +msgid "Unable to initialize FluidSynth" +msgstr "Nastala chyba při inicializaci knihovny FluidSynth." + +msgid "Bus" +msgstr "Sběrnice" + +msgid "File" +msgstr "Soubor" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Nastala chyba při inicializaci video rendereru." + +msgid "Default" +msgstr "Výchozí" + +msgid "%i Wait state(s)" +msgstr "%i čekací stav(y)" + +msgid "Type" +msgstr "Typ" + +msgid "Failed to set up PCap" +msgstr "Nastala chyba při inicializaci knihovny PCap" + +msgid "No PCap devices found" +msgstr "Nebyla nalezena žádná PCap zařízení" + +msgid "Invalid PCap device" +msgstr "Neplatné PCap zařízení" + +msgid "Standard 2-button joystick(s)" +msgstr "Standardní 2tlačítkový joystick" + +msgid "Standard 4-button joystick" +msgstr "Standardní 4tlačítkový joystick" + +msgid "Standard 6-button joystick" +msgstr "Standardní 6tlačítkový joystick" + +msgid "Standard 8-button joystick" +msgstr "Standardní 8tlačítkový joystick" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Žadné" + +msgid "Unable to load keyboard accelerators." +msgstr "Nebylo možné nahrát klávesnicové zkratky." + +msgid "Unable to register raw input." +msgstr "Nebylo možné zaregistrovat raw input." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Disketová mechanika %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "Všechny obrazy (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Rozšířené sektorové obrazy (*.imd *.json *.td0);;Základní sektorové obrazy (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Obrazy magnetického toku (*.fdi);;Obrazy povrchu (*.86f *.mfm);;Všechny soubory (*.*)" + +msgid "Unable to initialize FreeType" +msgstr "Nastala chyba při inicializaci knihovny FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Nastala chyba při inicializaci knihovny SDL, je potřeba SDL2.dll" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Opravdu chcete resetovat emulovaný počítač?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Opravdu chcete ukončit 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Nastala chyba při inicializaci knihovny Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "Obrazy MO (*.im? *.mdi);;Všechny soubory (*.*)" + +msgid "Welcome to 86Box!" +msgstr "Vítejte v programu 86Box!" + +msgid "Internal controller" +msgstr "Vestavěný řadič" + +msgid "Exit" +msgstr "Ukončit" + +msgid "No ROMs found" +msgstr "Nebyly nalezeny žádné obrazy ROM" + +msgid "Do you want to save the settings?" +msgstr "Chcete uložit nastavení?" + +msgid "This will hard reset the emulated machine." +msgstr "Pokračováním se resetuje emulovaný počítač." + +msgid "Save" +msgstr "Uložit" + +msgid "About 86Box" +msgstr "O programu 86Box" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Emulátor starých počítačů\n\nAutoři: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nZveřejněno pod licencí GNU General Public License verze 2 nebo novější. Viz soubor LICENSE pro více informací." + +msgid "Hardware not available" +msgstr "Hardware není dostupný" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Ujistěte se, že je nainstalován libpcap a používáte síťové připojení s ním kompatibilní." + +msgid "Invalid configuration" +msgstr "Neplatná konfigurace" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " je potřeba pro emulaci ESC/P tiskáren." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " je potřeba pro automatický převod PostScript dokumentů do PDF.\n\nJakékoliv dokumenty vytisknuté přes obecnou PostScriptovou tiskárnu budou uloženy jako PostScript (.ps) soubory." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " je potřeba pro MIDI výstup přes knihovnu FluidSynth." + +msgid "Entering fullscreen mode" +msgstr "Vstup do režimu celé obrazovky" + +msgid "Don't show this message again" +msgstr "Nezobrazovat dále tuto zprávu" + +msgid "Don't exit" +msgstr "Neukončovat" + +msgid "Reset" +msgstr "Resetovat" + +msgid "Don't reset" +msgstr "Neresetovat" + +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "Obraz CD-ROM disku (*.iso *.cue);;Všechny soubory (*.*)" + +msgid "%hs Device Configuration" +msgstr "Konfigurace zařízení %hs" + +msgid "Monitor in sleep mode" +msgstr "Monitor je v režimu spánku" + +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "Shadery OpenGL (*.glsl);;All files (*.*)" + +msgid "OpenGL options" +msgstr "Možnosti OpenGL" + +msgid "You are loading an unsupported configuration" +msgstr "Pokoušíte se spustit nepodporovanou konfiguraci" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "Pro tuto konfiguraci bylo vypnuto filtrování procesorů podle zvoleného počítače.\n\nToto umožňuje zvolit procesor, který by jinak se zvoleným počítačem nebyl kompatibilní. Můžou však nastat potíže s BIOSem nebo jiným softwarem.\n\nPovolení tohoto nastavení není oficiálně podporováno a jakákoliv hlášení o chybách mohou být uzavřeny jako neplatné." + +msgid "Continue" +msgstr "Pokračovat" + +msgid "Cassette: %s" +msgstr "Kazeta: %s" + +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Kazetové nahrávky (*.pcm *.raw *.wav *.cas);;Všechny soubory (*.*)" + +msgid "Cartridge %i: %ls" +msgstr "Cartridge %i: %ls" + +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "Obrazy cartridge (*.a *.b *.jrc);;Všechny soubory (*.*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Resume execution" +msgstr "Obnovit" + +msgid "Pause execution" +msgstr "Pozastavit" + +msgid "Press Ctrl+Alt+Del" +msgstr "Stisknout Ctrl+Alt+Delete" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Stisknout Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Resetovat" + +msgid "ACPI shutdown" +msgstr "Vypnout skrze rozhraní ACPI" + +msgid "Hard disk (%s)" +msgstr "Pevný disk (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "CD-ROM mechaniky pro rozhraní MFM/RLL nebo ESDI nikdy neexistovaly" + +msgid "Custom..." +msgstr "Vlastní..." + +msgid "Custom (large)..." +msgstr "Vlastní (velký)..." + +msgid "Add New Hard Disk" +msgstr "Přidat nový pevný disk" + +msgid "Add Existing Hard Disk" +msgstr "Přidat existující pevný disk" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "Obraz disku formátu HDI nemůžou být větší než 4 GB." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Obraz disku nemůžou být větší než 127 GB." + +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Obrazy pevného disku (*.hd? *.im? *.vhd);;Všechny soubory (*.*)" + +msgid "Unable to read file" +msgstr "Nebylo možné přečíst soubor" + +msgid "Unable to write file" +msgstr "Nebylo možné zapisovat do souboru" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "Obraz disku ve formátu HDI nebo HDX s velikostí sektoru jinou než 512 bajtů nejsou podporovány." + +msgid "USB is not yet supported" +msgstr "USB zatím není podporováno." + +msgid "Disk image file already exists" +msgstr "Soubor obrazu disku již existuje" + +msgid "Please specify a valid file name." +msgstr "Zadejte platný název souboru." + +msgid "Disk image created" +msgstr "Obraz disku byl vytvořen" + +msgid "Make sure the file exists and is readable." +msgstr "Ujistěte se, že soubor existuje a lze jej přečíst." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Ujistěte se, že se do složky, kde se má soubor uložit, dá zapisovat." + +msgid "Disk image too large" +msgstr "Obraz disku je příliš velký" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Nezapomeňte nově vytvořený disk rozdělit a naformátovat." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Zvolený soubor bude přepsán. Opravdu jej chcete použít?" + +msgid "Unsupported disk image" +msgstr "Nepodporovaný obraz disku" + +msgid "Overwrite" +msgstr "Přepsat" + +msgid "Don't overwrite" +msgstr "Nepřepisovat" + +msgid "Raw image (.img)" +msgstr "Surový obraz (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDI obraz (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDX obraz (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD s pevnou velikostí (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD s dynamickou velikostí (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Rozdílový VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Velké bloky (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Malé bloky (512 KB)" + +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "Soubory VHD (*.vhd);;Všechny soubory (*.*)" + +msgid "Select the parent VHD" +msgstr "Vyberte nadřazený virtuální disk" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "To může znamenat, že se obsahy nadřazeného disku změnily po vytvoření rozdílového disku.\n\nTato chyba také může nastat, pokud byl obraz disku kopírován nebo přesunut, nebo kvůli chybě v programu, který jej vytvořil.\n\nChcete časová razítka opravit?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Časová razítka nadřazeného a podřazeného disku nesouhlasí" + +msgid "Could not fix VHD timestamp." +msgstr "Nebylo možné opravit časové razítko VHD." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (cluster 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (cluster 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." + +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." + +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." + +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "Dokonalé otáčky za minutu" + +msgid "1%% below perfect RPM" +msgstr "1%% pod dokonalými ot./m" + +msgid "1.5%% below perfect RPM" +msgstr "1.5%% pod dokonalými ot./m" + +msgid "2%% below perfect RPM" +msgstr "2%% pod dokonalými ot./m" + +msgid "(System Default)" +msgstr "(Výchozí nastavení systému)" + diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po index 3de5c37e9..ae5e381f4 100644 --- a/src/qt/languages/de-DE.po +++ b/src/qt/languages/de-DE.po @@ -1,1191 +1,1191 @@ -msgid "&Action" -msgstr "&Aktionen" - -msgid "&Keyboard requires capture" -msgstr "&Tastatur benötigt das Einfangen des Mauszeigers" - -msgid "&Right CTRL is left ALT" -msgstr "&Die rechte Strg-Taste ist die Linke Alt-Taste" - -msgid "&Hard Reset..." -msgstr "&Hard-Reset..." - -msgid "&Ctrl+Alt+Del\tCtrl+F12" -msgstr "&Strg+Alt+Entf\tStrg+F12" - -msgid "Ctrl+Alt+&Esc" -msgstr "Strg+Alt+&Esc" - -msgid "&Pause" -msgstr "&Pause" - -msgid "E&xit..." -msgstr "Be&enden..." - -msgid "&View" -msgstr "&Ansicht" - -msgid "&Hide status bar" -msgstr "&Statusleiste ausblenden" - -msgid "Hide &toolbar" -msgstr "Hide &toolbar" - -msgid "&Resizeable window" -msgstr "&Größenverstellbares Fenster" - -msgid "R&emember size && position" -msgstr "&Größe && Position merken" - -msgid "Re&nderer" -msgstr "Re&nderer" - -msgid "&SDL (Software)" -msgstr "&SDL (Software)" - -msgid "SDL (&Hardware)" -msgstr "SDL (&Hardware)" - -msgid "SDL (&OpenGL)" -msgstr "SDL (&OpenGL)" - -msgid "Open&GL (3.0 Core)" -msgstr "Open&GL (3.0-Kern)" - -msgid "&VNC" -msgstr "&VNC" - -msgid "Specify dimensions..." -msgstr "Fenstergröße einstellen..." - -msgid "F&orce 4:3 display ratio" -msgstr "&4:3-Seitenverhältnis erzwingen" - -msgid "&Window scale factor" -msgstr "&Fensterskalierungsfaktor" - -msgid "&0.5x" -msgstr "&0,5x" - -msgid "&1x" -msgstr "&1x" - -msgid "1.&5x" -msgstr "1,&5x" - -msgid "&2x" -msgstr "&2x" - -msgid "Filter method" -msgstr "Filteringmethode" - -msgid "&Nearest" -msgstr "&Nearest" - -msgid "&Linear" -msgstr "&Linear" - -msgid "Hi&DPI scaling" -msgstr "Hi&DPI-Skalierung" - -msgid "&Fullscreen\tCtrl+Alt+PageUP" -msgstr "&Vollbild\tStrg+Alt+BildAuf" - -msgid "Fullscreen &stretch mode" -msgstr "&Stretching-Modus im Vollbildmodus" - -msgid "&Full screen stretch" -msgstr "&Vollbild-Stretching" - -msgid "&4:3" -msgstr "&4:3-Seitenverhältnis erzwingen" - -msgid "&Square pixels (Keep ratio)" -msgstr "&Quadratische Pixel (Seitenverhältnis beibehalten)" - -msgid "&Integer scale" -msgstr "&Integer-Skalierung" - -msgid "E&GA/(S)VGA settings" -msgstr "E&GA/(S)VGA-Einstellungen" - -msgid "&Inverted VGA monitor" -msgstr "&Invertierte VGA-Anzeige" - -msgid "VGA screen &type" -msgstr "&VGA-Bildschirmtyp" - -msgid "RGB &Color" -msgstr "&RGB-Farbe" - -msgid "&RGB Grayscale" -msgstr "&RGB-Graustufen" - -msgid "&Amber monitor" -msgstr "&Bernstein-Monitor" - -msgid "&Green monitor" -msgstr "&Grüner Monitor" - -msgid "&White monitor" -msgstr "&Weißer Monitor" - -msgid "Grayscale &conversion type" -msgstr "Methode zur &Graustufenkonversion" - -msgid "BT&601 (NTSC/PAL)" -msgstr "BT&601 (NTSC/PAL)" - -msgid "BT&709 (HDTV)" -msgstr "BT&709 (HDTV)" - -msgid "&Average" -msgstr "&Durchschnittsmethode" - -msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" -msgstr "Overscan für CGA/PCjr/Tandy/E&GA/(S)VGA-Displays" - -msgid "Change contrast for &monochrome display" -msgstr "Kontrast für &monochrome Displays ändern" - -msgid "&Media" -msgstr "&Medien" - -msgid "&Tools" -msgstr "&Werkzeuge" - -msgid "&Settings..." -msgstr "&Optionen..." - -msgid "&Update status bar icons" -msgstr "&Statusleistenicons aktualisieren" - -msgid "Take s&creenshot\tCtrl+F11" -msgstr "S&creenshot aufnehmen\tStrg+F11" - -msgid "&Preferences..." -msgstr "&Einstellungen..." - -msgid "Enable &Discord integration" -msgstr "&Discord-Integration aktivieren" - -msgid "Sound &gain..." -msgstr "&Klangverstärkung..." - -msgid "Begin trace\tCtrl+T" -msgstr "Tracing starten\tStrg+T" - -msgid "End trace\tCtrl+T" -msgstr "Tracing beenden\tStrg+T" - -msgid "&Logging" -msgstr "&Logging" - -msgid "Enable BusLogic logs\tCtrl+F4" -msgstr "BusLogic-Logs aktivieren\tStrg+F4" - -msgid "Enable CD-ROM logs\tCtrl+F5" -msgstr "CD-ROM-Logs aktivieren\tStrg+F5" - -msgid "Enable floppy (86F) logs\tCtrl+F6" -msgstr "Disketten (86F)-Logs aktivieren\tStrg+F6" - -msgid "Enable floppy controller logs\tCtrl+F7" -msgstr "Diskettencontroller-Logs aktivieren\tStrg+F7" - -msgid "Enable IDE logs\tCtrl+F8" -msgstr "IDE-Logs aktivieren\tStrg+F8" - -msgid "Enable Serial Port logs\tCtrl+F3" -msgstr "Seriell-Port-Logs aktivieren\tStrg+F3" - -msgid "Enable Network logs\tCtrl+F9" -msgstr "Netzwerk-Logs aktivieren\tStrg+F9" - -msgid "&Log breakpoint\tCtrl+F10" -msgstr "&Breakpoint für die Log-Datei\tStrg+F10" - -msgid "Dump &video RAM\tCtrl+F1" -msgstr "&Video-RAM dumpen\tStrg+F1" - -msgid "&Help" -msgstr "&Hilfe" - -msgid "&Documentation..." -msgstr "&Dokumentation..." - -msgid "&About 86Box..." -msgstr "&Über 86Box..." - -msgid "&New image..." -msgstr "&Neues Image..." - -msgid "&Existing image..." -msgstr "&Bestehendes Image..." - -msgid "Existing image (&Write-protected)..." -msgstr "Bestehendes Image (&schreibgeschützt)..." - -msgid "&Record" -msgstr "&Aufnehmen" - -msgid "&Play" -msgstr "&Abspielen" - -msgid "&Rewind to the beginning" -msgstr "&An den Anfang zurückspulen" - -msgid "&Fast forward to the end" -msgstr "&An das Ende vorspulen" - -msgid "E&ject" -msgstr "A&uswerfen" - -msgid "&Image..." -msgstr "&Cartridgeimage..." - -msgid "E&xport to 86F..." -msgstr "&In das 86F-Format e&xportieren..." - -msgid "&Mute" -msgstr "&Stummschalten" - -msgid "E&mpty" -msgstr "L&eer" - -msgid "&Reload previous image" -msgstr "&Voriges Image neu laden" - -msgid "&Image" -msgstr "&Image" - -msgid "Target &framerate" -msgstr "Ziel&framerate" - -msgid "&Sync with video" -msgstr "&Mit Videoausgabe synchronisieren" - -msgid "&25 fps" -msgstr "&25 fps" - -msgid "&30 fps" -msgstr "&30 fps" - -msgid "&50 fps" -msgstr "&50 fps" - -msgid "&60 fps" -msgstr "&60 fps" - -msgid "&75 fps" -msgstr "&75 fps" - -msgid "&VSync" -msgstr "&VSync" - -msgid "&Select shader..." -msgstr "&Shader auswählen..." - -msgid "&Remove shader" -msgstr "&Shader entfernen" - -msgid "Preferences" -msgstr "Einstellungen" - -msgid "Sound Gain" -msgstr "Klangverstärkung" - -msgid "New Image" -msgstr "Neues Image" - -msgid "Settings" -msgstr "Optionen" - -msgid "Specify Main Window Dimensions" -msgstr "Fenstergröße einstellen" - -msgid "OK" -msgstr "OK" - -msgid "Cancel" -msgstr "Abbrechen" - -msgid "Save these settings as &global defaults" -msgstr "Einstellungen als &globalen Standard speichern" - -msgid "&Default" -msgstr "&Standard" - -msgid "Language:" -msgstr "Sprache:" - -msgid "Icon set:" -msgstr "Icon-Satz:" - -msgid "Gain" -msgstr "Verstärkung" - -msgid "File name:" -msgstr "Dateiname:" - -msgid "Disk size:" -msgstr "Plattengröße:" - -msgid "RPM mode:" -msgstr "Drehzahlmodus:" - -msgid "Progress:" -msgstr "Fortschritt:" - -msgid "Width:" -msgstr "Breite:" - -msgid "Height:" -msgstr "Höhe:" - -msgid "Lock to this size" -msgstr "Feste Größe" - -msgid "Machine type:" -msgstr "Systemtyp:" - -msgid "Machine:" -msgstr "Maschine:" - -msgid "Configure" -msgstr "Einstellen" - -msgid "CPU type:" -msgstr "CPU-Typ:" - -msgid "Speed:" -msgstr "Geschwindigkeit:" - -msgid "FPU:" -msgstr "FPU-Einheit:" - -msgid "Wait states:" -msgstr "Wartezustände:" - -msgid "MB" -msgstr "MB" - -msgid "Memory:" -msgstr "Hauptspeicher:" - -msgid "Time synchronization" -msgstr "Zeitsynchronisierung" - -msgid "Disabled" -msgstr "Deaktiviert" - -msgid "Enabled (local time)" -msgstr "Aktiviert (Lokale Uhrzeit)" - -msgid "Enabled (UTC)" -msgstr "Aktiviert (UTC)" - -msgid "Dynamic Recompiler" -msgstr "Dynamischer Recompiler" - -msgid "Video:" -msgstr "Videokarte:" - -msgid "Voodoo Graphics" -msgstr "Voodoo-Grafik" - -msgid "Mouse:" -msgstr "Maus:" - -msgid "Joystick:" -msgstr "Joystick:" - -msgid "Joystick 1..." -msgstr "Joystick 1..." - -msgid "Joystick 2..." -msgstr "Joystick 2..." - -msgid "Joystick 3..." -msgstr "Joystick 3..." - -msgid "Joystick 4..." -msgstr "Joystick 4..." - -msgid "Sound card:" -msgstr "Soundkarte:" - -msgid "MIDI Out Device:" -msgstr "MIDI Out-Gerät:" - -msgid "MIDI In Device:" -msgstr "MIDI In-Gerät:" - -msgid "Standalone MPU-401" -msgstr "Standalone-MPU-401-Gerät" - -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - -msgid "Use FLOAT32 sound" -msgstr "FLOAT32-Wiedergabe benutzen" - -msgid "Network type:" -msgstr "Netzwerktyp:" - -msgid "PCap device:" -msgstr "PCap-Gerät:" - -msgid "Network adapter:" -msgstr "Netzwerkadapter:" - -msgid "LPT1 Device:" -msgstr "LPT1-Gerät" - -msgid "LPT2 Device:" -msgstr "LPT2-Gerät" - -msgid "LPT3 Device:" -msgstr "LPT3-Gerät" - -msgid "Serial port 1" -msgstr "Serielle Schnittstelle 1" - -msgid "Serial port 2" -msgstr "Serielle Schnittstelle 2" - -msgid "Serial port 3" -msgstr "Serielle Schnittstelle 3" - -msgid "Serial port 4" -msgstr "Serielle Schnittstelle 4" - -msgid "Parallel port 1" -msgstr "Parallelport 1" - -msgid "Parallel port 2" -msgstr "Parallelport 2" - -msgid "Parallel port 3" -msgstr "Parallelport 3" - -msgid "HD Controller:" -msgstr "HDD-Controller:" - -msgid "FD Controller:" -msgstr "FD-Controller:" - -msgid "Tertiary IDE Controller" -msgstr "Tertiärer IDE-Controller" - -msgid "Quaternary IDE Controller" -msgstr "Quartärer IDE-Controller" - -msgid "SCSI" -msgstr "SCSI" - -msgid "Controller 1:" -msgstr "Controller 1:" - -msgid "Controller 2:" -msgstr "Controller 2:" - -msgid "Controller 3:" -msgstr "Controller 3:" - -msgid "Controller 4:" -msgstr "Controller 4:" - -msgid "Cassette" -msgstr "Kassette" - -msgid "Hard disks:" -msgstr "Festplatten:" - -msgid "&New..." -msgstr "&Neu..." - -msgid "&Existing..." -msgstr "&Vorhanden..." - -msgid "&Remove" -msgstr "&Entfernen" - -msgid "Bus:" -msgstr "Bus:" - -msgid "Channel:" -msgstr "Kanal:" - -msgid "ID:" -msgstr "ID:" - -msgid "&Specify..." -msgstr "&Festlegen..." - -msgid "Sectors:" -msgstr "Sektoren:" - -msgid "Heads:" -msgstr "Köpfe:" - -msgid "Cylinders:" -msgstr "Zylinder:" - -msgid "Size (MB):" -msgstr "Größe (MB):" - -msgid "Type:" -msgstr "Typ:" - -msgid "Image Format:" -msgstr "Imageformat:" - -msgid "Block Size:" -msgstr "Blockgröße:" - -msgid "Floppy drives:" -msgstr "Diskettenlaufwerke:" - -msgid "Turbo timings" -msgstr "Turbo-Timings" - -msgid "Check BPB" -msgstr "BPB überprüfen" - -msgid "CD-ROM drives:" -msgstr "CD-ROM-Laufwerke:" - -msgid "MO drives:" -msgstr "MO-Laufwerke:" - -msgid "ZIP drives:" -msgstr "ZIP-Laufwerke:" - -msgid "ZIP 250" -msgstr "ZIP 250" - -msgid "ISA RTC:" -msgstr "ISA-Echtzeituhr:" - -msgid "ISA Memory Expansion" -msgstr "ISA-Speichererweiterung:" - -msgid "Card 1:" -msgstr "Steckkarte 1:" - -msgid "Card 2:" -msgstr "Steckkarte 2:" - -msgid "Card 3:" -msgstr "Steckkarte 3:" - -msgid "Card 4:" -msgstr "Steckkarte 4:" - -msgid "ISABugger device" -msgstr "ISABugger-Gerät" - -msgid "POST card" -msgstr "POST-Code-Karte" - -msgid "FONT_SIZE" -msgstr "9" - -msgid "FONT_NAME" -msgstr "Segoe UI" - -msgid "86Box" -msgstr "86Box" - -msgid "Error" -msgstr "Fehler" - -msgid "Fatal error" -msgstr "Fataler Fehler" - -msgid "" -msgstr "" - -msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." -msgstr "Bitte Strg+Alt+Bild ab zur Rückkehr in den Fenstermodus drücken." - -msgid "Speed" -msgstr "Geschwindigkeit" - -msgid "ZIP %03i %i (%s): %ls" -msgstr "ZIP %03i %i (%s): %ls" - -msgid "ZIP images (*.im? *.zdi)" -msgstr "ZIP-Images (*.im? *.zdi)" - -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "86Box konnte keine nutzbaren ROM-Dateien finden.\n\nBitte besuchen Sie download, laden ein ROM-Set herunter und extrahieren dies in das \"roms\"-Verzeichnis." - -msgid "(empty)" -msgstr "(leer)" - -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "ZIP-Images (*.im? *.zdi);;Alle Dateien (*.*)" - -msgid "Turbo" -msgstr "Turbo" - -msgid "On" -msgstr "An" - -msgid "Off" -msgstr "Aus" - -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "Alle Images (*.86f *.dsk *.flp *.im? *.*fd?);;Basissektorimages (*.dsk *.flp *.im? *.img *.*fd?);;Oberflächenimages (*.86f)" - -msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "Das System \"%hs\" ist aufgrund von fehlenden ROMs im Verzeichnis roms/machines nicht verfügbar. Es wird auf ein verfügbares System gewechselt." - -msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "Die Videokarte \"%hs\" ist aufgrund von fehlenden ROMs im Verzeichnis roms/video nicht verfügbar. Es wird auf eine verfügbare Videokarte gewechselt." - -msgid "Machine" -msgstr "System" - -msgid "Display" -msgstr "Anzeige" - -msgid "Input devices" -msgstr "Eingabegeräte" - -msgid "Sound" -msgstr "Multimedia" - -msgid "Network" -msgstr "Netzwerk" - -msgid "Ports (COM & LPT)" -msgstr "Anschlüsse (COM & LPT)" - -msgid "Storage controllers" -msgstr "Speichercontroller" - -msgid "Hard disks" -msgstr "Festplatten" - -msgid "Floppy & CD-ROM drives" -msgstr "Disketten- & CD-ROM-Laufwerke" - -msgid "Other removable devices" -msgstr "Andere Wechsellaufwerke" - -msgid "Other peripherals" -msgstr "Andere Peripheriegeräte" - -msgid "Surface images (*.86f)" -msgstr "Oberflächenimages (*.86f)" - -msgid "Click to capture mouse" -msgstr "Zum Einfangen des Mauszeigers bitte klicken" - -msgid "Press F8+F12 to release mouse" -msgstr "Bitte F8+F12 zur Mausfreigabe drücken" - -msgid "Press F8+F12 or middle button to release mouse" -msgstr "Bitte F8+F12 oder die mittlere Maustaste zur Mausfreigabe drücken" - -msgid "Unable to initialize FluidSynth" -msgstr "FluidSynth konnte nicht initialisiert werden" - -msgid "Bus" -msgstr "Bus" - -msgid "File" -msgstr "Datei" - -msgid "C" -msgstr "C" - -msgid "H" -msgstr "H" - -msgid "S" -msgstr "S" - -msgid "KB" -msgstr "KB" - -msgid "Could not initialize the video renderer." -msgstr "Der Videorenderer konnte nicht initialisiert werden." - -msgid "Default" -msgstr "Standard" - -msgid "%i Wait state(s)" -msgstr "%i Wartezustände" - -msgid "Type" -msgstr "Typ" - -msgid "Failed to set up PCap" -msgstr "PCap konnte nicht eingerichtet werden" - -msgid "No PCap devices found" -msgstr "Keine PCap-Geräte gefunden" - -msgid "Invalid PCap device" -msgstr "Ungültiges PCap-Gerät" - -msgid "Standard 2-button joystick(s)" -msgstr "Standard 2-Tasten-Joystick(s)" - -msgid "Standard 4-button joystick" -msgstr "Standard 4-Tasten-Joystick" - -msgid "Standard 6-button joystick" -msgstr "Standard 6-Tasten-Joystick" - -msgid "Standard 8-button joystick" -msgstr "Standard 8-Tasten-Joystick" - -msgid "CH Flightstick Pro" -msgstr "CH Flightstick Pro" - -msgid "Microsoft SideWinder Pad" -msgstr "Microsoft SideWinder Pad" - -msgid "Thrustmaster Flight Control System" -msgstr "Thrustmaster Flight Control System" - -msgid "None" -msgstr "Ohne" - -msgid "Unable to load keyboard accelerators." -msgstr "Tastaturbeschleuniger konnten nicht geladen werden." - -msgid "Unable to register raw input." -msgstr "Roheingaben konnten nicht registriert werden." - -msgid "%u" -msgstr "%u" - -msgid "%u MB (CHS: %i, %i, %i)" -msgstr "%u MB (CHS: %i, %i, %i)" - -msgid "Floppy %i (%s): %ls" -msgstr "Diskette %i (%s): %ls" - -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "Alle Images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Fortgeschrittene Sektorimages (*.imd *.json *.td0);;Basissektorimages (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Fluximages (*.fdi);;Oberflächenimages (*.86f *.mfm);;Alle Dateien (*.*)" - -msgid "Unable to initialize FreeType" -msgstr "FreeType konnte nicht initialisiert werden" - -msgid "Unable to initialize SDL, SDL2.dll is required" -msgstr "SDL konnte nicht initialisiert werden, die Datei SDL2.dll wird benötigt" - -msgid "Are you sure you want to hard reset the emulated machine?" -msgstr "Sind Sie sich sicher, dass Sie einen Hard-Reset für das emulierte System durchführen wollen?" - -msgid "Are you sure you want to exit 86Box?" -msgstr "Sind Sie sich sicher, dass Sie 86Box beenden wollen?" - -msgid "Unable to initialize Ghostscript" -msgstr "Ghostscript konnte nicht initialisiert werden" - -msgid "MO %i (%ls): %ls" -msgstr "MO %i (%ls): %ls" - -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "MO-Images (*.im? *.mdi);;Alle Dateien (*.*)" - -msgid "Welcome to 86Box!" -msgstr "Willkommen bei 86Box!" - -msgid "Internal controller" -msgstr "Interner Controller" - -msgid "Exit" -msgstr "Beenden" - -msgid "No ROMs found" -msgstr "Keine ROMs gefunden" - -msgid "Do you want to save the settings?" -msgstr "Möchten Sie die Einstellungen speichern?" - -msgid "This will hard reset the emulated machine." -msgstr "Dies wird zu einem Hard-Reset der emulierten Maschine führen." - -msgid "Save" -msgstr "Speichern" - -msgid "About 86Box" -msgstr "Über 86Box" - -msgid "86Box v" -msgstr "86Box Version " - -msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "Ein Emulator für alte Computer\n\nAutoren: Sarah Walker, Miran Grča, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho sowie andere.\n\nÜbersetzt von: dob205\n\nVeröffentlicht unter der GNU General Public License in der Version 2 oder neuer. Siehe LICENSE für mehr Informationen." - -msgid "Hardware not available" -msgstr "Hardware nicht verfügbar" - -msgid "WinPcap" -msgstr "WinPcap" - -msgid "libpcap" -msgstr "libpcap" - -msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." -msgstr "Bitte stellen Sie sicher, dass libpcap installiert ist und sie eine libpcap-kompatible Netzwerkverbindung nutzen." - -msgid "Invalid configuration" -msgstr "Ungültige Konfiguration" - -msgid "freetype.dll" -msgstr "freetype.dll" - -msgid "libfreetype" -msgstr "libfreetype" - -msgid " is required for ESC/P printer emulation." -msgstr " wird für die ESC/P-Druckeremulation benötigt." - -msgid "gsdll32.dll" -msgstr "gsdll32.dll" - -msgid "libgs" -msgstr "libgs" - -msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." -msgstr " wird zur automatischen Konversion von PostScript-Dateien in das PDF-Format benötigt.\n\nSämtliche an den generischen PostScript-Drucker gesendete Dateien werden als PostScript (.ps)-Dateien gesichert." - -msgid "libfluidsynth.dll" -msgstr "libfluidsynth.dll" - -msgid "libfluidsynth" -msgstr "libfluidsynth" - -msgid " is required for FluidSynth MIDI output." -msgstr " wird für die FluidSynth-MIDI-Ausgabe benötigt." - -msgid "Entering fullscreen mode" -msgstr "Vollbildmodus wird aktiviert" - -msgid "Don't show this message again" -msgstr "Diese Nachricht nicht mehr anzeigen" - -msgid "Don't exit" -msgstr "Nicht beenden" - -msgid "Reset" -msgstr "Zurücksetzen" - -msgid "Don't reset" -msgstr "Nicht zurücksetzen" - -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "CD-ROM-Images (*.iso *.cue);;Alle Dateien (*.*)" - -msgid "%hs Device Configuration" -msgstr "%hs-Gerätekonfiguration" - -msgid "Monitor in sleep mode" -msgstr "Monitor im Standbymodus" - -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "OpenGL-Shader (*.glsl);;Alle Dateien (*.*)" - -msgid "OpenGL options" -msgstr "OpenGL-Optionen" - -msgid "You are loading an unsupported configuration" -msgstr "Sie laden gerade eine nicht unterstützte Konfiguration" - -msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "Das Filtern der CPU-Typen basierend auf dem ausgewählten System ist für dieses System deaktiviert.\n\nDies ermöglicht es, dass man eine sonst nicht mit dem ausgewählten System inkompatible CPU auswählen kann. Allerdings kann dies zu Inkompatiblilitäten mit dem BIOS des Systems oder anderen Programmen kommen.\n\nDas Aktivieren dieser Einstellung wird nicht unterstützt und sämtliche Bugreports können als \"invalid\" geschlossen werden." - -msgid "Continue" -msgstr "Fortfahren" - -msgid "Cassette: %s" -msgstr "Kassette: %s" - -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Kassettenimages (*.pcm *.raw *.wav *.cas);;Alle Dateien (*.*)" - -msgid "Cartridge %i: %ls" -msgstr "Cartridge %i: %ls" - -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "Cartridgeimages (*.a *.b *.jrc);;Alle Dateien (*.*)" - -msgid "Error initializing renderer" -msgstr "Fehler bei der Rendererinitialisierung" - -msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "Der OpenGL (3.0-Kern)-Renderer konnte nicht initialisiert werden. Bitte benutzen Sie einen anderen Renderer." - -msgid "Resume execution" -msgstr "Resume execution" - -msgid "Pause execution" -msgstr "Pause execution" - -msgid "Press Ctrl+Alt+Del" -msgstr "Press Ctrl+Alt+Del" - -msgid "Press Ctrl+Alt+Esc" -msgstr "Press Ctrl+Alt+Esc" - -msgid "Hard reset" -msgstr "Hard reset" - -msgid "ACPI shutdown" -msgstr "ACPI shutdown" - -msgid "Hard disk (%s)" -msgstr "Festplatte (%s)" - -msgid "%01i:%01i" -msgstr "%01i:%01i" - -msgid "%01i" -msgstr "%01i" - -msgid "MFM/RLL or ESDI CD-ROM drives never existed" -msgstr "MFM/RLL- oder ESDI CD-ROM-Laufwerke hat es niemals gegeben" - -msgid "Custom..." -msgstr "Angepasst..." - -msgid "Custom (large)..." -msgstr "Angepasst (Groß)..." - -msgid "Add New Hard Disk" -msgstr "Neue Festplatte hinzufügen" - -msgid "Add Existing Hard Disk" -msgstr "Bestehende Festplatte hinzufügen" - -msgid "HDI disk images cannot be larger than 4 GB." -msgstr "HDI-Diskimages können nicht größer als 4 GB groß sein." - -msgid "Disk images cannot be larger than 127 GB." -msgstr "Festplattenimages können nicht größer als 127 GB groß sein." - -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Festplattenimages (*.hd? *.im? *.vhd);;Alle Dateien (*.*)" - -msgid "Unable to read file" -msgstr "Die Datei konnte nicht gelesen werden" - -msgid "Unable to write file" -msgstr "Die Datei konnte nicht beschrieben werden" - -msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "HDI- oder HDX-Images mit einer Sektorgröße größer als 512 kB werden nicht unterstützt." - -msgid "USB is not yet supported" -msgstr "USB wird noch nicht unterstützt" - -msgid "Disk image file already exists" -msgstr "Die Festplattenimagedatei existiert bereits" - -msgid "Please specify a valid file name." -msgstr "Bitte geben Sie einen gültigen Dateinamen ein." - -msgid "Disk image created" -msgstr "Disk-Image wurde erstellt" - -msgid "Make sure the file exists and is readable." -msgstr "Bitte stellen Sie sicher, dass die Datei existiert und lesbar ist." - -msgid "Make sure the file is being saved to a writable directory." -msgstr "Bitte stellen Sie sicher, dass die Datei in ein Verzeichnis mit Schreibberechtigungen gespeichert wird." - -msgid "Disk image too large" -msgstr "Festplattenimage ist zu groß" - -msgid "Remember to partition and format the newly-created drive." -msgstr "Bitte denken Sie an das Partitionieren und Formatieren des neu erstellten Laufwerks." - -msgid "The selected file will be overwritten. Are you sure you want to use it?" -msgstr "Die ausgewählte Datei wird überschrieben. Möchten Sie diese Datei nutzen?" - -msgid "Unsupported disk image" -msgstr "Nicht unterstütztes Festplattenimage" - -msgid "Overwrite" -msgstr "Überschreiben" - -msgid "Don't overwrite" -msgstr "Nicht überschreiben" - -msgid "Raw image (.img)" -msgstr "Rohdatenimages (.img)" - -msgid "HDI image (.hdi)" -msgstr "HDI-Images (.hdi)" - -msgid "HDX image (.hdx)" -msgstr "HDX-Images (.hdx)" - -msgid "Fixed-size VHD (.vhd)" -msgstr "VHD mit fester Größe (.vhd)" - -msgid "Dynamic-size VHD (.vhd)" -msgstr "VHD mit dynamischer Größe (.vhd)" - -msgid "Differencing VHD (.vhd)" -msgstr "Differenzierende VHD (.vhd)" - -msgid "Large blocks (2 MB)" -msgstr "Große Blöcke (2 MB)" - -msgid "Small blocks (512 KB)" -msgstr "Kleine Blöcke (512 KB)" - -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "VHD-Dateien (*.vhd);;Alle Dateien (*.*)" - -msgid "Select the parent VHD" -msgstr "Eltern-VHD-Datei bitte auswählen" - -msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" -msgstr "Dies bedeutet, dass das Elternimage nach der Erstellung des differenzierenden Images erzeugt wurde.\n\nDies kann auch passieren, falls die Image-Dateien verschoben oder kopiert wurden. Ebenso kann auch dies durch einen Bug im Programm, welches das Image erstellt hat, passieren.\n\nMöchten Sie die Zeitstempel korrigieren?" - -msgid "Parent and child disk timestamps do not match" -msgstr "Die Zeitstempel der Eltern- und der Kindesplatte stimmen nicht überein" - -msgid "Could not fix VHD timestamp." -msgstr "Der Zeitstempel der VHD konnte nicht korrigiert werden." - -msgid "%01i:%02i" -msgstr "%01i:%02i" - -msgid "MFM/RLL" -msgstr "MFM/RLL" - -msgid "XTA" -msgstr "XTA" - -msgid "ESDI" -msgstr "ESDI" - -msgid "IDE" -msgstr "IDE" - -msgid "ATAPI" -msgstr "ATAPI" - -msgid "MFM/RLL (%01i:%01i)" -msgstr "MFM/RLL (%01i:%01i)" - -msgid "XTA (%01i:%01i)" -msgstr "XTA (%01i:%01i)" - -msgid "ESDI (%01i:%01i)" -msgstr "ESDI (%01i:%01i)" - -msgid "IDE (%01i:%01i)" -msgstr "IDE (%01i:%01i)" - -msgid "ATAPI (%01i:%01i)" -msgstr "ATAPI (%01i:%01i)" - -msgid "SCSI (%01i:%02i)" -msgstr "SCSI (%01i:%02i)" - -msgid "CD-ROM %i (%s): %s" -msgstr "CD-ROM %i (%s): %s" - -msgid "160 kB" -msgstr "160 kB" - -msgid "180 kB" -msgstr "180 kB" - -msgid "320 kB" -msgstr "320 kB" - -msgid "360 kB" -msgstr "360 kB" - -msgid "640 kB" -msgstr "640 kB" - -msgid "720 kB" -msgstr "720 kB" - -msgid "1.2 MB" -msgstr "1,2 MB" - -msgid "1.25 MB" -msgstr "1,25 MB" - -msgid "1.44 MB" -msgstr "1,44 MB" - -msgid "DMF (cluster 1024)" -msgstr "DMF (1024 Cluster)" - -msgid "DMF (cluster 2048)" -msgstr "DMF (2048 Cluster)" - -msgid "2.88 MB" -msgstr "2,88 MB" - -msgid "ZIP 100" -msgstr "ZIP 100" - -msgid "3.5\" 128Mb M.O. (ISO 10090)" -msgstr "3,5-Zoll 128 MB M.O. (ISO 10090)" - -msgid "3.5\" 230Mb M.O. (ISO 13963)" -msgstr "3,5-Zoll 230 MB M.O. (ISO 13963)" - -msgid "3.5\" 540Mb M.O. (ISO 15498)" -msgstr "3,5-Zoll 540 MB M.O. (ISO 15498)" - -msgid "3.5\" 640Mb M.O. (ISO 15498)" -msgstr "3,5-Zoll 640 MB M.O. (ISO 15498)" - -msgid "3.5\" 1.3Gb M.O. (GigaMO)" -msgstr "3,5-Zoll 1,3 GB M.O. (GigaMO)" - -msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgstr "3,5-Zoll 2,3 GB M.O. (GigaMO 2)" - -msgid "5.25\" 600Mb M.O." -msgstr "5,25-Zoll 600 MB M.O." - -msgid "5.25\" 650Mb M.O." -msgstr "5,25-Zoll 650 MB M.O." - -msgid "5.25\" 1Gb M.O." -msgstr "5,25-Zoll 1 GB M.O." - -msgid "5.25\" 1.3Gb M.O." -msgstr "5,25-Zoll 1,3 GB M.O." - -msgid "Perfect RPM" -msgstr "Perfekte Drehzahl" - -msgid "1%% below perfect RPM" -msgstr "1%% unterhalb der perfekten Drehzahl" - -msgid "1.5%% below perfect RPM" -msgstr "1,5%% unterhalb der perfekten Drehzahl" - -msgid "2%% below perfect RPM" -msgstr "2%% unterhalb der perfekten Drehzahl" - -msgid "(System Default)" -msgstr "(Systemstandard)" - +msgid "&Action" +msgstr "&Aktionen" + +msgid "&Keyboard requires capture" +msgstr "&Tastatur benötigt das Einfangen des Mauszeigers" + +msgid "&Right CTRL is left ALT" +msgstr "&Die rechte Strg-Taste ist die Linke Alt-Taste" + +msgid "&Hard Reset..." +msgstr "&Hard-Reset..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Strg+Alt+Entf\tStrg+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Strg+Alt+&Esc" + +msgid "&Pause" +msgstr "&Pause" + +msgid "E&xit..." +msgstr "Be&enden..." + +msgid "&View" +msgstr "&Ansicht" + +msgid "&Hide status bar" +msgstr "&Statusleiste ausblenden" + +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + +msgid "&Resizeable window" +msgstr "&Größenverstellbares Fenster" + +msgid "R&emember size && position" +msgstr "&Größe && Position merken" + +msgid "Re&nderer" +msgstr "Re&nderer" + +msgid "&SDL (Software)" +msgstr "&SDL (Software)" + +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardware)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0-Kern)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "Fenstergröße einstellen..." + +msgid "F&orce 4:3 display ratio" +msgstr "&4:3-Seitenverhältnis erzwingen" + +msgid "&Window scale factor" +msgstr "&Fensterskalierungsfaktor" + +msgid "&0.5x" +msgstr "&0,5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1,&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Filteringmethode" + +msgid "&Nearest" +msgstr "&Nearest" + +msgid "&Linear" +msgstr "&Linear" + +msgid "Hi&DPI scaling" +msgstr "Hi&DPI-Skalierung" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Vollbild\tStrg+Alt+BildAuf" + +msgid "Fullscreen &stretch mode" +msgstr "&Stretching-Modus im Vollbildmodus" + +msgid "&Full screen stretch" +msgstr "&Vollbild-Stretching" + +msgid "&4:3" +msgstr "&4:3-Seitenverhältnis erzwingen" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Quadratische Pixel (Seitenverhältnis beibehalten)" + +msgid "&Integer scale" +msgstr "&Integer-Skalierung" + +msgid "E&GA/(S)VGA settings" +msgstr "E&GA/(S)VGA-Einstellungen" + +msgid "&Inverted VGA monitor" +msgstr "&Invertierte VGA-Anzeige" + +msgid "VGA screen &type" +msgstr "&VGA-Bildschirmtyp" + +msgid "RGB &Color" +msgstr "&RGB-Farbe" + +msgid "&RGB Grayscale" +msgstr "&RGB-Graustufen" + +msgid "&Amber monitor" +msgstr "&Bernstein-Monitor" + +msgid "&Green monitor" +msgstr "&Grüner Monitor" + +msgid "&White monitor" +msgstr "&Weißer Monitor" + +msgid "Grayscale &conversion type" +msgstr "Methode zur &Graustufenkonversion" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Durchschnittsmethode" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "Overscan für CGA/PCjr/Tandy/E&GA/(S)VGA-Displays" + +msgid "Change contrast for &monochrome display" +msgstr "Kontrast für &monochrome Displays ändern" + +msgid "&Media" +msgstr "&Medien" + +msgid "&Tools" +msgstr "&Werkzeuge" + +msgid "&Settings..." +msgstr "&Optionen..." + +msgid "&Update status bar icons" +msgstr "&Statusleistenicons aktualisieren" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "S&creenshot aufnehmen\tStrg+F11" + +msgid "&Preferences..." +msgstr "&Einstellungen..." + +msgid "Enable &Discord integration" +msgstr "&Discord-Integration aktivieren" + +msgid "Sound &gain..." +msgstr "&Klangverstärkung..." + +msgid "Begin trace\tCtrl+T" +msgstr "Tracing starten\tStrg+T" + +msgid "End trace\tCtrl+T" +msgstr "Tracing beenden\tStrg+T" + +msgid "&Logging" +msgstr "&Logging" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "BusLogic-Logs aktivieren\tStrg+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "CD-ROM-Logs aktivieren\tStrg+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Disketten (86F)-Logs aktivieren\tStrg+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Diskettencontroller-Logs aktivieren\tStrg+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "IDE-Logs aktivieren\tStrg+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Seriell-Port-Logs aktivieren\tStrg+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Netzwerk-Logs aktivieren\tStrg+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Breakpoint für die Log-Datei\tStrg+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "&Video-RAM dumpen\tStrg+F1" + +msgid "&Help" +msgstr "&Hilfe" + +msgid "&Documentation..." +msgstr "&Dokumentation..." + +msgid "&About 86Box..." +msgstr "&Über 86Box..." + +msgid "&New image..." +msgstr "&Neues Image..." + +msgid "&Existing image..." +msgstr "&Bestehendes Image..." + +msgid "Existing image (&Write-protected)..." +msgstr "Bestehendes Image (&schreibgeschützt)..." + +msgid "&Record" +msgstr "&Aufnehmen" + +msgid "&Play" +msgstr "&Abspielen" + +msgid "&Rewind to the beginning" +msgstr "&An den Anfang zurückspulen" + +msgid "&Fast forward to the end" +msgstr "&An das Ende vorspulen" + +msgid "E&ject" +msgstr "A&uswerfen" + +msgid "&Image..." +msgstr "&Cartridgeimage..." + +msgid "E&xport to 86F..." +msgstr "&In das 86F-Format e&xportieren..." + +msgid "&Mute" +msgstr "&Stummschalten" + +msgid "E&mpty" +msgstr "L&eer" + +msgid "&Reload previous image" +msgstr "&Voriges Image neu laden" + +msgid "&Image" +msgstr "&Image" + +msgid "Target &framerate" +msgstr "Ziel&framerate" + +msgid "&Sync with video" +msgstr "&Mit Videoausgabe synchronisieren" + +msgid "&25 fps" +msgstr "&25 fps" + +msgid "&30 fps" +msgstr "&30 fps" + +msgid "&50 fps" +msgstr "&50 fps" + +msgid "&60 fps" +msgstr "&60 fps" + +msgid "&75 fps" +msgstr "&75 fps" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Shader auswählen..." + +msgid "&Remove shader" +msgstr "&Shader entfernen" + +msgid "Preferences" +msgstr "Einstellungen" + +msgid "Sound Gain" +msgstr "Klangverstärkung" + +msgid "New Image" +msgstr "Neues Image" + +msgid "Settings" +msgstr "Optionen" + +msgid "Specify Main Window Dimensions" +msgstr "Fenstergröße einstellen" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Abbrechen" + +msgid "Save these settings as &global defaults" +msgstr "Einstellungen als &globalen Standard speichern" + +msgid "&Default" +msgstr "&Standard" + +msgid "Language:" +msgstr "Sprache:" + +msgid "Icon set:" +msgstr "Icon-Satz:" + +msgid "Gain" +msgstr "Verstärkung" + +msgid "File name:" +msgstr "Dateiname:" + +msgid "Disk size:" +msgstr "Plattengröße:" + +msgid "RPM mode:" +msgstr "Drehzahlmodus:" + +msgid "Progress:" +msgstr "Fortschritt:" + +msgid "Width:" +msgstr "Breite:" + +msgid "Height:" +msgstr "Höhe:" + +msgid "Lock to this size" +msgstr "Feste Größe" + +msgid "Machine type:" +msgstr "Systemtyp:" + +msgid "Machine:" +msgstr "Maschine:" + +msgid "Configure" +msgstr "Einstellen" + +msgid "CPU type:" +msgstr "CPU-Typ:" + +msgid "Speed:" +msgstr "Geschwindigkeit:" + +msgid "FPU:" +msgstr "FPU-Einheit:" + +msgid "Wait states:" +msgstr "Wartezustände:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Hauptspeicher:" + +msgid "Time synchronization" +msgstr "Zeitsynchronisierung" + +msgid "Disabled" +msgstr "Deaktiviert" + +msgid "Enabled (local time)" +msgstr "Aktiviert (Lokale Uhrzeit)" + +msgid "Enabled (UTC)" +msgstr "Aktiviert (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Dynamischer Recompiler" + +msgid "Video:" +msgstr "Videokarte:" + +msgid "Voodoo Graphics" +msgstr "Voodoo-Grafik" + +msgid "Mouse:" +msgstr "Maus:" + +msgid "Joystick:" +msgstr "Joystick:" + +msgid "Joystick 1..." +msgstr "Joystick 1..." + +msgid "Joystick 2..." +msgstr "Joystick 2..." + +msgid "Joystick 3..." +msgstr "Joystick 3..." + +msgid "Joystick 4..." +msgstr "Joystick 4..." + +msgid "Sound card:" +msgstr "Soundkarte:" + +msgid "MIDI Out Device:" +msgstr "MIDI Out-Gerät:" + +msgid "MIDI In Device:" +msgstr "MIDI In-Gerät:" + +msgid "Standalone MPU-401" +msgstr "Standalone-MPU-401-Gerät" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "FLOAT32-Wiedergabe benutzen" + +msgid "Network type:" +msgstr "Netzwerktyp:" + +msgid "PCap device:" +msgstr "PCap-Gerät:" + +msgid "Network adapter:" +msgstr "Netzwerkadapter:" + +msgid "LPT1 Device:" +msgstr "LPT1-Gerät" + +msgid "LPT2 Device:" +msgstr "LPT2-Gerät" + +msgid "LPT3 Device:" +msgstr "LPT3-Gerät" + +msgid "Serial port 1" +msgstr "Serielle Schnittstelle 1" + +msgid "Serial port 2" +msgstr "Serielle Schnittstelle 2" + +msgid "Serial port 3" +msgstr "Serielle Schnittstelle 3" + +msgid "Serial port 4" +msgstr "Serielle Schnittstelle 4" + +msgid "Parallel port 1" +msgstr "Parallelport 1" + +msgid "Parallel port 2" +msgstr "Parallelport 2" + +msgid "Parallel port 3" +msgstr "Parallelport 3" + +msgid "HD Controller:" +msgstr "HDD-Controller:" + +msgid "FD Controller:" +msgstr "FD-Controller:" + +msgid "Tertiary IDE Controller" +msgstr "Tertiärer IDE-Controller" + +msgid "Quaternary IDE Controller" +msgstr "Quartärer IDE-Controller" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Controller 1:" + +msgid "Controller 2:" +msgstr "Controller 2:" + +msgid "Controller 3:" +msgstr "Controller 3:" + +msgid "Controller 4:" +msgstr "Controller 4:" + +msgid "Cassette" +msgstr "Kassette" + +msgid "Hard disks:" +msgstr "Festplatten:" + +msgid "&New..." +msgstr "&Neu..." + +msgid "&Existing..." +msgstr "&Vorhanden..." + +msgid "&Remove" +msgstr "&Entfernen" + +msgid "Bus:" +msgstr "Bus:" + +msgid "Channel:" +msgstr "Kanal:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Festlegen..." + +msgid "Sectors:" +msgstr "Sektoren:" + +msgid "Heads:" +msgstr "Köpfe:" + +msgid "Cylinders:" +msgstr "Zylinder:" + +msgid "Size (MB):" +msgstr "Größe (MB):" + +msgid "Type:" +msgstr "Typ:" + +msgid "Image Format:" +msgstr "Imageformat:" + +msgid "Block Size:" +msgstr "Blockgröße:" + +msgid "Floppy drives:" +msgstr "Diskettenlaufwerke:" + +msgid "Turbo timings" +msgstr "Turbo-Timings" + +msgid "Check BPB" +msgstr "BPB überprüfen" + +msgid "CD-ROM drives:" +msgstr "CD-ROM-Laufwerke:" + +msgid "MO drives:" +msgstr "MO-Laufwerke:" + +msgid "ZIP drives:" +msgstr "ZIP-Laufwerke:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA-Echtzeituhr:" + +msgid "ISA Memory Expansion" +msgstr "ISA-Speichererweiterung:" + +msgid "Card 1:" +msgstr "Steckkarte 1:" + +msgid "Card 2:" +msgstr "Steckkarte 2:" + +msgid "Card 3:" +msgstr "Steckkarte 3:" + +msgid "Card 4:" +msgstr "Steckkarte 4:" + +msgid "ISABugger device" +msgstr "ISABugger-Gerät" + +msgid "POST card" +msgstr "POST-Code-Karte" + +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Fehler" + +msgid "Fatal error" +msgstr "Fataler Fehler" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Bitte Strg+Alt+Bild ab zur Rückkehr in den Fenstermodus drücken." + +msgid "Speed" +msgstr "Geschwindigkeit" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.im? *.zdi)" +msgstr "ZIP-Images (*.im? *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box konnte keine nutzbaren ROM-Dateien finden.\n\nBitte besuchen Sie download, laden ein ROM-Set herunter und extrahieren dies in das \"roms\"-Verzeichnis." + +msgid "(empty)" +msgstr "(leer)" + +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "ZIP-Images (*.im? *.zdi);;Alle Dateien (*.*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "An" + +msgid "Off" +msgstr "Aus" + +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "Alle Images (*.86f *.dsk *.flp *.im? *.*fd?);;Basissektorimages (*.dsk *.flp *.im? *.img *.*fd?);;Oberflächenimages (*.86f)" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Das System \"%hs\" ist aufgrund von fehlenden ROMs im Verzeichnis roms/machines nicht verfügbar. Es wird auf ein verfügbares System gewechselt." + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Die Videokarte \"%hs\" ist aufgrund von fehlenden ROMs im Verzeichnis roms/video nicht verfügbar. Es wird auf eine verfügbare Videokarte gewechselt." + +msgid "Machine" +msgstr "System" + +msgid "Display" +msgstr "Anzeige" + +msgid "Input devices" +msgstr "Eingabegeräte" + +msgid "Sound" +msgstr "Multimedia" + +msgid "Network" +msgstr "Netzwerk" + +msgid "Ports (COM & LPT)" +msgstr "Anschlüsse (COM & LPT)" + +msgid "Storage controllers" +msgstr "Speichercontroller" + +msgid "Hard disks" +msgstr "Festplatten" + +msgid "Floppy & CD-ROM drives" +msgstr "Disketten- & CD-ROM-Laufwerke" + +msgid "Other removable devices" +msgstr "Andere Wechsellaufwerke" + +msgid "Other peripherals" +msgstr "Andere Peripheriegeräte" + +msgid "Surface images (*.86f)" +msgstr "Oberflächenimages (*.86f)" + +msgid "Click to capture mouse" +msgstr "Zum Einfangen des Mauszeigers bitte klicken" + +msgid "Press F8+F12 to release mouse" +msgstr "Bitte F8+F12 zur Mausfreigabe drücken" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Bitte F8+F12 oder die mittlere Maustaste zur Mausfreigabe drücken" + +msgid "Unable to initialize FluidSynth" +msgstr "FluidSynth konnte nicht initialisiert werden" + +msgid "Bus" +msgstr "Bus" + +msgid "File" +msgstr "Datei" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Der Videorenderer konnte nicht initialisiert werden." + +msgid "Default" +msgstr "Standard" + +msgid "%i Wait state(s)" +msgstr "%i Wartezustände" + +msgid "Type" +msgstr "Typ" + +msgid "Failed to set up PCap" +msgstr "PCap konnte nicht eingerichtet werden" + +msgid "No PCap devices found" +msgstr "Keine PCap-Geräte gefunden" + +msgid "Invalid PCap device" +msgstr "Ungültiges PCap-Gerät" + +msgid "Standard 2-button joystick(s)" +msgstr "Standard 2-Tasten-Joystick(s)" + +msgid "Standard 4-button joystick" +msgstr "Standard 4-Tasten-Joystick" + +msgid "Standard 6-button joystick" +msgstr "Standard 6-Tasten-Joystick" + +msgid "Standard 8-button joystick" +msgstr "Standard 8-Tasten-Joystick" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Ohne" + +msgid "Unable to load keyboard accelerators." +msgstr "Tastaturbeschleuniger konnten nicht geladen werden." + +msgid "Unable to register raw input." +msgstr "Roheingaben konnten nicht registriert werden." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Diskette %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "Alle Images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Fortgeschrittene Sektorimages (*.imd *.json *.td0);;Basissektorimages (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Fluximages (*.fdi);;Oberflächenimages (*.86f *.mfm);;Alle Dateien (*.*)" + +msgid "Unable to initialize FreeType" +msgstr "FreeType konnte nicht initialisiert werden" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "SDL konnte nicht initialisiert werden, die Datei SDL2.dll wird benötigt" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Sind Sie sich sicher, dass Sie einen Hard-Reset für das emulierte System durchführen wollen?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Sind Sie sich sicher, dass Sie 86Box beenden wollen?" + +msgid "Unable to initialize Ghostscript" +msgstr "Ghostscript konnte nicht initialisiert werden" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "MO-Images (*.im? *.mdi);;Alle Dateien (*.*)" + +msgid "Welcome to 86Box!" +msgstr "Willkommen bei 86Box!" + +msgid "Internal controller" +msgstr "Interner Controller" + +msgid "Exit" +msgstr "Beenden" + +msgid "No ROMs found" +msgstr "Keine ROMs gefunden" + +msgid "Do you want to save the settings?" +msgstr "Möchten Sie die Einstellungen speichern?" + +msgid "This will hard reset the emulated machine." +msgstr "Dies wird zu einem Hard-Reset der emulierten Maschine führen." + +msgid "Save" +msgstr "Speichern" + +msgid "About 86Box" +msgstr "Über 86Box" + +msgid "86Box v" +msgstr "86Box Version " + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Ein Emulator für alte Computer\n\nAutoren: Sarah Walker, Miran Grča, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho sowie andere.\n\nÜbersetzt von: dob205\n\nVeröffentlicht unter der GNU General Public License in der Version 2 oder neuer. Siehe LICENSE für mehr Informationen." + +msgid "Hardware not available" +msgstr "Hardware nicht verfügbar" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Bitte stellen Sie sicher, dass libpcap installiert ist und sie eine libpcap-kompatible Netzwerkverbindung nutzen." + +msgid "Invalid configuration" +msgstr "Ungültige Konfiguration" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " wird für die ESC/P-Druckeremulation benötigt." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " wird zur automatischen Konversion von PostScript-Dateien in das PDF-Format benötigt.\n\nSämtliche an den generischen PostScript-Drucker gesendete Dateien werden als PostScript (.ps)-Dateien gesichert." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " wird für die FluidSynth-MIDI-Ausgabe benötigt." + +msgid "Entering fullscreen mode" +msgstr "Vollbildmodus wird aktiviert" + +msgid "Don't show this message again" +msgstr "Diese Nachricht nicht mehr anzeigen" + +msgid "Don't exit" +msgstr "Nicht beenden" + +msgid "Reset" +msgstr "Zurücksetzen" + +msgid "Don't reset" +msgstr "Nicht zurücksetzen" + +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "CD-ROM-Images (*.iso *.cue);;Alle Dateien (*.*)" + +msgid "%hs Device Configuration" +msgstr "%hs-Gerätekonfiguration" + +msgid "Monitor in sleep mode" +msgstr "Monitor im Standbymodus" + +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "OpenGL-Shader (*.glsl);;Alle Dateien (*.*)" + +msgid "OpenGL options" +msgstr "OpenGL-Optionen" + +msgid "You are loading an unsupported configuration" +msgstr "Sie laden gerade eine nicht unterstützte Konfiguration" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "Das Filtern der CPU-Typen basierend auf dem ausgewählten System ist für dieses System deaktiviert.\n\nDies ermöglicht es, dass man eine sonst nicht mit dem ausgewählten System inkompatible CPU auswählen kann. Allerdings kann dies zu Inkompatiblilitäten mit dem BIOS des Systems oder anderen Programmen kommen.\n\nDas Aktivieren dieser Einstellung wird nicht unterstützt und sämtliche Bugreports können als \"invalid\" geschlossen werden." + +msgid "Continue" +msgstr "Fortfahren" + +msgid "Cassette: %s" +msgstr "Kassette: %s" + +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Kassettenimages (*.pcm *.raw *.wav *.cas);;Alle Dateien (*.*)" + +msgid "Cartridge %i: %ls" +msgstr "Cartridge %i: %ls" + +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "Cartridgeimages (*.a *.b *.jrc);;Alle Dateien (*.*)" + +msgid "Error initializing renderer" +msgstr "Fehler bei der Rendererinitialisierung" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "Der OpenGL (3.0-Kern)-Renderer konnte nicht initialisiert werden. Bitte benutzen Sie einen anderen Renderer." + +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + +msgid "Hard disk (%s)" +msgstr "Festplatte (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL- oder ESDI CD-ROM-Laufwerke hat es niemals gegeben" + +msgid "Custom..." +msgstr "Angepasst..." + +msgid "Custom (large)..." +msgstr "Angepasst (Groß)..." + +msgid "Add New Hard Disk" +msgstr "Neue Festplatte hinzufügen" + +msgid "Add Existing Hard Disk" +msgstr "Bestehende Festplatte hinzufügen" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "HDI-Diskimages können nicht größer als 4 GB groß sein." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Festplattenimages können nicht größer als 127 GB groß sein." + +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Festplattenimages (*.hd? *.im? *.vhd);;Alle Dateien (*.*)" + +msgid "Unable to read file" +msgstr "Die Datei konnte nicht gelesen werden" + +msgid "Unable to write file" +msgstr "Die Datei konnte nicht beschrieben werden" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "HDI- oder HDX-Images mit einer Sektorgröße größer als 512 kB werden nicht unterstützt." + +msgid "USB is not yet supported" +msgstr "USB wird noch nicht unterstützt" + +msgid "Disk image file already exists" +msgstr "Die Festplattenimagedatei existiert bereits" + +msgid "Please specify a valid file name." +msgstr "Bitte geben Sie einen gültigen Dateinamen ein." + +msgid "Disk image created" +msgstr "Disk-Image wurde erstellt" + +msgid "Make sure the file exists and is readable." +msgstr "Bitte stellen Sie sicher, dass die Datei existiert und lesbar ist." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Bitte stellen Sie sicher, dass die Datei in ein Verzeichnis mit Schreibberechtigungen gespeichert wird." + +msgid "Disk image too large" +msgstr "Festplattenimage ist zu groß" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Bitte denken Sie an das Partitionieren und Formatieren des neu erstellten Laufwerks." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Die ausgewählte Datei wird überschrieben. Möchten Sie diese Datei nutzen?" + +msgid "Unsupported disk image" +msgstr "Nicht unterstütztes Festplattenimage" + +msgid "Overwrite" +msgstr "Überschreiben" + +msgid "Don't overwrite" +msgstr "Nicht überschreiben" + +msgid "Raw image (.img)" +msgstr "Rohdatenimages (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDI-Images (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDX-Images (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD mit fester Größe (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD mit dynamischer Größe (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Differenzierende VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Große Blöcke (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Kleine Blöcke (512 KB)" + +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "VHD-Dateien (*.vhd);;Alle Dateien (*.*)" + +msgid "Select the parent VHD" +msgstr "Eltern-VHD-Datei bitte auswählen" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Dies bedeutet, dass das Elternimage nach der Erstellung des differenzierenden Images erzeugt wurde.\n\nDies kann auch passieren, falls die Image-Dateien verschoben oder kopiert wurden. Ebenso kann auch dies durch einen Bug im Programm, welches das Image erstellt hat, passieren.\n\nMöchten Sie die Zeitstempel korrigieren?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Die Zeitstempel der Eltern- und der Kindesplatte stimmen nicht überein" + +msgid "Could not fix VHD timestamp." +msgstr "Der Zeitstempel der VHD konnte nicht korrigiert werden." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1,2 MB" + +msgid "1.25 MB" +msgstr "1,25 MB" + +msgid "1.44 MB" +msgstr "1,44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (1024 Cluster)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (2048 Cluster)" + +msgid "2.88 MB" +msgstr "2,88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3,5-Zoll 128 MB M.O. (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3,5-Zoll 230 MB M.O. (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3,5-Zoll 540 MB M.O. (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3,5-Zoll 640 MB M.O. (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3,5-Zoll 1,3 GB M.O. (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3,5-Zoll 2,3 GB M.O. (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5,25-Zoll 600 MB M.O." + +msgid "5.25\" 650Mb M.O." +msgstr "5,25-Zoll 650 MB M.O." + +msgid "5.25\" 1Gb M.O." +msgstr "5,25-Zoll 1 GB M.O." + +msgid "5.25\" 1.3Gb M.O." +msgstr "5,25-Zoll 1,3 GB M.O." + +msgid "Perfect RPM" +msgstr "Perfekte Drehzahl" + +msgid "1%% below perfect RPM" +msgstr "1%% unterhalb der perfekten Drehzahl" + +msgid "1.5%% below perfect RPM" +msgstr "1,5%% unterhalb der perfekten Drehzahl" + +msgid "2%% below perfect RPM" +msgstr "2%% unterhalb der perfekten Drehzahl" + +msgid "(System Default)" +msgstr "(Systemstandard)" + diff --git a/src/qt/languages/en-GB.po b/src/qt/languages/en-GB.po index c58e85eb0..bd710bf61 100644 --- a/src/qt/languages/en-GB.po +++ b/src/qt/languages/en-GB.po @@ -1,1191 +1,1191 @@ -msgid "&Action" -msgstr "&Action" - -msgid "&Keyboard requires capture" -msgstr "&Keyboard requires capture" - -msgid "&Right CTRL is left ALT" -msgstr "&Right CTRL is left ALT" - -msgid "&Hard Reset..." -msgstr "&Hard Reset..." - -msgid "&Ctrl+Alt+Del\tCtrl+F12" -msgstr "&Ctrl+Alt+Del\tCtrl+F12" - -msgid "Ctrl+Alt+&Esc" -msgstr "Ctrl+Alt+&Esc" - -msgid "&Pause" -msgstr "&Pause" - -msgid "E&xit..." -msgstr "E&xit..." - -msgid "&View" -msgstr "&View" - -msgid "&Hide status bar" -msgstr "&Hide status bar" - -msgid "Hide &toolbar" -msgstr "Hide &toolbar" - -msgid "&Resizeable window" -msgstr "&Resizeable window" - -msgid "R&emember size && position" -msgstr "R&emember size && position" - -msgid "Re&nderer" -msgstr "Re&nderer" - -msgid "&SDL (Software)" -msgstr "&SDL (Software)" - -msgid "SDL (&Hardware)" -msgstr "SDL (&Hardware)" - -msgid "SDL (&OpenGL)" -msgstr "SDL (&OpenGL)" - -msgid "Open&GL (3.0 Core)" -msgstr "Open&GL (3.0 Core)" - -msgid "&VNC" -msgstr "&VNC" - -msgid "Specify dimensions..." -msgstr "Specify dimensions..." - -msgid "F&orce 4:3 display ratio" -msgstr "F&orce 4:3 display ratio" - -msgid "&Window scale factor" -msgstr "&Window scale factor" - -msgid "&0.5x" -msgstr "&0.5x" - -msgid "&1x" -msgstr "&1x" - -msgid "1.&5x" -msgstr "1.&5x" - -msgid "&2x" -msgstr "&2x" - -msgid "Filter method" -msgstr "Filter method" - -msgid "&Nearest" -msgstr "&Nearest" - -msgid "&Linear" -msgstr "&Linear" - -msgid "Hi&DPI scaling" -msgstr "Hi&DPI scaling" - -msgid "&Fullscreen\tCtrl+Alt+PageUP" -msgstr "&Fullscreen\tCtrl+Alt+PageUP" - -msgid "Fullscreen &stretch mode" -msgstr "Fullscreen &stretch mode" - -msgid "&Full screen stretch" -msgstr "&Full screen stretch" - -msgid "&4:3" -msgstr "&4:3" - -msgid "&Square pixels (Keep ratio)" -msgstr "&Square pixels (Keep ratio)" - -msgid "&Integer scale" -msgstr "&Integer scale" - -msgid "E&GA/(S)VGA settings" -msgstr "E&GA/(S)VGA settings" - -msgid "&Inverted VGA monitor" -msgstr "&Inverted VGA monitor" - -msgid "VGA screen &type" -msgstr "VGA screen &type" - -msgid "RGB &Color" -msgstr "RGB &Colour" - -msgid "&RGB Grayscale" -msgstr "&RGB Greyscale" - -msgid "&Amber monitor" -msgstr "&Amber monitor" - -msgid "&Green monitor" -msgstr "&Green monitor" - -msgid "&White monitor" -msgstr "&White monitor" - -msgid "Grayscale &conversion type" -msgstr "Grayscale &conversion type" - -msgid "BT&601 (NTSC/PAL)" -msgstr "BT&601 (NTSC/PAL)" - -msgid "BT&709 (HDTV)" -msgstr "BT&709 (HDTV)" - -msgid "&Average" -msgstr "&Average" - -msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" -msgstr "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" - -msgid "Change contrast for &monochrome display" -msgstr "Change contrast for &monochrome display" - -msgid "&Media" -msgstr "&Media" - -msgid "&Tools" -msgstr "&Tools" - -msgid "&Settings..." -msgstr "&Settings..." - -msgid "&Update status bar icons" -msgstr "&Update status bar icons" - -msgid "Take s&creenshot\tCtrl+F11" -msgstr "Take s&creenshot\tCtrl+F11" - -msgid "&Preferences..." -msgstr "&Preferences..." - -msgid "Enable &Discord integration" -msgstr "Enable &Discord integration" - -msgid "Sound &gain..." -msgstr "Sound &gain..." - -msgid "Begin trace\tCtrl+T" -msgstr "Begin trace\tCtrl+T" - -msgid "End trace\tCtrl+T" -msgstr "End trace\tCtrl+T" - -msgid "&Logging" -msgstr "&Logging" - -msgid "Enable BusLogic logs\tCtrl+F4" -msgstr "Enable BusLogic logs\tCtrl+F4" - -msgid "Enable CD-ROM logs\tCtrl+F5" -msgstr "Enable CD-ROM logs\tCtrl+F5" - -msgid "Enable floppy (86F) logs\tCtrl+F6" -msgstr "Enable floppy (86F) logs\tCtrl+F6" - -msgid "Enable floppy controller logs\tCtrl+F7" -msgstr "Enable floppy controller logs\tCtrl+F7" - -msgid "Enable IDE logs\tCtrl+F8" -msgstr "Enable IDE logs\tCtrl+F8" - -msgid "Enable Serial Port logs\tCtrl+F3" -msgstr "Enable Serial Port logs\tCtrl+F3" - -msgid "Enable Network logs\tCtrl+F9" -msgstr "Enable Network logs\tCtrl+F9" - -msgid "&Log breakpoint\tCtrl+F10" -msgstr "&Log breakpoint\tCtrl+F10" - -msgid "Dump &video RAM\tCtrl+F1" -msgstr "Dump &video RAM\tCtrl+F1" - -msgid "&Help" -msgstr "&Help" - -msgid "&Documentation..." -msgstr "&Documentation..." - -msgid "&About 86Box..." -msgstr "&About 86Box..." - -msgid "&New image..." -msgstr "&New image..." - -msgid "&Existing image..." -msgstr "&Existing image..." - -msgid "Existing image (&Write-protected)..." -msgstr "Existing image (&Write-protected)..." - -msgid "&Record" -msgstr "&Record" - -msgid "&Play" -msgstr "&Play" - -msgid "&Rewind to the beginning" -msgstr "&Rewind to the beginning" - -msgid "&Fast forward to the end" -msgstr "&Fast forward to the end" - -msgid "E&ject" -msgstr "E&ject" - -msgid "&Image..." -msgstr "&Image..." - -msgid "E&xport to 86F..." -msgstr "E&xport to 86F..." - -msgid "&Mute" -msgstr "&Mute" - -msgid "E&mpty" -msgstr "E&mpty" - -msgid "&Reload previous image" -msgstr "&Reload previous image" - -msgid "&Image" -msgstr "&Image" - -msgid "Target &framerate" -msgstr "Target &framerate" - -msgid "&Sync with video" -msgstr "&Sync with video" - -msgid "&25 fps" -msgstr "&25 fps" - -msgid "&30 fps" -msgstr "&30 fps" - -msgid "&50 fps" -msgstr "&50 fps" - -msgid "&60 fps" -msgstr "&60 fps" - -msgid "&75 fps" -msgstr "&75 fps" - -msgid "&VSync" -msgstr "&VSync" - -msgid "&Select shader..." -msgstr "&Select shader..." - -msgid "&Remove shader" -msgstr "&Remove shader" - -msgid "Preferences" -msgstr "Preferences" - -msgid "Sound Gain" -msgstr "Sound Gain" - -msgid "New Image" -msgstr "New Image" - -msgid "Settings" -msgstr "Settings" - -msgid "Specify Main Window Dimensions" -msgstr "Specify Main Window Dimensions" - -msgid "OK" -msgstr "OK" - -msgid "Cancel" -msgstr "Cancel" - -msgid "Save these settings as &global defaults" -msgstr "Save these settings as &global defaults" - -msgid "&Default" -msgstr "&Default" - -msgid "Language:" -msgstr "Language:" - -msgid "Icon set:" -msgstr "Icon set:" - -msgid "Gain" -msgstr "Gain" - -msgid "File name:" -msgstr "File name:" - -msgid "Disk size:" -msgstr "Disk size:" - -msgid "RPM mode:" -msgstr "RPM mode:" - -msgid "Progress:" -msgstr "Progress:" - -msgid "Width:" -msgstr "Width:" - -msgid "Height:" -msgstr "Height:" - -msgid "Lock to this size" -msgstr "Lock to this size" - -msgid "Machine type:" -msgstr "Machine type:" - -msgid "Machine:" -msgstr "Machine:" - -msgid "Configure" -msgstr "Configure" - -msgid "CPU type:" -msgstr "CPU type:" - -msgid "Speed:" -msgstr "Speed:" - -msgid "FPU:" -msgstr "FPU:" - -msgid "Wait states:" -msgstr "Wait states:" - -msgid "MB" -msgstr "MB" - -msgid "Memory:" -msgstr "Memory:" - -msgid "Time synchronization" -msgstr "Time synchronization" - -msgid "Disabled" -msgstr "Disabled" - -msgid "Enabled (local time)" -msgstr "Enabled (local time)" - -msgid "Enabled (UTC)" -msgstr "Enabled (UTC)" - -msgid "Dynamic Recompiler" -msgstr "Dynamic Recompiler" - -msgid "Video:" -msgstr "Video:" - -msgid "Voodoo Graphics" -msgstr "Voodoo Graphics" - -msgid "Mouse:" -msgstr "Mouse:" - -msgid "Joystick:" -msgstr "Joystick:" - -msgid "Joystick 1..." -msgstr "Joystick 1..." - -msgid "Joystick 2..." -msgstr "Joystick 2..." - -msgid "Joystick 3..." -msgstr "Joystick 3..." - -msgid "Joystick 4..." -msgstr "Joystick 4..." - -msgid "Sound card:" -msgstr "Sound card:" - -msgid "MIDI Out Device:" -msgstr "MIDI Out Device:" - -msgid "MIDI In Device:" -msgstr "MIDI In Device:" - -msgid "Standalone MPU-401" -msgstr "Standalone MPU-401" - -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - -msgid "Use FLOAT32 sound" -msgstr "Use FLOAT32 sound" - -msgid "Network type:" -msgstr "Network type:" - -msgid "PCap device:" -msgstr "PCap device:" - -msgid "Network adapter:" -msgstr "Network adapter:" - -msgid "LPT1 Device:" -msgstr "LPT1 Device:" - -msgid "LPT2 Device:" -msgstr "LPT2 Device:" - -msgid "LPT3 Device:" -msgstr "LPT3 Device:" - -msgid "Serial port 1" -msgstr "Serial port 1" - -msgid "Serial port 2" -msgstr "Serial port 2" - -msgid "Serial port 3" -msgstr "Serial port 3" - -msgid "Serial port 4" -msgstr "Serial port 4" - -msgid "Parallel port 1" -msgstr "Parallel port 1" - -msgid "Parallel port 2" -msgstr "Parallel port 2" - -msgid "Parallel port 3" -msgstr "Parallel port 3" - -msgid "HD Controller:" -msgstr "HD Controller:" - -msgid "FD Controller:" -msgstr "FD Controller:" - -msgid "Tertiary IDE Controller" -msgstr "Tertiary IDE Controller" - -msgid "Quaternary IDE Controller" -msgstr "Quaternary IDE Controller" - -msgid "SCSI" -msgstr "SCSI" - -msgid "Controller 1:" -msgstr "Controller 1:" - -msgid "Controller 2:" -msgstr "Controller 2:" - -msgid "Controller 3:" -msgstr "Controller 3:" - -msgid "Controller 4:" -msgstr "Controller 4:" - -msgid "Cassette" -msgstr "Cassette" - -msgid "Hard disks:" -msgstr "Hard disks:" - -msgid "&New..." -msgstr "&New..." - -msgid "&Existing..." -msgstr "&Existing..." - -msgid "&Remove" -msgstr "&Remove" - -msgid "Bus:" -msgstr "Bus:" - -msgid "Channel:" -msgstr "Channel:" - -msgid "ID:" -msgstr "ID:" - -msgid "&Specify..." -msgstr "&Specify..." - -msgid "Sectors:" -msgstr "Sectors:" - -msgid "Heads:" -msgstr "Heads:" - -msgid "Cylinders:" -msgstr "Cylinders:" - -msgid "Size (MB):" -msgstr "Size (MB):" - -msgid "Type:" -msgstr "Type:" - -msgid "Image Format:" -msgstr "Image Format:" - -msgid "Block Size:" -msgstr "Block Size:" - -msgid "Floppy drives:" -msgstr "Floppy drives:" - -msgid "Turbo timings" -msgstr "Turbo timings" - -msgid "Check BPB" -msgstr "Check BPB" - -msgid "CD-ROM drives:" -msgstr "CD-ROM drives:" - -msgid "MO drives:" -msgstr "MO drives:" - -msgid "ZIP drives:" -msgstr "ZIP drives:" - -msgid "ZIP 250" -msgstr "ZIP 250" - -msgid "ISA RTC:" -msgstr "ISA RTC:" - -msgid "ISA Memory Expansion" -msgstr "ISA Memory Expansion" - -msgid "Card 1:" -msgstr "Card 1:" - -msgid "Card 2:" -msgstr "Card 2:" - -msgid "Card 3:" -msgstr "Card 3:" - -msgid "Card 4:" -msgstr "Card 4:" - -msgid "ISABugger device" -msgstr "ISABugger device" - -msgid "POST card" -msgstr "POST card" - -msgid "FONT_SIZE" -msgstr "9" - -msgid "FONT_NAME" -msgstr "Segoe UI" - -msgid "86Box" -msgstr "86Box" - -msgid "Error" -msgstr "Error" - -msgid "Fatal error" -msgstr "Fatal error" - -msgid "" -msgstr "" - -msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." -msgstr "Press CTRL+ALT+PAGE DOWN to return to windowed mode." - -msgid "Speed" -msgstr "Speed" - -msgid "ZIP %03i %i (%s): %ls" -msgstr "ZIP %03i %i (%s): %ls" - -msgid "ZIP images (*.im? *.zdi)" -msgstr "ZIP images (*.im? *.zdi)" - -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." - -msgid "(empty)" -msgstr "(empty)" - -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "ZIP images (*.im? *.zdi);;All files (*.*)" - -msgid "Turbo" -msgstr "Turbo" - -msgid "On" -msgstr "On" - -msgid "Off" -msgstr "Off" - -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" - -msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." - -msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." - -msgid "Machine" -msgstr "Machine" - -msgid "Display" -msgstr "Display" - -msgid "Input devices" -msgstr "Input devices" - -msgid "Sound" -msgstr "Sound" - -msgid "Network" -msgstr "Network" - -msgid "Ports (COM & LPT)" -msgstr "Ports (COM & LPT)" - -msgid "Storage controllers" -msgstr "Storage controllers" - -msgid "Hard disks" -msgstr "Hard disks" - -msgid "Floppy & CD-ROM drives" -msgstr "Floppy & CD-ROM drives" - -msgid "Other removable devices" -msgstr "Other removable devices" - -msgid "Other peripherals" -msgstr "Other peripherals" - -msgid "Surface images (*.86f)" -msgstr "Surface images (*.86f)" - -msgid "Click to capture mouse" -msgstr "Click to capture mouse" - -msgid "Press F8+F12 to release mouse" -msgstr "Press F8+F12 to release mouse" - -msgid "Press F8+F12 or middle button to release mouse" -msgstr "Press F8+F12 or middle button to release mouse" - -msgid "Unable to initialize FluidSynth" -msgstr "Unable to initialize FluidSynth" - -msgid "Bus" -msgstr "Bus" - -msgid "File" -msgstr "File" - -msgid "C" -msgstr "C" - -msgid "H" -msgstr "H" - -msgid "S" -msgstr "S" - -msgid "KB" -msgstr "KB" - -msgid "Could not initialize the video renderer." -msgstr "Could not initialize the video renderer." - -msgid "Default" -msgstr "Default" - -msgid "%i Wait state(s)" -msgstr "%i Wait state(s)" - -msgid "Type" -msgstr "Type" - -msgid "Failed to set up PCap" -msgstr "Failed to set up PCap" - -msgid "No PCap devices found" -msgstr "No PCap devices found" - -msgid "Invalid PCap device" -msgstr "Invalid PCap device" - -msgid "Standard 2-button joystick(s)" -msgstr "Standard 2-button joystick(s)" - -msgid "Standard 4-button joystick" -msgstr "Standard 4-button joystick" - -msgid "Standard 6-button joystick" -msgstr "Standard 6-button joystick" - -msgid "Standard 8-button joystick" -msgstr "Standard 8-button joystick" - -msgid "CH Flightstick Pro" -msgstr "CH Flightstick Pro" - -msgid "Microsoft SideWinder Pad" -msgstr "Microsoft SideWinder Pad" - -msgid "Thrustmaster Flight Control System" -msgstr "Thrustmaster Flight Control System" - -msgid "None" -msgstr "None" - -msgid "Unable to load keyboard accelerators." -msgstr "Unable to load keyboard accelerators." - -msgid "Unable to register raw input." -msgstr "Unable to register raw input." - -msgid "%u" -msgstr "%u" - -msgid "%u MB (CHS: %i, %i, %i)" -msgstr "%u MB (CHS: %i, %i, %i)" - -msgid "Floppy %i (%s): %ls" -msgstr "Floppy %i (%s): %ls" - -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" - -msgid "Unable to initialize FreeType" -msgstr "Unable to initialize FreeType" - -msgid "Unable to initialize SDL, SDL2.dll is required" -msgstr "Unable to initialize SDL, SDL2.dll is required" - -msgid "Are you sure you want to hard reset the emulated machine?" -msgstr "Are you sure you want to hard reset the emulated machine?" - -msgid "Are you sure you want to exit 86Box?" -msgstr "Are you sure you want to exit 86Box?" - -msgid "Unable to initialize Ghostscript" -msgstr "Unable to initialize Ghostscript" - -msgid "MO %i (%ls): %ls" -msgstr "MO %i (%ls): %ls" - -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "MO images (*.im? *.mdi);;All files (*.*)" - -msgid "Welcome to 86Box!" -msgstr "Welcome to 86Box!" - -msgid "Internal controller" -msgstr "Internal controller" - -msgid "Exit" -msgstr "Exit" - -msgid "No ROMs found" -msgstr "No ROMs found" - -msgid "Do you want to save the settings?" -msgstr "Do you want to save the settings?" - -msgid "This will hard reset the emulated machine." -msgstr "This will hard reset the emulated machine." - -msgid "Save" -msgstr "Save" - -msgid "About 86Box" -msgstr "About 86Box" - -msgid "86Box v" -msgstr "86Box v" - -msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." - -msgid "Hardware not available" -msgstr "Hardware not available" - -msgid "WinPcap" -msgstr "WinPcap" - -msgid "libpcap" -msgstr "libpcap" - -msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." -msgstr "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." - -msgid "Invalid configuration" -msgstr "Invalid configuration" - -msgid "freetype.dll" -msgstr "freetype.dll" - -msgid "libfreetype" -msgstr "libfreetype" - -msgid " is required for ESC/P printer emulation." -msgstr " is required for ESC/P printer emulation." - -msgid "gsdll32.dll" -msgstr "gsdll32.dll" - -msgid "libgs" -msgstr "libgs" - -msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." -msgstr " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." - -msgid "libfluidsynth.dll" -msgstr "libfluidsynth.dll" - -msgid "libfluidsynth" -msgstr "libfluidsynth" - -msgid " is required for FluidSynth MIDI output." -msgstr " is required for FluidSynth MIDI output." - -msgid "Entering fullscreen mode" -msgstr "Entering fullscreen mode" - -msgid "Don't show this message again" -msgstr "Don't show this message again" - -msgid "Don't exit" -msgstr "Don't exit" - -msgid "Reset" -msgstr "Reset" - -msgid "Don't reset" -msgstr "Don't reset" - -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "CD-ROM images (*.iso *.cue);;All files (*.*)" - -msgid "%hs Device Configuration" -msgstr "%hs Device Configuration" - -msgid "Monitor in sleep mode" -msgstr "Monitor in sleep mode" - -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "OpenGL Shaders (*.glsl);;All files (*.*)" - -msgid "OpenGL options" -msgstr "OpenGL options" - -msgid "You are loading an unsupported configuration" -msgstr "You are loading an unsupported configuration" - -msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." - -msgid "Continue" -msgstr "Continue" - -msgid "Cassette: %s" -msgstr "Cassette: %s" - -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" - -msgid "Cartridge %i: %ls" -msgstr "Cartridge %i: %ls" - -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "Cartridge images (*.a *.b *.jrc);;All files (*.*)" - -msgid "Error initializing renderer" -msgstr "Error initializing renderer" - -msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." - -msgid "Resume execution" -msgstr "Resume execution" - -msgid "Pause execution" -msgstr "Pause execution" - -msgid "Press Ctrl+Alt+Del" -msgstr "Press Ctrl+Alt+Del" - -msgid "Press Ctrl+Alt+Esc" -msgstr "Press Ctrl+Alt+Esc" - -msgid "Hard reset" -msgstr "Hard reset" - -msgid "ACPI shutdown" -msgstr "ACPI shutdown" - -msgid "Hard disk (%s)" -msgstr "Hard disk (%s)" - -msgid "%01i:%01i" -msgstr "%01i:%01i" - -msgid "%01i" -msgstr "%01i" - -msgid "MFM/RLL or ESDI CD-ROM drives never existed" -msgstr "MFM/RLL or ESDI CD-ROM drives never existed" - -msgid "Custom..." -msgstr "Custom..." - -msgid "Custom (large)..." -msgstr "Custom (large)..." - -msgid "Add New Hard Disk" -msgstr "Add New Hard Disk" - -msgid "Add Existing Hard Disk" -msgstr "Add Existing Hard Disk" - -msgid "HDI disk images cannot be larger than 4 GB." -msgstr "HDI disk images cannot be larger than 4 GB." - -msgid "Disk images cannot be larger than 127 GB." -msgstr "Disk images cannot be larger than 127 GB." - -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" - -msgid "Unable to read file" -msgstr "Unable to read file" - -msgid "Unable to write file" -msgstr "Unable to write file" - -msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "HDI or HDX images with a sector size other than 512 are not supported." - -msgid "USB is not yet supported" -msgstr "USB is not yet supported" - -msgid "Disk image file already exists" -msgstr "Disk image file already exists" - -msgid "Please specify a valid file name." -msgstr "Please specify a valid file name." - -msgid "Disk image created" -msgstr "Disk image created" - -msgid "Make sure the file exists and is readable." -msgstr "Make sure the file exists and is readable." - -msgid "Make sure the file is being saved to a writable directory." -msgstr "Make sure the file is being saved to a writable directory." - -msgid "Disk image too large" -msgstr "Disk image too large" - -msgid "Remember to partition and format the newly-created drive." -msgstr "Remember to partition and format the newly-created drive." - -msgid "The selected file will be overwritten. Are you sure you want to use it?" -msgstr "The selected file will be overwritten. Are you sure you want to use it?" - -msgid "Unsupported disk image" -msgstr "Unsupported disk image" - -msgid "Overwrite" -msgstr "Overwrite" - -msgid "Don't overwrite" -msgstr "Don't overwrite" - -msgid "Raw image (.img)" -msgstr "Raw image (.img)" - -msgid "HDI image (.hdi)" -msgstr "HDI image (.hdi)" - -msgid "HDX image (.hdx)" -msgstr "HDX image (.hdx)" - -msgid "Fixed-size VHD (.vhd)" -msgstr "Fixed-size VHD (.vhd)" - -msgid "Dynamic-size VHD (.vhd)" -msgstr "Dynamic-size VHD (.vhd)" - -msgid "Differencing VHD (.vhd)" -msgstr "Differencing VHD (.vhd)" - -msgid "Large blocks (2 MB)" -msgstr "Large blocks (2 MB)" - -msgid "Small blocks (512 KB)" -msgstr "Small blocks (512 KB)" - -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "VHD files (*.vhd);;All files (*.*)" - -msgid "Select the parent VHD" -msgstr "Select the parent VHD" - -msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" -msgstr "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" - -msgid "Parent and child disk timestamps do not match" -msgstr "Parent and child disk timestamps do not match" - -msgid "Could not fix VHD timestamp." -msgstr "Could not fix VHD timestamp." - -msgid "%01i:%02i" -msgstr "%01i:%02i" - -msgid "MFM/RLL" -msgstr "MFM/RLL" - -msgid "XTA" -msgstr "XTA" - -msgid "ESDI" -msgstr "ESDI" - -msgid "IDE" -msgstr "IDE" - -msgid "ATAPI" -msgstr "ATAPI" - -msgid "MFM/RLL (%01i:%01i)" -msgstr "MFM/RLL (%01i:%01i)" - -msgid "XTA (%01i:%01i)" -msgstr "XTA (%01i:%01i)" - -msgid "ESDI (%01i:%01i)" -msgstr "ESDI (%01i:%01i)" - -msgid "IDE (%01i:%01i)" -msgstr "IDE (%01i:%01i)" - -msgid "ATAPI (%01i:%01i)" -msgstr "ATAPI (%01i:%01i)" - -msgid "SCSI (%01i:%02i)" -msgstr "SCSI (%01i:%02i)" - -msgid "CD-ROM %i (%s): %s" -msgstr "CD-ROM %i (%s): %s" - -msgid "160 kB" -msgstr "160 kB" - -msgid "180 kB" -msgstr "180 kB" - -msgid "320 kB" -msgstr "320 kB" - -msgid "360 kB" -msgstr "360 kB" - -msgid "640 kB" -msgstr "640 kB" - -msgid "720 kB" -msgstr "720 kB" - -msgid "1.2 MB" -msgstr "1.2 MB" - -msgid "1.25 MB" -msgstr "1.25 MB" - -msgid "1.44 MB" -msgstr "1.44 MB" - -msgid "DMF (cluster 1024)" -msgstr "DMF (cluster 1024)" - -msgid "DMF (cluster 2048)" -msgstr "DMF (cluster 2048)" - -msgid "2.88 MB" -msgstr "2.88 MB" - -msgid "ZIP 100" -msgstr "ZIP 100" - -msgid "3.5\" 128Mb M.O. (ISO 10090)" -msgstr "3.5\" 128Mb M.O. (ISO 10090)" - -msgid "3.5\" 230Mb M.O. (ISO 13963)" -msgstr "3.5\" 230Mb M.O. (ISO 13963)" - -msgid "3.5\" 540Mb M.O. (ISO 15498)" -msgstr "3.5\" 540Mb M.O. (ISO 15498)" - -msgid "3.5\" 640Mb M.O. (ISO 15498)" -msgstr "3.5\" 640Mb M.O. (ISO 15498)" - -msgid "3.5\" 1.3Gb M.O. (GigaMO)" -msgstr "3.5\" 1.3Gb M.O. (GigaMO)" - -msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" - -msgid "5.25\" 600Mb M.O." -msgstr "5.25\" 600Mb M.O." - -msgid "5.25\" 650Mb M.O." -msgstr "5.25\" 650Mb M.O." - -msgid "5.25\" 1Gb M.O." -msgstr "5.25\" 1Gb M.O." - -msgid "5.25\" 1.3Gb M.O." -msgstr "5.25\" 1.3Gb M.O." - -msgid "Perfect RPM" -msgstr "Perfect RPM" - -msgid "1%% below perfect RPM" -msgstr "1%% below perfect RPM" - -msgid "1.5%% below perfect RPM" -msgstr "1.5%% below perfect RPM" - -msgid "2%% below perfect RPM" -msgstr "2%% below perfect RPM" - -msgid "(System Default)" -msgstr "(System Default)" - +msgid "&Action" +msgstr "&Action" + +msgid "&Keyboard requires capture" +msgstr "&Keyboard requires capture" + +msgid "&Right CTRL is left ALT" +msgstr "&Right CTRL is left ALT" + +msgid "&Hard Reset..." +msgstr "&Hard Reset..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Pause" + +msgid "E&xit..." +msgstr "E&xit..." + +msgid "&View" +msgstr "&View" + +msgid "&Hide status bar" +msgstr "&Hide status bar" + +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + +msgid "&Resizeable window" +msgstr "&Resizeable window" + +msgid "R&emember size && position" +msgstr "R&emember size && position" + +msgid "Re&nderer" +msgstr "Re&nderer" + +msgid "&SDL (Software)" +msgstr "&SDL (Software)" + +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardware)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 Core)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "Specify dimensions..." + +msgid "F&orce 4:3 display ratio" +msgstr "F&orce 4:3 display ratio" + +msgid "&Window scale factor" +msgstr "&Window scale factor" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Filter method" + +msgid "&Nearest" +msgstr "&Nearest" + +msgid "&Linear" +msgstr "&Linear" + +msgid "Hi&DPI scaling" +msgstr "Hi&DPI scaling" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Fullscreen\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Fullscreen &stretch mode" + +msgid "&Full screen stretch" +msgstr "&Full screen stretch" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Square pixels (Keep ratio)" + +msgid "&Integer scale" +msgstr "&Integer scale" + +msgid "E&GA/(S)VGA settings" +msgstr "E&GA/(S)VGA settings" + +msgid "&Inverted VGA monitor" +msgstr "&Inverted VGA monitor" + +msgid "VGA screen &type" +msgstr "VGA screen &type" + +msgid "RGB &Color" +msgstr "RGB &Colour" + +msgid "&RGB Grayscale" +msgstr "&RGB Greyscale" + +msgid "&Amber monitor" +msgstr "&Amber monitor" + +msgid "&Green monitor" +msgstr "&Green monitor" + +msgid "&White monitor" +msgstr "&White monitor" + +msgid "Grayscale &conversion type" +msgstr "Grayscale &conversion type" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Average" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" + +msgid "Change contrast for &monochrome display" +msgstr "Change contrast for &monochrome display" + +msgid "&Media" +msgstr "&Media" + +msgid "&Tools" +msgstr "&Tools" + +msgid "&Settings..." +msgstr "&Settings..." + +msgid "&Update status bar icons" +msgstr "&Update status bar icons" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Take s&creenshot\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Preferences..." + +msgid "Enable &Discord integration" +msgstr "Enable &Discord integration" + +msgid "Sound &gain..." +msgstr "Sound &gain..." + +msgid "Begin trace\tCtrl+T" +msgstr "Begin trace\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "End trace\tCtrl+T" + +msgid "&Logging" +msgstr "&Logging" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Enable BusLogic logs\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Enable CD-ROM logs\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Enable floppy (86F) logs\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Enable floppy controller logs\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Enable IDE logs\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Enable Serial Port logs\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Enable Network logs\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Log breakpoint\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "Dump &video RAM\tCtrl+F1" + +msgid "&Help" +msgstr "&Help" + +msgid "&Documentation..." +msgstr "&Documentation..." + +msgid "&About 86Box..." +msgstr "&About 86Box..." + +msgid "&New image..." +msgstr "&New image..." + +msgid "&Existing image..." +msgstr "&Existing image..." + +msgid "Existing image (&Write-protected)..." +msgstr "Existing image (&Write-protected)..." + +msgid "&Record" +msgstr "&Record" + +msgid "&Play" +msgstr "&Play" + +msgid "&Rewind to the beginning" +msgstr "&Rewind to the beginning" + +msgid "&Fast forward to the end" +msgstr "&Fast forward to the end" + +msgid "E&ject" +msgstr "E&ject" + +msgid "&Image..." +msgstr "&Image..." + +msgid "E&xport to 86F..." +msgstr "E&xport to 86F..." + +msgid "&Mute" +msgstr "&Mute" + +msgid "E&mpty" +msgstr "E&mpty" + +msgid "&Reload previous image" +msgstr "&Reload previous image" + +msgid "&Image" +msgstr "&Image" + +msgid "Target &framerate" +msgstr "Target &framerate" + +msgid "&Sync with video" +msgstr "&Sync with video" + +msgid "&25 fps" +msgstr "&25 fps" + +msgid "&30 fps" +msgstr "&30 fps" + +msgid "&50 fps" +msgstr "&50 fps" + +msgid "&60 fps" +msgstr "&60 fps" + +msgid "&75 fps" +msgstr "&75 fps" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Select shader..." + +msgid "&Remove shader" +msgstr "&Remove shader" + +msgid "Preferences" +msgstr "Preferences" + +msgid "Sound Gain" +msgstr "Sound Gain" + +msgid "New Image" +msgstr "New Image" + +msgid "Settings" +msgstr "Settings" + +msgid "Specify Main Window Dimensions" +msgstr "Specify Main Window Dimensions" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Cancel" + +msgid "Save these settings as &global defaults" +msgstr "Save these settings as &global defaults" + +msgid "&Default" +msgstr "&Default" + +msgid "Language:" +msgstr "Language:" + +msgid "Icon set:" +msgstr "Icon set:" + +msgid "Gain" +msgstr "Gain" + +msgid "File name:" +msgstr "File name:" + +msgid "Disk size:" +msgstr "Disk size:" + +msgid "RPM mode:" +msgstr "RPM mode:" + +msgid "Progress:" +msgstr "Progress:" + +msgid "Width:" +msgstr "Width:" + +msgid "Height:" +msgstr "Height:" + +msgid "Lock to this size" +msgstr "Lock to this size" + +msgid "Machine type:" +msgstr "Machine type:" + +msgid "Machine:" +msgstr "Machine:" + +msgid "Configure" +msgstr "Configure" + +msgid "CPU type:" +msgstr "CPU type:" + +msgid "Speed:" +msgstr "Speed:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "Wait states:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Memory:" + +msgid "Time synchronization" +msgstr "Time synchronization" + +msgid "Disabled" +msgstr "Disabled" + +msgid "Enabled (local time)" +msgstr "Enabled (local time)" + +msgid "Enabled (UTC)" +msgstr "Enabled (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Dynamic Recompiler" + +msgid "Video:" +msgstr "Video:" + +msgid "Voodoo Graphics" +msgstr "Voodoo Graphics" + +msgid "Mouse:" +msgstr "Mouse:" + +msgid "Joystick:" +msgstr "Joystick:" + +msgid "Joystick 1..." +msgstr "Joystick 1..." + +msgid "Joystick 2..." +msgstr "Joystick 2..." + +msgid "Joystick 3..." +msgstr "Joystick 3..." + +msgid "Joystick 4..." +msgstr "Joystick 4..." + +msgid "Sound card:" +msgstr "Sound card:" + +msgid "MIDI Out Device:" +msgstr "MIDI Out Device:" + +msgid "MIDI In Device:" +msgstr "MIDI In Device:" + +msgid "Standalone MPU-401" +msgstr "Standalone MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Use FLOAT32 sound" + +msgid "Network type:" +msgstr "Network type:" + +msgid "PCap device:" +msgstr "PCap device:" + +msgid "Network adapter:" +msgstr "Network adapter:" + +msgid "LPT1 Device:" +msgstr "LPT1 Device:" + +msgid "LPT2 Device:" +msgstr "LPT2 Device:" + +msgid "LPT3 Device:" +msgstr "LPT3 Device:" + +msgid "Serial port 1" +msgstr "Serial port 1" + +msgid "Serial port 2" +msgstr "Serial port 2" + +msgid "Serial port 3" +msgstr "Serial port 3" + +msgid "Serial port 4" +msgstr "Serial port 4" + +msgid "Parallel port 1" +msgstr "Parallel port 1" + +msgid "Parallel port 2" +msgstr "Parallel port 2" + +msgid "Parallel port 3" +msgstr "Parallel port 3" + +msgid "HD Controller:" +msgstr "HD Controller:" + +msgid "FD Controller:" +msgstr "FD Controller:" + +msgid "Tertiary IDE Controller" +msgstr "Tertiary IDE Controller" + +msgid "Quaternary IDE Controller" +msgstr "Quaternary IDE Controller" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Controller 1:" + +msgid "Controller 2:" +msgstr "Controller 2:" + +msgid "Controller 3:" +msgstr "Controller 3:" + +msgid "Controller 4:" +msgstr "Controller 4:" + +msgid "Cassette" +msgstr "Cassette" + +msgid "Hard disks:" +msgstr "Hard disks:" + +msgid "&New..." +msgstr "&New..." + +msgid "&Existing..." +msgstr "&Existing..." + +msgid "&Remove" +msgstr "&Remove" + +msgid "Bus:" +msgstr "Bus:" + +msgid "Channel:" +msgstr "Channel:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Specify..." + +msgid "Sectors:" +msgstr "Sectors:" + +msgid "Heads:" +msgstr "Heads:" + +msgid "Cylinders:" +msgstr "Cylinders:" + +msgid "Size (MB):" +msgstr "Size (MB):" + +msgid "Type:" +msgstr "Type:" + +msgid "Image Format:" +msgstr "Image Format:" + +msgid "Block Size:" +msgstr "Block Size:" + +msgid "Floppy drives:" +msgstr "Floppy drives:" + +msgid "Turbo timings" +msgstr "Turbo timings" + +msgid "Check BPB" +msgstr "Check BPB" + +msgid "CD-ROM drives:" +msgstr "CD-ROM drives:" + +msgid "MO drives:" +msgstr "MO drives:" + +msgid "ZIP drives:" +msgstr "ZIP drives:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA RTC:" + +msgid "ISA Memory Expansion" +msgstr "ISA Memory Expansion" + +msgid "Card 1:" +msgstr "Card 1:" + +msgid "Card 2:" +msgstr "Card 2:" + +msgid "Card 3:" +msgstr "Card 3:" + +msgid "Card 4:" +msgstr "Card 4:" + +msgid "ISABugger device" +msgstr "ISABugger device" + +msgid "POST card" +msgstr "POST card" + +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Error" + +msgid "Fatal error" +msgstr "Fatal error" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Press CTRL+ALT+PAGE DOWN to return to windowed mode." + +msgid "Speed" +msgstr "Speed" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.im? *.zdi)" +msgstr "ZIP images (*.im? *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." + +msgid "(empty)" +msgstr "(empty)" + +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "ZIP images (*.im? *.zdi);;All files (*.*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "On" + +msgid "Off" +msgstr "Off" + +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." + +msgid "Machine" +msgstr "Machine" + +msgid "Display" +msgstr "Display" + +msgid "Input devices" +msgstr "Input devices" + +msgid "Sound" +msgstr "Sound" + +msgid "Network" +msgstr "Network" + +msgid "Ports (COM & LPT)" +msgstr "Ports (COM & LPT)" + +msgid "Storage controllers" +msgstr "Storage controllers" + +msgid "Hard disks" +msgstr "Hard disks" + +msgid "Floppy & CD-ROM drives" +msgstr "Floppy & CD-ROM drives" + +msgid "Other removable devices" +msgstr "Other removable devices" + +msgid "Other peripherals" +msgstr "Other peripherals" + +msgid "Surface images (*.86f)" +msgstr "Surface images (*.86f)" + +msgid "Click to capture mouse" +msgstr "Click to capture mouse" + +msgid "Press F8+F12 to release mouse" +msgstr "Press F8+F12 to release mouse" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Press F8+F12 or middle button to release mouse" + +msgid "Unable to initialize FluidSynth" +msgstr "Unable to initialize FluidSynth" + +msgid "Bus" +msgstr "Bus" + +msgid "File" +msgstr "File" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Could not initialize the video renderer." + +msgid "Default" +msgstr "Default" + +msgid "%i Wait state(s)" +msgstr "%i Wait state(s)" + +msgid "Type" +msgstr "Type" + +msgid "Failed to set up PCap" +msgstr "Failed to set up PCap" + +msgid "No PCap devices found" +msgstr "No PCap devices found" + +msgid "Invalid PCap device" +msgstr "Invalid PCap device" + +msgid "Standard 2-button joystick(s)" +msgstr "Standard 2-button joystick(s)" + +msgid "Standard 4-button joystick" +msgstr "Standard 4-button joystick" + +msgid "Standard 6-button joystick" +msgstr "Standard 6-button joystick" + +msgid "Standard 8-button joystick" +msgstr "Standard 8-button joystick" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "None" + +msgid "Unable to load keyboard accelerators." +msgstr "Unable to load keyboard accelerators." + +msgid "Unable to register raw input." +msgstr "Unable to register raw input." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Floppy %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" + +msgid "Unable to initialize FreeType" +msgstr "Unable to initialize FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Unable to initialize SDL, SDL2.dll is required" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Are you sure you want to hard reset the emulated machine?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Are you sure you want to exit 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Unable to initialize Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "MO images (*.im? *.mdi);;All files (*.*)" + +msgid "Welcome to 86Box!" +msgstr "Welcome to 86Box!" + +msgid "Internal controller" +msgstr "Internal controller" + +msgid "Exit" +msgstr "Exit" + +msgid "No ROMs found" +msgstr "No ROMs found" + +msgid "Do you want to save the settings?" +msgstr "Do you want to save the settings?" + +msgid "This will hard reset the emulated machine." +msgstr "This will hard reset the emulated machine." + +msgid "Save" +msgstr "Save" + +msgid "About 86Box" +msgstr "About 86Box" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." + +msgid "Hardware not available" +msgstr "Hardware not available" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." + +msgid "Invalid configuration" +msgstr "Invalid configuration" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " is required for ESC/P printer emulation." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " is required for FluidSynth MIDI output." + +msgid "Entering fullscreen mode" +msgstr "Entering fullscreen mode" + +msgid "Don't show this message again" +msgstr "Don't show this message again" + +msgid "Don't exit" +msgstr "Don't exit" + +msgid "Reset" +msgstr "Reset" + +msgid "Don't reset" +msgstr "Don't reset" + +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "CD-ROM images (*.iso *.cue);;All files (*.*)" + +msgid "%hs Device Configuration" +msgstr "%hs Device Configuration" + +msgid "Monitor in sleep mode" +msgstr "Monitor in sleep mode" + +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "OpenGL Shaders (*.glsl);;All files (*.*)" + +msgid "OpenGL options" +msgstr "OpenGL options" + +msgid "You are loading an unsupported configuration" +msgstr "You are loading an unsupported configuration" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." + +msgid "Continue" +msgstr "Continue" + +msgid "Cassette: %s" +msgstr "Cassette: %s" + +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" + +msgid "Cartridge %i: %ls" +msgstr "Cartridge %i: %ls" + +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "Cartridge images (*.a *.b *.jrc);;All files (*.*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + +msgid "Hard disk (%s)" +msgstr "Hard disk (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL or ESDI CD-ROM drives never existed" + +msgid "Custom..." +msgstr "Custom..." + +msgid "Custom (large)..." +msgstr "Custom (large)..." + +msgid "Add New Hard Disk" +msgstr "Add New Hard Disk" + +msgid "Add Existing Hard Disk" +msgstr "Add Existing Hard Disk" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "HDI disk images cannot be larger than 4 GB." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Disk images cannot be larger than 127 GB." + +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" + +msgid "Unable to read file" +msgstr "Unable to read file" + +msgid "Unable to write file" +msgstr "Unable to write file" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "HDI or HDX images with a sector size other than 512 are not supported." + +msgid "USB is not yet supported" +msgstr "USB is not yet supported" + +msgid "Disk image file already exists" +msgstr "Disk image file already exists" + +msgid "Please specify a valid file name." +msgstr "Please specify a valid file name." + +msgid "Disk image created" +msgstr "Disk image created" + +msgid "Make sure the file exists and is readable." +msgstr "Make sure the file exists and is readable." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Make sure the file is being saved to a writable directory." + +msgid "Disk image too large" +msgstr "Disk image too large" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Remember to partition and format the newly-created drive." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "The selected file will be overwritten. Are you sure you want to use it?" + +msgid "Unsupported disk image" +msgstr "Unsupported disk image" + +msgid "Overwrite" +msgstr "Overwrite" + +msgid "Don't overwrite" +msgstr "Don't overwrite" + +msgid "Raw image (.img)" +msgstr "Raw image (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDI image (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDX image (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "Fixed-size VHD (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "Dynamic-size VHD (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Differencing VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Large blocks (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Small blocks (512 KB)" + +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "VHD files (*.vhd);;All files (*.*)" + +msgid "Select the parent VHD" +msgstr "Select the parent VHD" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Parent and child disk timestamps do not match" + +msgid "Could not fix VHD timestamp." +msgstr "Could not fix VHD timestamp." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (cluster 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (cluster 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." + +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." + +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." + +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "Perfect RPM" + +msgid "1%% below perfect RPM" +msgstr "1%% below perfect RPM" + +msgid "1.5%% below perfect RPM" +msgstr "1.5%% below perfect RPM" + +msgid "2%% below perfect RPM" +msgstr "2%% below perfect RPM" + +msgid "(System Default)" +msgstr "(System Default)" + diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po index 3aa03ff7d..b1bf937c2 100644 --- a/src/qt/languages/es-ES.po +++ b/src/qt/languages/es-ES.po @@ -1,1191 +1,1191 @@ -msgid "&Action" -msgstr "&Acción" - -msgid "&Keyboard requires capture" -msgstr "&Teclado requiere captura" - -msgid "&Right CTRL is left ALT" -msgstr "CTRL &derecho es ALT izquierdo" - -msgid "&Hard Reset..." -msgstr "&Hard Reset..." - -msgid "&Ctrl+Alt+Del\tCtrl+F12" -msgstr "&Ctrl+Alt+Del\tCtrl+F12" - -msgid "Ctrl+Alt+&Esc" -msgstr "Ctrl+Alt+&Esc" - -msgid "&Pause" -msgstr "&Pausa" - -msgid "E&xit..." -msgstr "&Salir..." - -msgid "&View" -msgstr "&Vista" - -msgid "&Hide status bar" -msgstr "&Ocultar barra de estado" - -msgid "Hide &toolbar" -msgstr "Hide &toolbar" - -msgid "&Resizeable window" -msgstr "&Ventana redimensionable" - -msgid "R&emember size && position" -msgstr "&Recordar tamaño y posición" - -msgid "Re&nderer" -msgstr "Re&nderizador" - -msgid "&SDL (Software)" -msgstr "&SDL (Software)" - -msgid "SDL (&Hardware)" -msgstr "SDL (&Hardware)" - -msgid "SDL (&OpenGL)" -msgstr "SDL (&OpenGL)" - -msgid "Open&GL (3.0 Core)" -msgstr "Open&GL (3.0 Core)" - -msgid "&VNC" -msgstr "&VNC" - -msgid "Specify dimensions..." -msgstr "E&specificar dimensiones..." - -msgid "F&orce 4:3 display ratio" -msgstr "F&orzar ratio 4:3" - -msgid "&Window scale factor" -msgstr "&Factor de escalado de ventana" - -msgid "&0.5x" -msgstr "&0.5x" - -msgid "&1x" -msgstr "&1x" - -msgid "1.&5x" -msgstr "1.&5x" - -msgid "&2x" -msgstr "&2x" - -msgid "Filter method" -msgstr "&Método de filtrado" - -msgid "&Nearest" -msgstr "&Más cercano" - -msgid "&Linear" -msgstr "&Lineal" - -msgid "Hi&DPI scaling" -msgstr "&Escalado alta densidad" - -msgid "&Fullscreen\tCtrl+Alt+PageUP" -msgstr "&Pantalla completa\tCtrl+Alt+PageUP" - -msgid "Fullscreen &stretch mode" -msgstr "Escalado pantalla completa" - -msgid "&Full screen stretch" -msgstr "&Estirar" - -msgid "&4:3" -msgstr "&4:3" - -msgid "&Square pixels (Keep ratio)" -msgstr "&Píxeles cuadrados (Mant. aspecto)" - -msgid "&Integer scale" -msgstr "&Escalado valor entero" - -msgid "E&GA/(S)VGA settings" -msgstr "&Ajustes EGA/(S)VGA" - -msgid "&Inverted VGA monitor" -msgstr "&Monitor VGA invertido" - -msgid "VGA screen &type" -msgstr "&Tipo de pantalla VGA" - -msgid "RGB &Color" -msgstr "RGB &Color" - -msgid "&RGB Grayscale" -msgstr "RGB &Grises" - -msgid "&Amber monitor" -msgstr "Monitor &Ámbar" - -msgid "&Green monitor" -msgstr "Monitor &Verde" - -msgid "&White monitor" -msgstr "Monitor &Blanco" - -msgid "Grayscale &conversion type" -msgstr "&Conversión a grises" - -msgid "BT&601 (NTSC/PAL)" -msgstr "BT&601 (NTSC/PAL)" - -msgid "BT&709 (HDTV)" -msgstr "BT&709 (HDTV)" - -msgid "&Average" -msgstr "&Media" - -msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" -msgstr "&Overscan CGA/PCjr/Tandy/EGA/(S)VGA" - -msgid "Change contrast for &monochrome display" -msgstr "Cambiar contraste para pantalla &monocroma" - -msgid "&Media" -msgstr "&Medios" - -msgid "&Tools" -msgstr "&Herramientas" - -msgid "&Settings..." -msgstr "&Ajustes..." - -msgid "&Update status bar icons" -msgstr "&Actualizar iconos en barra de estado" - -msgid "Take s&creenshot\tCtrl+F11" -msgstr "Tomar c&aptura\tCtrl+F11" - -msgid "&Preferences..." -msgstr "&Preferencias..." - -msgid "Enable &Discord integration" -msgstr "Habilitar integración con &Discord" - -msgid "Sound &gain..." -msgstr "&Ganancia de sonido..." - -msgid "Begin trace\tCtrl+T" -msgstr "Comenzar traza\tCtrl+T" - -msgid "End trace\tCtrl+T" -msgstr "Terminar traza\tCtrl+T" - -msgid "&Logging" -msgstr "&Trazas" - -msgid "Enable BusLogic logs\tCtrl+F4" -msgstr "Habilitar trazas de BusLogic\tCtrl+F4" - -msgid "Enable CD-ROM logs\tCtrl+F5" -msgstr "Habilitar trazas de CD-ROM\tCtrl+F5" - -msgid "Enable floppy (86F) logs\tCtrl+F6" -msgstr "Habilitar trazas de disquete (86F)\tCtrl+F6" - -msgid "Enable floppy controller logs\tCtrl+F7" -msgstr "Habilitar trazas de controladora de disquete\tCtrl+F7" - -msgid "Enable IDE logs\tCtrl+F8" -msgstr "Habilitar trazas de IDE\tCtrl+F8" - -msgid "Enable Serial Port logs\tCtrl+F3" -msgstr "Habilitar trazas de Puerto Serie\tCtrl+F3" - -msgid "Enable Network logs\tCtrl+F9" -msgstr "Habilitar trazas de Red\tCtrl+F9" - -msgid "&Log breakpoint\tCtrl+F10" -msgstr "&Punto de ruptura de traza\tCtrl+F10" - -msgid "Dump &video RAM\tCtrl+F1" -msgstr "Volcar RAM de &video\tCtrl+F1" - -msgid "&Help" -msgstr "&Ayuda" - -msgid "&Documentation..." -msgstr "&Documentación..." - -msgid "&About 86Box..." -msgstr "&Acerca de 86Box..." - -msgid "&New image..." -msgstr "&Nueva imagen..." - -msgid "&Existing image..." -msgstr "Imagen &Existente..." - -msgid "Existing image (&Write-protected)..." -msgstr "Imagen Existente (&Sólo-lectura)..." - -msgid "&Record" -msgstr "&Grabar" - -msgid "&Play" -msgstr "&Reproducir" - -msgid "&Rewind to the beginning" -msgstr "&Rebobinar al inicio" - -msgid "&Fast forward to the end" -msgstr "&Avance rápido al final" - -msgid "E&ject" -msgstr "E&xtraer" - -msgid "&Image..." -msgstr "&Imagen..." - -msgid "E&xport to 86F..." -msgstr "E&xportar a 86F..." - -msgid "&Mute" -msgstr "&Silenciar" - -msgid "E&mpty" -msgstr "E&xtraer disco" - -msgid "&Reload previous image" -msgstr "&Recargar imagen previa" - -msgid "&Image" -msgstr "&Imagen..." - -msgid "Target &framerate" -msgstr "&Tasa de refresco objetivo" - -msgid "&Sync with video" -msgstr "&Sincronizar con vídeo" - -msgid "&25 fps" -msgstr "&25 fps" - -msgid "&30 fps" -msgstr "&30 fps" - -msgid "&50 fps" -msgstr "&50 fps" - -msgid "&60 fps" -msgstr "&60 fps" - -msgid "&75 fps" -msgstr "&75 fps" - -msgid "&VSync" -msgstr "&VSync" - -msgid "&Select shader..." -msgstr "&Seleccionar shader..." - -msgid "&Remove shader" -msgstr "&Eliminar shader" - -msgid "Preferences" -msgstr "Preferencias" - -msgid "Sound Gain" -msgstr "Ganancia de Sonido" - -msgid "New Image" -msgstr "Nueva Imagen" - -msgid "Settings" -msgstr "Ajustes" - -msgid "Specify Main Window Dimensions" -msgstr "Especificar Dimensiones de la Ventana Principal" - -msgid "OK" -msgstr "Aceptar" - -msgid "Cancel" -msgstr "Cancelar" - -msgid "Save these settings as &global defaults" -msgstr "Salvar estos ajustes como por &defecto globalmente" - -msgid "&Default" -msgstr "&Por defecto" - -msgid "Language:" -msgstr "Idioma:" - -msgid "Icon set:" -msgstr "Juego de iconos:" - -msgid "Gain" -msgstr "Ganancia" - -msgid "File name:" -msgstr "Nombre de archivo:" - -msgid "Disk size:" -msgstr "Tamaño de disco:" - -msgid "RPM mode:" -msgstr "Modo RPM:" - -msgid "Progress:" -msgstr "Progreso:" - -msgid "Width:" -msgstr "Ancho:" - -msgid "Height:" -msgstr "Alto:" - -msgid "Lock to this size" -msgstr "Bloquear a este tamaño" - -msgid "Machine type:" -msgstr "Tipo de máquina:" - -msgid "Machine:" -msgstr "Máquina:" - -msgid "Configure" -msgstr "Configurar" - -msgid "CPU type:" -msgstr "Tipo de CPU:" - -msgid "Speed:" -msgstr "Velocidad:" - -msgid "FPU:" -msgstr "FPU:" - -msgid "Wait states:" -msgstr "Estados en espera:" - -msgid "MB" -msgstr "MB" - -msgid "Memory:" -msgstr "Memoria:" - -msgid "Time synchronization" -msgstr "Sincronización horaria" - -msgid "Disabled" -msgstr "Deshabilitado" - -msgid "Enabled (local time)" -msgstr "Habilitado (hora local)" - -msgid "Enabled (UTC)" -msgstr "Habilitado (UTC)" - -msgid "Dynamic Recompiler" -msgstr "Recompilador Dinámico" - -msgid "Video:" -msgstr "Vídeo:" - -msgid "Voodoo Graphics" -msgstr "Voodoo Graphics" - -msgid "Mouse:" -msgstr "Ratón:" - -msgid "Joystick:" -msgstr "Mando:" - -msgid "Joystick 1..." -msgstr "Mando 1..." - -msgid "Joystick 2..." -msgstr "Mando 2..." - -msgid "Joystick 3..." -msgstr "Mando 3..." - -msgid "Joystick 4..." -msgstr "Mando 4..." - -msgid "Sound card:" -msgstr "Tarjeta de sonido:" - -msgid "MIDI Out Device:" -msgstr "Dispositivo MIDI de salida:" - -msgid "MIDI In Device:" -msgstr "Dispositivo MIDI de entrada:" - -msgid "Standalone MPU-401" -msgstr "MPU-401 independiente" - -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - -msgid "Use FLOAT32 sound" -msgstr "Usar sonido FLOAT32" - -msgid "Network type:" -msgstr "Tipo de red:" - -msgid "PCap device:" -msgstr "Dispositivo PCap:" - -msgid "Network adapter:" -msgstr "Adaptador de red:" - -msgid "LPT1 Device:" -msgstr "Dispositivo LPT1:" - -msgid "LPT2 Device:" -msgstr "Dispositivo LPT2:" - -msgid "LPT3 Device:" -msgstr "Dispositivo LPT3:" - -msgid "Serial port 1" -msgstr "Puerto serie 1" - -msgid "Serial port 2" -msgstr "Puerto serie 2" - -msgid "Serial port 3" -msgstr "Puerto serie 3" - -msgid "Serial port 4" -msgstr "Puerto serie 4" - -msgid "Parallel port 1" -msgstr "Puerto paralelo 1" - -msgid "Parallel port 2" -msgstr "Puerto paralelo 2" - -msgid "Parallel port 3" -msgstr "Puerto paralelo 3" - -msgid "HD Controller:" -msgstr "Controladora HD:" - -msgid "FD Controller:" -msgstr "Controladora FD:" - -msgid "Tertiary IDE Controller" -msgstr "Tercera controladora IDE" - -msgid "Quaternary IDE Controller" -msgstr "Cuarta controladora IDE" - -msgid "SCSI" -msgstr "SCSI" - -msgid "Controller 1:" -msgstr "Controladora 1:" - -msgid "Controller 2:" -msgstr "Controladora 2:" - -msgid "Controller 3:" -msgstr "Controladora 3:" - -msgid "Controller 4:" -msgstr "Controladora 4:" - -msgid "Cassette" -msgstr "Cassette" - -msgid "Hard disks:" -msgstr "Discos duros:" - -msgid "&New..." -msgstr "&Nuevo..." - -msgid "&Existing..." -msgstr "&Existente..." - -msgid "&Remove" -msgstr "E&liminar" - -msgid "Bus:" -msgstr "Bus:" - -msgid "Channel:" -msgstr "Canal:" - -msgid "ID:" -msgstr "ID:" - -msgid "&Specify..." -msgstr "E&specificar..." - -msgid "Sectors:" -msgstr "Sectores:" - -msgid "Heads:" -msgstr "Cabezas:" - -msgid "Cylinders:" -msgstr "Cilindros:" - -msgid "Size (MB):" -msgstr "Tamaño (MB):" - -msgid "Type:" -msgstr "Tipo:" - -msgid "Image Format:" -msgstr "Formato de imagen:" - -msgid "Block Size:" -msgstr "Tamaño de bloque:" - -msgid "Floppy drives:" -msgstr "Unidades de disquete:" - -msgid "Turbo timings" -msgstr "Temporizaciones Turbo" - -msgid "Check BPB" -msgstr "Chequear BPB" - -msgid "CD-ROM drives:" -msgstr "Unidades de CD-ROM:" - -msgid "MO drives:" -msgstr "Unidades MO:" - -msgid "ZIP drives:" -msgstr "Unidades ZIP:" - -msgid "ZIP 250" -msgstr "ZIP 250" - -msgid "ISA RTC:" -msgstr "ISA RTC:" - -msgid "ISA Memory Expansion" -msgstr "Expansión de Memoria ISA" - -msgid "Card 1:" -msgstr "Tarjeta 1:" - -msgid "Card 2:" -msgstr "Tarjeta 2:" - -msgid "Card 3:" -msgstr "Tarjeta 3:" - -msgid "Card 4:" -msgstr "Tarjeta 4:" - -msgid "ISABugger device" -msgstr "Dispositivo ISABugger" - -msgid "POST card" -msgstr "Tarjeta POST" - -msgid "FONT_SIZE" -msgstr "9" - -msgid "FONT_NAME" -msgstr "Segoe UI" - -msgid "86Box" -msgstr "86Box" - -msgid "Error" -msgstr "Error" - -msgid "Fatal error" -msgstr "Error fatal" - -msgid "" -msgstr "" - -msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." -msgstr "Pulsa CTRL+ALT+AVPÁG para volver a modo ventana." - -msgid "Speed" -msgstr "Velocidad" - -msgid "ZIP %03i %i (%s): %ls" -msgstr "ZIP %03i %i (%s): %ls" - -msgid "ZIP images (*.im? *.zdi)" -msgstr "Imagenes ZIP (*.im? *.zdi)" - -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "86Box no pudo encontrar ninguna imagen ROM usable.\n\nPor favor descarga un grupo de imágenes y extráelas en el directorio \"roms\"." - -msgid "(empty)" -msgstr "(vacío)" - -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "Imagenes ZIP (*.im? *.zdi);;All files (*.*)" - -msgid "Turbo" -msgstr "Turbo" - -msgid "On" -msgstr "On" - -msgid "Off" -msgstr "Off" - -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "Todas las imagenes (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" - -msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "La máquina \"%hs\" no está disponible debido a ROMs faltantes en el directorio roms/machines. Cambiando a una máquina disponible." - -msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "La tarjeta de vídeo \"%hs\" no está disponible debido a ROMs faltantes en el directorio roms/machines. Cambiando a una tarjeta de vídeo disponible." - -msgid "Machine" -msgstr "Máquina" - -msgid "Display" -msgstr "Vídeo" - -msgid "Input devices" -msgstr "Dispositivos de Entrada" - -msgid "Sound" -msgstr "Sonido" - -msgid "Network" -msgstr "Red" - -msgid "Ports (COM & LPT)" -msgstr "Puertos (COM y LPT)" - -msgid "Storage controllers" -msgstr "Controladoras de Almacenamiento" - -msgid "Hard disks" -msgstr "Discos Duros" - -msgid "Floppy & CD-ROM drives" -msgstr "Disquetes y unidades de CD-ROM" - -msgid "Other removable devices" -msgstr "Otros dispositivos extraíbles" - -msgid "Other peripherals" -msgstr "Otros periféricos" - -msgid "Surface images (*.86f)" -msgstr "Imágenes de superficie (*.86f)" - -msgid "Click to capture mouse" -msgstr "Haz click para capturar el ratón" - -msgid "Press F8+F12 to release mouse" -msgstr "Pulsa F8+F12 para liberar el ratón" - -msgid "Press F8+F12 or middle button to release mouse" -msgstr "Pulsa F8+F12 o el botón central para liberar el ratón" - -msgid "Unable to initialize FluidSynth" -msgstr "Incapaz de inicializar FluidSynth" - -msgid "Bus" -msgstr "Bus" - -msgid "File" -msgstr "Archivo" - -msgid "C" -msgstr "C" - -msgid "H" -msgstr "H" - -msgid "S" -msgstr "S" - -msgid "KB" -msgstr "KB" - -msgid "Could not initialize the video renderer." -msgstr "Incapaz de inicializar el renderizador de vídeo." - -msgid "Default" -msgstr "Por defecto" - -msgid "%i Wait state(s)" -msgstr "%i estado(s) de Espera" - -msgid "Type" -msgstr "Tipo" - -msgid "Failed to set up PCap" -msgstr "Incapaz de configurar PCap" - -msgid "No PCap devices found" -msgstr "No se encontraron dispositivos PCap" - -msgid "Invalid PCap device" -msgstr "Dispositivo PCap inválido" - -msgid "Standard 2-button joystick(s)" -msgstr "Mando(s) de 2 botones estándar" - -msgid "Standard 4-button joystick" -msgstr "Mando de 4 botones estándar" - -msgid "Standard 6-button joystick" -msgstr "Mando de 6 botones estándar" - -msgid "Standard 8-button joystick" -msgstr "Mando de 8 botones estándar" - -msgid "CH Flightstick Pro" -msgstr "CH Flightstick Pro" - -msgid "Microsoft SideWinder Pad" -msgstr "Microsoft SideWinder Pad" - -msgid "Thrustmaster Flight Control System" -msgstr "Thrustmaster Flight Control System" - -msgid "None" -msgstr "Ninguno" - -msgid "Unable to load keyboard accelerators." -msgstr "Incapaz de cargar aceleradores de teclado." - -msgid "Unable to register raw input." -msgstr "Incapaz de registrar entrada directa." - -msgid "%u" -msgstr "%u" - -msgid "%u MB (CHS: %i, %i, %i)" -msgstr "%u MB (CHS: %i, %i, %i)" - -msgid "Floppy %i (%s): %ls" -msgstr "Disquete %i (%s): %ls" - -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "Todas las Imágenes (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" - -msgid "Unable to initialize FreeType" -msgstr "Incapaz de inicializar FreeType" - -msgid "Unable to initialize SDL, SDL2.dll is required" -msgstr "Incapaz de inicializar SDL, se requiere SDL2.dll" - -msgid "Are you sure you want to hard reset the emulated machine?" -msgstr "¿Seguro que quieres resetear la máquina emulada?" - -msgid "Are you sure you want to exit 86Box?" -msgstr "¿Seguro que quieres cerrar 86Box?" - -msgid "Unable to initialize Ghostscript" -msgstr "Incapaz de inicializar Ghostscript" - -msgid "MO %i (%ls): %ls" -msgstr "MO %i (%ls): %ls" - -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "Imágenes de MO (*.im? *.mdi);;All files (*.*)" - -msgid "Welcome to 86Box!" -msgstr "¡Bienvenido a 86Box!" - -msgid "Internal controller" -msgstr "Controladora interna" - -msgid "Exit" -msgstr "Salir" - -msgid "No ROMs found" -msgstr "No se encontraron ROMs" - -msgid "Do you want to save the settings?" -msgstr "¿Quieres guardar los ajustes?" - -msgid "This will hard reset the emulated machine." -msgstr "Se hará hard reset de la máquina emulada." - -msgid "Save" -msgstr "Guardar" - -msgid "About 86Box" -msgstr "Acerca de 86Box" - -msgid "86Box v" -msgstr "86Box v" - -msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "Un emulador de ordenadores antigüos\n\nAutores: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, y otros.\n\nLiberado bajo la GNU General Public License versión 2 o posterior. Ver LICENSE para más información." - -msgid "Hardware not available" -msgstr "Hardware no disponible" - -msgid "WinPcap" -msgstr "WinPcap" - -msgid "libpcap" -msgstr "libpcap" - -msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." -msgstr "Asegúrate de que libpcap está instalado y de que estás en una conexión de red compatible con libpcap." - -msgid "Invalid configuration" -msgstr "Configuración inválida" - -msgid "freetype.dll" -msgstr "freetype.dll" - -msgid "libfreetype" -msgstr "libfreetype" - -msgid " is required for ESC/P printer emulation." -msgstr " es necesaria para emulación de impresión ESC/P." - -msgid "gsdll32.dll" -msgstr "gsdll32.dll" - -msgid "libgs" -msgstr "libgs" - -msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." -msgstr " es necesaria para la conversión automática de archivos PostScript a PDF.\n\nCualquier documento enviado a la impresora genérica postScript se guardará como archivo PostScript (.ps)." - -msgid "libfluidsynth.dll" -msgstr "libfluidsynth.dll" - -msgid "libfluidsynth" -msgstr "libfluidsynth" - -msgid " is required for FluidSynth MIDI output." -msgstr " es necesario para salida MIDI FluidSynth." - -msgid "Entering fullscreen mode" -msgstr "Entrando en modo pantalla completa" - -msgid "Don't show this message again" -msgstr "No mostrar más este mensaje" - -msgid "Don't exit" -msgstr "No salir" - -msgid "Reset" -msgstr "Resetear" - -msgid "Don't reset" -msgstr "No resetear" - -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "Imágenes de CD-ROM (*.iso *.cue);;All files (*.*)" - -msgid "%hs Device Configuration" -msgstr "%hs Configuración de Dispositivo" - -msgid "Monitor in sleep mode" -msgstr "Monitor en modo ahorro" - -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "Shaders OpenGL (*.glsl);;All files (*.*)" - -msgid "OpenGL options" -msgstr "Opciones OpenGL" - -msgid "You are loading an unsupported configuration" -msgstr "Estás cargando una configuración no soportada" - -msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "El Filtrado de tipo de CPU basado en máquina seleccionada está deshabilitado para la esta máquina.\n\nEsto hace posible seleccionar una CPU que sea incompatible con esta máquina. Por ello, pueden aparecer incompatibilidader con la BIOS de la máquina u otro software.\n\nActivar este ajuste no está oficialmente soportado y cualquier reporte de fallo puede ser cerrado como inválido." - -msgid "Continue" -msgstr "Continuar" - -msgid "Cassette: %s" -msgstr "Cassette: %s" - -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Imágenes de Cassette (*.pcm *.raw *.wav *.cas);;All files (*.*)" - -msgid "Cartridge %i: %ls" -msgstr "Cartucho %i: %ls" - -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "Imágenes de Cartucho (*.a *.b *.jrc);;All files (*.*)" - -msgid "Error initializing renderer" -msgstr "Error initializing renderer" - -msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." - -msgid "Resume execution" -msgstr "Resume execution" - -msgid "Pause execution" -msgstr "Pause execution" - -msgid "Press Ctrl+Alt+Del" -msgstr "Press Ctrl+Alt+Del" - -msgid "Press Ctrl+Alt+Esc" -msgstr "Press Ctrl+Alt+Esc" - -msgid "Hard reset" -msgstr "Hard reset" - -msgid "ACPI shutdown" -msgstr "ACPI shutdown" - -msgid "Hard disk (%s)" -msgstr "Disco duro (%s)" - -msgid "%01i:%01i" -msgstr "%01i:%01i" - -msgid "%01i" -msgstr "%01i" - -msgid "MFM/RLL or ESDI CD-ROM drives never existed" -msgstr "Nunca hubo unidades de CD-ROM MFM/RLL o ESDI" - -msgid "Custom..." -msgstr "A medida..." - -msgid "Custom (large)..." -msgstr "A medida (grande)..." - -msgid "Add New Hard Disk" -msgstr "Añadir Nuevo Disco Duro" - -msgid "Add Existing Hard Disk" -msgstr "Añadir Disco Duro Existente" - -msgid "HDI disk images cannot be larger than 4 GB." -msgstr "Las imágenes de disco HDI no pueden superar los 4 GB." - -msgid "Disk images cannot be larger than 127 GB." -msgstr "Las imágenes de disco no pueden superar los 127 GB." - -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Imágenes de Disco Duro (*.hd? *.im? *.vhd);;All files (*.*)" - -msgid "Unable to read file" -msgstr "No se pudo leer el archivo" - -msgid "Unable to write file" -msgstr "No se pudo escribir el archivo" - -msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "No se soportan las imágenes HDI o HDX con un tamaño de sector diferente a 512." - -msgid "USB is not yet supported" -msgstr "No se soporta aún el USB" - -msgid "Disk image file already exists" -msgstr "La imagen de disco ya existe" - -msgid "Please specify a valid file name." -msgstr "Por favor especifique un nombre de archivo válido." - -msgid "Disk image created" -msgstr "Imagen de disco creada" - -msgid "Make sure the file exists and is readable." -msgstr "Asegúrese de que el archivo existe y es leíble." - -msgid "Make sure the file is being saved to a writable directory." -msgstr "Asegúrese de que el archivo en un directorio con permiso de escritura." - -msgid "Disk image too large" -msgstr "Imagen de disco demasiado grande" - -msgid "Remember to partition and format the newly-created drive." -msgstr "Recuerde particionar y formatear la nueva unidad." - -msgid "The selected file will be overwritten. Are you sure you want to use it?" -msgstr "El archivo selecionado será sobreescrito. ¿Está seguro de querer usarlo?" - -msgid "Unsupported disk image" -msgstr "Imagen de disco no soportada" - -msgid "Overwrite" -msgstr "Sobreescribir" - -msgid "Don't overwrite" -msgstr "No sobreescribir" - -msgid "Raw image (.img)" -msgstr "Imagen plana (.img)" - -msgid "HDI image (.hdi)" -msgstr "Imagen HDI (.hdi)" - -msgid "HDX image (.hdx)" -msgstr "Imagen HDX (.hdx)" - -msgid "Fixed-size VHD (.vhd)" -msgstr "VHD de tamaño fijo (.vhd)" - -msgid "Dynamic-size VHD (.vhd)" -msgstr "VHD de tamaño dinámico (.vhd)" - -msgid "Differencing VHD (.vhd)" -msgstr "VHD diferencial (.vhd)" - -msgid "Large blocks (2 MB)" -msgstr "Bloques grandes (2 MB)" - -msgid "Small blocks (512 KB)" -msgstr "Bloques pequeños (512 KB)" - -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "Archivos VHD (*.vhd);;All files (*.*)" - -msgid "Select the parent VHD" -msgstr "Seleccione el VHD padre" - -msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" -msgstr "Esto puede deberse a que la imagen padre se modificó después de que la imagen diferencial se crease.\n\nTambién puede ocurrir si las imágenes fueron movidas o copiadas, o por un fallo en el programa que creó este disco.\n\n¿Quiere corregir los registros de tiempo?" - -msgid "Parent and child disk timestamps do not match" -msgstr "Las marcas de tiempo del padre e hijo no coinciden" - -msgid "Could not fix VHD timestamp." -msgstr "No se pudo corregir la marca de tiempo del VHD." - -msgid "%01i:%02i" -msgstr "%01i:%02i" - -msgid "MFM/RLL" -msgstr "MFM/RLL" - -msgid "XTA" -msgstr "XTA" - -msgid "ESDI" -msgstr "ESDI" - -msgid "IDE" -msgstr "IDE" - -msgid "ATAPI" -msgstr "ATAPI" - -msgid "MFM/RLL (%01i:%01i)" -msgstr "MFM/RLL (%01i:%01i)" - -msgid "XTA (%01i:%01i)" -msgstr "XTA (%01i:%01i)" - -msgid "ESDI (%01i:%01i)" -msgstr "ESDI (%01i:%01i)" - -msgid "IDE (%01i:%01i)" -msgstr "IDE (%01i:%01i)" - -msgid "ATAPI (%01i:%01i)" -msgstr "ATAPI (%01i:%01i)" - -msgid "SCSI (%01i:%02i)" -msgstr "SCSI (%01i:%02i)" - -msgid "CD-ROM %i (%s): %s" -msgstr "CD-ROM %i (%s): %s" - -msgid "160 kB" -msgstr "160 kB" - -msgid "180 kB" -msgstr "180 kB" - -msgid "320 kB" -msgstr "320 kB" - -msgid "360 kB" -msgstr "360 kB" - -msgid "640 kB" -msgstr "640 kB" - -msgid "720 kB" -msgstr "720 kB" - -msgid "1.2 MB" -msgstr "1.2 MB" - -msgid "1.25 MB" -msgstr "1.25 MB" - -msgid "1.44 MB" -msgstr "1.44 MB" - -msgid "DMF (cluster 1024)" -msgstr "DMF (cluster 1024)" - -msgid "DMF (cluster 2048)" -msgstr "DMF (cluster 2048)" - -msgid "2.88 MB" -msgstr "2.88 MB" - -msgid "ZIP 100" -msgstr "ZIP 100" - -msgid "3.5\" 128Mb M.O. (ISO 10090)" -msgstr "3.5\" 128Mb M.O. (ISO 10090)" - -msgid "3.5\" 230Mb M.O. (ISO 13963)" -msgstr "3.5\" 230Mb M.O. (ISO 13963)" - -msgid "3.5\" 540Mb M.O. (ISO 15498)" -msgstr "3.5\" 540Mb M.O. (ISO 15498)" - -msgid "3.5\" 640Mb M.O. (ISO 15498)" -msgstr "3.5\" 640Mb M.O. (ISO 15498)" - -msgid "3.5\" 1.3Gb M.O. (GigaMO)" -msgstr "3.5\" 1.3Gb M.O. (GigaMO)" - -msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" - -msgid "5.25\" 600Mb M.O." -msgstr "5.25\" 600Mb M.O." - -msgid "5.25\" 650Mb M.O." -msgstr "5.25\" 650Mb M.O." - -msgid "5.25\" 1Gb M.O." -msgstr "5.25\" 1Gb M.O." - -msgid "5.25\" 1.3Gb M.O." -msgstr "5.25\" 1.3Gb M.O." - -msgid "Perfect RPM" -msgstr "RPM perfectas" - -msgid "1%% below perfect RPM" -msgstr "1%% por debajo de RPM perfectas" - -msgid "1.5%% below perfect RPM" -msgstr "1.5%% por debajo de RPM perfectas" - -msgid "2%% below perfect RPM" -msgstr "2%% por debajo de RPM perfectas" - -msgid "(System Default)" -msgstr "(Por defecto del sistema)" - +msgid "&Action" +msgstr "&Acción" + +msgid "&Keyboard requires capture" +msgstr "&Teclado requiere captura" + +msgid "&Right CTRL is left ALT" +msgstr "CTRL &derecho es ALT izquierdo" + +msgid "&Hard Reset..." +msgstr "&Hard Reset..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Pausa" + +msgid "E&xit..." +msgstr "&Salir..." + +msgid "&View" +msgstr "&Vista" + +msgid "&Hide status bar" +msgstr "&Ocultar barra de estado" + +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + +msgid "&Resizeable window" +msgstr "&Ventana redimensionable" + +msgid "R&emember size && position" +msgstr "&Recordar tamaño y posición" + +msgid "Re&nderer" +msgstr "Re&nderizador" + +msgid "&SDL (Software)" +msgstr "&SDL (Software)" + +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardware)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 Core)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "E&specificar dimensiones..." + +msgid "F&orce 4:3 display ratio" +msgstr "F&orzar ratio 4:3" + +msgid "&Window scale factor" +msgstr "&Factor de escalado de ventana" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "&Método de filtrado" + +msgid "&Nearest" +msgstr "&Más cercano" + +msgid "&Linear" +msgstr "&Lineal" + +msgid "Hi&DPI scaling" +msgstr "&Escalado alta densidad" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Pantalla completa\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Escalado pantalla completa" + +msgid "&Full screen stretch" +msgstr "&Estirar" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Píxeles cuadrados (Mant. aspecto)" + +msgid "&Integer scale" +msgstr "&Escalado valor entero" + +msgid "E&GA/(S)VGA settings" +msgstr "&Ajustes EGA/(S)VGA" + +msgid "&Inverted VGA monitor" +msgstr "&Monitor VGA invertido" + +msgid "VGA screen &type" +msgstr "&Tipo de pantalla VGA" + +msgid "RGB &Color" +msgstr "RGB &Color" + +msgid "&RGB Grayscale" +msgstr "RGB &Grises" + +msgid "&Amber monitor" +msgstr "Monitor &Ámbar" + +msgid "&Green monitor" +msgstr "Monitor &Verde" + +msgid "&White monitor" +msgstr "Monitor &Blanco" + +msgid "Grayscale &conversion type" +msgstr "&Conversión a grises" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Media" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "&Overscan CGA/PCjr/Tandy/EGA/(S)VGA" + +msgid "Change contrast for &monochrome display" +msgstr "Cambiar contraste para pantalla &monocroma" + +msgid "&Media" +msgstr "&Medios" + +msgid "&Tools" +msgstr "&Herramientas" + +msgid "&Settings..." +msgstr "&Ajustes..." + +msgid "&Update status bar icons" +msgstr "&Actualizar iconos en barra de estado" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Tomar c&aptura\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Preferencias..." + +msgid "Enable &Discord integration" +msgstr "Habilitar integración con &Discord" + +msgid "Sound &gain..." +msgstr "&Ganancia de sonido..." + +msgid "Begin trace\tCtrl+T" +msgstr "Comenzar traza\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Terminar traza\tCtrl+T" + +msgid "&Logging" +msgstr "&Trazas" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Habilitar trazas de BusLogic\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Habilitar trazas de CD-ROM\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Habilitar trazas de disquete (86F)\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Habilitar trazas de controladora de disquete\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Habilitar trazas de IDE\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Habilitar trazas de Puerto Serie\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Habilitar trazas de Red\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Punto de ruptura de traza\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "Volcar RAM de &video\tCtrl+F1" + +msgid "&Help" +msgstr "&Ayuda" + +msgid "&Documentation..." +msgstr "&Documentación..." + +msgid "&About 86Box..." +msgstr "&Acerca de 86Box..." + +msgid "&New image..." +msgstr "&Nueva imagen..." + +msgid "&Existing image..." +msgstr "Imagen &Existente..." + +msgid "Existing image (&Write-protected)..." +msgstr "Imagen Existente (&Sólo-lectura)..." + +msgid "&Record" +msgstr "&Grabar" + +msgid "&Play" +msgstr "&Reproducir" + +msgid "&Rewind to the beginning" +msgstr "&Rebobinar al inicio" + +msgid "&Fast forward to the end" +msgstr "&Avance rápido al final" + +msgid "E&ject" +msgstr "E&xtraer" + +msgid "&Image..." +msgstr "&Imagen..." + +msgid "E&xport to 86F..." +msgstr "E&xportar a 86F..." + +msgid "&Mute" +msgstr "&Silenciar" + +msgid "E&mpty" +msgstr "E&xtraer disco" + +msgid "&Reload previous image" +msgstr "&Recargar imagen previa" + +msgid "&Image" +msgstr "&Imagen..." + +msgid "Target &framerate" +msgstr "&Tasa de refresco objetivo" + +msgid "&Sync with video" +msgstr "&Sincronizar con vídeo" + +msgid "&25 fps" +msgstr "&25 fps" + +msgid "&30 fps" +msgstr "&30 fps" + +msgid "&50 fps" +msgstr "&50 fps" + +msgid "&60 fps" +msgstr "&60 fps" + +msgid "&75 fps" +msgstr "&75 fps" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Seleccionar shader..." + +msgid "&Remove shader" +msgstr "&Eliminar shader" + +msgid "Preferences" +msgstr "Preferencias" + +msgid "Sound Gain" +msgstr "Ganancia de Sonido" + +msgid "New Image" +msgstr "Nueva Imagen" + +msgid "Settings" +msgstr "Ajustes" + +msgid "Specify Main Window Dimensions" +msgstr "Especificar Dimensiones de la Ventana Principal" + +msgid "OK" +msgstr "Aceptar" + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Save these settings as &global defaults" +msgstr "Salvar estos ajustes como por &defecto globalmente" + +msgid "&Default" +msgstr "&Por defecto" + +msgid "Language:" +msgstr "Idioma:" + +msgid "Icon set:" +msgstr "Juego de iconos:" + +msgid "Gain" +msgstr "Ganancia" + +msgid "File name:" +msgstr "Nombre de archivo:" + +msgid "Disk size:" +msgstr "Tamaño de disco:" + +msgid "RPM mode:" +msgstr "Modo RPM:" + +msgid "Progress:" +msgstr "Progreso:" + +msgid "Width:" +msgstr "Ancho:" + +msgid "Height:" +msgstr "Alto:" + +msgid "Lock to this size" +msgstr "Bloquear a este tamaño" + +msgid "Machine type:" +msgstr "Tipo de máquina:" + +msgid "Machine:" +msgstr "Máquina:" + +msgid "Configure" +msgstr "Configurar" + +msgid "CPU type:" +msgstr "Tipo de CPU:" + +msgid "Speed:" +msgstr "Velocidad:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "Estados en espera:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Memoria:" + +msgid "Time synchronization" +msgstr "Sincronización horaria" + +msgid "Disabled" +msgstr "Deshabilitado" + +msgid "Enabled (local time)" +msgstr "Habilitado (hora local)" + +msgid "Enabled (UTC)" +msgstr "Habilitado (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Recompilador Dinámico" + +msgid "Video:" +msgstr "Vídeo:" + +msgid "Voodoo Graphics" +msgstr "Voodoo Graphics" + +msgid "Mouse:" +msgstr "Ratón:" + +msgid "Joystick:" +msgstr "Mando:" + +msgid "Joystick 1..." +msgstr "Mando 1..." + +msgid "Joystick 2..." +msgstr "Mando 2..." + +msgid "Joystick 3..." +msgstr "Mando 3..." + +msgid "Joystick 4..." +msgstr "Mando 4..." + +msgid "Sound card:" +msgstr "Tarjeta de sonido:" + +msgid "MIDI Out Device:" +msgstr "Dispositivo MIDI de salida:" + +msgid "MIDI In Device:" +msgstr "Dispositivo MIDI de entrada:" + +msgid "Standalone MPU-401" +msgstr "MPU-401 independiente" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Usar sonido FLOAT32" + +msgid "Network type:" +msgstr "Tipo de red:" + +msgid "PCap device:" +msgstr "Dispositivo PCap:" + +msgid "Network adapter:" +msgstr "Adaptador de red:" + +msgid "LPT1 Device:" +msgstr "Dispositivo LPT1:" + +msgid "LPT2 Device:" +msgstr "Dispositivo LPT2:" + +msgid "LPT3 Device:" +msgstr "Dispositivo LPT3:" + +msgid "Serial port 1" +msgstr "Puerto serie 1" + +msgid "Serial port 2" +msgstr "Puerto serie 2" + +msgid "Serial port 3" +msgstr "Puerto serie 3" + +msgid "Serial port 4" +msgstr "Puerto serie 4" + +msgid "Parallel port 1" +msgstr "Puerto paralelo 1" + +msgid "Parallel port 2" +msgstr "Puerto paralelo 2" + +msgid "Parallel port 3" +msgstr "Puerto paralelo 3" + +msgid "HD Controller:" +msgstr "Controladora HD:" + +msgid "FD Controller:" +msgstr "Controladora FD:" + +msgid "Tertiary IDE Controller" +msgstr "Tercera controladora IDE" + +msgid "Quaternary IDE Controller" +msgstr "Cuarta controladora IDE" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Controladora 1:" + +msgid "Controller 2:" +msgstr "Controladora 2:" + +msgid "Controller 3:" +msgstr "Controladora 3:" + +msgid "Controller 4:" +msgstr "Controladora 4:" + +msgid "Cassette" +msgstr "Cassette" + +msgid "Hard disks:" +msgstr "Discos duros:" + +msgid "&New..." +msgstr "&Nuevo..." + +msgid "&Existing..." +msgstr "&Existente..." + +msgid "&Remove" +msgstr "E&liminar" + +msgid "Bus:" +msgstr "Bus:" + +msgid "Channel:" +msgstr "Canal:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "E&specificar..." + +msgid "Sectors:" +msgstr "Sectores:" + +msgid "Heads:" +msgstr "Cabezas:" + +msgid "Cylinders:" +msgstr "Cilindros:" + +msgid "Size (MB):" +msgstr "Tamaño (MB):" + +msgid "Type:" +msgstr "Tipo:" + +msgid "Image Format:" +msgstr "Formato de imagen:" + +msgid "Block Size:" +msgstr "Tamaño de bloque:" + +msgid "Floppy drives:" +msgstr "Unidades de disquete:" + +msgid "Turbo timings" +msgstr "Temporizaciones Turbo" + +msgid "Check BPB" +msgstr "Chequear BPB" + +msgid "CD-ROM drives:" +msgstr "Unidades de CD-ROM:" + +msgid "MO drives:" +msgstr "Unidades MO:" + +msgid "ZIP drives:" +msgstr "Unidades ZIP:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA RTC:" + +msgid "ISA Memory Expansion" +msgstr "Expansión de Memoria ISA" + +msgid "Card 1:" +msgstr "Tarjeta 1:" + +msgid "Card 2:" +msgstr "Tarjeta 2:" + +msgid "Card 3:" +msgstr "Tarjeta 3:" + +msgid "Card 4:" +msgstr "Tarjeta 4:" + +msgid "ISABugger device" +msgstr "Dispositivo ISABugger" + +msgid "POST card" +msgstr "Tarjeta POST" + +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Error" + +msgid "Fatal error" +msgstr "Error fatal" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Pulsa CTRL+ALT+AVPÁG para volver a modo ventana." + +msgid "Speed" +msgstr "Velocidad" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.im? *.zdi)" +msgstr "Imagenes ZIP (*.im? *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box no pudo encontrar ninguna imagen ROM usable.\n\nPor favor descarga un grupo de imágenes y extráelas en el directorio \"roms\"." + +msgid "(empty)" +msgstr "(vacío)" + +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "Imagenes ZIP (*.im? *.zdi);;All files (*.*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "On" + +msgid "Off" +msgstr "Off" + +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "Todas las imagenes (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "La máquina \"%hs\" no está disponible debido a ROMs faltantes en el directorio roms/machines. Cambiando a una máquina disponible." + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "La tarjeta de vídeo \"%hs\" no está disponible debido a ROMs faltantes en el directorio roms/machines. Cambiando a una tarjeta de vídeo disponible." + +msgid "Machine" +msgstr "Máquina" + +msgid "Display" +msgstr "Vídeo" + +msgid "Input devices" +msgstr "Dispositivos de Entrada" + +msgid "Sound" +msgstr "Sonido" + +msgid "Network" +msgstr "Red" + +msgid "Ports (COM & LPT)" +msgstr "Puertos (COM y LPT)" + +msgid "Storage controllers" +msgstr "Controladoras de Almacenamiento" + +msgid "Hard disks" +msgstr "Discos Duros" + +msgid "Floppy & CD-ROM drives" +msgstr "Disquetes y unidades de CD-ROM" + +msgid "Other removable devices" +msgstr "Otros dispositivos extraíbles" + +msgid "Other peripherals" +msgstr "Otros periféricos" + +msgid "Surface images (*.86f)" +msgstr "Imágenes de superficie (*.86f)" + +msgid "Click to capture mouse" +msgstr "Haz click para capturar el ratón" + +msgid "Press F8+F12 to release mouse" +msgstr "Pulsa F8+F12 para liberar el ratón" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Pulsa F8+F12 o el botón central para liberar el ratón" + +msgid "Unable to initialize FluidSynth" +msgstr "Incapaz de inicializar FluidSynth" + +msgid "Bus" +msgstr "Bus" + +msgid "File" +msgstr "Archivo" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Incapaz de inicializar el renderizador de vídeo." + +msgid "Default" +msgstr "Por defecto" + +msgid "%i Wait state(s)" +msgstr "%i estado(s) de Espera" + +msgid "Type" +msgstr "Tipo" + +msgid "Failed to set up PCap" +msgstr "Incapaz de configurar PCap" + +msgid "No PCap devices found" +msgstr "No se encontraron dispositivos PCap" + +msgid "Invalid PCap device" +msgstr "Dispositivo PCap inválido" + +msgid "Standard 2-button joystick(s)" +msgstr "Mando(s) de 2 botones estándar" + +msgid "Standard 4-button joystick" +msgstr "Mando de 4 botones estándar" + +msgid "Standard 6-button joystick" +msgstr "Mando de 6 botones estándar" + +msgid "Standard 8-button joystick" +msgstr "Mando de 8 botones estándar" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Ninguno" + +msgid "Unable to load keyboard accelerators." +msgstr "Incapaz de cargar aceleradores de teclado." + +msgid "Unable to register raw input." +msgstr "Incapaz de registrar entrada directa." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Disquete %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "Todas las Imágenes (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" + +msgid "Unable to initialize FreeType" +msgstr "Incapaz de inicializar FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Incapaz de inicializar SDL, se requiere SDL2.dll" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "¿Seguro que quieres resetear la máquina emulada?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "¿Seguro que quieres cerrar 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Incapaz de inicializar Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "Imágenes de MO (*.im? *.mdi);;All files (*.*)" + +msgid "Welcome to 86Box!" +msgstr "¡Bienvenido a 86Box!" + +msgid "Internal controller" +msgstr "Controladora interna" + +msgid "Exit" +msgstr "Salir" + +msgid "No ROMs found" +msgstr "No se encontraron ROMs" + +msgid "Do you want to save the settings?" +msgstr "¿Quieres guardar los ajustes?" + +msgid "This will hard reset the emulated machine." +msgstr "Se hará hard reset de la máquina emulada." + +msgid "Save" +msgstr "Guardar" + +msgid "About 86Box" +msgstr "Acerca de 86Box" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Un emulador de ordenadores antigüos\n\nAutores: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, y otros.\n\nLiberado bajo la GNU General Public License versión 2 o posterior. Ver LICENSE para más información." + +msgid "Hardware not available" +msgstr "Hardware no disponible" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Asegúrate de que libpcap está instalado y de que estás en una conexión de red compatible con libpcap." + +msgid "Invalid configuration" +msgstr "Configuración inválida" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " es necesaria para emulación de impresión ESC/P." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " es necesaria para la conversión automática de archivos PostScript a PDF.\n\nCualquier documento enviado a la impresora genérica postScript se guardará como archivo PostScript (.ps)." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " es necesario para salida MIDI FluidSynth." + +msgid "Entering fullscreen mode" +msgstr "Entrando en modo pantalla completa" + +msgid "Don't show this message again" +msgstr "No mostrar más este mensaje" + +msgid "Don't exit" +msgstr "No salir" + +msgid "Reset" +msgstr "Resetear" + +msgid "Don't reset" +msgstr "No resetear" + +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "Imágenes de CD-ROM (*.iso *.cue);;All files (*.*)" + +msgid "%hs Device Configuration" +msgstr "%hs Configuración de Dispositivo" + +msgid "Monitor in sleep mode" +msgstr "Monitor en modo ahorro" + +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "Shaders OpenGL (*.glsl);;All files (*.*)" + +msgid "OpenGL options" +msgstr "Opciones OpenGL" + +msgid "You are loading an unsupported configuration" +msgstr "Estás cargando una configuración no soportada" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "El Filtrado de tipo de CPU basado en máquina seleccionada está deshabilitado para la esta máquina.\n\nEsto hace posible seleccionar una CPU que sea incompatible con esta máquina. Por ello, pueden aparecer incompatibilidader con la BIOS de la máquina u otro software.\n\nActivar este ajuste no está oficialmente soportado y cualquier reporte de fallo puede ser cerrado como inválido." + +msgid "Continue" +msgstr "Continuar" + +msgid "Cassette: %s" +msgstr "Cassette: %s" + +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Imágenes de Cassette (*.pcm *.raw *.wav *.cas);;All files (*.*)" + +msgid "Cartridge %i: %ls" +msgstr "Cartucho %i: %ls" + +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "Imágenes de Cartucho (*.a *.b *.jrc);;All files (*.*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + +msgid "Hard disk (%s)" +msgstr "Disco duro (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "Nunca hubo unidades de CD-ROM MFM/RLL o ESDI" + +msgid "Custom..." +msgstr "A medida..." + +msgid "Custom (large)..." +msgstr "A medida (grande)..." + +msgid "Add New Hard Disk" +msgstr "Añadir Nuevo Disco Duro" + +msgid "Add Existing Hard Disk" +msgstr "Añadir Disco Duro Existente" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "Las imágenes de disco HDI no pueden superar los 4 GB." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Las imágenes de disco no pueden superar los 127 GB." + +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Imágenes de Disco Duro (*.hd? *.im? *.vhd);;All files (*.*)" + +msgid "Unable to read file" +msgstr "No se pudo leer el archivo" + +msgid "Unable to write file" +msgstr "No se pudo escribir el archivo" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "No se soportan las imágenes HDI o HDX con un tamaño de sector diferente a 512." + +msgid "USB is not yet supported" +msgstr "No se soporta aún el USB" + +msgid "Disk image file already exists" +msgstr "La imagen de disco ya existe" + +msgid "Please specify a valid file name." +msgstr "Por favor especifique un nombre de archivo válido." + +msgid "Disk image created" +msgstr "Imagen de disco creada" + +msgid "Make sure the file exists and is readable." +msgstr "Asegúrese de que el archivo existe y es leíble." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Asegúrese de que el archivo en un directorio con permiso de escritura." + +msgid "Disk image too large" +msgstr "Imagen de disco demasiado grande" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Recuerde particionar y formatear la nueva unidad." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "El archivo selecionado será sobreescrito. ¿Está seguro de querer usarlo?" + +msgid "Unsupported disk image" +msgstr "Imagen de disco no soportada" + +msgid "Overwrite" +msgstr "Sobreescribir" + +msgid "Don't overwrite" +msgstr "No sobreescribir" + +msgid "Raw image (.img)" +msgstr "Imagen plana (.img)" + +msgid "HDI image (.hdi)" +msgstr "Imagen HDI (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "Imagen HDX (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD de tamaño fijo (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD de tamaño dinámico (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "VHD diferencial (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Bloques grandes (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Bloques pequeños (512 KB)" + +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "Archivos VHD (*.vhd);;All files (*.*)" + +msgid "Select the parent VHD" +msgstr "Seleccione el VHD padre" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Esto puede deberse a que la imagen padre se modificó después de que la imagen diferencial se crease.\n\nTambién puede ocurrir si las imágenes fueron movidas o copiadas, o por un fallo en el programa que creó este disco.\n\n¿Quiere corregir los registros de tiempo?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Las marcas de tiempo del padre e hijo no coinciden" + +msgid "Could not fix VHD timestamp." +msgstr "No se pudo corregir la marca de tiempo del VHD." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (cluster 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (cluster 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." + +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." + +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." + +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "RPM perfectas" + +msgid "1%% below perfect RPM" +msgstr "1%% por debajo de RPM perfectas" + +msgid "1.5%% below perfect RPM" +msgstr "1.5%% por debajo de RPM perfectas" + +msgid "2%% below perfect RPM" +msgstr "2%% por debajo de RPM perfectas" + +msgid "(System Default)" +msgstr "(Por defecto del sistema)" + diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index c8c8eb574..6d9845457 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -1,1191 +1,1191 @@ -msgid "&Action" -msgstr "&Toiminto" - -msgid "&Keyboard requires capture" -msgstr "&Vaadi näppäimistön kaappaus" - -msgid "&Right CTRL is left ALT" -msgstr "&Oikea CTRL on vasen ALT" - -msgid "&Hard Reset..." -msgstr "&Uudelleenkäynnistys (kylmä)..." - -msgid "&Ctrl+Alt+Del\tCtrl+F12" -msgstr "&Ctrl+Alt+Del\tCtrl+F12" - -msgid "Ctrl+Alt+&Esc" -msgstr "Ctrl+Alt+&Esc" - -msgid "&Pause" -msgstr "&Tauko" - -msgid "E&xit..." -msgstr "&Poistu..." - -msgid "&View" -msgstr "&Näytä" - -msgid "&Hide status bar" -msgstr "&Piilota tilapalkki" - -msgid "Hide &toolbar" -msgstr "Hide &toolbar" - -msgid "&Resizeable window" -msgstr "&Salli koon muuttaminen" - -msgid "R&emember size && position" -msgstr "&Muista koko ja sijainti" - -msgid "Re&nderer" -msgstr "&Renderöijä" - -msgid "&SDL (Software)" -msgstr "&SDL (ohjelmistopohjainen)" - -msgid "SDL (&Hardware)" -msgstr "SDL (&laitteistokiihdytetty)" - -msgid "SDL (&OpenGL)" -msgstr "SDL (&OpenGL)" - -msgid "Open&GL (3.0 Core)" -msgstr "Open&GL (3.0 Core)" - -msgid "&VNC" -msgstr "&VNC" - -msgid "Specify dimensions..." -msgstr "&Määritä koko..." - -msgid "F&orce 4:3 display ratio" -msgstr "Pakota 4:3 näyttösuhde" - -msgid "&Window scale factor" -msgstr "&Ikkunan kokokerroin" - -msgid "&0.5x" -msgstr "&0.5x" - -msgid "&1x" -msgstr "&1x" - -msgid "1.&5x" -msgstr "1.&5x" - -msgid "&2x" -msgstr "&2x" - -msgid "Filter method" -msgstr "&Suodatusmetodi" - -msgid "&Nearest" -msgstr "&Lähin naapuri" - -msgid "&Linear" -msgstr "Li&neaarinen interpolaatio" - -msgid "Hi&DPI scaling" -msgstr "&Suuri DPI-skaalaus" - -msgid "&Fullscreen\tCtrl+Alt+PageUP" -msgstr "&Koko näytön tila\tCtrl+Alt+PageUP" - -msgid "Fullscreen &stretch mode" -msgstr "Koko näytön &skaalaustila" - -msgid "&Full screen stretch" -msgstr "&Venytä koko näyttöön" - -msgid "&4:3" -msgstr "&4:3" - -msgid "&Square pixels (Keep ratio)" -msgstr "&Tasasivuiset kuvapisteet (säilytä kuvasuhde)" - -msgid "&Integer scale" -msgstr "&Kokonaislukuskaalaus" - -msgid "E&GA/(S)VGA settings" -msgstr "&EGA/(S)VGA asetukset" - -msgid "&Inverted VGA monitor" -msgstr "&VGA näyttö käänteisillä väreillä" - -msgid "VGA screen &type" -msgstr "VGA näytön &tyyppi" - -msgid "RGB &Color" -msgstr "RGB &värit" - -msgid "&RGB Grayscale" -msgstr "&RGB harmaasävyinen" - -msgid "&Amber monitor" -msgstr "&Meripihkanvärinen" - -msgid "&Green monitor" -msgstr "V&ihreä" - -msgid "&White monitor" -msgstr "V&alkoinen" - -msgid "Grayscale &conversion type" -msgstr "&Harmaasävymuunnoksen tyyppi" - -msgid "BT&601 (NTSC/PAL)" -msgstr "BT&601 (NTSC/PAL)" - -msgid "BT&709 (HDTV)" -msgstr "BT&709 (HDTV)" - -msgid "&Average" -msgstr "&Keskiarvo" - -msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" -msgstr "CGA/PCjr/Tandy/E&GA/(S)VGA &yliskannaus" - -msgid "Change contrast for &monochrome display" -msgstr "&Muuta harmaavärinäytön kontrastia" - -msgid "&Media" -msgstr "&Media" - -msgid "&Tools" -msgstr "&Työkalut" - -msgid "&Settings..." -msgstr "&Kokoonpano..." - -msgid "&Update status bar icons" -msgstr "&Päivitä tilapalkin kuvakkeita" - -msgid "Take s&creenshot\tCtrl+F11" -msgstr "Ota &kuvakaappaus\tCtrl+F11" - -msgid "&Preferences..." -msgstr "&Sovellusasetukset..." - -msgid "Enable &Discord integration" -msgstr "Käytä &Discord integraatiota" - -msgid "Sound &gain..." -msgstr "&Äänen tulotaso..." - -msgid "Begin trace\tCtrl+T" -msgstr "Aloita jäljitys\tCtrl+T" - -msgid "End trace\tCtrl+T" -msgstr "Lopeta jäljitys\tCtrl+T" - -msgid "&Logging" -msgstr "&Lokitus" - -msgid "Enable BusLogic logs\tCtrl+F4" -msgstr "BusLogic-lokitus päällä\tCtrl+F4" - -msgid "Enable CD-ROM logs\tCtrl+F5" -msgstr "CD-ROM-lokitus päällä\tCtrl+F5" - -msgid "Enable floppy (86F) logs\tCtrl+F6" -msgstr "Levykelokitus (86F) päällä\tCtrl+F6" - -msgid "Enable floppy controller logs\tCtrl+F7" -msgstr "Levykekontrollerin lokitus päällä\tCtrl+F7" - -msgid "Enable IDE logs\tCtrl+F8" -msgstr "IDE-lokitus päällä\tCtrl+F8" - -msgid "Enable Serial Port logs\tCtrl+F3" -msgstr "Sarjaporttilokitus päällä\tCtrl+F3" - -msgid "Enable Network logs\tCtrl+F9" -msgstr "Verkkolokitus päällä\tCtrl+F9" - -msgid "&Log breakpoint\tCtrl+F10" -msgstr "&Kirjaa keskeytyskohdat\tCtrl+F10" - -msgid "Dump &video RAM\tCtrl+F1" -msgstr "Tallenna &videomuistin vedos\tCtrl+F1" - -msgid "&Help" -msgstr "&Ohje" - -msgid "&Documentation..." -msgstr "&Dokumentaatio..." - -msgid "&About 86Box..." -msgstr "&Tietoja 86Box:sta..." - -msgid "&New image..." -msgstr "&Uusi kasettikuva..." - -msgid "&Existing image..." -msgstr "&Olemassaoleva kasettikuva..." - -msgid "Existing image (&Write-protected)..." -msgstr "Olemassaoleva kasettikuva (&kirjoitussuojattu)..." - -msgid "&Record" -msgstr "&Nauhoita" - -msgid "&Play" -msgstr "&Toista" - -msgid "&Rewind to the beginning" -msgstr "Kelaa &alkuun" - -msgid "&Fast forward to the end" -msgstr "Kelaa &loppuun" - -msgid "E&ject" -msgstr "&Poista kasettipesästä" - -msgid "&Image..." -msgstr "&ROM-moduulikuva..." - -msgid "E&xport to 86F..." -msgstr "&Vie 86F-tiedostoon..." - -msgid "&Mute" -msgstr "&Mykistä" - -msgid "E&mpty" -msgstr "&Tyhjä" - -msgid "&Reload previous image" -msgstr "&Lataa edellinen levykuva uudelleen" - -msgid "&Image" -msgstr "L&evykuva" - -msgid "Target &framerate" -msgstr "&Kuvataajuustavoite" - -msgid "&Sync with video" -msgstr "&Synkronisoi videoon" - -msgid "&25 fps" -msgstr "&25 ruutua/s" - -msgid "&30 fps" -msgstr "&30 ruutua/s" - -msgid "&50 fps" -msgstr "&50 ruutua/s" - -msgid "&60 fps" -msgstr "&60 ruutua/s" - -msgid "&75 fps" -msgstr "&75 ruutua/s" - -msgid "&VSync" -msgstr "&VSync" - -msgid "&Select shader..." -msgstr "Valitse varjostin&ohjelma..." - -msgid "&Remove shader" -msgstr "&Poista varjostinohjelma" - -msgid "Preferences" -msgstr "Sovellusasetukset" - -msgid "Sound Gain" -msgstr "Äänen tulotaso" - -msgid "New Image" -msgstr "Uusi levykuva" - -msgid "Settings" -msgstr "Kokoonpano" - -msgid "Specify Main Window Dimensions" -msgstr "Määritä pääikkunan koko" - -msgid "OK" -msgstr "OK" - -msgid "Cancel" -msgstr "Peruuta" - -msgid "Save these settings as &global defaults" -msgstr "Tallenna nämä asetukset &globaaleiksi oletuksiksi" - -msgid "&Default" -msgstr "&Oletus" - -msgid "Language:" -msgstr "Kieli:" - -msgid "Icon set:" -msgstr "Kuvakkeet:" - -msgid "Gain" -msgstr "Taso" - -msgid "File name:" -msgstr "Tiedostonimi:" - -msgid "Disk size:" -msgstr "Levyn koko:" - -msgid "RPM mode:" -msgstr "RPM tila:" - -msgid "Progress:" -msgstr "Edistyminen:" - -msgid "Width:" -msgstr "Leveys:" - -msgid "Height:" -msgstr "Korkeus:" - -msgid "Lock to this size" -msgstr "Lukitse tähän kokoon" - -msgid "Machine type:" -msgstr "Tietokoneen tyyppi:" - -msgid "Machine:" -msgstr "Tietokone:" - -msgid "Configure" -msgstr "Määritys" - -msgid "CPU type:" -msgstr "Suorittimen tyyppi:" - -msgid "Speed:" -msgstr "Nopeus:" - -msgid "FPU:" -msgstr "Apusuoritin:" - -msgid "Wait states:" -msgstr "Odotustilat:" - -msgid "MB" -msgstr "Mt" - -msgid "Memory:" -msgstr "Muisti:" - -msgid "Time synchronization" -msgstr "Kellon synkronointi" - -msgid "Disabled" -msgstr "Ei käytössä" - -msgid "Enabled (local time)" -msgstr "Käytössä (paikallinen)" - -msgid "Enabled (UTC)" -msgstr "Käytössä (UTC)" - -msgid "Dynamic Recompiler" -msgstr "Dynaaminen uudelleenkääntäjä" - -msgid "Video:" -msgstr "Näytönohjain:" - -msgid "Voodoo Graphics" -msgstr "Voodoo-grafiikkasuoritin" - -msgid "Mouse:" -msgstr "Hiiri:" - -msgid "Joystick:" -msgstr "Peliohjain:" - -msgid "Joystick 1..." -msgstr "Peliohjain 1..." - -msgid "Joystick 2..." -msgstr "Peliohjain 2..." - -msgid "Joystick 3..." -msgstr "Peliohjain 3..." - -msgid "Joystick 4..." -msgstr "Peliohjain 4..." - -msgid "Sound card:" -msgstr "Äänikortti:" - -msgid "MIDI Out Device:" -msgstr "MIDI-ulostulo:" - -msgid "MIDI In Device:" -msgstr "MIDI-sisääntulo:" - -msgid "Standalone MPU-401" -msgstr "Erillinen MPU-401" - -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - -msgid "Use FLOAT32 sound" -msgstr "Käytä FLOAT32-ääntä" - -msgid "Network type:" -msgstr "Verkon tyyppi:" - -msgid "PCap device:" -msgstr "PCap-laite:" - -msgid "Network adapter:" -msgstr "Verkkokortti:" - -msgid "LPT1 Device:" -msgstr "LPT1-laite:" - -msgid "LPT2 Device:" -msgstr "LPT2-laite:" - -msgid "LPT3 Device:" -msgstr "LPT3-laite:" - -msgid "Serial port 1" -msgstr "Sarjaportti 1" - -msgid "Serial port 2" -msgstr "Sarjaportti 2" - -msgid "Serial port 3" -msgstr "Sarjaportti 3" - -msgid "Serial port 4" -msgstr "Sarjaportti 4" - -msgid "Parallel port 1" -msgstr "Rinnakkaisportti 1" - -msgid "Parallel port 2" -msgstr "Rinnakkaisportti 2" - -msgid "Parallel port 3" -msgstr "Rinnakkaisportti 3" - -msgid "HD Controller:" -msgstr "Kiintolevyohjain:" - -msgid "FD Controller:" -msgstr "Levykeohjain:" - -msgid "Tertiary IDE Controller" -msgstr "Tertinäärinen IDE-ohjain" - -msgid "Quaternary IDE Controller" -msgstr "Kvaternaarinen IDE-ohjain" - -msgid "SCSI" -msgstr "SCSI" - -msgid "Controller 1:" -msgstr "Ohjain 1:" - -msgid "Controller 2:" -msgstr "Ohjain 2:" - -msgid "Controller 3:" -msgstr "Ohjain 3:" - -msgid "Controller 4:" -msgstr "Ohjain 4:" - -msgid "Cassette" -msgstr "Kasettiasema" - -msgid "Hard disks:" -msgstr "Kiintolevyt:" - -msgid "&New..." -msgstr "&Uusi..." - -msgid "&Existing..." -msgstr "&Olemassaoleva..." - -msgid "&Remove" -msgstr "&Poista" - -msgid "Bus:" -msgstr "Väylä:" - -msgid "Channel:" -msgstr "Kanava:" - -msgid "ID:" -msgstr "ID:" - -msgid "&Specify..." -msgstr "&Määritä..." - -msgid "Sectors:" -msgstr "Sektorit:" - -msgid "Heads:" -msgstr "Päät:" - -msgid "Cylinders:" -msgstr "Sylinterit:" - -msgid "Size (MB):" -msgstr "Koko (Mt):" - -msgid "Type:" -msgstr "Tyyppi:" - -msgid "Image Format:" -msgstr "Tiedostomuoto:" - -msgid "Block Size:" -msgstr "Lohkon koko:" - -msgid "Floppy drives:" -msgstr "Levykeasemat:" - -msgid "Turbo timings" -msgstr "Turbo-ajoitukset" - -msgid "Check BPB" -msgstr "Tarkista BPB" - -msgid "CD-ROM drives:" -msgstr "CD-ROM-asemat:" - -msgid "MO drives:" -msgstr "Magneettisoptiset asemat (MO):" - -msgid "ZIP drives:" -msgstr "ZIP-asemat:" - -msgid "ZIP 250" -msgstr "ZIP 250" - -msgid "ISA RTC:" -msgstr "ISA-RTC (kello):" - -msgid "ISA Memory Expansion" -msgstr "ISA-muistilaajennus" - -msgid "Card 1:" -msgstr "Kortti 1:" - -msgid "Card 2:" -msgstr "Kortti 2:" - -msgid "Card 3:" -msgstr "Kortti 3:" - -msgid "Card 4:" -msgstr "Kortti 4:" - -msgid "ISABugger device" -msgstr "ISABugger-laite" - -msgid "POST card" -msgstr "POST-kortti" - -msgid "FONT_SIZE" -msgstr "9" - -msgid "FONT_NAME" -msgstr "Segoe UI" - -msgid "86Box" -msgstr "86Box" - -msgid "Error" -msgstr "Virhe" - -msgid "Fatal error" -msgstr "Vakava virhe" - -msgid "" -msgstr "" - -msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." -msgstr "Paina CTRL+ALT+PAGE DOWN palataksesi ikkunoituun tilaan." - -msgid "Speed" -msgstr "Nopeus" - -msgid "ZIP %03i %i (%s): %ls" -msgstr "ZIP %03i %i (%s): %ls" - -msgid "ZIP images (*.im? *.zdi)" -msgstr "ZIP-levykuvat (*.im? *.zdi)" - -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "86Box ei löytänyt käyttökelpoisia ROM-tiedostoja.\n\nVoit ladata ROM-paketin ja purkaa sen \"roms\" hakemistoon." - -msgid "(empty)" -msgstr "(tyhjä)" - -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "ZIP-levykuvat (*.im? *.zdi);;Kaikki tiedostot (*.*)" - -msgid "Turbo" -msgstr "Turbo" - -msgid "On" -msgstr "Päällä" - -msgid "Off" -msgstr "Pois" - -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "Kaikki levykuvat (*.86f *.dsk *.flp *.im? *.*fd?);;Perussektorilevykuvat (*.dsk *.flp *.im? *.img *.*fd?);;Pintalevykuvat (*.86f)" - -msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "Konetta \"%hs\" ei voi käyttää puuttuvien ROM-tiedostojen vuoksi. Vaihdetaan käyttökelpoiseen koneeseen." - -msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "Näytönohjainta \"%hs\" ei voi käyttää puuttuvien ROM-tiedostojen vuoksi. Vaihdetaan käyttökelpoiseen näytönohjaimeen." - -msgid "Machine" -msgstr "Tietokone" - -msgid "Display" -msgstr "Näyttö" - -msgid "Input devices" -msgstr "Syöttölaitteet" - -msgid "Sound" -msgstr "Ääni" - -msgid "Network" -msgstr "Verkko" - -msgid "Ports (COM & LPT)" -msgstr "Portit (COM & LPT)" - -msgid "Storage controllers" -msgstr "Tallennusohjaimet" - -msgid "Hard disks" -msgstr "Kiintolevyt" - -msgid "Floppy & CD-ROM drives" -msgstr "Levyke ja CD-ROM" - -msgid "Other removable devices" -msgstr "Muut tallennuslaitteet" - -msgid "Other peripherals" -msgstr "Muut oheislaitteet" - -msgid "Surface images (*.86f)" -msgstr "Pintalevykuvat (*.86f)" - -msgid "Click to capture mouse" -msgstr "Kaappaa hiiri klikkaamalla" - -msgid "Press F8+F12 to release mouse" -msgstr "Paina F8+F12 vapauttaaksesi hiiren" - -msgid "Press F8+F12 or middle button to release mouse" -msgstr "Paina F8+F12 tai keskipainiketta vapauttaaksesi hiiren" - -msgid "Unable to initialize FluidSynth" -msgstr "FluidSynth:in alustus epäonnistui" - -msgid "Bus" -msgstr "Väylä" - -msgid "File" -msgstr "Tiedosto" - -msgid "C" -msgstr "C" - -msgid "H" -msgstr "H" - -msgid "S" -msgstr "S" - -msgid "KB" -msgstr "kt" - -msgid "Could not initialize the video renderer." -msgstr "Video-renderöijän alustus epäonnistui" - -msgid "Default" -msgstr "Oletus" - -msgid "%i Wait state(s)" -msgstr "%i odotustilaa" - -msgid "Type" -msgstr "Tyyppi" - -msgid "Failed to set up PCap" -msgstr "PCap-asennus epäonnistui" - -msgid "No PCap devices found" -msgstr "PCap-laitteita ei löytynyt" - -msgid "Invalid PCap device" -msgstr "Virheellinen PCap-laite" - -msgid "Standard 2-button joystick(s)" -msgstr "Standardi 2-painikkeinen peliohjain/-ohjaimet" - -msgid "Standard 4-button joystick" -msgstr "Standardi 4-painikkeinen peliohjain" - -msgid "Standard 6-button joystick" -msgstr "Standardi 6-painikkeinen peliohjain" - -msgid "Standard 8-button joystick" -msgstr "Standardi 8-painikkeinen peliohjain" - -msgid "CH Flightstick Pro" -msgstr "CH Flightstick Pro" - -msgid "Microsoft SideWinder Pad" -msgstr "Microsoft SideWinder Pad" - -msgid "Thrustmaster Flight Control System" -msgstr "Thrustmaster Flight Control System" - -msgid "None" -msgstr "Ei mikään" - -msgid "Unable to load keyboard accelerators." -msgstr "Näppäinkiihdyttimien lataus epäonnistui" - -msgid "Unable to register raw input." -msgstr "Raakasyötteen rekisteröinti epäonnistui" - -msgid "%u" -msgstr "%u" - -msgid "%u MB (CHS: %i, %i, %i)" -msgstr "%u Mt (CHS: %i, %i, %i)" - -msgid "Floppy %i (%s): %ls" -msgstr "Levyke %i (%s): %ls" - -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "Kaikki levykuvat (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Kehittyneet sektorilevykuvat (*.imd *.json *.td0);;Perussektorilevykuvat (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux-levykuvat (*.fdi);;Pintalevykuvat (*.86f *.mfm);;Kaikki tiedostot (*.*)" - -msgid "Unable to initialize FreeType" -msgstr "FreeType:n alustus epäonnistui" - -msgid "Unable to initialize SDL, SDL2.dll is required" -msgstr "SDL:n alustus epäonnistui. Tarvitaan SDL2.dll" - -msgid "Are you sure you want to hard reset the emulated machine?" -msgstr "Oletko varma, että haluat käynnistää emuloidun tietokoneen uudelleen?" - -msgid "Are you sure you want to exit 86Box?" -msgstr "Haluatko varmasti sulkea 86Box:in?" - -msgid "Unable to initialize Ghostscript" -msgstr "Ghostscript:in alustus epäonnistui" - -msgid "MO %i (%ls): %ls" -msgstr "MO %i (%ls): %ls" - -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "MO-levykuvat (*.im? *.mdi);;Kaikki tiedostot (*.*)" - -msgid "Welcome to 86Box!" -msgstr "Tervetuloa 86Box:iin!" - -msgid "Internal controller" -msgstr "Sisäinen ohjain" - -msgid "Exit" -msgstr "Poistu" - -msgid "No ROMs found" -msgstr "ROM-tiedostoja ei löytynyt" - -msgid "Do you want to save the settings?" -msgstr "Tallennetaanko asetukset?" - -msgid "This will hard reset the emulated machine." -msgstr "Tämä käynnistää emuloidun tietokoneen uudelleen." - -msgid "Save" -msgstr "Tallenna" - -msgid "About 86Box" -msgstr "Tietoja 86Box:sta" - -msgid "86Box v" -msgstr "86Box v" - -msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "Vanhojen tietokoneiden emulaattori\n\nTekijät: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho ja muut.\n\nJulkaistu GNU General Public License 2. version tai myöhemmän alaisena. Tarkempia tietoja LICENSE-tiedostossa." - -msgid "Hardware not available" -msgstr "Laitteisto ei ole saatavilla" - -msgid "WinPcap" -msgstr "WinPcap" - -msgid "libpcap" -msgstr "libpcap" - -msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." -msgstr "Varmista, että libpcap on asennettu ja että verkkoyhteytesi on libpcap-yhteensopiva." - -msgid "Invalid configuration" -msgstr "Virheelliset määritykset" - -msgid "freetype.dll" -msgstr "freetype.dll" - -msgid "libfreetype" -msgstr "libfreetype" - -msgid " is required for ESC/P printer emulation." -msgstr " vaaditaan ESC/P-tulostimen emuloimiseksi." - -msgid "gsdll32.dll" -msgstr "gsdll32.dll" - -msgid "libgs" -msgstr "libgs" - -msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." -msgstr " vaaditaan PostScript-tiedostojen automaattiseen muuntamiseen PDF-tiedostoiksi.\n\nKaikki geneeriselle PostScript-tulostimelle lähetetyt asiakirjat tallennetaan PostScript (.ps) -tiedostoina." - -msgid "libfluidsynth.dll" -msgstr "libfluidsynth.dll" - -msgid "libfluidsynth" -msgstr "libfluidsynth" - -msgid " is required for FluidSynth MIDI output." -msgstr " vaaditaan FluidSynth MIDI-ulostuloa varten." - -msgid "Entering fullscreen mode" -msgstr "Siirrytään koko näytön tilaan" - -msgid "Don't show this message again" -msgstr "Älä näytä tätä viestiä uudelleen" - -msgid "Don't exit" -msgstr "Älä poistu" - -msgid "Reset" -msgstr "Käynnistä uudelleen" - -msgid "Don't reset" -msgstr "Älä käynnistä uudelleen" - -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "CD-ROM-levykuvat (*.iso *.cue);;Kaikki tiedostot (*.*)" - -msgid "%hs Device Configuration" -msgstr "%hs - Laitteen määritykset" - -msgid "Monitor in sleep mode" -msgstr "Näyttö lepotilassa" - -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "OpenGL-varjostinohjelmat (*.glsl);;Kaikki tiedostot (*.*)" - -msgid "OpenGL options" -msgstr "OpenGL-asetukset" - -msgid "You are loading an unsupported configuration" -msgstr "Olet lataamassa ei-tuettuja määrittelyjä" - -msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "Valittuun tietokoneeseen perustuva suoritintyypin suodatus ei ole käytössä tällä emuloidulla koneella.\n\nTämä mahdollistaa muutoin yhteensopimattoman suorittimen valinnan kyseisen tietokoneen kanssa. Voit kuitenkin kohdata ongelmia tietokoneen BIOS:in tai muun ohjelmiston kanssa.\n\nTämän asetuksen käyttö ei ole virallisesti tuettua ja kaikki tehdyt virheraportit voidaan sulkea epäpätevinä." - -msgid "Continue" -msgstr "Jatka" - -msgid "Cassette: %s" -msgstr "Kasetti: %s" - -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Kasetti-tiedostot (*.pcm *.raw *.wav *.cas);;Kaikki tiedostot (*.*)" - -msgid "Cartridge %i: %ls" -msgstr "ROM-moduuli %i: %ls" - -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "ROM-moduulikuvat (*.a *.b *.jrc);;Kaikki tiedostot (*.*)" - -msgid "Error initializing renderer" -msgstr "Virhe renderöijän alustuksessa" - -msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "OpenGL (3.0 Core) renderöijän alustus epäonnistui. Käytä toista renderöijää." - -msgid "Resume execution" -msgstr "Resume execution" - -msgid "Pause execution" -msgstr "Pause execution" - -msgid "Press Ctrl+Alt+Del" -msgstr "Press Ctrl+Alt+Del" - -msgid "Press Ctrl+Alt+Esc" -msgstr "Press Ctrl+Alt+Esc" - -msgid "Hard reset" -msgstr "Hard reset" - -msgid "ACPI shutdown" -msgstr "ACPI shutdown" - -msgid "Hard disk (%s)" -msgstr "Kiintolevy (%s)" - -msgid "%01i:%01i" -msgstr "%01i:%01i" - -msgid "%01i" -msgstr "%01i" - -msgid "MFM/RLL or ESDI CD-ROM drives never existed" -msgstr "MFM/RLL tai ESDI CD-ROM asemia ei ole koskaan ollut olemassa" - -msgid "Custom..." -msgstr "Mukautettu..." - -msgid "Custom (large)..." -msgstr "Mukautettu (suuri)..." - -msgid "Add New Hard Disk" -msgstr "Lisää uusi kiintolevy" - -msgid "Add Existing Hard Disk" -msgstr "Lisää olemassaoleva kiintolevy" - -msgid "HDI disk images cannot be larger than 4 GB." -msgstr "HDI levykuvan suurin mahdollinen koko on 4 Gt." - -msgid "Disk images cannot be larger than 127 GB." -msgstr "Levykuvien suurin mahdollinen koko on 127 Gt." - -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Kiintolevykuvat (*.hd? *.im? *.vhd);;Kaikki tiedostot (*.*)" - -msgid "Unable to read file" -msgstr "Tiedostoa ei voi lukea" - -msgid "Unable to write file" -msgstr "Tiedostoon ei voi kirjoittaa" - -msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "HDI- ja HDX-levykuvien ainoa tuettu sektorikoko on 512" - -msgid "USB is not yet supported" -msgstr "USB-tukea ei vielä ole" - -msgid "Disk image file already exists" -msgstr "Levykuva on jo olemassa" - -msgid "Please specify a valid file name." -msgstr "Anna kelvollinen tiedostonimi." - -msgid "Disk image created" -msgstr "Levykuva luotu" - -msgid "Make sure the file exists and is readable." -msgstr "Varmista, että tiedosto on olemassa ja lukukelpoinen" - -msgid "Make sure the file is being saved to a writable directory." -msgstr "Varmista, että tiedoston tallennuskansioon on kirjoitusoikeus" - -msgid "Disk image too large" -msgstr "Liian suuri levykuva" - -msgid "Remember to partition and format the newly-created drive." -msgstr "Muista osioida ja alustaa juuri luomasi asema." - -msgid "The selected file will be overwritten. Are you sure you want to use it?" -msgstr "Valittu tiedosto ylikirjoitetaan. Oletko varma, että haluat käyttää sitä?" - -msgid "Unsupported disk image" -msgstr "Levynkuvaa ei tueta" - -msgid "Overwrite" -msgstr "Ylikirjoita" - -msgid "Don't overwrite" -msgstr "Älä ylikirjoita" - -msgid "Raw image (.img)" -msgstr "Raaka levykuva (.img)" - -msgid "HDI image (.hdi)" -msgstr "HDI-levykuva (.hdi)" - -msgid "HDX image (.hdx)" -msgstr "HDX-levykuva (.hdx)" - -msgid "Fixed-size VHD (.vhd)" -msgstr "Kiinteä VHD (.vhd)" - -msgid "Dynamic-size VHD (.vhd)" -msgstr "Dynaaminen VHD (.vhd)" - -msgid "Differencing VHD (.vhd)" -msgstr "Differentiaalinen VHD (.vhd)" - -msgid "Large blocks (2 MB)" -msgstr "Suuret lohkot (2 Mt)" - -msgid "Small blocks (512 KB)" -msgstr "Pienet lohkot (512 kt)" - -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "VHD-tiedostot (*.vhd);;Kaikki tiedostot (*.*)" - -msgid "Select the parent VHD" -msgstr "Valitse ylätason VHD" - -msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" -msgstr "Tämä saattaa tarkoittaa, että ylätason levykuvaa on muokattu differentiaalisen levykuvan luonnin jälkeen.\n\nNäin voi käydä myös, jos levykuvatiedostoja on siirretty tai kopioitu. Lisäksi syynä voi olla levyn luoneessa sovelluksessa oleva ohjelmistovirhe.\n\nKorjataanko aikaleimat?" - -msgid "Parent and child disk timestamps do not match" -msgstr "Ylä- ja alatason levyjen aikaleimat eivät täsmää" - -msgid "Could not fix VHD timestamp." -msgstr "VHD aikaleimaa ei pystytty korjaamaan." - -msgid "%01i:%02i" -msgstr "%01i:%02i" - -msgid "MFM/RLL" -msgstr "MFM/RLL" - -msgid "XTA" -msgstr "XTA" - -msgid "ESDI" -msgstr "ESDI" - -msgid "IDE" -msgstr "IDE" - -msgid "ATAPI" -msgstr "ATAPI" - -msgid "MFM/RLL (%01i:%01i)" -msgstr "MFM/RLL (%01i:%01i)" - -msgid "XTA (%01i:%01i)" -msgstr "XTA (%01i:%01i)" - -msgid "ESDI (%01i:%01i)" -msgstr "ESDI (%01i:%01i)" - -msgid "IDE (%01i:%01i)" -msgstr "IDE (%01i:%01i)" - -msgid "ATAPI (%01i:%01i)" -msgstr "ATAPI (%01i:%01i)" - -msgid "SCSI (%01i:%02i)" -msgstr "SCSI (%01i:%02i)" - -msgid "CD-ROM %i (%s): %s" -msgstr "CD-ROM %i (%s): %s" - -msgid "160 kB" -msgstr "160 kt" - -msgid "180 kB" -msgstr "180 kt" - -msgid "320 kB" -msgstr "320 kt" - -msgid "360 kB" -msgstr "360 kt" - -msgid "640 kB" -msgstr "640 kt" - -msgid "720 kB" -msgstr "720 kt" - -msgid "1.2 MB" -msgstr "1.2 Mt" - -msgid "1.25 MB" -msgstr "1.25 Mt" - -msgid "1.44 MB" -msgstr "1.44 Mt" - -msgid "DMF (cluster 1024)" -msgstr "DMF (lohko 1024)" - -msgid "DMF (cluster 2048)" -msgstr "DMF (lohko 2048)" - -msgid "2.88 MB" -msgstr "2.88 Mt" - -msgid "ZIP 100" -msgstr "ZIP 100" - -msgid "3.5\" 128Mb M.O. (ISO 10090)" -msgstr "3.5\" 128Mt M.O. (ISO 10090)" - -msgid "3.5\" 230Mb M.O. (ISO 13963)" -msgstr "3.5\" 230Mt M.O. (ISO 13963)" - -msgid "3.5\" 540Mb M.O. (ISO 15498)" -msgstr "3.5\" 540Mt M.O. (ISO 15498)" - -msgid "3.5\" 640Mb M.O. (ISO 15498)" -msgstr "3.5\" 640Mt M.O. (ISO 15498)" - -msgid "3.5\" 1.3Gb M.O. (GigaMO)" -msgstr "3.5\" 1.3Gt M.O. (GigaMO)" - -msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5\" 2.3Gt M.O. (GigaMO 2)" - -msgid "5.25\" 600Mb M.O." -msgstr "5.25\" 600Mt M.O." - -msgid "5.25\" 650Mb M.O." -msgstr "5.25\" 650Mt M.O." - -msgid "5.25\" 1Gb M.O." -msgstr "5.25\" 1Gt M.O." - -msgid "5.25\" 1.3Gb M.O." -msgstr "5.25\" 1.3Gt M.O." - -msgid "Perfect RPM" -msgstr "Täydellinen RPM" - -msgid "1%% below perfect RPM" -msgstr "1%% alle täydellisen RPM:n" - -msgid "1.5%% below perfect RPM" -msgstr "1.5%% alle täydellisen RPM:n" - -msgid "2%% below perfect RPM" -msgstr "2%% alle täydellisen RPM:n" - -msgid "(System Default)" -msgstr "(Järjestelmän oletus)" - +msgid "&Action" +msgstr "&Toiminto" + +msgid "&Keyboard requires capture" +msgstr "&Vaadi näppäimistön kaappaus" + +msgid "&Right CTRL is left ALT" +msgstr "&Oikea CTRL on vasen ALT" + +msgid "&Hard Reset..." +msgstr "&Uudelleenkäynnistys (kylmä)..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Tauko" + +msgid "E&xit..." +msgstr "&Poistu..." + +msgid "&View" +msgstr "&Näytä" + +msgid "&Hide status bar" +msgstr "&Piilota tilapalkki" + +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + +msgid "&Resizeable window" +msgstr "&Salli koon muuttaminen" + +msgid "R&emember size && position" +msgstr "&Muista koko ja sijainti" + +msgid "Re&nderer" +msgstr "&Renderöijä" + +msgid "&SDL (Software)" +msgstr "&SDL (ohjelmistopohjainen)" + +msgid "SDL (&Hardware)" +msgstr "SDL (&laitteistokiihdytetty)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 Core)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "&Määritä koko..." + +msgid "F&orce 4:3 display ratio" +msgstr "Pakota 4:3 näyttösuhde" + +msgid "&Window scale factor" +msgstr "&Ikkunan kokokerroin" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "&Suodatusmetodi" + +msgid "&Nearest" +msgstr "&Lähin naapuri" + +msgid "&Linear" +msgstr "Li&neaarinen interpolaatio" + +msgid "Hi&DPI scaling" +msgstr "&Suuri DPI-skaalaus" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Koko näytön tila\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Koko näytön &skaalaustila" + +msgid "&Full screen stretch" +msgstr "&Venytä koko näyttöön" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Tasasivuiset kuvapisteet (säilytä kuvasuhde)" + +msgid "&Integer scale" +msgstr "&Kokonaislukuskaalaus" + +msgid "E&GA/(S)VGA settings" +msgstr "&EGA/(S)VGA asetukset" + +msgid "&Inverted VGA monitor" +msgstr "&VGA näyttö käänteisillä väreillä" + +msgid "VGA screen &type" +msgstr "VGA näytön &tyyppi" + +msgid "RGB &Color" +msgstr "RGB &värit" + +msgid "&RGB Grayscale" +msgstr "&RGB harmaasävyinen" + +msgid "&Amber monitor" +msgstr "&Meripihkanvärinen" + +msgid "&Green monitor" +msgstr "V&ihreä" + +msgid "&White monitor" +msgstr "V&alkoinen" + +msgid "Grayscale &conversion type" +msgstr "&Harmaasävymuunnoksen tyyppi" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Keskiarvo" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "CGA/PCjr/Tandy/E&GA/(S)VGA &yliskannaus" + +msgid "Change contrast for &monochrome display" +msgstr "&Muuta harmaavärinäytön kontrastia" + +msgid "&Media" +msgstr "&Media" + +msgid "&Tools" +msgstr "&Työkalut" + +msgid "&Settings..." +msgstr "&Kokoonpano..." + +msgid "&Update status bar icons" +msgstr "&Päivitä tilapalkin kuvakkeita" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Ota &kuvakaappaus\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Sovellusasetukset..." + +msgid "Enable &Discord integration" +msgstr "Käytä &Discord integraatiota" + +msgid "Sound &gain..." +msgstr "&Äänen tulotaso..." + +msgid "Begin trace\tCtrl+T" +msgstr "Aloita jäljitys\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Lopeta jäljitys\tCtrl+T" + +msgid "&Logging" +msgstr "&Lokitus" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "BusLogic-lokitus päällä\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "CD-ROM-lokitus päällä\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Levykelokitus (86F) päällä\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Levykekontrollerin lokitus päällä\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "IDE-lokitus päällä\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Sarjaporttilokitus päällä\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Verkkolokitus päällä\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Kirjaa keskeytyskohdat\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "Tallenna &videomuistin vedos\tCtrl+F1" + +msgid "&Help" +msgstr "&Ohje" + +msgid "&Documentation..." +msgstr "&Dokumentaatio..." + +msgid "&About 86Box..." +msgstr "&Tietoja 86Box:sta..." + +msgid "&New image..." +msgstr "&Uusi kasettikuva..." + +msgid "&Existing image..." +msgstr "&Olemassaoleva kasettikuva..." + +msgid "Existing image (&Write-protected)..." +msgstr "Olemassaoleva kasettikuva (&kirjoitussuojattu)..." + +msgid "&Record" +msgstr "&Nauhoita" + +msgid "&Play" +msgstr "&Toista" + +msgid "&Rewind to the beginning" +msgstr "Kelaa &alkuun" + +msgid "&Fast forward to the end" +msgstr "Kelaa &loppuun" + +msgid "E&ject" +msgstr "&Poista kasettipesästä" + +msgid "&Image..." +msgstr "&ROM-moduulikuva..." + +msgid "E&xport to 86F..." +msgstr "&Vie 86F-tiedostoon..." + +msgid "&Mute" +msgstr "&Mykistä" + +msgid "E&mpty" +msgstr "&Tyhjä" + +msgid "&Reload previous image" +msgstr "&Lataa edellinen levykuva uudelleen" + +msgid "&Image" +msgstr "L&evykuva" + +msgid "Target &framerate" +msgstr "&Kuvataajuustavoite" + +msgid "&Sync with video" +msgstr "&Synkronisoi videoon" + +msgid "&25 fps" +msgstr "&25 ruutua/s" + +msgid "&30 fps" +msgstr "&30 ruutua/s" + +msgid "&50 fps" +msgstr "&50 ruutua/s" + +msgid "&60 fps" +msgstr "&60 ruutua/s" + +msgid "&75 fps" +msgstr "&75 ruutua/s" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "Valitse varjostin&ohjelma..." + +msgid "&Remove shader" +msgstr "&Poista varjostinohjelma" + +msgid "Preferences" +msgstr "Sovellusasetukset" + +msgid "Sound Gain" +msgstr "Äänen tulotaso" + +msgid "New Image" +msgstr "Uusi levykuva" + +msgid "Settings" +msgstr "Kokoonpano" + +msgid "Specify Main Window Dimensions" +msgstr "Määritä pääikkunan koko" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Peruuta" + +msgid "Save these settings as &global defaults" +msgstr "Tallenna nämä asetukset &globaaleiksi oletuksiksi" + +msgid "&Default" +msgstr "&Oletus" + +msgid "Language:" +msgstr "Kieli:" + +msgid "Icon set:" +msgstr "Kuvakkeet:" + +msgid "Gain" +msgstr "Taso" + +msgid "File name:" +msgstr "Tiedostonimi:" + +msgid "Disk size:" +msgstr "Levyn koko:" + +msgid "RPM mode:" +msgstr "RPM tila:" + +msgid "Progress:" +msgstr "Edistyminen:" + +msgid "Width:" +msgstr "Leveys:" + +msgid "Height:" +msgstr "Korkeus:" + +msgid "Lock to this size" +msgstr "Lukitse tähän kokoon" + +msgid "Machine type:" +msgstr "Tietokoneen tyyppi:" + +msgid "Machine:" +msgstr "Tietokone:" + +msgid "Configure" +msgstr "Määritys" + +msgid "CPU type:" +msgstr "Suorittimen tyyppi:" + +msgid "Speed:" +msgstr "Nopeus:" + +msgid "FPU:" +msgstr "Apusuoritin:" + +msgid "Wait states:" +msgstr "Odotustilat:" + +msgid "MB" +msgstr "Mt" + +msgid "Memory:" +msgstr "Muisti:" + +msgid "Time synchronization" +msgstr "Kellon synkronointi" + +msgid "Disabled" +msgstr "Ei käytössä" + +msgid "Enabled (local time)" +msgstr "Käytössä (paikallinen)" + +msgid "Enabled (UTC)" +msgstr "Käytössä (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Dynaaminen uudelleenkääntäjä" + +msgid "Video:" +msgstr "Näytönohjain:" + +msgid "Voodoo Graphics" +msgstr "Voodoo-grafiikkasuoritin" + +msgid "Mouse:" +msgstr "Hiiri:" + +msgid "Joystick:" +msgstr "Peliohjain:" + +msgid "Joystick 1..." +msgstr "Peliohjain 1..." + +msgid "Joystick 2..." +msgstr "Peliohjain 2..." + +msgid "Joystick 3..." +msgstr "Peliohjain 3..." + +msgid "Joystick 4..." +msgstr "Peliohjain 4..." + +msgid "Sound card:" +msgstr "Äänikortti:" + +msgid "MIDI Out Device:" +msgstr "MIDI-ulostulo:" + +msgid "MIDI In Device:" +msgstr "MIDI-sisääntulo:" + +msgid "Standalone MPU-401" +msgstr "Erillinen MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Käytä FLOAT32-ääntä" + +msgid "Network type:" +msgstr "Verkon tyyppi:" + +msgid "PCap device:" +msgstr "PCap-laite:" + +msgid "Network adapter:" +msgstr "Verkkokortti:" + +msgid "LPT1 Device:" +msgstr "LPT1-laite:" + +msgid "LPT2 Device:" +msgstr "LPT2-laite:" + +msgid "LPT3 Device:" +msgstr "LPT3-laite:" + +msgid "Serial port 1" +msgstr "Sarjaportti 1" + +msgid "Serial port 2" +msgstr "Sarjaportti 2" + +msgid "Serial port 3" +msgstr "Sarjaportti 3" + +msgid "Serial port 4" +msgstr "Sarjaportti 4" + +msgid "Parallel port 1" +msgstr "Rinnakkaisportti 1" + +msgid "Parallel port 2" +msgstr "Rinnakkaisportti 2" + +msgid "Parallel port 3" +msgstr "Rinnakkaisportti 3" + +msgid "HD Controller:" +msgstr "Kiintolevyohjain:" + +msgid "FD Controller:" +msgstr "Levykeohjain:" + +msgid "Tertiary IDE Controller" +msgstr "Tertinäärinen IDE-ohjain" + +msgid "Quaternary IDE Controller" +msgstr "Kvaternaarinen IDE-ohjain" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Ohjain 1:" + +msgid "Controller 2:" +msgstr "Ohjain 2:" + +msgid "Controller 3:" +msgstr "Ohjain 3:" + +msgid "Controller 4:" +msgstr "Ohjain 4:" + +msgid "Cassette" +msgstr "Kasettiasema" + +msgid "Hard disks:" +msgstr "Kiintolevyt:" + +msgid "&New..." +msgstr "&Uusi..." + +msgid "&Existing..." +msgstr "&Olemassaoleva..." + +msgid "&Remove" +msgstr "&Poista" + +msgid "Bus:" +msgstr "Väylä:" + +msgid "Channel:" +msgstr "Kanava:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Määritä..." + +msgid "Sectors:" +msgstr "Sektorit:" + +msgid "Heads:" +msgstr "Päät:" + +msgid "Cylinders:" +msgstr "Sylinterit:" + +msgid "Size (MB):" +msgstr "Koko (Mt):" + +msgid "Type:" +msgstr "Tyyppi:" + +msgid "Image Format:" +msgstr "Tiedostomuoto:" + +msgid "Block Size:" +msgstr "Lohkon koko:" + +msgid "Floppy drives:" +msgstr "Levykeasemat:" + +msgid "Turbo timings" +msgstr "Turbo-ajoitukset" + +msgid "Check BPB" +msgstr "Tarkista BPB" + +msgid "CD-ROM drives:" +msgstr "CD-ROM-asemat:" + +msgid "MO drives:" +msgstr "Magneettisoptiset asemat (MO):" + +msgid "ZIP drives:" +msgstr "ZIP-asemat:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA-RTC (kello):" + +msgid "ISA Memory Expansion" +msgstr "ISA-muistilaajennus" + +msgid "Card 1:" +msgstr "Kortti 1:" + +msgid "Card 2:" +msgstr "Kortti 2:" + +msgid "Card 3:" +msgstr "Kortti 3:" + +msgid "Card 4:" +msgstr "Kortti 4:" + +msgid "ISABugger device" +msgstr "ISABugger-laite" + +msgid "POST card" +msgstr "POST-kortti" + +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Virhe" + +msgid "Fatal error" +msgstr "Vakava virhe" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Paina CTRL+ALT+PAGE DOWN palataksesi ikkunoituun tilaan." + +msgid "Speed" +msgstr "Nopeus" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.im? *.zdi)" +msgstr "ZIP-levykuvat (*.im? *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box ei löytänyt käyttökelpoisia ROM-tiedostoja.\n\nVoit ladata ROM-paketin ja purkaa sen \"roms\" hakemistoon." + +msgid "(empty)" +msgstr "(tyhjä)" + +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "ZIP-levykuvat (*.im? *.zdi);;Kaikki tiedostot (*.*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Päällä" + +msgid "Off" +msgstr "Pois" + +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "Kaikki levykuvat (*.86f *.dsk *.flp *.im? *.*fd?);;Perussektorilevykuvat (*.dsk *.flp *.im? *.img *.*fd?);;Pintalevykuvat (*.86f)" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Konetta \"%hs\" ei voi käyttää puuttuvien ROM-tiedostojen vuoksi. Vaihdetaan käyttökelpoiseen koneeseen." + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Näytönohjainta \"%hs\" ei voi käyttää puuttuvien ROM-tiedostojen vuoksi. Vaihdetaan käyttökelpoiseen näytönohjaimeen." + +msgid "Machine" +msgstr "Tietokone" + +msgid "Display" +msgstr "Näyttö" + +msgid "Input devices" +msgstr "Syöttölaitteet" + +msgid "Sound" +msgstr "Ääni" + +msgid "Network" +msgstr "Verkko" + +msgid "Ports (COM & LPT)" +msgstr "Portit (COM & LPT)" + +msgid "Storage controllers" +msgstr "Tallennusohjaimet" + +msgid "Hard disks" +msgstr "Kiintolevyt" + +msgid "Floppy & CD-ROM drives" +msgstr "Levyke ja CD-ROM" + +msgid "Other removable devices" +msgstr "Muut tallennuslaitteet" + +msgid "Other peripherals" +msgstr "Muut oheislaitteet" + +msgid "Surface images (*.86f)" +msgstr "Pintalevykuvat (*.86f)" + +msgid "Click to capture mouse" +msgstr "Kaappaa hiiri klikkaamalla" + +msgid "Press F8+F12 to release mouse" +msgstr "Paina F8+F12 vapauttaaksesi hiiren" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Paina F8+F12 tai keskipainiketta vapauttaaksesi hiiren" + +msgid "Unable to initialize FluidSynth" +msgstr "FluidSynth:in alustus epäonnistui" + +msgid "Bus" +msgstr "Väylä" + +msgid "File" +msgstr "Tiedosto" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "kt" + +msgid "Could not initialize the video renderer." +msgstr "Video-renderöijän alustus epäonnistui" + +msgid "Default" +msgstr "Oletus" + +msgid "%i Wait state(s)" +msgstr "%i odotustilaa" + +msgid "Type" +msgstr "Tyyppi" + +msgid "Failed to set up PCap" +msgstr "PCap-asennus epäonnistui" + +msgid "No PCap devices found" +msgstr "PCap-laitteita ei löytynyt" + +msgid "Invalid PCap device" +msgstr "Virheellinen PCap-laite" + +msgid "Standard 2-button joystick(s)" +msgstr "Standardi 2-painikkeinen peliohjain/-ohjaimet" + +msgid "Standard 4-button joystick" +msgstr "Standardi 4-painikkeinen peliohjain" + +msgid "Standard 6-button joystick" +msgstr "Standardi 6-painikkeinen peliohjain" + +msgid "Standard 8-button joystick" +msgstr "Standardi 8-painikkeinen peliohjain" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Ei mikään" + +msgid "Unable to load keyboard accelerators." +msgstr "Näppäinkiihdyttimien lataus epäonnistui" + +msgid "Unable to register raw input." +msgstr "Raakasyötteen rekisteröinti epäonnistui" + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u Mt (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Levyke %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "Kaikki levykuvat (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Kehittyneet sektorilevykuvat (*.imd *.json *.td0);;Perussektorilevykuvat (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux-levykuvat (*.fdi);;Pintalevykuvat (*.86f *.mfm);;Kaikki tiedostot (*.*)" + +msgid "Unable to initialize FreeType" +msgstr "FreeType:n alustus epäonnistui" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "SDL:n alustus epäonnistui. Tarvitaan SDL2.dll" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Oletko varma, että haluat käynnistää emuloidun tietokoneen uudelleen?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Haluatko varmasti sulkea 86Box:in?" + +msgid "Unable to initialize Ghostscript" +msgstr "Ghostscript:in alustus epäonnistui" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "MO-levykuvat (*.im? *.mdi);;Kaikki tiedostot (*.*)" + +msgid "Welcome to 86Box!" +msgstr "Tervetuloa 86Box:iin!" + +msgid "Internal controller" +msgstr "Sisäinen ohjain" + +msgid "Exit" +msgstr "Poistu" + +msgid "No ROMs found" +msgstr "ROM-tiedostoja ei löytynyt" + +msgid "Do you want to save the settings?" +msgstr "Tallennetaanko asetukset?" + +msgid "This will hard reset the emulated machine." +msgstr "Tämä käynnistää emuloidun tietokoneen uudelleen." + +msgid "Save" +msgstr "Tallenna" + +msgid "About 86Box" +msgstr "Tietoja 86Box:sta" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Vanhojen tietokoneiden emulaattori\n\nTekijät: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho ja muut.\n\nJulkaistu GNU General Public License 2. version tai myöhemmän alaisena. Tarkempia tietoja LICENSE-tiedostossa." + +msgid "Hardware not available" +msgstr "Laitteisto ei ole saatavilla" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Varmista, että libpcap on asennettu ja että verkkoyhteytesi on libpcap-yhteensopiva." + +msgid "Invalid configuration" +msgstr "Virheelliset määritykset" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " vaaditaan ESC/P-tulostimen emuloimiseksi." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " vaaditaan PostScript-tiedostojen automaattiseen muuntamiseen PDF-tiedostoiksi.\n\nKaikki geneeriselle PostScript-tulostimelle lähetetyt asiakirjat tallennetaan PostScript (.ps) -tiedostoina." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " vaaditaan FluidSynth MIDI-ulostuloa varten." + +msgid "Entering fullscreen mode" +msgstr "Siirrytään koko näytön tilaan" + +msgid "Don't show this message again" +msgstr "Älä näytä tätä viestiä uudelleen" + +msgid "Don't exit" +msgstr "Älä poistu" + +msgid "Reset" +msgstr "Käynnistä uudelleen" + +msgid "Don't reset" +msgstr "Älä käynnistä uudelleen" + +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "CD-ROM-levykuvat (*.iso *.cue);;Kaikki tiedostot (*.*)" + +msgid "%hs Device Configuration" +msgstr "%hs - Laitteen määritykset" + +msgid "Monitor in sleep mode" +msgstr "Näyttö lepotilassa" + +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "OpenGL-varjostinohjelmat (*.glsl);;Kaikki tiedostot (*.*)" + +msgid "OpenGL options" +msgstr "OpenGL-asetukset" + +msgid "You are loading an unsupported configuration" +msgstr "Olet lataamassa ei-tuettuja määrittelyjä" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "Valittuun tietokoneeseen perustuva suoritintyypin suodatus ei ole käytössä tällä emuloidulla koneella.\n\nTämä mahdollistaa muutoin yhteensopimattoman suorittimen valinnan kyseisen tietokoneen kanssa. Voit kuitenkin kohdata ongelmia tietokoneen BIOS:in tai muun ohjelmiston kanssa.\n\nTämän asetuksen käyttö ei ole virallisesti tuettua ja kaikki tehdyt virheraportit voidaan sulkea epäpätevinä." + +msgid "Continue" +msgstr "Jatka" + +msgid "Cassette: %s" +msgstr "Kasetti: %s" + +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Kasetti-tiedostot (*.pcm *.raw *.wav *.cas);;Kaikki tiedostot (*.*)" + +msgid "Cartridge %i: %ls" +msgstr "ROM-moduuli %i: %ls" + +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "ROM-moduulikuvat (*.a *.b *.jrc);;Kaikki tiedostot (*.*)" + +msgid "Error initializing renderer" +msgstr "Virhe renderöijän alustuksessa" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderöijän alustus epäonnistui. Käytä toista renderöijää." + +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + +msgid "Hard disk (%s)" +msgstr "Kiintolevy (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL tai ESDI CD-ROM asemia ei ole koskaan ollut olemassa" + +msgid "Custom..." +msgstr "Mukautettu..." + +msgid "Custom (large)..." +msgstr "Mukautettu (suuri)..." + +msgid "Add New Hard Disk" +msgstr "Lisää uusi kiintolevy" + +msgid "Add Existing Hard Disk" +msgstr "Lisää olemassaoleva kiintolevy" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "HDI levykuvan suurin mahdollinen koko on 4 Gt." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Levykuvien suurin mahdollinen koko on 127 Gt." + +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Kiintolevykuvat (*.hd? *.im? *.vhd);;Kaikki tiedostot (*.*)" + +msgid "Unable to read file" +msgstr "Tiedostoa ei voi lukea" + +msgid "Unable to write file" +msgstr "Tiedostoon ei voi kirjoittaa" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "HDI- ja HDX-levykuvien ainoa tuettu sektorikoko on 512" + +msgid "USB is not yet supported" +msgstr "USB-tukea ei vielä ole" + +msgid "Disk image file already exists" +msgstr "Levykuva on jo olemassa" + +msgid "Please specify a valid file name." +msgstr "Anna kelvollinen tiedostonimi." + +msgid "Disk image created" +msgstr "Levykuva luotu" + +msgid "Make sure the file exists and is readable." +msgstr "Varmista, että tiedosto on olemassa ja lukukelpoinen" + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Varmista, että tiedoston tallennuskansioon on kirjoitusoikeus" + +msgid "Disk image too large" +msgstr "Liian suuri levykuva" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Muista osioida ja alustaa juuri luomasi asema." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Valittu tiedosto ylikirjoitetaan. Oletko varma, että haluat käyttää sitä?" + +msgid "Unsupported disk image" +msgstr "Levynkuvaa ei tueta" + +msgid "Overwrite" +msgstr "Ylikirjoita" + +msgid "Don't overwrite" +msgstr "Älä ylikirjoita" + +msgid "Raw image (.img)" +msgstr "Raaka levykuva (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDI-levykuva (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDX-levykuva (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "Kiinteä VHD (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "Dynaaminen VHD (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Differentiaalinen VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Suuret lohkot (2 Mt)" + +msgid "Small blocks (512 KB)" +msgstr "Pienet lohkot (512 kt)" + +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "VHD-tiedostot (*.vhd);;Kaikki tiedostot (*.*)" + +msgid "Select the parent VHD" +msgstr "Valitse ylätason VHD" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Tämä saattaa tarkoittaa, että ylätason levykuvaa on muokattu differentiaalisen levykuvan luonnin jälkeen.\n\nNäin voi käydä myös, jos levykuvatiedostoja on siirretty tai kopioitu. Lisäksi syynä voi olla levyn luoneessa sovelluksessa oleva ohjelmistovirhe.\n\nKorjataanko aikaleimat?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Ylä- ja alatason levyjen aikaleimat eivät täsmää" + +msgid "Could not fix VHD timestamp." +msgstr "VHD aikaleimaa ei pystytty korjaamaan." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kt" + +msgid "180 kB" +msgstr "180 kt" + +msgid "320 kB" +msgstr "320 kt" + +msgid "360 kB" +msgstr "360 kt" + +msgid "640 kB" +msgstr "640 kt" + +msgid "720 kB" +msgstr "720 kt" + +msgid "1.2 MB" +msgstr "1.2 Mt" + +msgid "1.25 MB" +msgstr "1.25 Mt" + +msgid "1.44 MB" +msgstr "1.44 Mt" + +msgid "DMF (cluster 1024)" +msgstr "DMF (lohko 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (lohko 2048)" + +msgid "2.88 MB" +msgstr "2.88 Mt" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mt M.O. (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mt M.O. (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mt M.O. (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mt M.O. (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gt M.O. (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gt M.O. (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mt M.O." + +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mt M.O." + +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gt M.O." + +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gt M.O." + +msgid "Perfect RPM" +msgstr "Täydellinen RPM" + +msgid "1%% below perfect RPM" +msgstr "1%% alle täydellisen RPM:n" + +msgid "1.5%% below perfect RPM" +msgstr "1.5%% alle täydellisen RPM:n" + +msgid "2%% below perfect RPM" +msgstr "2%% alle täydellisen RPM:n" + +msgid "(System Default)" +msgstr "(Järjestelmän oletus)" + diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po index a7fb72391..966347122 100644 --- a/src/qt/languages/fr-FR.po +++ b/src/qt/languages/fr-FR.po @@ -1,1191 +1,1191 @@ -msgid "&Action" -msgstr "&Action" - -msgid "&Keyboard requires capture" -msgstr "&Capturer le clavier" - -msgid "&Right CTRL is left ALT" -msgstr "CTRL &Droite devient ALT Gauche" - -msgid "&Hard Reset..." -msgstr "&Hard Reset..." - -msgid "&Ctrl+Alt+Del\tCtrl+F12" -msgstr "&Ctrl+Alt+Del\tCtrl+F12" - -msgid "Ctrl+Alt+&Esc" -msgstr "Ctrl+Alt+&Esc" - -msgid "&Pause" -msgstr "&Pause" - -msgid "E&xit..." -msgstr "&Quitter..." - -msgid "&View" -msgstr "&Vue" - -msgid "&Hide status bar" -msgstr "&Masquer la barre de status" - -msgid "Hide &toolbar" -msgstr "Hide &toolbar" - -msgid "&Resizeable window" -msgstr "Fenètre &Retaillable" - -msgid "R&emember size && position" -msgstr "S&auvegarder taille && position" - -msgid "Re&nderer" -msgstr "Moteur de &rendu vidéo" - -msgid "&SDL (Software)" -msgstr "&SDL (Logiciel)" - -msgid "SDL (&Hardware)" -msgstr "SDL (&Materiel)" - -msgid "SDL (&OpenGL)" -msgstr "SDL (&OpenGL)" - -msgid "Open&GL (3.0 Core)" -msgstr "Open&GL (3.0 Core)" - -msgid "&VNC" -msgstr "&VNC" - -msgid "Specify dimensions..." -msgstr "Specifier dimensions..." - -msgid "F&orce 4:3 display ratio" -msgstr "F&orcer 4:3" - -msgid "&Window scale factor" -msgstr "&Echelle facteur" - -msgid "&0.5x" -msgstr "&0.5x" - -msgid "&1x" -msgstr "&1x" - -msgid "1.&5x" -msgstr "1.&5x" - -msgid "&2x" -msgstr "&2x" - -msgid "Filter method" -msgstr "Methode Filtre" - -msgid "&Nearest" -msgstr "&Plus proche" - -msgid "&Linear" -msgstr "&Lineaire" - -msgid "Hi&DPI scaling" -msgstr "Mise à l'échelle Hi&DPI" - -msgid "&Fullscreen\tCtrl+Alt+PageUP" -msgstr "&Plein Ecran\tCtrl+Alt+PageUP" - -msgid "Fullscreen &stretch mode" -msgstr "Mode &Elargi plein écran" - -msgid "&Full screen stretch" -msgstr "&Plein écran étiré" - -msgid "&4:3" -msgstr "&4:3" - -msgid "&Square pixels (Keep ratio)" -msgstr "pixels &Carrés(Keep ratio)" - -msgid "&Integer scale" -msgstr "Echelle &Entière" - -msgid "E&GA/(S)VGA settings" -msgstr "Réglages E&GA/(S)VGA" - -msgid "&Inverted VGA monitor" -msgstr "Moniteur VGA &Inversé" - -msgid "VGA screen &type" -msgstr "&Type Ecran VGA" - -msgid "RGB &Color" -msgstr "RGB &Couleur" - -msgid "&RGB Grayscale" -msgstr "&RGB Ton de Gris" - -msgid "&Amber monitor" -msgstr "Moniteur &Ambre" - -msgid "&Green monitor" -msgstr "Moniteur &Vert" - -msgid "&White monitor" -msgstr "Moniteur &Blanc" - -msgid "Grayscale &conversion type" -msgstr "Grayscale &conversion type" - -msgid "BT&601 (NTSC/PAL)" -msgstr "BT&601 (NTSC/PAL)" - -msgid "BT&709 (HDTV)" -msgstr "BT&709 (HDTV)" - -msgid "&Average" -msgstr "&Moyenne" - -msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" -msgstr "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" - -msgid "Change contrast for &monochrome display" -msgstr "Modifier contraste affichage &monochrome" - -msgid "&Media" -msgstr "&Media" - -msgid "&Tools" -msgstr "Ou&tils" - -msgid "&Settings..." -msgstr "&Réglages..." - -msgid "&Update status bar icons" -msgstr "Mettre à jour la barre de stat&us" - -msgid "Take s&creenshot\tCtrl+F11" -msgstr "Copie &Ecran\tCtrl+F11" - -msgid "&Preferences..." -msgstr "&Préférences..." - -msgid "Enable &Discord integration" -msgstr "Activer intégration &Discord" - -msgid "Sound &gain..." -msgstr "&Gain Son..." - -msgid "Begin trace\tCtrl+T" -msgstr "Démarrer traces\tCtrl+T" - -msgid "End trace\tCtrl+T" -msgstr "Finir traces\tCtrl+T" - -msgid "&Logging" -msgstr "&Journalisation" - -msgid "Enable BusLogic logs\tCtrl+F4" -msgstr "Activer journaux de BusLogic\tCtrl+F4" - -msgid "Enable CD-ROM logs\tCtrl+F5" -msgstr "Activer journaux du CD-ROM\tCtrl+F5" - -msgid "Enable floppy (86F) logs\tCtrl+F6" -msgstr "Activer journaux des disquettes (86F)s\tCtrl+F6" - -msgid "Enable floppy controller logs\tCtrl+F7" -msgstr "Activer journaux du contrôleur de disquettes\tCtrl+F7" - -msgid "Enable IDE logs\tCtrl+F8" -msgstr "Activer journaux de IDE\tCtrl+F8" - -msgid "Enable Serial Port logs\tCtrl+F3" -msgstr "Activer journaux de port série\tCtrl+F3" - -msgid "Enable Network logs\tCtrl+F9" -msgstr "Activer journaux du réseau\tCtrl+F9" - -msgid "&Log breakpoint\tCtrl+F10" -msgstr "&Point d'arrêt du journal\tCtrl+F10" - -msgid "Dump &video RAM\tCtrl+F1" -msgstr "Vidage de la mémoire &vidéo\tCtrl+F1" - -msgid "&Help" -msgstr "&Aide" - -msgid "&Documentation..." -msgstr "&Documentation..." - -msgid "&About 86Box..." -msgstr "&A Propos de 86Box..." - -msgid "&New image..." -msgstr "&Nouvelle image..." - -msgid "&Existing image..." -msgstr "Image &Existante..." - -msgid "Existing image (&Write-protected)..." -msgstr "Image Existante(&Lecture seule)..." - -msgid "&Record" -msgstr "En®istrer" - -msgid "&Play" -msgstr "&Jouer" - -msgid "&Rewind to the beginning" -msgstr "&Revenir au debut" - -msgid "&Fast forward to the end" -msgstr "Aller à la &Fin" - -msgid "E&ject" -msgstr "E&jecter" - -msgid "&Image..." -msgstr "&Image..." - -msgid "E&xport to 86F..." -msgstr "E&xport vers 86F..." - -msgid "&Mute" -msgstr "&Couper" - -msgid "E&mpty" -msgstr "E&jecter" - -msgid "&Reload previous image" -msgstr "&Recharger image précedente" - -msgid "&Image" -msgstr "&Image" - -msgid "Target &framerate" -msgstr "&Taux de rafraîchissement cible" - -msgid "&Sync with video" -msgstr "&Synchronisation avec la vidéo" - -msgid "&25 fps" -msgstr "&25 images par seconde" - -msgid "&30 fps" -msgstr "&30 images par seconde" - -msgid "&50 fps" -msgstr "&50 images par seconde" - -msgid "&60 fps" -msgstr "&60 images par seconde" - -msgid "&75 fps" -msgstr "&75 images par seconde" - -msgid "&VSync" -msgstr "Synchronisation &verticale" - -msgid "&Select shader..." -msgstr "Sé&lectionnez le shader..." - -msgid "&Remove shader" -msgstr "S&upprimer le shader" - -msgid "Preferences" -msgstr "Préférences" - -msgid "Sound Gain" -msgstr "Gain son" - -msgid "New Image" -msgstr "Nouvelle image" - -msgid "Settings" -msgstr "Réglages" - -msgid "Specify Main Window Dimensions" -msgstr "Spécifier le détournement de la fenêtre principale" - -msgid "OK" -msgstr "OK" - -msgid "Cancel" -msgstr "Annuler" - -msgid "Save these settings as &global defaults" -msgstr "Sauvegarder ces paramètres comme valeurs par défaut &globales" - -msgid "&Default" -msgstr "&Défaut" - -msgid "Language:" -msgstr "Langue:" - -msgid "Icon set:" -msgstr "Ensemble d'icônes:" - -msgid "Gain" -msgstr "Gain" - -msgid "File name:" -msgstr "Nom fichier:" - -msgid "Disk size:" -msgstr "Taille disque:" - -msgid "RPM mode:" -msgstr "Mode RPM:" - -msgid "Progress:" -msgstr "Progrès:" - -msgid "Width:" -msgstr "Largeur:" - -msgid "Height:" -msgstr "Hauteur:" - -msgid "Lock to this size" -msgstr "Verrouiller à cette taille" - -msgid "Machine type:" -msgstr "Type de machine:" - -msgid "Machine:" -msgstr "Machine:" - -msgid "Configure" -msgstr "Configurer" - -msgid "CPU type:" -msgstr "Type du processeur:" - -msgid "Speed:" -msgstr "Vitesse:" - -msgid "FPU:" -msgstr "FPU:" - -msgid "Wait states:" -msgstr "États d'attente:" - -msgid "MB" -msgstr "Mo" - -msgid "Memory:" -msgstr "Mémoire:" - -msgid "Time synchronization" -msgstr "Synchronisation du temps" - -msgid "Disabled" -msgstr "Désactivé" - -msgid "Enabled (local time)" -msgstr "Activé (heure locale)" - -msgid "Enabled (UTC)" -msgstr "Activé (UTC)" - -msgid "Dynamic Recompiler" -msgstr "Recompilateur dynamique" - -msgid "Video:" -msgstr "Vidéo:" - -msgid "Voodoo Graphics" -msgstr "Graphique Voodoo" - -msgid "Mouse:" -msgstr "Souris:" - -msgid "Joystick:" -msgstr "Manette de commande:" - -msgid "Joystick 1..." -msgstr "Manette 1..." - -msgid "Joystick 2..." -msgstr "Manette 2..." - -msgid "Joystick 3..." -msgstr "Manette 3..." - -msgid "Joystick 4..." -msgstr "Manette 4..." - -msgid "Sound card:" -msgstr "Carte son:" - -msgid "MIDI Out Device:" -msgstr "Sortie MIDI:" - -msgid "MIDI In Device:" -msgstr "Entrée MIDI:" - -msgid "Standalone MPU-401" -msgstr "MPU-401 autonome" - -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - -msgid "Use FLOAT32 sound" -msgstr "Utiliser le son FLOAT32" - -msgid "Network type:" -msgstr "Type de réseau:" - -msgid "PCap device:" -msgstr "Dispositif PCap:" - -msgid "Network adapter:" -msgstr "Adaptateur de réseau:" - -msgid "LPT1 Device:" -msgstr "Dispositif LPT1:" - -msgid "LPT2 Device:" -msgstr "Dispositif LPT2:" - -msgid "LPT3 Device:" -msgstr "Dispositif LPT3:" - -msgid "Serial port 1" -msgstr "Port série 1" - -msgid "Serial port 2" -msgstr "Port série 2" - -msgid "Serial port 3" -msgstr "Port série 3" - -msgid "Serial port 4" -msgstr "Port série 4" - -msgid "Parallel port 1" -msgstr "Port parallèle 1" - -msgid "Parallel port 2" -msgstr "Port parallèle 2" - -msgid "Parallel port 3" -msgstr "Port parallèle 3" - -msgid "HD Controller:" -msgstr "Contrôleur HD:" - -msgid "FD Controller:" -msgstr "Contrôleur FD:" - -msgid "Tertiary IDE Controller" -msgstr "Contrôleur IDE tertiaire" - -msgid "Quaternary IDE Controller" -msgstr "Contrôleur IDE quaternair" - -msgid "SCSI" -msgstr "SCSI" - -msgid "Controller 1:" -msgstr "Contrôleur 1:" - -msgid "Controller 2:" -msgstr "Contrôleur 2:" - -msgid "Controller 3:" -msgstr "Contrôleur 3:" - -msgid "Controller 4:" -msgstr "Contrôleur 4:" - -msgid "Cassette" -msgstr "Cassette" - -msgid "Hard disks:" -msgstr "Disques durs:" - -msgid "&New..." -msgstr "&Nouveau..." - -msgid "&Existing..." -msgstr "&Existant..." - -msgid "&Remove" -msgstr "&Supprimer" - -msgid "Bus:" -msgstr "Bus:" - -msgid "Channel:" -msgstr "Canal:" - -msgid "ID:" -msgstr "ID:" - -msgid "&Specify..." -msgstr "&Spécifier..." - -msgid "Sectors:" -msgstr "Secteurs:" - -msgid "Heads:" -msgstr "Têtes:" - -msgid "Cylinders:" -msgstr "Cylindres:" - -msgid "Size (MB):" -msgstr "Taille (Mo):" - -msgid "Type:" -msgstr "Type:" - -msgid "Image Format:" -msgstr "Format Image:" - -msgid "Block Size:" -msgstr "Taille du bloc:" - -msgid "Floppy drives:" -msgstr "Lecteurs de disquettes:" - -msgid "Turbo timings" -msgstr "Turbo" - -msgid "Check BPB" -msgstr "Vérifier BPB" - -msgid "CD-ROM drives:" -msgstr "Lecterus CD-ROM:" - -msgid "MO drives:" -msgstr "Lecteurs magnéto-optiques:" - -msgid "ZIP drives:" -msgstr "Lecteurs ZIP:" - -msgid "ZIP 250" -msgstr "ZIP 250" - -msgid "ISA RTC:" -msgstr "Horloge temps réel ISA:" - -msgid "ISA Memory Expansion" -msgstr "Expansion de la mémoire ISA" - -msgid "Card 1:" -msgstr "Carte 1:" - -msgid "Card 2:" -msgstr "Carte 2:" - -msgid "Card 3:" -msgstr "Carte 3:" - -msgid "Card 4:" -msgstr "Carte 4:" - -msgid "ISABugger device" -msgstr "Dispositif ISABugger" - -msgid "POST card" -msgstr "Carte POST" - -msgid "FONT_SIZE" -msgstr "9" - -msgid "FONT_NAME" -msgstr "Segoe UI" - -msgid "86Box" -msgstr "86Box" - -msgid "Error" -msgstr "Erreur" - -msgid "Fatal error" -msgstr "Erreur fatale" - -msgid "" -msgstr "" - -msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." -msgstr "Appuyez sur CTRL+ALT+PAGE ↓ pour revenir au mode fenêtré." - -msgid "Speed" -msgstr "Vitesse" - -msgid "ZIP %03i %i (%s): %ls" -msgstr "ZIP %03i %i (%s): %ls" - -msgid "ZIP images (*.im? *.zdi)" -msgstr "Images ZIP (*.im? *.zdi)" - -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "86Box n'a pas pu trouver d'images ROM utilisables.\n\nS'il vous plait, téléchargez un ensemble ROM et extrayez-le dans le répertoire \"roms\"." - -msgid "(empty)" -msgstr "(vide)" - -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "Images ZIP (*.im? *.zdi);;Tous les fichiers (*.*)" - -msgid "Turbo" -msgstr "Turbo" - -msgid "On" -msgstr "Activé" - -msgid "Off" -msgstr "Désactivé" - -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "Tous les images (*.86f *.dsk *.flp *.im? *.*fd?);;Images basiques du secteur (*.dsk *.flp *.im? *.img *.*fd?);;Images de la surface (*.86f)" - -msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "La machine \"%hs\" n'est pas disponible en raison de l'absence de ROMs dans le répertoire roms/machines. Basculer vers une machine disponible." - -msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "La carte vidéo \"%hs\" n'est pas disponible en raison de l'absence de ROMs dans le répertoire roms/video. Basculer vers une carte vidéo disponible." - -msgid "Machine" -msgstr "Machine" - -msgid "Display" -msgstr "Affichage" - -msgid "Input devices" -msgstr "Dispositifs d'entrée" - -msgid "Sound" -msgstr "Son" - -msgid "Network" -msgstr "Réseau" - -msgid "Ports (COM & LPT)" -msgstr "Ports (COM et LPT)" - -msgid "Storage controllers" -msgstr "Contrôleurs de stockage" - -msgid "Hard disks" -msgstr "Disques durs" - -msgid "Floppy & CD-ROM drives" -msgstr "Lecteurs de disquette et CD-ROM" - -msgid "Other removable devices" -msgstr "Autres dispositifs amovibles" - -msgid "Other peripherals" -msgstr "Autres périfériques" - -msgid "Surface images (*.86f)" -msgstr "Images de surface (*.86f)" - -msgid "Click to capture mouse" -msgstr "Cliquer pour capturer la souris" - -msgid "Press F8+F12 to release mouse" -msgstr "Appuyer sur F8+F12 pour libérer la souris" - -msgid "Press F8+F12 or middle button to release mouse" -msgstr "Appuyer sur F8+F12 ou le bouton central pour libérer la souris" - -msgid "Unable to initialize FluidSynth" -msgstr "Impossible d'initialiser FluidSynth" - -msgid "Bus" -msgstr "Bus" - -msgid "File" -msgstr "File" - -msgid "C" -msgstr "C" - -msgid "H" -msgstr "T" - -msgid "S" -msgstr "S" - -msgid "KB" -msgstr "Ko" - -msgid "Could not initialize the video renderer." -msgstr "Impossible d'initialiser le moteur de rendu vidéo." - -msgid "Default" -msgstr "Défaut" - -msgid "%i Wait state(s)" -msgstr "%i état(s) d'attente" - -msgid "Type" -msgstr "Type" - -msgid "Failed to set up PCap" -msgstr "Impossible d'initialiser PCap" - -msgid "No PCap devices found" -msgstr "Aucun dispositif PCap trouvé" - -msgid "Invalid PCap device" -msgstr "Dispositif PCap non valide" - -msgid "Standard 2-button joystick(s)" -msgstr "Manette(s) standard avec 2 boutons" - -msgid "Standard 4-button joystick" -msgstr "Manette standard avec 4 boutons" - -msgid "Standard 6-button joystick" -msgstr "Manette standard avec 6 boutons" - -msgid "Standard 8-button joystick" -msgstr "Manette standard avec 6 boutons" - -msgid "CH Flightstick Pro" -msgstr "CH Flightstick Pro" - -msgid "Microsoft SideWinder Pad" -msgstr "Microsoft SideWinder Pad" - -msgid "Thrustmaster Flight Control System" -msgstr "Système de contrôle de vol Thrustmaster" - -msgid "None" -msgstr "Aucun" - -msgid "Unable to load keyboard accelerators." -msgstr "Impossible de charger les accélérateurs de clavier." - -msgid "Unable to register raw input." -msgstr "Impossible de charger l'entrée raw." - -msgid "%u" -msgstr "%u" - -msgid "%u MB (CHS: %i, %i, %i)" -msgstr "%u Mo (CTS: %i, %i, %i)" - -msgid "Floppy %i (%s): %ls" -msgstr "Disquette %i (%s): %ls" - -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "Toutes les images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Images du secteur avancés (*.imd *.json *.td0);;Images du secteur basiques (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Images du flux (*.fdi);;Images de surface (*.86f *.mfm);;Tous les fichiers (*.*)" - -msgid "Unable to initialize FreeType" -msgstr "Impossible d'initialiser FreeType" - -msgid "Unable to initialize SDL, SDL2.dll is required" -msgstr "Impossible d'initialiser SDL, SDL2.dll est nécessaire" - -msgid "Are you sure you want to hard reset the emulated machine?" -msgstr "Etes-vous sûr de vouloir réinitialiser la machine émulée ?" - -msgid "Are you sure you want to exit 86Box?" -msgstr "Etes-vous sûr de vouloir quitter 86Box?" - -msgid "Unable to initialize Ghostscript" -msgstr "Impossible d'initialiser Ghostscript" - -msgid "MO %i (%ls): %ls" -msgstr "Magnéto-optique %i (%ls): %ls" - -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "Images magnéto-optiques (*.im? *.mdi);;Tous les fichiers (*.*)" - -msgid "Welcome to 86Box!" -msgstr "Bienvenue dans 86Box !" - -msgid "Internal controller" -msgstr "Côntrolleur interne" - -msgid "Exit" -msgstr "Sortir" - -msgid "No ROMs found" -msgstr "Pas de ROMs trouvées" - -msgid "Do you want to save the settings?" -msgstr "Voulez-vous sauvegarder les paramètres ?" - -msgid "This will hard reset the emulated machine." -msgstr "Cela entraînera la réinitialisation complète de la machine émulée." - -msgid "Save" -msgstr "Sauvegarder" - -msgid "About 86Box" -msgstr "À propos de 86Box" - -msgid "86Box v" -msgstr "86Box v" - -msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "Un émulateur de vieux ordinateurs\n\nAuteurs: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nLibéré sous la licence GNU General Public License version 2 ou ultérieure. Pour plus d'informations, voir le fichier LICENSE." - -msgid "Hardware not available" -msgstr "Matériel non disponible" - -msgid "WinPcap" -msgstr "WinPcap" - -msgid "libpcap" -msgstr "libpcap" - -msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." -msgstr "Assurez-vous que libpcap est installé et que vou utilisez une connexion réseau compatible avec libpcap." - -msgid "Invalid configuration" -msgstr "Configuration non valide" - -msgid "freetype.dll" -msgstr "freetype.dll" - -msgid "libfreetype" -msgstr "libfreetype" - -msgid " is required for ESC/P printer emulation." -msgstr " est nécessaire pour l'émulation de l'imprimante ESC/P." - -msgid "gsdll32.dll" -msgstr "gsdll32.dll" - -msgid "libgs" -msgstr "libgs" - -msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." -msgstr " est nécessair pour la conversion automatique des fichiers PostScript dans PDF.\n\nTous les documents envoyés à l'imprimante générique PostScript seront sauvés comme des fichiers PostScript (.ps)." - -msgid "libfluidsynth.dll" -msgstr "libfluidsynth.dll" - -msgid "libfluidsynth" -msgstr "libfluidsynth" - -msgid " is required for FluidSynth MIDI output." -msgstr " est nécessaire pour la sortie MIDI FluidSynth." - -msgid "Entering fullscreen mode" -msgstr "Entrer en mode plein écran" - -msgid "Don't show this message again" -msgstr "Ne pas montrer ce message à nouveau" - -msgid "Don't exit" -msgstr "Ne pas sortir" - -msgid "Reset" -msgstr "Réinitialiser" - -msgid "Don't reset" -msgstr "Ne pas réinitialiser" - -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "Images CD-ROM (*.iso *.cue);;Tous les fichiers (*.*)" - -msgid "%hs Device Configuration" -msgstr "Configuration du dispositif %hs" - -msgid "Monitor in sleep mode" -msgstr "Moniteur en mode veille" - -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "Shaders OpenGL (*.glsl);;Tous les fichiers (*.*)" - -msgid "OpenGL options" -msgstr "Options OpenGL" - -msgid "You are loading an unsupported configuration" -msgstr "Vous chargez une configuration non prise en charge" - -msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "La filtrage du type du processeur sur la base de la machine sélectionné est désactivé pur cette machine émulée.\n\nCela permet de sélectionner une processeur que est sinon incompatible avec la machine sélectionné. Cependant, il pourrait y avoir des incompatibilités avec le BIOS de la machine ou autres logiciels.\n\nL'activatione de cette configuration non est officiellement prise en charge et tout rapport de bogue peut être fermé comme étant invalide." - -msgid "Continue" -msgstr "Continuer" - -msgid "Cassette: %s" -msgstr "Cassette: %s" - -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Images cassette (*.pcm *.raw *.wav *.cas);;Tous les fichiers (*.*)" - -msgid "Cartridge %i: %ls" -msgstr "Cartouche %i: %ls" - -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "Images cartouche (*.a *.b *.jrc);;Tous les fichiers (*.*)" - -msgid "Error initializing renderer" -msgstr "Error initializing renderer" - -msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." - -msgid "Resume execution" -msgstr "Resume execution" - -msgid "Pause execution" -msgstr "Pause execution" - -msgid "Press Ctrl+Alt+Del" -msgstr "Press Ctrl+Alt+Del" - -msgid "Press Ctrl+Alt+Esc" -msgstr "Press Ctrl+Alt+Esc" - -msgid "Hard reset" -msgstr "Hard reset" - -msgid "ACPI shutdown" -msgstr "ACPI shutdown" - -msgid "Hard disk (%s)" -msgstr "Disque dur (%s)" - -msgid "%01i:%01i" -msgstr "%01i:%01i" - -msgid "%01i" -msgstr "%01i" - -msgid "MFM/RLL or ESDI CD-ROM drives never existed" -msgstr "Les lecteurs de CD-ROM MFM/RLL ou ESDI n'ont jamais existé" - -msgid "Custom..." -msgstr "Personnalisé..." - -msgid "Custom (large)..." -msgstr "Personnalisé (grand)..." - -msgid "Add New Hard Disk" -msgstr "Ajouter un nouveau disque dur" - -msgid "Add Existing Hard Disk" -msgstr "Ajouter un disque dur existant" - -msgid "HDI disk images cannot be larger than 4 GB." -msgstr "Les images de disque HDI ne peuvent pas avoir une taille supériure à Go." - -msgid "Disk images cannot be larger than 127 GB." -msgstr "Les images de disque ne peuvent pas avoir un taille supérieure à 127 Go." - -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Images de dique dur (*.hd? *.im? *.vhd);;Tous les fichiers (*.*)" - -msgid "Unable to read file" -msgstr "Impossible de lire le fichier" - -msgid "Unable to write file" -msgstr "Impossible d'écrire le fichier" - -msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "Les images HDI ou HDX avec une taille de secteur différente de 512 non sont pas prises en charge." - -msgid "USB is not yet supported" -msgstr "USB n'est pas encore pris en charge." - -msgid "Disk image file already exists" -msgstr "Le fichier de l'image disque existe déjà." - -msgid "Please specify a valid file name." -msgstr "Veuillez spécifier un nom de fichier valide." - -msgid "Disk image created" -msgstr "Image de disque créée" - -msgid "Make sure the file exists and is readable." -msgstr "Assurez-vous que le fichier existe et est lisible." - -msgid "Make sure the file is being saved to a writable directory." -msgstr "Assurez-vous que le fichier en cours d'enregistrement se trouve dans un répertoire accessible en écriture." - -msgid "Disk image too large" -msgstr "Image disque trop grande" - -msgid "Remember to partition and format the newly-created drive." -msgstr "N'oubliez pas de partitionner et de formater le nouveau disque créé." - -msgid "The selected file will be overwritten. Are you sure you want to use it?" -msgstr "Le fichier sélectionné sera écrasé. Etes-vous sûr de vouloir l'utiliser?" - -msgid "Unsupported disk image" -msgstr "Image disque non prise en charge" - -msgid "Overwrite" -msgstr "Écraser" - -msgid "Don't overwrite" -msgstr "Ne pas écraser" - -msgid "Raw image (.img)" -msgstr "Image brute (.img)" - -msgid "HDI image (.hdi)" -msgstr "Image HDI (.hdi)" - -msgid "HDX image (.hdx)" -msgstr "Image HDX (.hdx)" - -msgid "Fixed-size VHD (.vhd)" -msgstr "VHD à taille fixe (.vhd)" - -msgid "Dynamic-size VHD (.vhd)" -msgstr "VHD à taille dynamique (.vhd)" - -msgid "Differencing VHD (.vhd)" -msgstr "VHD à différenciation (.vhd)" - -msgid "Large blocks (2 MB)" -msgstr "Blocs grands (2 MB)" - -msgid "Small blocks (512 KB)" -msgstr "Blocs petits (512 KB)" - -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "Fichiers VHD (*.vhd);;Tous les fichiers (*.*)" - -msgid "Select the parent VHD" -msgstr "Sélectionnez le VHD parent" - -msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" -msgstr "Il est possible que l'image parente a été modifié après la création de l'image à différenciation.\n\nIl est même possible que les fichiers de l'mage ont été déplacés ou copiés ou il existe un bogue dans le programme que a créé ce disque.\n\nVoulez-vous réparer l'horodatage?" - -msgid "Parent and child disk timestamps do not match" -msgstr "Les horodatages des disques parent et enfant ne correspondent pas" - -msgid "Could not fix VHD timestamp." -msgstr "Impossible de réparer l'horodatage du VHD." - -msgid "%01i:%02i" -msgstr "%01i:%02i" - -msgid "MFM/RLL" -msgstr "MFM/RLL" - -msgid "XTA" -msgstr "XTA" - -msgid "ESDI" -msgstr "ESDI" - -msgid "IDE" -msgstr "IDE" - -msgid "ATAPI" -msgstr "ATAPI" - -msgid "MFM/RLL (%01i:%01i)" -msgstr "MFM/RLL (%01i:%01i)" - -msgid "XTA (%01i:%01i)" -msgstr "XTA (%01i:%01i)" - -msgid "ESDI (%01i:%01i)" -msgstr "ESDI (%01i:%01i)" - -msgid "IDE (%01i:%01i)" -msgstr "IDE (%01i:%01i)" - -msgid "ATAPI (%01i:%01i)" -msgstr "ATAPI (%01i:%01i)" - -msgid "SCSI (%01i:%02i)" -msgstr "SCSI (%01i:%02i)" - -msgid "CD-ROM %i (%s): %s" -msgstr "CD-ROM %i (%s): %s" - -msgid "160 kB" -msgstr "160 kB" - -msgid "180 kB" -msgstr "180 kB" - -msgid "320 kB" -msgstr "320 kB" - -msgid "360 kB" -msgstr "360 kB" - -msgid "640 kB" -msgstr "640 kB" - -msgid "720 kB" -msgstr "720 kB" - -msgid "1.2 MB" -msgstr "1.2 MB" - -msgid "1.25 MB" -msgstr "1.25 MB" - -msgid "1.44 MB" -msgstr "1.44 MB" - -msgid "DMF (cluster 1024)" -msgstr "DMF (cluster 1024)" - -msgid "DMF (cluster 2048)" -msgstr "DMF (cluster 2048)" - -msgid "2.88 MB" -msgstr "2.88 MB" - -msgid "ZIP 100" -msgstr "ZIP 100" - -msgid "3.5\" 128Mb M.O. (ISO 10090)" -msgstr "3.5\" 128Mb M.O. (ISO 10090)" - -msgid "3.5\" 230Mb M.O. (ISO 13963)" -msgstr "3.5\" 230Mb M.O. (ISO 13963)" - -msgid "3.5\" 540Mb M.O. (ISO 15498)" -msgstr "3.5\" 540Mb M.O. (ISO 15498)" - -msgid "3.5\" 640Mb M.O. (ISO 15498)" -msgstr "3.5\" 640Mb M.O. (ISO 15498)" - -msgid "3.5\" 1.3Gb M.O. (GigaMO)" -msgstr "3.5\" 1.3Gb M.O. (GigaMO)" - -msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" - -msgid "5.25\" 600Mb M.O." -msgstr "5.25\" 600Mb M.O." - -msgid "5.25\" 650Mb M.O." -msgstr "5.25\" 650Mb M.O." - -msgid "5.25\" 1Gb M.O." -msgstr "5.25\" 1Gb M.O." - -msgid "5.25\" 1.3Gb M.O." -msgstr "5.25\" 1.3Gb M.O." - -msgid "Perfect RPM" -msgstr "RPM précis" - -msgid "1%% below perfect RPM" -msgstr "Précision RPM de moins 1%" - -msgid "1.5%% below perfect RPM" -msgstr "Précision RPM de moins 1.5%" - -msgid "2%% below perfect RPM" -msgstr "Précision RPM de moins 2%" - -msgid "(System Default)" -msgstr "(Défaut du système)" - +msgid "&Action" +msgstr "&Action" + +msgid "&Keyboard requires capture" +msgstr "&Capturer le clavier" + +msgid "&Right CTRL is left ALT" +msgstr "CTRL &Droite devient ALT Gauche" + +msgid "&Hard Reset..." +msgstr "&Hard Reset..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Pause" + +msgid "E&xit..." +msgstr "&Quitter..." + +msgid "&View" +msgstr "&Vue" + +msgid "&Hide status bar" +msgstr "&Masquer la barre de status" + +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + +msgid "&Resizeable window" +msgstr "Fenètre &Retaillable" + +msgid "R&emember size && position" +msgstr "S&auvegarder taille && position" + +msgid "Re&nderer" +msgstr "Moteur de &rendu vidéo" + +msgid "&SDL (Software)" +msgstr "&SDL (Logiciel)" + +msgid "SDL (&Hardware)" +msgstr "SDL (&Materiel)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 Core)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "Specifier dimensions..." + +msgid "F&orce 4:3 display ratio" +msgstr "F&orcer 4:3" + +msgid "&Window scale factor" +msgstr "&Echelle facteur" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Methode Filtre" + +msgid "&Nearest" +msgstr "&Plus proche" + +msgid "&Linear" +msgstr "&Lineaire" + +msgid "Hi&DPI scaling" +msgstr "Mise à l'échelle Hi&DPI" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Plein Ecran\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Mode &Elargi plein écran" + +msgid "&Full screen stretch" +msgstr "&Plein écran étiré" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "pixels &Carrés(Keep ratio)" + +msgid "&Integer scale" +msgstr "Echelle &Entière" + +msgid "E&GA/(S)VGA settings" +msgstr "Réglages E&GA/(S)VGA" + +msgid "&Inverted VGA monitor" +msgstr "Moniteur VGA &Inversé" + +msgid "VGA screen &type" +msgstr "&Type Ecran VGA" + +msgid "RGB &Color" +msgstr "RGB &Couleur" + +msgid "&RGB Grayscale" +msgstr "&RGB Ton de Gris" + +msgid "&Amber monitor" +msgstr "Moniteur &Ambre" + +msgid "&Green monitor" +msgstr "Moniteur &Vert" + +msgid "&White monitor" +msgstr "Moniteur &Blanc" + +msgid "Grayscale &conversion type" +msgstr "Grayscale &conversion type" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Moyenne" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" + +msgid "Change contrast for &monochrome display" +msgstr "Modifier contraste affichage &monochrome" + +msgid "&Media" +msgstr "&Media" + +msgid "&Tools" +msgstr "Ou&tils" + +msgid "&Settings..." +msgstr "&Réglages..." + +msgid "&Update status bar icons" +msgstr "Mettre à jour la barre de stat&us" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Copie &Ecran\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Préférences..." + +msgid "Enable &Discord integration" +msgstr "Activer intégration &Discord" + +msgid "Sound &gain..." +msgstr "&Gain Son..." + +msgid "Begin trace\tCtrl+T" +msgstr "Démarrer traces\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Finir traces\tCtrl+T" + +msgid "&Logging" +msgstr "&Journalisation" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Activer journaux de BusLogic\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Activer journaux du CD-ROM\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Activer journaux des disquettes (86F)s\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Activer journaux du contrôleur de disquettes\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Activer journaux de IDE\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Activer journaux de port série\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Activer journaux du réseau\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Point d'arrêt du journal\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "Vidage de la mémoire &vidéo\tCtrl+F1" + +msgid "&Help" +msgstr "&Aide" + +msgid "&Documentation..." +msgstr "&Documentation..." + +msgid "&About 86Box..." +msgstr "&A Propos de 86Box..." + +msgid "&New image..." +msgstr "&Nouvelle image..." + +msgid "&Existing image..." +msgstr "Image &Existante..." + +msgid "Existing image (&Write-protected)..." +msgstr "Image Existante(&Lecture seule)..." + +msgid "&Record" +msgstr "En®istrer" + +msgid "&Play" +msgstr "&Jouer" + +msgid "&Rewind to the beginning" +msgstr "&Revenir au debut" + +msgid "&Fast forward to the end" +msgstr "Aller à la &Fin" + +msgid "E&ject" +msgstr "E&jecter" + +msgid "&Image..." +msgstr "&Image..." + +msgid "E&xport to 86F..." +msgstr "E&xport vers 86F..." + +msgid "&Mute" +msgstr "&Couper" + +msgid "E&mpty" +msgstr "E&jecter" + +msgid "&Reload previous image" +msgstr "&Recharger image précedente" + +msgid "&Image" +msgstr "&Image" + +msgid "Target &framerate" +msgstr "&Taux de rafraîchissement cible" + +msgid "&Sync with video" +msgstr "&Synchronisation avec la vidéo" + +msgid "&25 fps" +msgstr "&25 images par seconde" + +msgid "&30 fps" +msgstr "&30 images par seconde" + +msgid "&50 fps" +msgstr "&50 images par seconde" + +msgid "&60 fps" +msgstr "&60 images par seconde" + +msgid "&75 fps" +msgstr "&75 images par seconde" + +msgid "&VSync" +msgstr "Synchronisation &verticale" + +msgid "&Select shader..." +msgstr "Sé&lectionnez le shader..." + +msgid "&Remove shader" +msgstr "S&upprimer le shader" + +msgid "Preferences" +msgstr "Préférences" + +msgid "Sound Gain" +msgstr "Gain son" + +msgid "New Image" +msgstr "Nouvelle image" + +msgid "Settings" +msgstr "Réglages" + +msgid "Specify Main Window Dimensions" +msgstr "Spécifier le détournement de la fenêtre principale" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Annuler" + +msgid "Save these settings as &global defaults" +msgstr "Sauvegarder ces paramètres comme valeurs par défaut &globales" + +msgid "&Default" +msgstr "&Défaut" + +msgid "Language:" +msgstr "Langue:" + +msgid "Icon set:" +msgstr "Ensemble d'icônes:" + +msgid "Gain" +msgstr "Gain" + +msgid "File name:" +msgstr "Nom fichier:" + +msgid "Disk size:" +msgstr "Taille disque:" + +msgid "RPM mode:" +msgstr "Mode RPM:" + +msgid "Progress:" +msgstr "Progrès:" + +msgid "Width:" +msgstr "Largeur:" + +msgid "Height:" +msgstr "Hauteur:" + +msgid "Lock to this size" +msgstr "Verrouiller à cette taille" + +msgid "Machine type:" +msgstr "Type de machine:" + +msgid "Machine:" +msgstr "Machine:" + +msgid "Configure" +msgstr "Configurer" + +msgid "CPU type:" +msgstr "Type du processeur:" + +msgid "Speed:" +msgstr "Vitesse:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "États d'attente:" + +msgid "MB" +msgstr "Mo" + +msgid "Memory:" +msgstr "Mémoire:" + +msgid "Time synchronization" +msgstr "Synchronisation du temps" + +msgid "Disabled" +msgstr "Désactivé" + +msgid "Enabled (local time)" +msgstr "Activé (heure locale)" + +msgid "Enabled (UTC)" +msgstr "Activé (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Recompilateur dynamique" + +msgid "Video:" +msgstr "Vidéo:" + +msgid "Voodoo Graphics" +msgstr "Graphique Voodoo" + +msgid "Mouse:" +msgstr "Souris:" + +msgid "Joystick:" +msgstr "Manette de commande:" + +msgid "Joystick 1..." +msgstr "Manette 1..." + +msgid "Joystick 2..." +msgstr "Manette 2..." + +msgid "Joystick 3..." +msgstr "Manette 3..." + +msgid "Joystick 4..." +msgstr "Manette 4..." + +msgid "Sound card:" +msgstr "Carte son:" + +msgid "MIDI Out Device:" +msgstr "Sortie MIDI:" + +msgid "MIDI In Device:" +msgstr "Entrée MIDI:" + +msgid "Standalone MPU-401" +msgstr "MPU-401 autonome" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Utiliser le son FLOAT32" + +msgid "Network type:" +msgstr "Type de réseau:" + +msgid "PCap device:" +msgstr "Dispositif PCap:" + +msgid "Network adapter:" +msgstr "Adaptateur de réseau:" + +msgid "LPT1 Device:" +msgstr "Dispositif LPT1:" + +msgid "LPT2 Device:" +msgstr "Dispositif LPT2:" + +msgid "LPT3 Device:" +msgstr "Dispositif LPT3:" + +msgid "Serial port 1" +msgstr "Port série 1" + +msgid "Serial port 2" +msgstr "Port série 2" + +msgid "Serial port 3" +msgstr "Port série 3" + +msgid "Serial port 4" +msgstr "Port série 4" + +msgid "Parallel port 1" +msgstr "Port parallèle 1" + +msgid "Parallel port 2" +msgstr "Port parallèle 2" + +msgid "Parallel port 3" +msgstr "Port parallèle 3" + +msgid "HD Controller:" +msgstr "Contrôleur HD:" + +msgid "FD Controller:" +msgstr "Contrôleur FD:" + +msgid "Tertiary IDE Controller" +msgstr "Contrôleur IDE tertiaire" + +msgid "Quaternary IDE Controller" +msgstr "Contrôleur IDE quaternair" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Contrôleur 1:" + +msgid "Controller 2:" +msgstr "Contrôleur 2:" + +msgid "Controller 3:" +msgstr "Contrôleur 3:" + +msgid "Controller 4:" +msgstr "Contrôleur 4:" + +msgid "Cassette" +msgstr "Cassette" + +msgid "Hard disks:" +msgstr "Disques durs:" + +msgid "&New..." +msgstr "&Nouveau..." + +msgid "&Existing..." +msgstr "&Existant..." + +msgid "&Remove" +msgstr "&Supprimer" + +msgid "Bus:" +msgstr "Bus:" + +msgid "Channel:" +msgstr "Canal:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Spécifier..." + +msgid "Sectors:" +msgstr "Secteurs:" + +msgid "Heads:" +msgstr "Têtes:" + +msgid "Cylinders:" +msgstr "Cylindres:" + +msgid "Size (MB):" +msgstr "Taille (Mo):" + +msgid "Type:" +msgstr "Type:" + +msgid "Image Format:" +msgstr "Format Image:" + +msgid "Block Size:" +msgstr "Taille du bloc:" + +msgid "Floppy drives:" +msgstr "Lecteurs de disquettes:" + +msgid "Turbo timings" +msgstr "Turbo" + +msgid "Check BPB" +msgstr "Vérifier BPB" + +msgid "CD-ROM drives:" +msgstr "Lecterus CD-ROM:" + +msgid "MO drives:" +msgstr "Lecteurs magnéto-optiques:" + +msgid "ZIP drives:" +msgstr "Lecteurs ZIP:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "Horloge temps réel ISA:" + +msgid "ISA Memory Expansion" +msgstr "Expansion de la mémoire ISA" + +msgid "Card 1:" +msgstr "Carte 1:" + +msgid "Card 2:" +msgstr "Carte 2:" + +msgid "Card 3:" +msgstr "Carte 3:" + +msgid "Card 4:" +msgstr "Carte 4:" + +msgid "ISABugger device" +msgstr "Dispositif ISABugger" + +msgid "POST card" +msgstr "Carte POST" + +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Erreur" + +msgid "Fatal error" +msgstr "Erreur fatale" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Appuyez sur CTRL+ALT+PAGE ↓ pour revenir au mode fenêtré." + +msgid "Speed" +msgstr "Vitesse" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.im? *.zdi)" +msgstr "Images ZIP (*.im? *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box n'a pas pu trouver d'images ROM utilisables.\n\nS'il vous plait, téléchargez un ensemble ROM et extrayez-le dans le répertoire \"roms\"." + +msgid "(empty)" +msgstr "(vide)" + +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "Images ZIP (*.im? *.zdi);;Tous les fichiers (*.*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Activé" + +msgid "Off" +msgstr "Désactivé" + +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "Tous les images (*.86f *.dsk *.flp *.im? *.*fd?);;Images basiques du secteur (*.dsk *.flp *.im? *.img *.*fd?);;Images de la surface (*.86f)" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "La machine \"%hs\" n'est pas disponible en raison de l'absence de ROMs dans le répertoire roms/machines. Basculer vers une machine disponible." + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "La carte vidéo \"%hs\" n'est pas disponible en raison de l'absence de ROMs dans le répertoire roms/video. Basculer vers une carte vidéo disponible." + +msgid "Machine" +msgstr "Machine" + +msgid "Display" +msgstr "Affichage" + +msgid "Input devices" +msgstr "Dispositifs d'entrée" + +msgid "Sound" +msgstr "Son" + +msgid "Network" +msgstr "Réseau" + +msgid "Ports (COM & LPT)" +msgstr "Ports (COM et LPT)" + +msgid "Storage controllers" +msgstr "Contrôleurs de stockage" + +msgid "Hard disks" +msgstr "Disques durs" + +msgid "Floppy & CD-ROM drives" +msgstr "Lecteurs de disquette et CD-ROM" + +msgid "Other removable devices" +msgstr "Autres dispositifs amovibles" + +msgid "Other peripherals" +msgstr "Autres périfériques" + +msgid "Surface images (*.86f)" +msgstr "Images de surface (*.86f)" + +msgid "Click to capture mouse" +msgstr "Cliquer pour capturer la souris" + +msgid "Press F8+F12 to release mouse" +msgstr "Appuyer sur F8+F12 pour libérer la souris" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Appuyer sur F8+F12 ou le bouton central pour libérer la souris" + +msgid "Unable to initialize FluidSynth" +msgstr "Impossible d'initialiser FluidSynth" + +msgid "Bus" +msgstr "Bus" + +msgid "File" +msgstr "File" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "T" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "Ko" + +msgid "Could not initialize the video renderer." +msgstr "Impossible d'initialiser le moteur de rendu vidéo." + +msgid "Default" +msgstr "Défaut" + +msgid "%i Wait state(s)" +msgstr "%i état(s) d'attente" + +msgid "Type" +msgstr "Type" + +msgid "Failed to set up PCap" +msgstr "Impossible d'initialiser PCap" + +msgid "No PCap devices found" +msgstr "Aucun dispositif PCap trouvé" + +msgid "Invalid PCap device" +msgstr "Dispositif PCap non valide" + +msgid "Standard 2-button joystick(s)" +msgstr "Manette(s) standard avec 2 boutons" + +msgid "Standard 4-button joystick" +msgstr "Manette standard avec 4 boutons" + +msgid "Standard 6-button joystick" +msgstr "Manette standard avec 6 boutons" + +msgid "Standard 8-button joystick" +msgstr "Manette standard avec 6 boutons" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Système de contrôle de vol Thrustmaster" + +msgid "None" +msgstr "Aucun" + +msgid "Unable to load keyboard accelerators." +msgstr "Impossible de charger les accélérateurs de clavier." + +msgid "Unable to register raw input." +msgstr "Impossible de charger l'entrée raw." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u Mo (CTS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Disquette %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "Toutes les images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Images du secteur avancés (*.imd *.json *.td0);;Images du secteur basiques (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Images du flux (*.fdi);;Images de surface (*.86f *.mfm);;Tous les fichiers (*.*)" + +msgid "Unable to initialize FreeType" +msgstr "Impossible d'initialiser FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Impossible d'initialiser SDL, SDL2.dll est nécessaire" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Etes-vous sûr de vouloir réinitialiser la machine émulée ?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Etes-vous sûr de vouloir quitter 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Impossible d'initialiser Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "Magnéto-optique %i (%ls): %ls" + +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "Images magnéto-optiques (*.im? *.mdi);;Tous les fichiers (*.*)" + +msgid "Welcome to 86Box!" +msgstr "Bienvenue dans 86Box !" + +msgid "Internal controller" +msgstr "Côntrolleur interne" + +msgid "Exit" +msgstr "Sortir" + +msgid "No ROMs found" +msgstr "Pas de ROMs trouvées" + +msgid "Do you want to save the settings?" +msgstr "Voulez-vous sauvegarder les paramètres ?" + +msgid "This will hard reset the emulated machine." +msgstr "Cela entraînera la réinitialisation complète de la machine émulée." + +msgid "Save" +msgstr "Sauvegarder" + +msgid "About 86Box" +msgstr "À propos de 86Box" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Un émulateur de vieux ordinateurs\n\nAuteurs: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nLibéré sous la licence GNU General Public License version 2 ou ultérieure. Pour plus d'informations, voir le fichier LICENSE." + +msgid "Hardware not available" +msgstr "Matériel non disponible" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Assurez-vous que libpcap est installé et que vou utilisez une connexion réseau compatible avec libpcap." + +msgid "Invalid configuration" +msgstr "Configuration non valide" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " est nécessaire pour l'émulation de l'imprimante ESC/P." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " est nécessair pour la conversion automatique des fichiers PostScript dans PDF.\n\nTous les documents envoyés à l'imprimante générique PostScript seront sauvés comme des fichiers PostScript (.ps)." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " est nécessaire pour la sortie MIDI FluidSynth." + +msgid "Entering fullscreen mode" +msgstr "Entrer en mode plein écran" + +msgid "Don't show this message again" +msgstr "Ne pas montrer ce message à nouveau" + +msgid "Don't exit" +msgstr "Ne pas sortir" + +msgid "Reset" +msgstr "Réinitialiser" + +msgid "Don't reset" +msgstr "Ne pas réinitialiser" + +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "Images CD-ROM (*.iso *.cue);;Tous les fichiers (*.*)" + +msgid "%hs Device Configuration" +msgstr "Configuration du dispositif %hs" + +msgid "Monitor in sleep mode" +msgstr "Moniteur en mode veille" + +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "Shaders OpenGL (*.glsl);;Tous les fichiers (*.*)" + +msgid "OpenGL options" +msgstr "Options OpenGL" + +msgid "You are loading an unsupported configuration" +msgstr "Vous chargez une configuration non prise en charge" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "La filtrage du type du processeur sur la base de la machine sélectionné est désactivé pur cette machine émulée.\n\nCela permet de sélectionner une processeur que est sinon incompatible avec la machine sélectionné. Cependant, il pourrait y avoir des incompatibilités avec le BIOS de la machine ou autres logiciels.\n\nL'activatione de cette configuration non est officiellement prise en charge et tout rapport de bogue peut être fermé comme étant invalide." + +msgid "Continue" +msgstr "Continuer" + +msgid "Cassette: %s" +msgstr "Cassette: %s" + +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Images cassette (*.pcm *.raw *.wav *.cas);;Tous les fichiers (*.*)" + +msgid "Cartridge %i: %ls" +msgstr "Cartouche %i: %ls" + +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "Images cartouche (*.a *.b *.jrc);;Tous les fichiers (*.*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + +msgid "Hard disk (%s)" +msgstr "Disque dur (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "Les lecteurs de CD-ROM MFM/RLL ou ESDI n'ont jamais existé" + +msgid "Custom..." +msgstr "Personnalisé..." + +msgid "Custom (large)..." +msgstr "Personnalisé (grand)..." + +msgid "Add New Hard Disk" +msgstr "Ajouter un nouveau disque dur" + +msgid "Add Existing Hard Disk" +msgstr "Ajouter un disque dur existant" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "Les images de disque HDI ne peuvent pas avoir une taille supériure à Go." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Les images de disque ne peuvent pas avoir un taille supérieure à 127 Go." + +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Images de dique dur (*.hd? *.im? *.vhd);;Tous les fichiers (*.*)" + +msgid "Unable to read file" +msgstr "Impossible de lire le fichier" + +msgid "Unable to write file" +msgstr "Impossible d'écrire le fichier" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "Les images HDI ou HDX avec une taille de secteur différente de 512 non sont pas prises en charge." + +msgid "USB is not yet supported" +msgstr "USB n'est pas encore pris en charge." + +msgid "Disk image file already exists" +msgstr "Le fichier de l'image disque existe déjà." + +msgid "Please specify a valid file name." +msgstr "Veuillez spécifier un nom de fichier valide." + +msgid "Disk image created" +msgstr "Image de disque créée" + +msgid "Make sure the file exists and is readable." +msgstr "Assurez-vous que le fichier existe et est lisible." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Assurez-vous que le fichier en cours d'enregistrement se trouve dans un répertoire accessible en écriture." + +msgid "Disk image too large" +msgstr "Image disque trop grande" + +msgid "Remember to partition and format the newly-created drive." +msgstr "N'oubliez pas de partitionner et de formater le nouveau disque créé." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Le fichier sélectionné sera écrasé. Etes-vous sûr de vouloir l'utiliser?" + +msgid "Unsupported disk image" +msgstr "Image disque non prise en charge" + +msgid "Overwrite" +msgstr "Écraser" + +msgid "Don't overwrite" +msgstr "Ne pas écraser" + +msgid "Raw image (.img)" +msgstr "Image brute (.img)" + +msgid "HDI image (.hdi)" +msgstr "Image HDI (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "Image HDX (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD à taille fixe (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD à taille dynamique (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "VHD à différenciation (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Blocs grands (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Blocs petits (512 KB)" + +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "Fichiers VHD (*.vhd);;Tous les fichiers (*.*)" + +msgid "Select the parent VHD" +msgstr "Sélectionnez le VHD parent" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Il est possible que l'image parente a été modifié après la création de l'image à différenciation.\n\nIl est même possible que les fichiers de l'mage ont été déplacés ou copiés ou il existe un bogue dans le programme que a créé ce disque.\n\nVoulez-vous réparer l'horodatage?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Les horodatages des disques parent et enfant ne correspondent pas" + +msgid "Could not fix VHD timestamp." +msgstr "Impossible de réparer l'horodatage du VHD." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (cluster 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (cluster 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." + +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." + +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." + +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "RPM précis" + +msgid "1%% below perfect RPM" +msgstr "Précision RPM de moins 1%" + +msgid "1.5%% below perfect RPM" +msgstr "Précision RPM de moins 1.5%" + +msgid "2%% below perfect RPM" +msgstr "Précision RPM de moins 2%" + +msgid "(System Default)" +msgstr "(Défaut du système)" + diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index 7f33a8c7f..829c088d5 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -1,1191 +1,1191 @@ -msgid "&Action" -msgstr "&Radnje" - -msgid "&Keyboard requires capture" -msgstr "&Tipkovnica zahtijeva hvatanje miša" - -msgid "&Right CTRL is left ALT" -msgstr "&Desni CTRL je lijevi ALT" - -msgid "&Hard Reset..." -msgstr "&Ponovno pokretanje..." - -msgid "&Ctrl+Alt+Del\tCtrl+F12" -msgstr "&Ctrl+Alt+Del\tCtrl+F12" - -msgid "Ctrl+Alt+&Esc" -msgstr "Ctrl+Alt+&Esc" - -msgid "&Pause" -msgstr "&Pauza" - -msgid "E&xit..." -msgstr "Iz&laz..." - -msgid "&View" -msgstr "&Pogled" - -msgid "&Hide status bar" -msgstr "&Sakrij statusni redak" - -msgid "Hide &toolbar" -msgstr "Hide &toolbar" - -msgid "&Resizeable window" -msgstr "&Prozor s promjenjivim veličinama" - -msgid "R&emember size && position" -msgstr "&Zapamtite veličinu i položaj" - -msgid "Re&nderer" -msgstr "&Renderer" - -msgid "&SDL (Software)" -msgstr "&SDL (Softver)" - -msgid "SDL (&Hardware)" -msgstr "SDL (&Hardver)" - -msgid "SDL (&OpenGL)" -msgstr "SDL (&OpenGL)" - -msgid "Open&GL (3.0 Core)" -msgstr "Open&GL (3.0 jezgra)" - -msgid "&VNC" -msgstr "&VNC" - -msgid "Specify dimensions..." -msgstr "Odrediti veličinu..." - -msgid "F&orce 4:3 display ratio" -msgstr "&4:3 omjer prikaza" - -msgid "&Window scale factor" -msgstr "&Faktor skaliranja prozora" - -msgid "&0.5x" -msgstr "&0,5x" - -msgid "&1x" -msgstr "&1x" - -msgid "1.&5x" -msgstr "1,&5x" - -msgid "&2x" -msgstr "&2x" - -msgid "Filter method" -msgstr "Metoda filtriranja" - -msgid "&Nearest" -msgstr "&Najbliža" - -msgid "&Linear" -msgstr "&Linearna" - -msgid "Hi&DPI scaling" -msgstr "&HiDPI skaliranje" - -msgid "&Fullscreen\tCtrl+Alt+PageUP" -msgstr "&Cijelozaslonski način\tCtrl+Alt+PageUP" - -msgid "Fullscreen &stretch mode" -msgstr "&Način cijelozaslonskog rastezanja" - -msgid "&Full screen stretch" -msgstr "&Razvuci na cijeli zaslona" - -msgid "&4:3" -msgstr "&4:3" - -msgid "&Square pixels (Keep ratio)" -msgstr "&Kvadratni pikseli (zadrži omjer)" - -msgid "&Integer scale" -msgstr "&Cijelobrojno skaliranje" - -msgid "E&GA/(S)VGA settings" -msgstr "E&GA/(S)VGA postavke" - -msgid "&Inverted VGA monitor" -msgstr "&Obrni boje zaslona VGA" - -msgid "VGA screen &type" -msgstr "&Tip zaslona VGA" - -msgid "RGB &Color" -msgstr "RGB u &boji" - -msgid "&RGB Grayscale" -msgstr "&RGB u nijansama sive boje" - -msgid "&Amber monitor" -msgstr "&Jantarni zaslon" - -msgid "&Green monitor" -msgstr "&Zeleni zaslon" - -msgid "&White monitor" -msgstr "&Bijeli zaslon" - -msgid "Grayscale &conversion type" -msgstr "&Vrsta konverzije nijansa sive boje" - -msgid "BT&601 (NTSC/PAL)" -msgstr "BT&601 (NTSC/PAL)" - -msgid "BT&709 (HDTV)" -msgstr "BT&709 (HDTV)" - -msgid "&Average" -msgstr "&Prosjek" - -msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" -msgstr "&Višak slike CGA/PCjr/Tandy/EGA/(S)VGA" - -msgid "Change contrast for &monochrome display" -msgstr "&Promjeni kontrast za crno-bijeli zaslon" - -msgid "&Media" -msgstr "&Mediji" - -msgid "&Tools" -msgstr "&Alati" - -msgid "&Settings..." -msgstr "&Opcije..." - -msgid "&Update status bar icons" -msgstr "&Ažuriraj ikone statusnog redka" - -msgid "Take s&creenshot\tCtrl+F11" -msgstr "Napravi &snimku zaslona\tCtrl+F11" - -msgid "&Preferences..." -msgstr "&Postavke..." - -msgid "Enable &Discord integration" -msgstr "Omogući integraciju sa programom &Discord" - -msgid "Sound &gain..." -msgstr "&Pojačanje zvuka..." - -msgid "Begin trace\tCtrl+T" -msgstr "Z&apočni praćenje\tCtrl+T" - -msgid "End trace\tCtrl+T" -msgstr "&Svrši praćenje\tCtrl+T" - -msgid "&Logging" -msgstr "&Logging" - -msgid "Enable BusLogic logs\tCtrl+F4" -msgstr "Omogući bilježenje za BusLogic\tCtrl+F4" - -msgid "Enable CD-ROM logs\tCtrl+F5" -msgstr "Omogući bilježenje za CD-ROM\tCtrl+F5" - -msgid "Enable floppy (86F) logs\tCtrl+F6" -msgstr "Omogući bilježenje za diskete (86F)\tCtrl+F6" - -msgid "Enable floppy controller logs\tCtrl+F7" -msgstr "Omogući bilježenje za disketni krmilnik\tCtrl+F7" - -msgid "Enable IDE logs\tCtrl+F8" -msgstr "Omogući bilježenje za IDE\tCtrl+F8" - -msgid "Enable Serial Port logs\tCtrl+F3" -msgstr "Omogući bilježenje za serijska vrata\tCtrl+F3" - -msgid "Enable Network logs\tCtrl+F9" -msgstr "Omogući bilježenje za omrežje\tCtrl+F9" - -msgid "&Log breakpoint\tCtrl+F10" -msgstr "&Zabilježi prekidnu točku\tCtrl+F10" - -msgid "Dump &video RAM\tCtrl+F1" -msgstr "&Ispiši memoriju zaslona\tCtrl+F1" - -msgid "&Help" -msgstr "&Pomoć" - -msgid "&Documentation..." -msgstr "&Dokumentacija..." - -msgid "&About 86Box..." -msgstr "&O programu 86Box..." - -msgid "&New image..." -msgstr "&Nova slika..." - -msgid "&Existing image..." -msgstr "&Postojeća slika..." - -msgid "Existing image (&Write-protected)..." -msgstr "Postojeća slika (&zaštićena od pisanja)..." - -msgid "&Record" -msgstr "&Snimi" - -msgid "&Play" -msgstr "&Pokreni" - -msgid "&Rewind to the beginning" -msgstr "P&remotaj na početak" - -msgid "&Fast forward to the end" -msgstr "&Preskoči do kraja" - -msgid "E&ject" -msgstr "&Izbaci" - -msgid "&Image..." -msgstr "&Slika..." - -msgid "E&xport to 86F..." -msgstr "&Izvozi u 86F..." - -msgid "&Mute" -msgstr "&Isključi zvuk" - -msgid "E&mpty" -msgstr "&Prazno" - -msgid "&Reload previous image" -msgstr "&Ponovo učitaj prethodnu sliku" - -msgid "&Image" -msgstr "&Slika" - -msgid "Target &framerate" -msgstr "&Ciljni broj okvira u sekundi" - -msgid "&Sync with video" -msgstr "&Sinkroniziraj s videom" - -msgid "&25 fps" -msgstr "&25 fps" - -msgid "&30 fps" -msgstr "&30 fps" - -msgid "&50 fps" -msgstr "&50 fps" - -msgid "&60 fps" -msgstr "&60 fps" - -msgid "&75 fps" -msgstr "&75 fps" - -msgid "&VSync" -msgstr "&VSync" - -msgid "&Select shader..." -msgstr "&Odaberi shader..." - -msgid "&Remove shader" -msgstr "&Ukloni shader" - -msgid "Preferences" -msgstr "Postavke" - -msgid "Sound Gain" -msgstr "Pojačavanje zvuka" - -msgid "New Image" -msgstr "Nova slika" - -msgid "Settings" -msgstr "Opcije" - -msgid "Specify Main Window Dimensions" -msgstr "Odredite glavne dimenzije prozora" - -msgid "OK" -msgstr "U redu" - -msgid "Cancel" -msgstr "Otkaži" - -msgid "Save these settings as &global defaults" -msgstr "Spremite ove postavke kao &globalne zadane postavke" - -msgid "&Default" -msgstr "Zadano" - -msgid "Language:" -msgstr "Jezik:" - -msgid "Icon set:" -msgstr "Paket ikona:" - -msgid "Gain" -msgstr "Pojačavanje" - -msgid "File name:" -msgstr "Ime datoteke:" - -msgid "Disk size:" -msgstr "Veličina diska:" - -msgid "RPM mode:" -msgstr "Način broja okretaja:" - -msgid "Progress:" -msgstr "Napredak:" - -msgid "Width:" -msgstr "Širina:" - -msgid "Height:" -msgstr "Visina:" - -msgid "Lock to this size" -msgstr "Zaključajte na ovu veličinu" - -msgid "Machine type:" -msgstr "Tip sistema:" - -msgid "Machine:" -msgstr "Sistem:" - -msgid "Configure" -msgstr "Namjesti" - -msgid "CPU type:" -msgstr "Tip procesora:" - -msgid "Speed:" -msgstr "Brzina:" - -msgid "FPU:" -msgstr "FPU uređaj:" - -msgid "Wait states:" -msgstr "Stanja čekanja:" - -msgid "MB" -msgstr "MB" - -msgid "Memory:" -msgstr "Memorija:" - -msgid "Time synchronization" -msgstr "Sinkronizacija vremena" - -msgid "Disabled" -msgstr "Isključeno" - -msgid "Enabled (local time)" -msgstr "Uključeno (lokalno vrijeme)" - -msgid "Enabled (UTC)" -msgstr "Uključeno (UTC)" - -msgid "Dynamic Recompiler" -msgstr "Dinamički rekompilator" - -msgid "Video:" -msgstr "Video:" - -msgid "Voodoo Graphics" -msgstr "Voodoo grafika" - -msgid "Mouse:" -msgstr "Miš:" - -msgid "Joystick:" -msgstr "Palica za igru:" - -msgid "Joystick 1..." -msgstr "Palica za igru 1..." - -msgid "Joystick 2..." -msgstr "Palica za igru 2..." - -msgid "Joystick 3..." -msgstr "Palica za igru 3..." - -msgid "Joystick 4..." -msgstr "Palica za igru 4..." - -msgid "Sound card:" -msgstr "Zvučna kartica:" - -msgid "MIDI Out Device:" -msgstr "Izlazni uređaj MIDI:" - -msgid "MIDI In Device:" -msgstr "Ulazni uređaj MIDI:" - -msgid "Standalone MPU-401" -msgstr "Samostalni MPU-401" - -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - -msgid "Use FLOAT32 sound" -msgstr "Koristi FLOAT32 za zvuk" - -msgid "Network type:" -msgstr "Tip mreže:" - -msgid "PCap device:" -msgstr "Uređaj PCap:" - -msgid "Network adapter:" -msgstr "Mrežna kartica:" - -msgid "LPT1 Device:" -msgstr "Uređaj LPT1:" - -msgid "LPT2 Device:" -msgstr "Uređaj LPT2:" - -msgid "LPT3 Device:" -msgstr "Uređaj LPT3:" - -msgid "Serial port 1" -msgstr "Serijska vrata 1" - -msgid "Serial port 2" -msgstr "Serijska vrata 2" - -msgid "Serial port 3" -msgstr "Serijska vrata 3" - -msgid "Serial port 4" -msgstr "Serijska vrata 4" - -msgid "Parallel port 1" -msgstr "Paralelna vrata 1" - -msgid "Parallel port 2" -msgstr "Paralelna vrata 2" - -msgid "Parallel port 3" -msgstr "Paralelna vrata 3" - -msgid "HD Controller:" -msgstr "Kontroler tvrdog diska:" - -msgid "FD Controller:" -msgstr "Kontroler diskete:" - -msgid "Tertiary IDE Controller" -msgstr "Tercijarni IDE kontroler" - -msgid "Quaternary IDE Controller" -msgstr "Kvaternarni IDE kontroler" - -msgid "SCSI" -msgstr "SCSI" - -msgid "Controller 1:" -msgstr "Kontroler 1:" - -msgid "Controller 2:" -msgstr "Kontroler 2:" - -msgid "Controller 3:" -msgstr "Kontroler 3:" - -msgid "Controller 4:" -msgstr "Kontroler 4:" - -msgid "Cassette" -msgstr "Audio kaseta" - -msgid "Hard disks:" -msgstr "Tvrdi diskovi:" - -msgid "&New..." -msgstr "&Novi..." - -msgid "&Existing..." -msgstr "&Postojeći..." - -msgid "&Remove" -msgstr "&Ukloni" - -msgid "Bus:" -msgstr "Sabirnica:" - -msgid "Channel:" -msgstr "Kanal:" - -msgid "ID:" -msgstr "ID:" - -msgid "&Specify..." -msgstr "&Odredi..." - -msgid "Sectors:" -msgstr "Sektori:" - -msgid "Heads:" -msgstr "Glave:" - -msgid "Cylinders:" -msgstr "Cilindri:" - -msgid "Size (MB):" -msgstr "Veličina (MB):" - -msgid "Type:" -msgstr "Tip:" - -msgid "Image Format:" -msgstr "Format slike:" - -msgid "Block Size:" -msgstr "Veličina slike:" - -msgid "Floppy drives:" -msgstr "Disketni pogoni:" - -msgid "Turbo timings" -msgstr "Turbo vrijemena" - -msgid "Check BPB" -msgstr "Provjeraj BPB" - -msgid "CD-ROM drives:" -msgstr "CD-ROM pogoni:" - -msgid "MO drives:" -msgstr "MO pogoni:" - -msgid "ZIP drives:" -msgstr "ZIP pogoni:" - -msgid "ZIP 250" -msgstr "ZIP 250" - -msgid "ISA RTC:" -msgstr "Sat stvarnog vremena (RTC):" - -msgid "ISA Memory Expansion" -msgstr "Proširenje memorije ISA" - -msgid "Card 1:" -msgstr "Kartica 1:" - -msgid "Card 2:" -msgstr "Kartica 2:" - -msgid "Card 3:" -msgstr "Kartica 3:" - -msgid "Card 4:" -msgstr "Kartica 4:" - -msgid "ISABugger device" -msgstr "Uređaj ISABugger" - -msgid "POST card" -msgstr "Kartica POST" - -msgid "FONT_SIZE" -msgstr "9" - -msgid "FONT_NAME" -msgstr "Segoe UI" - -msgid "86Box" -msgstr "86Box" - -msgid "Error" -msgstr "Greška" - -msgid "Fatal error" -msgstr "Fatalna greška" - -msgid "" -msgstr "" - -msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." -msgstr "Pritisnite CTRL+ALT+PAGE DOWN za povratak u prozorski način rada." - -msgid "Speed" -msgstr "Brzina" - -msgid "ZIP %03i %i (%s): %ls" -msgstr "ZIP %03i %i (%s): %ls" - -msgid "ZIP images (*.im? *.zdi)" -msgstr "ZIP slike (*.im? *.zdi)" - -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "86Box nije mogao pronaći upotrebljive ROM datoteke.\n\nMolimte posjetite sknite paket s ROM datotekama i ekstrahirajte paket u \"roms\" mapu." - -msgid "(empty)" -msgstr "(prazno)" - -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "ZIP slike (*.im? *.zdi);;Sve datoteke (*.*)" - -msgid "Turbo" -msgstr "Turbo" - -msgid "On" -msgstr "Uključeno" - -msgid "Off" -msgstr "Isključeno" - -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "Sve slike (*.86f *.dsk *.flp *.im? *.*fd?);;BOsnovne sektorske slike (*.dsk *.flp *.im? *.img *.*fd?);;Površinske slike (*.86f)" - -msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "Sistem \"%hs\" nije dostupan jer ne postoje potrebni ROM-ovi u mapu roms/machines. Prebacivanje na dostupno računalo." - -msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "Video kartica \"%hs\" nije dostupna jer ne postoje potrebni ROM-ovi u mapu roms/video. Prebacivanje na dostupnu video karticu." - -msgid "Machine" -msgstr "Sistem" - -msgid "Display" -msgstr "Video" - -msgid "Input devices" -msgstr "Ulazni uređaji" - -msgid "Sound" -msgstr "Zvuk" - -msgid "Network" -msgstr "Mreža" - -msgid "Ports (COM & LPT)" -msgstr "Vrata (COM & LPT)" - -msgid "Storage controllers" -msgstr "Kontroleri za diskove" - -msgid "Hard disks" -msgstr "Tvrdi diskovi" - -msgid "Floppy & CD-ROM drives" -msgstr "Floppy & CD-ROM pogoni" - -msgid "Other removable devices" -msgstr "Ostali uklonjivi uređaji" - -msgid "Other peripherals" -msgstr "Ostali periferni uređaji" - -msgid "Surface images (*.86f)" -msgstr "Površinske slike (*.86f)" - -msgid "Click to capture mouse" -msgstr "Kliknite da uhvatite miš" - -msgid "Press F8+F12 to release mouse" -msgstr "Pritisnite F8+F12 za otpustanje miša" - -msgid "Press F8+F12 or middle button to release mouse" -msgstr "Pritisnite F8+F12 ili srednji gumb miša za otpuštanje miša" - -msgid "Unable to initialize FluidSynth" -msgstr "Nije moguće inicijalizirati FluidSynth" - -msgid "Bus" -msgstr "Bus" - -msgid "File" -msgstr "Datoteka" - -msgid "C" -msgstr "C" - -msgid "H" -msgstr "H" - -msgid "S" -msgstr "S" - -msgid "KB" -msgstr "KB" - -msgid "Could not initialize the video renderer." -msgstr "Nije moguće inicijalizirati renderer." - -msgid "Default" -msgstr "Standard" - -msgid "%i Wait state(s)" -msgstr "%i stanje čekanja" - -msgid "Type" -msgstr "Tip" - -msgid "Failed to set up PCap" -msgstr "Postavljanje PCap-a nije uspjelo" - -msgid "No PCap devices found" -msgstr "Nema PCap uređaja" - -msgid "Invalid PCap device" -msgstr "Nevažeći PCap uređaj" - -msgid "Standard 2-button joystick(s)" -msgstr "Standardna palica za igru s 2 tipke" - -msgid "Standard 4-button joystick" -msgstr "Standardna palica za igru s 4 tipke" - -msgid "Standard 6-button joystick" -msgstr "Standardna palica za igru s 6 tipke" - -msgid "Standard 8-button joystick" -msgstr "Standardna palica za igru s 8 tipke" - -msgid "CH Flightstick Pro" -msgstr "CH Flightstick Pro" - -msgid "Microsoft SideWinder Pad" -msgstr "Microsoft SideWinder Pad" - -msgid "Thrustmaster Flight Control System" -msgstr "Thrustmaster Flight Control System" - -msgid "None" -msgstr "Bez" - -msgid "Unable to load keyboard accelerators." -msgstr "Nije moguće učitati ubrzivače tipkovnice." - -msgid "Unable to register raw input." -msgstr "Nije moguće registrirati neobrađeni unos." - -msgid "%u" -msgstr "%u" - -msgid "%u MB (CHS: %i, %i, %i)" -msgstr "%u MB (CHS: %i, %i, %i)" - -msgid "Floppy %i (%s): %ls" -msgstr "Disketa %i (%s): %ls" - -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "Sve slike (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Napredne sektorske slike (*.imd *.json *.td0);;Osnovne sektorske slike (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux slike (*.fdi);;Površinske slike (*.86f *.mfm);;Sve datoteke (*.*)" - -msgid "Unable to initialize FreeType" -msgstr "Nije moguće inicijalizirati FreeType" - -msgid "Unable to initialize SDL, SDL2.dll is required" -msgstr "Nije moguće inicijalizirati SDL, SDL2.dll je potrebno" - -msgid "Are you sure you want to hard reset the emulated machine?" -msgstr "Jeste li sigurni da želite hard resetirati emulirani sistem?" - -msgid "Are you sure you want to exit 86Box?" -msgstr "Jeste li sigurni da želite zatvoriti 86Box?" - -msgid "Unable to initialize Ghostscript" -msgstr "Nije moguće inicijalizirati GhostScript" - -msgid "MO %i (%ls): %ls" -msgstr "MO %i (%ls): %ls" - -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "MO slike (*.im? *.mdi);;Svi datoteke (*.*)" - -msgid "Welcome to 86Box!" -msgstr "Dobrodošli u 86Box!" - -msgid "Internal controller" -msgstr "Uunutarnji kontroler" - -msgid "Exit" -msgstr "Izlazi" - -msgid "No ROMs found" -msgstr "Nisu pronađene ROM datoteke" - -msgid "Do you want to save the settings?" -msgstr "Želite li spremiti postavke?" - -msgid "This will hard reset the emulated machine." -msgstr "Ovo će napraviti hard resetiranje emuliranog sistema." - -msgid "Save" -msgstr "Spremaj" - -msgid "About 86Box" -msgstr "O programu 86Box" - -msgid "86Box v" -msgstr "86Box verzija " - -msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "Emulator starih računala\n\nAutori: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, i drugi.\n\nPreveo: dob205\n\nObjavljeno pod licencom GNU General Public License, verzija 2 ili novije. Za više informacija pogledajte datoteku LICENCE." - -msgid "Hardware not available" -msgstr "Hardver nije dostupan" - -msgid "WinPcap" -msgstr "WinPcap" - -msgid "libpcap" -msgstr "libpcap" - -msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." -msgstr "Provjerite je li libpcap instaliran i jeste li na mreži, kompadibilnoj s libpcap." - -msgid "Invalid configuration" -msgstr "Nevažeća konfiguracija" - -msgid "freetype.dll" -msgstr "freetype.dll" - -msgid "libfreetype" -msgstr "libfreetype" - -msgid " is required for ESC/P printer emulation." -msgstr " je potrebno za emuliranje ESC/P pisača." - -msgid "gsdll32.dll" -msgstr "gsdll32.dll" - -msgid "libgs" -msgstr "libgs" - -msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." -msgstr " je potrebno za automatsku konverziju PostScript datoteke u PDF datoteke.\n\nSvi dokumenti poslani na generički PostScript pisač bit će spremljeni kao PostScript (.ps) datoteke." - -msgid "libfluidsynth.dll" -msgstr "libfluidsynth.dll" - -msgid "libfluidsynth" -msgstr "libfluidsynth" - -msgid " is required for FluidSynth MIDI output." -msgstr " je potrebno za FluidSynth MIDI izlaz." - -msgid "Entering fullscreen mode" -msgstr "Ulazim u cijelozaslonski način" - -msgid "Don't show this message again" -msgstr "Ne pokazi više ovu poruku" - -msgid "Don't exit" -msgstr "Ne izlazi" - -msgid "Reset" -msgstr "Resetiraj" - -msgid "Don't reset" -msgstr "Ne resetiraj" - -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "CD-ROM slike (*.iso *.cue);;Sve datoteke (*.*)" - -msgid "%hs Device Configuration" -msgstr "Konfiguracija uređaja %hs " - -msgid "Monitor in sleep mode" -msgstr "Ekran u stanju mirovanja" - -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "OpenGL shaderi (*.glsl);;Sve datoteke (*.*)" - -msgid "OpenGL options" -msgstr "OpenGL opcije" - -msgid "You are loading an unsupported configuration" -msgstr "Učitavate nepodržanu konfiguraciju" - -msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "Filtriranje tipa CPU-a na temelju odabranog sistema onemogućeno je za ovaj emulirani sistem.\n\nOvo omogućuje odabir procesora koji inače nisu kompatibilne s odabranog sistem. Međutim, možete naići na na nekompatibilnosti s BIOS-om sustava ili drugim softverom.\n\nOmogućavanje ove postavke nije službeno podržano i sva prijava o greškama mogu biti zatvorena kao \"invalid\"." - -msgid "Continue" -msgstr "Nastavi" - -msgid "Cassette: %s" -msgstr "Audio kaseta: %s" - -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Slike audio kasete (*.pcm *.raw *.wav *.cas);;Sve datoteke (*.*)" - -msgid "Cartridge %i: %ls" -msgstr "Kaseta %i: %ls" - -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "Slike kasete (*.a *.b *.jrc);;Sve datoteke (*.*)" - -msgid "Error initializing renderer" -msgstr "Nije moguće inicijalizirati renderer" - -msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "Nije moguće inicijalizirati OpenGL (3.0 jezgra) renderer. Molimte koristite drugi renderer." - -msgid "Resume execution" -msgstr "Resume execution" - -msgid "Pause execution" -msgstr "Pause execution" - -msgid "Press Ctrl+Alt+Del" -msgstr "Press Ctrl+Alt+Del" - -msgid "Press Ctrl+Alt+Esc" -msgstr "Press Ctrl+Alt+Esc" - -msgid "Hard reset" -msgstr "Hard reset" - -msgid "ACPI shutdown" -msgstr "ACPI shutdown" - -msgid "Hard disk (%s)" -msgstr "Tvrdi disk (%s)" - -msgid "%01i:%01i" -msgstr "%01i:%01i" - -msgid "%01i" -msgstr "%01i" - -msgid "MFM/RLL or ESDI CD-ROM drives never existed" -msgstr "MFM/RLL ili ESDI CD-ROM pogoni nisu nikada postojali" - -msgid "Custom..." -msgstr "Prilagođeno..." - -msgid "Custom (large)..." -msgstr "Prilagođeno (veliko)..." - -msgid "Add New Hard Disk" -msgstr "Dodajte novi tvrdi disk" - -msgid "Add Existing Hard Disk" -msgstr "Dodajte postojeći tvrdi disk" - -msgid "HDI disk images cannot be larger than 4 GB." -msgstr "HDI disk image datoteke ne mogu biti veće od 4 GB." - -msgid "Disk images cannot be larger than 127 GB." -msgstr "Slike tvrdog diska ne mogu biti veće od 127 GB." - -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Slike za tvrde diskove (*.hd? *.im? *.vhd);;Sve datoteke (*.*)" - -msgid "Unable to read file" -msgstr "Nije moguće pročitati datoteku" - -msgid "Unable to write file" -msgstr "Nije moguće napisati datoteku" - -msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "HDI ili HDX slike s veličinom sektora koja nije 512 kB nisu podržane." - -msgid "USB is not yet supported" -msgstr "USB nije još podržano" - -msgid "Disk image file already exists" -msgstr "Slika diska već postoji" - -msgid "Please specify a valid file name." -msgstr "Molimte unesite važeći naziv datoteke." - -msgid "Disk image created" -msgstr "Slika je stvorena" - -msgid "Make sure the file exists and is readable." -msgstr "Provjerite je li postoji datoteka i je li čitljiva." - -msgid "Make sure the file is being saved to a writable directory." -msgstr "Provjerite je li se datoteka sprema u mapu s dopuštenjima za pisanje." - -msgid "Disk image too large" -msgstr "Slika diska je prevelika" - -msgid "Remember to partition and format the newly-created drive." -msgstr "Ne zaboravite stvoriti particije i formatirati ih na novom disku." - -msgid "The selected file will be overwritten. Are you sure you want to use it?" -msgstr "Odabrana datoteka bit će prebrisana. Jeste li sigurni da želite koristiti ovu daoteku?" - -msgid "Unsupported disk image" -msgstr "Nepodržana slika diska" - -msgid "Overwrite" -msgstr "Prepiši" - -msgid "Don't overwrite" -msgstr "Ne prepiši" - -msgid "Raw image (.img)" -msgstr "Slika neobrađenih podataka (.img)" - -msgid "HDI image (.hdi)" -msgstr "HDI slika (.hdi)" - -msgid "HDX image (.hdx)" -msgstr "HDX slika (.hdx)" - -msgid "Fixed-size VHD (.vhd)" -msgstr "VHD fiksne veličine (.vhd)" - -msgid "Dynamic-size VHD (.vhd)" -msgstr "VHD dinamičke veličine (.vhd)" - -msgid "Differencing VHD (.vhd)" -msgstr "Različiti VHD (.vhd)" - -msgid "Large blocks (2 MB)" -msgstr "Veliki blokovi (2 MB)" - -msgid "Small blocks (512 KB)" -msgstr "Mali blokovi (512 KB)" - -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "VHD slike (*.vhd);;Sve datoteke (*.*)" - -msgid "Select the parent VHD" -msgstr "Izaberi matičnu sliku VHD" - -msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" -msgstr "To bi moglo značiti da je matična slika promijenjena nakon što je stvorena različita slika.\n\nTo se također može dogoditi ako su slike premještene ili kopirane, ili greška u programu koji je stvorio ovaj disk.\n\nŽelite li popraviti vremenske oznake?" - -msgid "Parent and child disk timestamps do not match" -msgstr "Vremenske ozanke matične i poređenog diska ne odgovaraju." - -msgid "Could not fix VHD timestamp." -msgstr "Ne mogu popraviti vremensku oznaku slike VHD." - -msgid "%01i:%02i" -msgstr "%01i:%02i" - -msgid "MFM/RLL" -msgstr "MFM/RLL" - -msgid "XTA" -msgstr "XTA" - -msgid "ESDI" -msgstr "ESDI" - -msgid "IDE" -msgstr "IDE" - -msgid "ATAPI" -msgstr "ATAPI" - -msgid "MFM/RLL (%01i:%01i)" -msgstr "MFM/RLL (%01i:%01i)" - -msgid "XTA (%01i:%01i)" -msgstr "XTA (%01i:%01i)" - -msgid "ESDI (%01i:%01i)" -msgstr "ESDI (%01i:%01i)" - -msgid "IDE (%01i:%01i)" -msgstr "IDE (%01i:%01i)" - -msgid "ATAPI (%01i:%01i)" -msgstr "ATAPI (%01i:%01i)" - -msgid "SCSI (%01i:%02i)" -msgstr "SCSI (%01i:%02i)" - -msgid "CD-ROM %i (%s): %s" -msgstr "CD-ROM %i (%s): %s" - -msgid "160 kB" -msgstr "160 kB" - -msgid "180 kB" -msgstr "180 kB" - -msgid "320 kB" -msgstr "320 kB" - -msgid "360 kB" -msgstr "360 kB" - -msgid "640 kB" -msgstr "640 kB" - -msgid "720 kB" -msgstr "720 kB" - -msgid "1.2 MB" -msgstr "1,2 MB" - -msgid "1.25 MB" -msgstr "1,25 MB" - -msgid "1.44 MB" -msgstr "1,44 MB" - -msgid "DMF (cluster 1024)" -msgstr "DMF (1024 clusteri)" - -msgid "DMF (cluster 2048)" -msgstr "DMF (2048 clusteri)" - -msgid "2.88 MB" -msgstr "2,88 MB" - -msgid "ZIP 100" -msgstr "ZIP 100" - -msgid "3.5\" 128Mb M.O. (ISO 10090)" -msgstr "3,5\" 128Mb M.O. (ISO 10090)" - -msgid "3.5\" 230Mb M.O. (ISO 13963)" -msgstr "3,5\" 230Mb M.O. (ISO 13963)" - -msgid "3.5\" 540Mb M.O. (ISO 15498)" -msgstr "3,5\" 540Mb M.O. (ISO 15498)" - -msgid "3.5\" 640Mb M.O. (ISO 15498)" -msgstr "3,5\" 640Mb M.O. (ISO 15498)" - -msgid "3.5\" 1.3Gb M.O. (GigaMO)" -msgstr "3,5\" 1.3Gb M.O. (GigaMO)" - -msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgstr "3,5\" 2.3Gb M.O. (GigaMO 2)" - -msgid "5.25\" 600Mb M.O." -msgstr "5,25\" 600Mb M.O." - -msgid "5.25\" 650Mb M.O." -msgstr "5,25\" 650Mb M.O." - -msgid "5.25\" 1Gb M.O." -msgstr "5,25\" 1Gb M.O." - -msgid "5.25\" 1.3Gb M.O." -msgstr "5,25\" 1.3Gb M.O." - -msgid "Perfect RPM" -msgstr "Savršeni broj okretaja u minuti" - -msgid "1%% below perfect RPM" -msgstr "1%% ispod savršenog broja okretaja" - -msgid "1.5%% below perfect RPM" -msgstr "1,5%% ispod savršenog broja okretaja" - -msgid "2%% below perfect RPM" -msgstr "2%% ispod savršenog broja okretaja" - -msgid "(System Default)" -msgstr "(Zadana postavka operativnog sustava)" - +msgid "&Action" +msgstr "&Radnje" + +msgid "&Keyboard requires capture" +msgstr "&Tipkovnica zahtijeva hvatanje miša" + +msgid "&Right CTRL is left ALT" +msgstr "&Desni CTRL je lijevi ALT" + +msgid "&Hard Reset..." +msgstr "&Ponovno pokretanje..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Pauza" + +msgid "E&xit..." +msgstr "Iz&laz..." + +msgid "&View" +msgstr "&Pogled" + +msgid "&Hide status bar" +msgstr "&Sakrij statusni redak" + +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + +msgid "&Resizeable window" +msgstr "&Prozor s promjenjivim veličinama" + +msgid "R&emember size && position" +msgstr "&Zapamtite veličinu i položaj" + +msgid "Re&nderer" +msgstr "&Renderer" + +msgid "&SDL (Software)" +msgstr "&SDL (Softver)" + +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardver)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 jezgra)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "Odrediti veličinu..." + +msgid "F&orce 4:3 display ratio" +msgstr "&4:3 omjer prikaza" + +msgid "&Window scale factor" +msgstr "&Faktor skaliranja prozora" + +msgid "&0.5x" +msgstr "&0,5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1,&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Metoda filtriranja" + +msgid "&Nearest" +msgstr "&Najbliža" + +msgid "&Linear" +msgstr "&Linearna" + +msgid "Hi&DPI scaling" +msgstr "&HiDPI skaliranje" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Cijelozaslonski način\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "&Način cijelozaslonskog rastezanja" + +msgid "&Full screen stretch" +msgstr "&Razvuci na cijeli zaslona" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Kvadratni pikseli (zadrži omjer)" + +msgid "&Integer scale" +msgstr "&Cijelobrojno skaliranje" + +msgid "E&GA/(S)VGA settings" +msgstr "E&GA/(S)VGA postavke" + +msgid "&Inverted VGA monitor" +msgstr "&Obrni boje zaslona VGA" + +msgid "VGA screen &type" +msgstr "&Tip zaslona VGA" + +msgid "RGB &Color" +msgstr "RGB u &boji" + +msgid "&RGB Grayscale" +msgstr "&RGB u nijansama sive boje" + +msgid "&Amber monitor" +msgstr "&Jantarni zaslon" + +msgid "&Green monitor" +msgstr "&Zeleni zaslon" + +msgid "&White monitor" +msgstr "&Bijeli zaslon" + +msgid "Grayscale &conversion type" +msgstr "&Vrsta konverzije nijansa sive boje" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Prosjek" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "&Višak slike CGA/PCjr/Tandy/EGA/(S)VGA" + +msgid "Change contrast for &monochrome display" +msgstr "&Promjeni kontrast za crno-bijeli zaslon" + +msgid "&Media" +msgstr "&Mediji" + +msgid "&Tools" +msgstr "&Alati" + +msgid "&Settings..." +msgstr "&Opcije..." + +msgid "&Update status bar icons" +msgstr "&Ažuriraj ikone statusnog redka" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Napravi &snimku zaslona\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Postavke..." + +msgid "Enable &Discord integration" +msgstr "Omogući integraciju sa programom &Discord" + +msgid "Sound &gain..." +msgstr "&Pojačanje zvuka..." + +msgid "Begin trace\tCtrl+T" +msgstr "Z&apočni praćenje\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "&Svrši praćenje\tCtrl+T" + +msgid "&Logging" +msgstr "&Logging" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Omogući bilježenje za BusLogic\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Omogući bilježenje za CD-ROM\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Omogući bilježenje za diskete (86F)\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Omogući bilježenje za disketni krmilnik\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Omogući bilježenje za IDE\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Omogući bilježenje za serijska vrata\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Omogući bilježenje za omrežje\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Zabilježi prekidnu točku\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "&Ispiši memoriju zaslona\tCtrl+F1" + +msgid "&Help" +msgstr "&Pomoć" + +msgid "&Documentation..." +msgstr "&Dokumentacija..." + +msgid "&About 86Box..." +msgstr "&O programu 86Box..." + +msgid "&New image..." +msgstr "&Nova slika..." + +msgid "&Existing image..." +msgstr "&Postojeća slika..." + +msgid "Existing image (&Write-protected)..." +msgstr "Postojeća slika (&zaštićena od pisanja)..." + +msgid "&Record" +msgstr "&Snimi" + +msgid "&Play" +msgstr "&Pokreni" + +msgid "&Rewind to the beginning" +msgstr "P&remotaj na početak" + +msgid "&Fast forward to the end" +msgstr "&Preskoči do kraja" + +msgid "E&ject" +msgstr "&Izbaci" + +msgid "&Image..." +msgstr "&Slika..." + +msgid "E&xport to 86F..." +msgstr "&Izvozi u 86F..." + +msgid "&Mute" +msgstr "&Isključi zvuk" + +msgid "E&mpty" +msgstr "&Prazno" + +msgid "&Reload previous image" +msgstr "&Ponovo učitaj prethodnu sliku" + +msgid "&Image" +msgstr "&Slika" + +msgid "Target &framerate" +msgstr "&Ciljni broj okvira u sekundi" + +msgid "&Sync with video" +msgstr "&Sinkroniziraj s videom" + +msgid "&25 fps" +msgstr "&25 fps" + +msgid "&30 fps" +msgstr "&30 fps" + +msgid "&50 fps" +msgstr "&50 fps" + +msgid "&60 fps" +msgstr "&60 fps" + +msgid "&75 fps" +msgstr "&75 fps" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Odaberi shader..." + +msgid "&Remove shader" +msgstr "&Ukloni shader" + +msgid "Preferences" +msgstr "Postavke" + +msgid "Sound Gain" +msgstr "Pojačavanje zvuka" + +msgid "New Image" +msgstr "Nova slika" + +msgid "Settings" +msgstr "Opcije" + +msgid "Specify Main Window Dimensions" +msgstr "Odredite glavne dimenzije prozora" + +msgid "OK" +msgstr "U redu" + +msgid "Cancel" +msgstr "Otkaži" + +msgid "Save these settings as &global defaults" +msgstr "Spremite ove postavke kao &globalne zadane postavke" + +msgid "&Default" +msgstr "Zadano" + +msgid "Language:" +msgstr "Jezik:" + +msgid "Icon set:" +msgstr "Paket ikona:" + +msgid "Gain" +msgstr "Pojačavanje" + +msgid "File name:" +msgstr "Ime datoteke:" + +msgid "Disk size:" +msgstr "Veličina diska:" + +msgid "RPM mode:" +msgstr "Način broja okretaja:" + +msgid "Progress:" +msgstr "Napredak:" + +msgid "Width:" +msgstr "Širina:" + +msgid "Height:" +msgstr "Visina:" + +msgid "Lock to this size" +msgstr "Zaključajte na ovu veličinu" + +msgid "Machine type:" +msgstr "Tip sistema:" + +msgid "Machine:" +msgstr "Sistem:" + +msgid "Configure" +msgstr "Namjesti" + +msgid "CPU type:" +msgstr "Tip procesora:" + +msgid "Speed:" +msgstr "Brzina:" + +msgid "FPU:" +msgstr "FPU uređaj:" + +msgid "Wait states:" +msgstr "Stanja čekanja:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Memorija:" + +msgid "Time synchronization" +msgstr "Sinkronizacija vremena" + +msgid "Disabled" +msgstr "Isključeno" + +msgid "Enabled (local time)" +msgstr "Uključeno (lokalno vrijeme)" + +msgid "Enabled (UTC)" +msgstr "Uključeno (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Dinamički rekompilator" + +msgid "Video:" +msgstr "Video:" + +msgid "Voodoo Graphics" +msgstr "Voodoo grafika" + +msgid "Mouse:" +msgstr "Miš:" + +msgid "Joystick:" +msgstr "Palica za igru:" + +msgid "Joystick 1..." +msgstr "Palica za igru 1..." + +msgid "Joystick 2..." +msgstr "Palica za igru 2..." + +msgid "Joystick 3..." +msgstr "Palica za igru 3..." + +msgid "Joystick 4..." +msgstr "Palica za igru 4..." + +msgid "Sound card:" +msgstr "Zvučna kartica:" + +msgid "MIDI Out Device:" +msgstr "Izlazni uređaj MIDI:" + +msgid "MIDI In Device:" +msgstr "Ulazni uređaj MIDI:" + +msgid "Standalone MPU-401" +msgstr "Samostalni MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Koristi FLOAT32 za zvuk" + +msgid "Network type:" +msgstr "Tip mreže:" + +msgid "PCap device:" +msgstr "Uređaj PCap:" + +msgid "Network adapter:" +msgstr "Mrežna kartica:" + +msgid "LPT1 Device:" +msgstr "Uređaj LPT1:" + +msgid "LPT2 Device:" +msgstr "Uređaj LPT2:" + +msgid "LPT3 Device:" +msgstr "Uređaj LPT3:" + +msgid "Serial port 1" +msgstr "Serijska vrata 1" + +msgid "Serial port 2" +msgstr "Serijska vrata 2" + +msgid "Serial port 3" +msgstr "Serijska vrata 3" + +msgid "Serial port 4" +msgstr "Serijska vrata 4" + +msgid "Parallel port 1" +msgstr "Paralelna vrata 1" + +msgid "Parallel port 2" +msgstr "Paralelna vrata 2" + +msgid "Parallel port 3" +msgstr "Paralelna vrata 3" + +msgid "HD Controller:" +msgstr "Kontroler tvrdog diska:" + +msgid "FD Controller:" +msgstr "Kontroler diskete:" + +msgid "Tertiary IDE Controller" +msgstr "Tercijarni IDE kontroler" + +msgid "Quaternary IDE Controller" +msgstr "Kvaternarni IDE kontroler" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Kontroler 1:" + +msgid "Controller 2:" +msgstr "Kontroler 2:" + +msgid "Controller 3:" +msgstr "Kontroler 3:" + +msgid "Controller 4:" +msgstr "Kontroler 4:" + +msgid "Cassette" +msgstr "Audio kaseta" + +msgid "Hard disks:" +msgstr "Tvrdi diskovi:" + +msgid "&New..." +msgstr "&Novi..." + +msgid "&Existing..." +msgstr "&Postojeći..." + +msgid "&Remove" +msgstr "&Ukloni" + +msgid "Bus:" +msgstr "Sabirnica:" + +msgid "Channel:" +msgstr "Kanal:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Odredi..." + +msgid "Sectors:" +msgstr "Sektori:" + +msgid "Heads:" +msgstr "Glave:" + +msgid "Cylinders:" +msgstr "Cilindri:" + +msgid "Size (MB):" +msgstr "Veličina (MB):" + +msgid "Type:" +msgstr "Tip:" + +msgid "Image Format:" +msgstr "Format slike:" + +msgid "Block Size:" +msgstr "Veličina slike:" + +msgid "Floppy drives:" +msgstr "Disketni pogoni:" + +msgid "Turbo timings" +msgstr "Turbo vrijemena" + +msgid "Check BPB" +msgstr "Provjeraj BPB" + +msgid "CD-ROM drives:" +msgstr "CD-ROM pogoni:" + +msgid "MO drives:" +msgstr "MO pogoni:" + +msgid "ZIP drives:" +msgstr "ZIP pogoni:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "Sat stvarnog vremena (RTC):" + +msgid "ISA Memory Expansion" +msgstr "Proširenje memorije ISA" + +msgid "Card 1:" +msgstr "Kartica 1:" + +msgid "Card 2:" +msgstr "Kartica 2:" + +msgid "Card 3:" +msgstr "Kartica 3:" + +msgid "Card 4:" +msgstr "Kartica 4:" + +msgid "ISABugger device" +msgstr "Uređaj ISABugger" + +msgid "POST card" +msgstr "Kartica POST" + +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Greška" + +msgid "Fatal error" +msgstr "Fatalna greška" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Pritisnite CTRL+ALT+PAGE DOWN za povratak u prozorski način rada." + +msgid "Speed" +msgstr "Brzina" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.im? *.zdi)" +msgstr "ZIP slike (*.im? *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box nije mogao pronaći upotrebljive ROM datoteke.\n\nMolimte posjetite sknite paket s ROM datotekama i ekstrahirajte paket u \"roms\" mapu." + +msgid "(empty)" +msgstr "(prazno)" + +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "ZIP slike (*.im? *.zdi);;Sve datoteke (*.*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Uključeno" + +msgid "Off" +msgstr "Isključeno" + +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "Sve slike (*.86f *.dsk *.flp *.im? *.*fd?);;BOsnovne sektorske slike (*.dsk *.flp *.im? *.img *.*fd?);;Površinske slike (*.86f)" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Sistem \"%hs\" nije dostupan jer ne postoje potrebni ROM-ovi u mapu roms/machines. Prebacivanje na dostupno računalo." + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Video kartica \"%hs\" nije dostupna jer ne postoje potrebni ROM-ovi u mapu roms/video. Prebacivanje na dostupnu video karticu." + +msgid "Machine" +msgstr "Sistem" + +msgid "Display" +msgstr "Video" + +msgid "Input devices" +msgstr "Ulazni uređaji" + +msgid "Sound" +msgstr "Zvuk" + +msgid "Network" +msgstr "Mreža" + +msgid "Ports (COM & LPT)" +msgstr "Vrata (COM & LPT)" + +msgid "Storage controllers" +msgstr "Kontroleri za diskove" + +msgid "Hard disks" +msgstr "Tvrdi diskovi" + +msgid "Floppy & CD-ROM drives" +msgstr "Floppy & CD-ROM pogoni" + +msgid "Other removable devices" +msgstr "Ostali uklonjivi uređaji" + +msgid "Other peripherals" +msgstr "Ostali periferni uređaji" + +msgid "Surface images (*.86f)" +msgstr "Površinske slike (*.86f)" + +msgid "Click to capture mouse" +msgstr "Kliknite da uhvatite miš" + +msgid "Press F8+F12 to release mouse" +msgstr "Pritisnite F8+F12 za otpustanje miša" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Pritisnite F8+F12 ili srednji gumb miša za otpuštanje miša" + +msgid "Unable to initialize FluidSynth" +msgstr "Nije moguće inicijalizirati FluidSynth" + +msgid "Bus" +msgstr "Bus" + +msgid "File" +msgstr "Datoteka" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Nije moguće inicijalizirati renderer." + +msgid "Default" +msgstr "Standard" + +msgid "%i Wait state(s)" +msgstr "%i stanje čekanja" + +msgid "Type" +msgstr "Tip" + +msgid "Failed to set up PCap" +msgstr "Postavljanje PCap-a nije uspjelo" + +msgid "No PCap devices found" +msgstr "Nema PCap uređaja" + +msgid "Invalid PCap device" +msgstr "Nevažeći PCap uređaj" + +msgid "Standard 2-button joystick(s)" +msgstr "Standardna palica za igru s 2 tipke" + +msgid "Standard 4-button joystick" +msgstr "Standardna palica za igru s 4 tipke" + +msgid "Standard 6-button joystick" +msgstr "Standardna palica za igru s 6 tipke" + +msgid "Standard 8-button joystick" +msgstr "Standardna palica za igru s 8 tipke" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Bez" + +msgid "Unable to load keyboard accelerators." +msgstr "Nije moguće učitati ubrzivače tipkovnice." + +msgid "Unable to register raw input." +msgstr "Nije moguće registrirati neobrađeni unos." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Disketa %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "Sve slike (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Napredne sektorske slike (*.imd *.json *.td0);;Osnovne sektorske slike (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux slike (*.fdi);;Površinske slike (*.86f *.mfm);;Sve datoteke (*.*)" + +msgid "Unable to initialize FreeType" +msgstr "Nije moguće inicijalizirati FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Nije moguće inicijalizirati SDL, SDL2.dll je potrebno" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Jeste li sigurni da želite hard resetirati emulirani sistem?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Jeste li sigurni da želite zatvoriti 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Nije moguće inicijalizirati GhostScript" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "MO slike (*.im? *.mdi);;Svi datoteke (*.*)" + +msgid "Welcome to 86Box!" +msgstr "Dobrodošli u 86Box!" + +msgid "Internal controller" +msgstr "Uunutarnji kontroler" + +msgid "Exit" +msgstr "Izlazi" + +msgid "No ROMs found" +msgstr "Nisu pronađene ROM datoteke" + +msgid "Do you want to save the settings?" +msgstr "Želite li spremiti postavke?" + +msgid "This will hard reset the emulated machine." +msgstr "Ovo će napraviti hard resetiranje emuliranog sistema." + +msgid "Save" +msgstr "Spremaj" + +msgid "About 86Box" +msgstr "O programu 86Box" + +msgid "86Box v" +msgstr "86Box verzija " + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Emulator starih računala\n\nAutori: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, i drugi.\n\nPreveo: dob205\n\nObjavljeno pod licencom GNU General Public License, verzija 2 ili novije. Za više informacija pogledajte datoteku LICENCE." + +msgid "Hardware not available" +msgstr "Hardver nije dostupan" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Provjerite je li libpcap instaliran i jeste li na mreži, kompadibilnoj s libpcap." + +msgid "Invalid configuration" +msgstr "Nevažeća konfiguracija" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " je potrebno za emuliranje ESC/P pisača." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " je potrebno za automatsku konverziju PostScript datoteke u PDF datoteke.\n\nSvi dokumenti poslani na generički PostScript pisač bit će spremljeni kao PostScript (.ps) datoteke." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " je potrebno za FluidSynth MIDI izlaz." + +msgid "Entering fullscreen mode" +msgstr "Ulazim u cijelozaslonski način" + +msgid "Don't show this message again" +msgstr "Ne pokazi više ovu poruku" + +msgid "Don't exit" +msgstr "Ne izlazi" + +msgid "Reset" +msgstr "Resetiraj" + +msgid "Don't reset" +msgstr "Ne resetiraj" + +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "CD-ROM slike (*.iso *.cue);;Sve datoteke (*.*)" + +msgid "%hs Device Configuration" +msgstr "Konfiguracija uređaja %hs " + +msgid "Monitor in sleep mode" +msgstr "Ekran u stanju mirovanja" + +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "OpenGL shaderi (*.glsl);;Sve datoteke (*.*)" + +msgid "OpenGL options" +msgstr "OpenGL opcije" + +msgid "You are loading an unsupported configuration" +msgstr "Učitavate nepodržanu konfiguraciju" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "Filtriranje tipa CPU-a na temelju odabranog sistema onemogućeno je za ovaj emulirani sistem.\n\nOvo omogućuje odabir procesora koji inače nisu kompatibilne s odabranog sistem. Međutim, možete naići na na nekompatibilnosti s BIOS-om sustava ili drugim softverom.\n\nOmogućavanje ove postavke nije službeno podržano i sva prijava o greškama mogu biti zatvorena kao \"invalid\"." + +msgid "Continue" +msgstr "Nastavi" + +msgid "Cassette: %s" +msgstr "Audio kaseta: %s" + +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Slike audio kasete (*.pcm *.raw *.wav *.cas);;Sve datoteke (*.*)" + +msgid "Cartridge %i: %ls" +msgstr "Kaseta %i: %ls" + +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "Slike kasete (*.a *.b *.jrc);;Sve datoteke (*.*)" + +msgid "Error initializing renderer" +msgstr "Nije moguće inicijalizirati renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "Nije moguće inicijalizirati OpenGL (3.0 jezgra) renderer. Molimte koristite drugi renderer." + +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + +msgid "Hard disk (%s)" +msgstr "Tvrdi disk (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL ili ESDI CD-ROM pogoni nisu nikada postojali" + +msgid "Custom..." +msgstr "Prilagođeno..." + +msgid "Custom (large)..." +msgstr "Prilagođeno (veliko)..." + +msgid "Add New Hard Disk" +msgstr "Dodajte novi tvrdi disk" + +msgid "Add Existing Hard Disk" +msgstr "Dodajte postojeći tvrdi disk" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "HDI disk image datoteke ne mogu biti veće od 4 GB." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Slike tvrdog diska ne mogu biti veće od 127 GB." + +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Slike za tvrde diskove (*.hd? *.im? *.vhd);;Sve datoteke (*.*)" + +msgid "Unable to read file" +msgstr "Nije moguće pročitati datoteku" + +msgid "Unable to write file" +msgstr "Nije moguće napisati datoteku" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "HDI ili HDX slike s veličinom sektora koja nije 512 kB nisu podržane." + +msgid "USB is not yet supported" +msgstr "USB nije još podržano" + +msgid "Disk image file already exists" +msgstr "Slika diska već postoji" + +msgid "Please specify a valid file name." +msgstr "Molimte unesite važeći naziv datoteke." + +msgid "Disk image created" +msgstr "Slika je stvorena" + +msgid "Make sure the file exists and is readable." +msgstr "Provjerite je li postoji datoteka i je li čitljiva." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Provjerite je li se datoteka sprema u mapu s dopuštenjima za pisanje." + +msgid "Disk image too large" +msgstr "Slika diska je prevelika" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Ne zaboravite stvoriti particije i formatirati ih na novom disku." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Odabrana datoteka bit će prebrisana. Jeste li sigurni da želite koristiti ovu daoteku?" + +msgid "Unsupported disk image" +msgstr "Nepodržana slika diska" + +msgid "Overwrite" +msgstr "Prepiši" + +msgid "Don't overwrite" +msgstr "Ne prepiši" + +msgid "Raw image (.img)" +msgstr "Slika neobrađenih podataka (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDI slika (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDX slika (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD fiksne veličine (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD dinamičke veličine (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Različiti VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Veliki blokovi (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Mali blokovi (512 KB)" + +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "VHD slike (*.vhd);;Sve datoteke (*.*)" + +msgid "Select the parent VHD" +msgstr "Izaberi matičnu sliku VHD" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "To bi moglo značiti da je matična slika promijenjena nakon što je stvorena različita slika.\n\nTo se također može dogoditi ako su slike premještene ili kopirane, ili greška u programu koji je stvorio ovaj disk.\n\nŽelite li popraviti vremenske oznake?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Vremenske ozanke matične i poređenog diska ne odgovaraju." + +msgid "Could not fix VHD timestamp." +msgstr "Ne mogu popraviti vremensku oznaku slike VHD." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1,2 MB" + +msgid "1.25 MB" +msgstr "1,25 MB" + +msgid "1.44 MB" +msgstr "1,44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (1024 clusteri)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (2048 clusteri)" + +msgid "2.88 MB" +msgstr "2,88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3,5\" 128Mb M.O. (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3,5\" 230Mb M.O. (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3,5\" 540Mb M.O. (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3,5\" 640Mb M.O. (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3,5\" 1.3Gb M.O. (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3,5\" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5,25\" 600Mb M.O." + +msgid "5.25\" 650Mb M.O." +msgstr "5,25\" 650Mb M.O." + +msgid "5.25\" 1Gb M.O." +msgstr "5,25\" 1Gb M.O." + +msgid "5.25\" 1.3Gb M.O." +msgstr "5,25\" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "Savršeni broj okretaja u minuti" + +msgid "1%% below perfect RPM" +msgstr "1%% ispod savršenog broja okretaja" + +msgid "1.5%% below perfect RPM" +msgstr "1,5%% ispod savršenog broja okretaja" + +msgid "2%% below perfect RPM" +msgstr "2%% ispod savršenog broja okretaja" + +msgid "(System Default)" +msgstr "(Zadana postavka operativnog sustava)" + diff --git a/src/qt/languages/hu-HU.po b/src/qt/languages/hu-HU.po index 94bf0ed5c..aab48983e 100644 --- a/src/qt/languages/hu-HU.po +++ b/src/qt/languages/hu-HU.po @@ -1,1191 +1,1191 @@ -msgid "&Action" -msgstr "&Művelet" - -msgid "&Keyboard requires capture" -msgstr "A &billentyűzet elfogást igényel" - -msgid "&Right CTRL is left ALT" -msgstr "A &jobb oldali CTRL a bal ALT" - -msgid "&Hard Reset..." -msgstr "Hardveres &újraindítás..." - -msgid "&Ctrl+Alt+Del\tCtrl+F12" -msgstr "&Ctrl+Alt+Del\tCtrl+F12" - -msgid "Ctrl+Alt+&Esc" -msgstr "Ctrl+Alt+&Esc" - -msgid "&Pause" -msgstr "&Szüneteltetés" - -msgid "E&xit..." -msgstr "&Kilépés..." - -msgid "&View" -msgstr "&Nézet" - -msgid "&Hide status bar" -msgstr "Állapotsor &elrejtése" - -msgid "Hide &toolbar" -msgstr "Hide &toolbar" - -msgid "&Resizeable window" -msgstr "&Átméretezhető ablak" - -msgid "R&emember size && position" -msgstr "Méret és pozíció &megjegyzése" - -msgid "Re&nderer" -msgstr "&Megjelenítő" - -msgid "&SDL (Software)" -msgstr "&SDL (Szoftveres)" - -msgid "SDL (&Hardware)" -msgstr "SDL (&Hardveres)" - -msgid "SDL (&OpenGL)" -msgstr "SDL (&OpenGL)" - -msgid "Open&GL (3.0 Core)" -msgstr "Open&GL (3.0 Core)" - -msgid "&VNC" -msgstr "&VNC" - -msgid "Specify dimensions..." -msgstr "Méretek kézi megadása..." - -msgid "F&orce 4:3 display ratio" -msgstr "&Rögzített 4:3 képarány" - -msgid "&Window scale factor" -msgstr "&Ablak méretezési tényező" - -msgid "&0.5x" -msgstr "&0,5x" - -msgid "&1x" -msgstr "&1x" - -msgid "1.&5x" -msgstr "1,&5x" - -msgid "&2x" -msgstr "&2x" - -msgid "Filter method" -msgstr "Szűrési mód" - -msgid "&Nearest" -msgstr "&Szomszédos" - -msgid "&Linear" -msgstr "&Lineáris" - -msgid "Hi&DPI scaling" -msgstr "Hi&DPI méretezés" - -msgid "&Fullscreen\tCtrl+Alt+PageUP" -msgstr "&Teljes képernyő\tCtrl+Alt+PageUP" - -msgid "Fullscreen &stretch mode" -msgstr "Teljes képernyős &méretezés" - -msgid "&Full screen stretch" -msgstr "&Nyújtás a teljes képernyőre" - -msgid "&4:3" -msgstr "&4:3" - -msgid "&Square pixels (Keep ratio)" -msgstr "&Négyzetes képpontok (aránytartás)" - -msgid "&Integer scale" -msgstr "&Egész tényezős nagyítás" - -msgid "E&GA/(S)VGA settings" -msgstr "E&GA/(S)VGA beállítások" - -msgid "&Inverted VGA monitor" -msgstr "&Invertált VGA kijelző" - -msgid "VGA screen &type" -msgstr "VGA képernyő &típusa" - -msgid "RGB &Color" -msgstr "RGB &színes" - -msgid "&RGB Grayscale" -msgstr "&RGB szürkeárnyalatos" - -msgid "&Amber monitor" -msgstr "&Gyömbér kijelző" - -msgid "&Green monitor" -msgstr "&Zöld kijelző" - -msgid "&White monitor" -msgstr "&Fehér kijelző" - -msgid "Grayscale &conversion type" -msgstr "Szürkéskála &konzerziós eljárás" - -msgid "BT&601 (NTSC/PAL)" -msgstr "BT&601 (NTSC/PAL)" - -msgid "BT&709 (HDTV)" -msgstr "BT&709 (HDTV)" - -msgid "&Average" -msgstr "&Átlag szerint" - -msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" -msgstr "CGA/PCjr/Tandy/E&GA/(S)VGA túlpásztázás" - -msgid "Change contrast for &monochrome display" -msgstr "Kontraszt illesztése &monokróm kijelzőhöz" - -msgid "&Media" -msgstr "&Média" - -msgid "&Tools" -msgstr "&Eszközök" - -msgid "&Settings..." -msgstr "&Konfigurálás..." - -msgid "&Update status bar icons" -msgstr "Állapotsori ikonok &frissítése" - -msgid "Take s&creenshot\tCtrl+F11" -msgstr "&Képernyőkép készítése\tCtrl+F11" - -msgid "&Preferences..." -msgstr "&Beállítások..." - -msgid "Enable &Discord integration" -msgstr "&Discord integráció engedélyezése" - -msgid "Sound &gain..." -msgstr "&Hangerőszabályzó..." - -msgid "Begin trace\tCtrl+T" -msgstr "Nyomkövetés megkezdése\tCtrl+T" - -msgid "End trace\tCtrl+T" -msgstr "Nyomkövetés befejezése\tCtrl+T" - -msgid "&Logging" -msgstr "&Naplózás" - -msgid "Enable BusLogic logs\tCtrl+F4" -msgstr "BusLogic naplók engedélyezése\tCtrl+F4" - -msgid "Enable CD-ROM logs\tCtrl+F5" -msgstr "CD-ROM naplók engedélyezése\tCtrl+F5" - -msgid "Enable floppy (86F) logs\tCtrl+F6" -msgstr "Hajlékonylemez (86F) naplók engedélyezése\tCtrl+F6" - -msgid "Enable floppy controller logs\tCtrl+F7" -msgstr "Hajlékonylemez-vezérlő naplók engedélyezése\tCtrl+F7" - -msgid "Enable IDE logs\tCtrl+F8" -msgstr "IDE naplók engedélyezése\tCtrl+F8" - -msgid "Enable Serial Port logs\tCtrl+F3" -msgstr "Soros port naplók engedélyezése\tCtrl+F3" - -msgid "Enable Network logs\tCtrl+F9" -msgstr "Hálózati naplók engedélyezése\tCtrl+F9" - -msgid "&Log breakpoint\tCtrl+F10" -msgstr "Töréspontok &naplózása\tCtrl+F10" - -msgid "Dump &video RAM\tCtrl+F1" -msgstr "&Videómemória lementése\tCtrl+F1" - -msgid "&Help" -msgstr "&Súgó" - -msgid "&Documentation..." -msgstr "&Dokumentáció..." - -msgid "&About 86Box..." -msgstr "A 86Box &névjegye..." - -msgid "&New image..." -msgstr "&Új képfájl létrehozása..." - -msgid "&Existing image..." -msgstr "Meglévő képfájl &megnyitása..." - -msgid "Existing image (&Write-protected)..." -msgstr "Meglévő képfájl megnyitása (&írásvédett)..." - -msgid "&Record" -msgstr "&Felvétel" - -msgid "&Play" -msgstr "&Lejátszás" - -msgid "&Rewind to the beginning" -msgstr "&Visszatekerés az elejére" - -msgid "&Fast forward to the end" -msgstr "&Előretekerés a végére" - -msgid "E&ject" -msgstr "&Kiadás" - -msgid "&Image..." -msgstr "Kép&fájl..." - -msgid "E&xport to 86F..." -msgstr "E&xportálás 86F formátumba..." - -msgid "&Mute" -msgstr "&Némítás" - -msgid "E&mpty" -msgstr "&Kiadás" - -msgid "&Reload previous image" -msgstr "Előző képfájl &újratöltése" - -msgid "&Image" -msgstr "&Meglévő képfájl &megnyitása..." - -msgid "Target &framerate" -msgstr "Cél &képkockasebesség" - -msgid "&Sync with video" -msgstr "&Szinkronizálás a videóval " - -msgid "&25 fps" -msgstr "&25 fps" - -msgid "&30 fps" -msgstr "&30 fps" - -msgid "&50 fps" -msgstr "&50 fps" - -msgid "&60 fps" -msgstr "&60 fps" - -msgid "&75 fps" -msgstr "&75 fps" - -msgid "&VSync" -msgstr "&VSync" - -msgid "&Select shader..." -msgstr "Shader &kiválasztása..." - -msgid "&Remove shader" -msgstr "Shader &eltávolítása" - -msgid "Preferences" -msgstr "Beállítások" - -msgid "Sound Gain" -msgstr "Hangerőszabályzó" - -msgid "New Image" -msgstr "Új képfájl létrehozása" - -msgid "Settings" -msgstr "Konfigurálás" - -msgid "Specify Main Window Dimensions" -msgstr "Főablak méreteinek megadása" - -msgid "OK" -msgstr "OK" - -msgid "Cancel" -msgstr "Mégse" - -msgid "Save these settings as &global defaults" -msgstr "Beállítások mentése &globális alapértékként" - -msgid "&Default" -msgstr "&Alapértelmezett" - -msgid "Language:" -msgstr "Nyelv:" - -msgid "Icon set:" -msgstr "Ikonkészlet:" - -msgid "Gain" -msgstr "Hangerő" - -msgid "File name:" -msgstr "Fájlnév:" - -msgid "Disk size:" -msgstr "Méret:" - -msgid "RPM mode:" -msgstr "RPM-mód:" - -msgid "Progress:" -msgstr "Folyamat:" - -msgid "Width:" -msgstr "Szélesség:" - -msgid "Height:" -msgstr "Magasság:" - -msgid "Lock to this size" -msgstr "Rögzítés a megadott méretre" - -msgid "Machine type:" -msgstr "Géptípus:" - -msgid "Machine:" -msgstr "Számítógép:" - -msgid "Configure" -msgstr "Beállítások..." - -msgid "CPU type:" -msgstr "Processzor:" - -msgid "Speed:" -msgstr "Seb.:" - -msgid "FPU:" -msgstr "FPU-egység:" - -msgid "Wait states:" -msgstr "Várak. ciklusok:" - -msgid "MB" -msgstr "MB" - -msgid "Memory:" -msgstr "Memória:" - -msgid "Time synchronization" -msgstr "Idő szinkronizáció" - -msgid "Disabled" -msgstr "Letiltva" - -msgid "Enabled (local time)" -msgstr "Engedélyezve (helyi idő)" - -msgid "Enabled (UTC)" -msgstr "Engedélyezve (UTC)" - -msgid "Dynamic Recompiler" -msgstr "Dinamikus újrafordítás" - -msgid "Video:" -msgstr "Videokártya:" - -msgid "Voodoo Graphics" -msgstr "Voodoo-gyorsítókártya" - -msgid "Mouse:" -msgstr "Egér:" - -msgid "Joystick:" -msgstr "Játékvezérlő:" - -msgid "Joystick 1..." -msgstr "Játékvez. 1..." - -msgid "Joystick 2..." -msgstr "Játékvez. 2..." - -msgid "Joystick 3..." -msgstr "Játékvez. 3..." - -msgid "Joystick 4..." -msgstr "Játékvez. 4..." - -msgid "Sound card:" -msgstr "Hangkártya:" - -msgid "MIDI Out Device:" -msgstr "MIDI-kimenet:" - -msgid "MIDI In Device:" -msgstr "MIDI-bemenet:" - -msgid "Standalone MPU-401" -msgstr "Különálló MPU-401" - -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - -msgid "Use FLOAT32 sound" -msgstr "FLOAT32 használata" - -msgid "Network type:" -msgstr "Hálózati típusa:" - -msgid "PCap device:" -msgstr "PCap eszköz:" - -msgid "Network adapter:" -msgstr "Hálózati kártya:" - -msgid "LPT1 Device:" -msgstr "LPT1 eszköz:" - -msgid "LPT2 Device:" -msgstr "LPT2 eszköz:" - -msgid "LPT3 Device:" -msgstr "LPT3 eszköz:" - -msgid "Serial port 1" -msgstr "Soros port 1" - -msgid "Serial port 2" -msgstr "Soros port 2" - -msgid "Serial port 3" -msgstr "Soros port 3" - -msgid "Serial port 4" -msgstr "Soros port 4" - -msgid "Parallel port 1" -msgstr "Párhuzamos port 1" - -msgid "Parallel port 2" -msgstr "Párhuzamos port 2" - -msgid "Parallel port 3" -msgstr "Párhuzamos port 3" - -msgid "HD Controller:" -msgstr "Merevl.-vezérlő:" - -msgid "FD Controller:" -msgstr "Floppy-vezérlő:" - -msgid "Tertiary IDE Controller" -msgstr "Harmadlagos IDE-vezérlő" - -msgid "Quaternary IDE Controller" -msgstr "Negyedleges IDE-vezérlő" - -msgid "SCSI" -msgstr "SCSI" - -msgid "Controller 1:" -msgstr "Gazdaadapt. 1:" - -msgid "Controller 2:" -msgstr "Gazdaadapt. 2:" - -msgid "Controller 3:" -msgstr "Gazdaadapt. 3:" - -msgid "Controller 4:" -msgstr "Gazdaadapt. 4:" - -msgid "Cassette" -msgstr "Magnókazetta" - -msgid "Hard disks:" -msgstr "Merevlemezek:" - -msgid "&New..." -msgstr "&Új..." - -msgid "&Existing..." -msgstr "&Megnyitás..." - -msgid "&Remove" -msgstr "&Eltávolítás" - -msgid "Bus:" -msgstr "Busz:" - -msgid "Channel:" -msgstr "Csatorna:" - -msgid "ID:" -msgstr "ID:" - -msgid "&Specify..." -msgstr "&Kiválasztás..." - -msgid "Sectors:" -msgstr "Szektor:" - -msgid "Heads:" -msgstr "Fej:" - -msgid "Cylinders:" -msgstr "Cilinder:" - -msgid "Size (MB):" -msgstr "Méret (MB):" - -msgid "Type:" -msgstr "Típus:" - -msgid "Image Format:" -msgstr "Formátum:" - -msgid "Block Size:" -msgstr "Blokkméret:" - -msgid "Floppy drives:" -msgstr "Floppy-meghajtók:" - -msgid "Turbo timings" -msgstr "Turbó időzítés" - -msgid "Check BPB" -msgstr "BPB ellenőrzés" - -msgid "CD-ROM drives:" -msgstr "CD-ROM meghajtók:" - -msgid "MO drives:" -msgstr "MO-meghajtók:" - -msgid "ZIP drives:" -msgstr "ZIP-meghajtók:" - -msgid "ZIP 250" -msgstr "ZIP 250" - -msgid "ISA RTC:" -msgstr "ISA RTC (óra):" - -msgid "ISA Memory Expansion" -msgstr "ISA memóriabővítők" - -msgid "Card 1:" -msgstr "Kártya 1:" - -msgid "Card 2:" -msgstr "Kártya 2:" - -msgid "Card 3:" -msgstr "Kártya 3:" - -msgid "Card 4:" -msgstr "Kártya 4:" - -msgid "ISABugger device" -msgstr "ISABugger eszköz" - -msgid "POST card" -msgstr "POST kártya" - -msgid "FONT_SIZE" -msgstr "9" - -msgid "FONT_NAME" -msgstr "Segoe UI" - -msgid "86Box" -msgstr "86Box" - -msgid "Error" -msgstr "Hiba" - -msgid "Fatal error" -msgstr "Végzetes hiba" - -msgid "" -msgstr "" - -msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." -msgstr "Használja a CTRL+ALT+PAGE DOWN gombokat az ablakhoz való visszatéréshez." - -msgid "Speed" -msgstr "Sebesség" - -msgid "ZIP %03i %i (%s): %ls" -msgstr "ZIP %03i %i (%s): %ls" - -msgid "ZIP images (*.im? *.zdi)" -msgstr "ZIP-lemezképek (*.im? *.zdi)" - -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "A 86Box nem talált használható ROM-képeket\n\nKérem töltse le a ROM készletet és bontsa ki a \"roms\" könyvtárba." - -msgid "(empty)" -msgstr "(üres)" - -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "ZIP-lemezképek (*.im? *.zdi);;Minden fájl (*.*)" - -msgid "Turbo" -msgstr "Turbó" - -msgid "On" -msgstr "Bekapcsolva" - -msgid "Off" -msgstr "Kikapcsolva" - -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "Minden képfájl (*.86f *.dsk *.flp *.im? *.*fd?);;Alapvető szektor képfájlok (*.dsk *.flp *.im? *.img *.*fd?);;Felületi képfájlok (*.86f)" - -msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "A számítógép \"%hs\" nem elérhető a \"roms/machines\" mappából hiányzó ROM-képek miatt. Ehelyett egy másik gép kerül futtatásra." - -msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "A videokártya \"%hs\" nem elérhető a \"roms/video\" mappából hiányzó ROM-képek miatt. Ehelyett egy másik kártya kerül futtatásra." - -msgid "Machine" -msgstr "Számítógép" - -msgid "Display" -msgstr "Megjelenítő" - -msgid "Input devices" -msgstr "Beviteli eszközök" - -msgid "Sound" -msgstr "Hang" - -msgid "Network" -msgstr "Hálózat" - -msgid "Ports (COM & LPT)" -msgstr "Portok (COM és LPT)" - -msgid "Storage controllers" -msgstr "Tárolóvezérlők" - -msgid "Hard disks" -msgstr "Merevlemezek" - -msgid "Floppy & CD-ROM drives" -msgstr "Floppy és CD-ROM meghajtók" - -msgid "Other removable devices" -msgstr "Egyéb cserélhető tárolók" - -msgid "Other peripherals" -msgstr "Egyéb perifériák" - -msgid "Surface images (*.86f)" -msgstr "Felületi képfájlok (*.86f)" - -msgid "Click to capture mouse" -msgstr "Kattintson az egér elfogásához" - -msgid "Press F8+F12 to release mouse" -msgstr "Nyomja meg az F8+F12-t az egér elengédéséhez" - -msgid "Press F8+F12 or middle button to release mouse" -msgstr "Nyomja meg az F8+F12-t vagy a középső gombot az egér elengédéséhez" - -msgid "Unable to initialize FluidSynth" -msgstr "Nem sikerült a FluidSynth inicializálása" - -msgid "Bus" -msgstr "Busz" - -msgid "File" -msgstr "Fájl" - -msgid "C" -msgstr "C" - -msgid "H" -msgstr "H" - -msgid "S" -msgstr "S" - -msgid "KB" -msgstr "KB" - -msgid "Could not initialize the video renderer." -msgstr "Nem sikerült inicializálni a videó megjelenítőt." - -msgid "Default" -msgstr "Alapértelmezett" - -msgid "%i Wait state(s)" -msgstr "%i várakozási ciklus(ok)" - -msgid "Type" -msgstr "Típus" - -msgid "Failed to set up PCap" -msgstr "Nem sikerült a PCap beállítása" - -msgid "No PCap devices found" -msgstr "Nem találhatóak PCap eszközök" - -msgid "Invalid PCap device" -msgstr "Érvénytelen PCap eszköz" - -msgid "Standard 2-button joystick(s)" -msgstr "Szabványos 2-gombos játékvezérlő(k)" - -msgid "Standard 4-button joystick" -msgstr "Szabványos 4-gombos játékvezérlő" - -msgid "Standard 6-button joystick" -msgstr "Szabványos 6-gombos játékvezérlő" - -msgid "Standard 8-button joystick" -msgstr "Szabványos 8-gombos játékvezérlő" - -msgid "CH Flightstick Pro" -msgstr "CH Flightstick Pro" - -msgid "Microsoft SideWinder Pad" -msgstr "Microsoft SideWinder Pad" - -msgid "Thrustmaster Flight Control System" -msgstr "Thrustmaster Flight Control System" - -msgid "None" -msgstr "Nincs" - -msgid "Unable to load keyboard accelerators." -msgstr "Nem lehet betölteni a billentyűzetgyorsítókat." - -msgid "Unable to register raw input." -msgstr "A közvetlen nyers bevitel regisztrálása nem sikerült." - -msgid "%u" -msgstr "%u" - -msgid "%u MB (CHS: %i, %i, %i)" -msgstr "%u MB (CHS: %i, %i, %i)" - -msgid "Floppy %i (%s): %ls" -msgstr "Floppy %i (%s): %ls" - -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "Minden képfájl (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Továbbfejlesztett szektor képek (*.imd *.json *.td0);;Alapvető szektor képek (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux képekfájlok (*.fdi);;Felületi képfájlok (*.86f *.mfm);;Minden fájl (*.*)" - -msgid "Unable to initialize FreeType" -msgstr "A FreeType inicializálása nem lehetséges" - -msgid "Unable to initialize SDL, SDL2.dll is required" -msgstr "Az SDL inicializálása nem lehetséges, az SDL2.dll fájl szükséges" - -msgid "Are you sure you want to hard reset the emulated machine?" -msgstr "Biztosan szeretné újraindítani az emulált gépet?" - -msgid "Are you sure you want to exit 86Box?" -msgstr "Biztos benne, hogy ki szeretne lépni a 86Box-ból?" - -msgid "Unable to initialize Ghostscript" -msgstr "Nem sikerült inicializálni a Ghostscript-et" - -msgid "MO %i (%ls): %ls" -msgstr "MO %i (%ls): %ls" - -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "MO-képfájlok (*.im? *.mdi);;Minden fájl (*.*)" - -msgid "Welcome to 86Box!" -msgstr "Üdvözli önt az 86Box!" - -msgid "Internal controller" -msgstr "Integrált vezérlő" - -msgid "Exit" -msgstr "Kilépés" - -msgid "No ROMs found" -msgstr "Nem találhatóak meg a ROM-képek" - -msgid "Do you want to save the settings?" -msgstr "Szeretné menteni a beállításokat?" - -msgid "This will hard reset the emulated machine." -msgstr "Ezzel hardveresen újraindítja az emulált gépet." - -msgid "Save" -msgstr "Mentés" - -msgid "About 86Box" -msgstr "A 86Box névjegye" - -msgid "86Box v" -msgstr "86Box v" - -msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "Régi számítógépek emulátora\n\nFejlesztők: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nFordította: Laci bá'\n\nMegjelent a GNU General Public License v2 vagy újabb alatt. További információért lásd a LICENSE fájlt." - -msgid "Hardware not available" -msgstr "Hardver nem elérhető" - -msgid "WinPcap" -msgstr "WinPcap" - -msgid "libpcap" -msgstr "libpcap" - -msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." -msgstr "Győződjön meg hogy a(z) libpcap telepítve van és jelenleg a libpcap-kompatibilis kapcsolatot használja." - -msgid "Invalid configuration" -msgstr "Érvénytelen konfiguráció" - -msgid "freetype.dll" -msgstr "freetype.dll" - -msgid "libfreetype" -msgstr "libfreetype" - -msgid " is required for ESC/P printer emulation." -msgstr " szükséges az ESC/P nyomtató emulációhoz." - -msgid "gsdll32.dll" -msgstr "gsdll32.dll" - -msgid "libgs" -msgstr "libgs" - -msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." -msgstr " szükséges a PostScript fájlok PDF formátumba való automatikus konvertálásához.\n\nAz általános PostScript nyomtatóra küldött dokumentumok PostScript (.ps) fájlként kerülnek mentésre." - -msgid "libfluidsynth.dll" -msgstr "libfluidsynth.dll" - -msgid "libfluidsynth" -msgstr "libfluidsynth" - -msgid " is required for FluidSynth MIDI output." -msgstr " szükséges a FluidSynth MIDI kimenethez." - -msgid "Entering fullscreen mode" -msgstr "Teljes képernyős módra váltás" - -msgid "Don't show this message again" -msgstr "Ne jelenítse meg újra ezt az üzenetet " - -msgid "Don't exit" -msgstr "Ne lépjen ki" - -msgid "Reset" -msgstr "Újraindítás" - -msgid "Don't reset" -msgstr "Ne indítsa újra" - -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "CD-ROM-képek (*.iso *.cue);;Minden fájl (*.*)" - -msgid "%hs Device Configuration" -msgstr "%hs eszközkonfiguráció" - -msgid "Monitor in sleep mode" -msgstr "Képernyő alvó módban" - -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "OpenGL Shaderek (*.glsl);;Minden fájl (*.*)" - -msgid "OpenGL options" -msgstr "OpenGL beállítások" - -msgid "You are loading an unsupported configuration" -msgstr "Egy nem támogatott konfigurációt tölt be" - -msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "A kiválasztott gépen alapuló CPU-típusszűrés le van tiltva ezen az emulált gépen.\n\nEz lehetővé teszi olyan CPU kiválasztását, amely egyébként nem kompatibilis a kiválasztott géppel. Előfordulhat azonban, hogy nem kompatibilis a gép BIOS-ával vagy más szoftverekkel.\n\nA beállítás engedélyezése hivatalosan nem támogatott, és a benyújtott hibajelentéseket érvénytelenként lezárhatjuk." - -msgid "Continue" -msgstr "Folytatás" - -msgid "Cassette: %s" -msgstr "Magnókazetta: %s" - -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Magnókazetta-képek (*.pcm *.raw *.wav *.cas);;Minden fájl (*.*)" - -msgid "Cartridge %i: %ls" -msgstr "ROM-kazetta %i: %ls" - -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "ROM-kazetta képek (*.a *.b *.jrc);;Minden fájl (*.*)" - -msgid "Error initializing renderer" -msgstr "Hiba történt a renderelő inicializálásakor" - -msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "Az OpenGL (3.0 Core) megjelenítő-motort nem sikerült inicializálni. Kérem használjon másik renderelőt." - -msgid "Resume execution" -msgstr "Resume execution" - -msgid "Pause execution" -msgstr "Pause execution" - -msgid "Press Ctrl+Alt+Del" -msgstr "Press Ctrl+Alt+Del" - -msgid "Press Ctrl+Alt+Esc" -msgstr "Press Ctrl+Alt+Esc" - -msgid "Hard reset" -msgstr "Hard reset" - -msgid "ACPI shutdown" -msgstr "ACPI shutdown" - -msgid "Hard disk (%s)" -msgstr "Merevlemez (%s)" - -msgid "%01i:%01i" -msgstr "%01i:%01i" - -msgid "%01i" -msgstr "%01i" - -msgid "MFM/RLL or ESDI CD-ROM drives never existed" -msgstr "MFM/RLL vagy ESDI CD-ROM meghajtók soha nem léteztek" - -msgid "Custom..." -msgstr "Egyéni..." - -msgid "Custom (large)..." -msgstr "Egyéni (nagy)..." - -msgid "Add New Hard Disk" -msgstr "Új merevlemez hozzáadása" - -msgid "Add Existing Hard Disk" -msgstr "Meglévő merevlemez hozzáadása" - -msgid "HDI disk images cannot be larger than 4 GB." -msgstr "A HDI lemezképek nem lehetnek nagyobbak 4 GB-nál." - -msgid "Disk images cannot be larger than 127 GB." -msgstr "A lemezképek mérete nem haladhatja meg a 127 GB-ot." - -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Merevlemez-képfájlok (*.hd? *.im? *.vhd);;Minden fájl (*.*)" - -msgid "Unable to read file" -msgstr "A fájl nem olvasható" - -msgid "Unable to write file" -msgstr "A fájl nem írható" - -msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "Az 512-től eltérő szektorméretű HDI vagy HDX képek nem támogatottak." - -msgid "USB is not yet supported" -msgstr "Az USB még nem támogatott" - -msgid "Disk image file already exists" -msgstr "A lemezképfájl már létezik" - -msgid "Please specify a valid file name." -msgstr "Adjon meg egy érvényes fájlnevet." - -msgid "Disk image created" -msgstr "A lemezképfájl létrehozásra került" - -msgid "Make sure the file exists and is readable." -msgstr "Győződjön meg arról, hogy a fájl létezik és olvasható." - -msgid "Make sure the file is being saved to a writable directory." -msgstr "Győződjön meg arról, hogy a fájlt egy írható könyvtárba menti." - -msgid "Disk image too large" -msgstr "A lemezképfájl túl nagy" - -msgid "Remember to partition and format the newly-created drive." -msgstr "Ne felejtse el particionálni és formázni az újonnan létrehozott meghajtót." - -msgid "The selected file will be overwritten. Are you sure you want to use it?" -msgstr "A kiválasztott fájl felülírásra kerül. Biztos, hogy ezt kívánja használni?" - -msgid "Unsupported disk image" -msgstr "Nem támogatott lemezkép" - -msgid "Overwrite" -msgstr "Felülírás" - -msgid "Don't overwrite" -msgstr "Ne írja felül" - -msgid "Raw image (.img)" -msgstr "Nyers lemezkép (.img)" - -msgid "HDI image (.hdi)" -msgstr "HDI-lemezkép (.hdi)" - -msgid "HDX image (.hdx)" -msgstr "HDX-lemezkép (.hdx)" - -msgid "Fixed-size VHD (.vhd)" -msgstr "Rögzített méretű VHD (.vhd)" - -msgid "Dynamic-size VHD (.vhd)" -msgstr "Dinamikusan bővülő VHD (.vhd)" - -msgid "Differencing VHD (.vhd)" -msgstr "Különbség-VHD (.vhd)" - -msgid "Large blocks (2 MB)" -msgstr "Nagy blokkméret (2 MB)" - -msgid "Small blocks (512 KB)" -msgstr "Kis blokkméret (512 KB)" - -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "VHD fájlok (*.vhd);;Minden fájl (*.*)" - -msgid "Select the parent VHD" -msgstr "Válassza ki a szülő VHD-t" - -msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" -msgstr "Ez azt jelentheti, hogy a szülőkép módosult az eltérő kép létrehozása után.\n\nEz akkor is előfordulhat, ha a képfájlokat áthelyezték vagy másolták, vagy a lemezt létrehozó program hibája miatt.\n\nSzeretné kijavítani az időbélyegeket?" - -msgid "Parent and child disk timestamps do not match" -msgstr "A szülő- és a gyermeklemez időbélyegei nem egyeznek" - -msgid "Could not fix VHD timestamp." -msgstr "Nem sikerült kijavítani a VHD időbélyegét." - -msgid "%01i:%02i" -msgstr "%01i:%02i" - -msgid "MFM/RLL" -msgstr "MFM/RLL" - -msgid "XTA" -msgstr "XTA" - -msgid "ESDI" -msgstr "ESDI" - -msgid "IDE" -msgstr "IDE" - -msgid "ATAPI" -msgstr "ATAPI" - -msgid "MFM/RLL (%01i:%01i)" -msgstr "MFM/RLL (%01i:%01i)" - -msgid "XTA (%01i:%01i)" -msgstr "XTA (%01i:%01i)" - -msgid "ESDI (%01i:%01i)" -msgstr "ESDI (%01i:%01i)" - -msgid "IDE (%01i:%01i)" -msgstr "IDE (%01i:%01i)" - -msgid "ATAPI (%01i:%01i)" -msgstr "ATAPI (%01i:%01i)" - -msgid "SCSI (%01i:%02i)" -msgstr "SCSI (%01i:%02i)" - -msgid "CD-ROM %i (%s): %s" -msgstr "CD-ROM %i (%s): %s" - -msgid "160 kB" -msgstr "160 kB" - -msgid "180 kB" -msgstr "180 kB" - -msgid "320 kB" -msgstr "320 kB" - -msgid "360 kB" -msgstr "360 kB" - -msgid "640 kB" -msgstr "640 kB" - -msgid "720 kB" -msgstr "720 kB" - -msgid "1.2 MB" -msgstr "1.2 MB" - -msgid "1.25 MB" -msgstr "1.25 MB" - -msgid "1.44 MB" -msgstr "1.44 MB" - -msgid "DMF (cluster 1024)" -msgstr "DMF (1024 klaszter)" - -msgid "DMF (cluster 2048)" -msgstr "DMF (2048 klaszter)" - -msgid "2.88 MB" -msgstr "2.88 MB" - -msgid "ZIP 100" -msgstr "ZIP 100" - -msgid "3.5\" 128Mb M.O. (ISO 10090)" -msgstr "3.5\" 128Mb M.O. (ISO 10090)" - -msgid "3.5\" 230Mb M.O. (ISO 13963)" -msgstr "3.5\" 230Mb M.O. (ISO 13963)" - -msgid "3.5\" 540Mb M.O. (ISO 15498)" -msgstr "3.5\" 540Mb M.O. (ISO 15498)" - -msgid "3.5\" 640Mb M.O. (ISO 15498)" -msgstr "3.5\" 640Mb M.O. (ISO 15498)" - -msgid "3.5\" 1.3Gb M.O. (GigaMO)" -msgstr "3.5\" 1.3Gb M.O. (GigaMO)" - -msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" - -msgid "5.25\" 600Mb M.O." -msgstr "5.25\" 600Mb M.O." - -msgid "5.25\" 650Mb M.O." -msgstr "5.25\" 650Mb M.O." - -msgid "5.25\" 1Gb M.O." -msgstr "5.25\" 1Gb M.O." - -msgid "5.25\" 1.3Gb M.O." -msgstr "5.25\" 1.3Gb M.O." - -msgid "Perfect RPM" -msgstr "Tökéletes RPM" - -msgid "1%% below perfect RPM" -msgstr "1%%-kal a tökéletes RPM alatt" - -msgid "1.5%% below perfect RPM" -msgstr "1.5%%-kal a tökéletes RPM alatt" - -msgid "2%% below perfect RPM" -msgstr "2%%-kal a tökéletes RPM alatt" - -msgid "(System Default)" -msgstr "(A rendszer nyelve)" - +msgid "&Action" +msgstr "&Művelet" + +msgid "&Keyboard requires capture" +msgstr "A &billentyűzet elfogást igényel" + +msgid "&Right CTRL is left ALT" +msgstr "A &jobb oldali CTRL a bal ALT" + +msgid "&Hard Reset..." +msgstr "Hardveres &újraindítás..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Szüneteltetés" + +msgid "E&xit..." +msgstr "&Kilépés..." + +msgid "&View" +msgstr "&Nézet" + +msgid "&Hide status bar" +msgstr "Állapotsor &elrejtése" + +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + +msgid "&Resizeable window" +msgstr "&Átméretezhető ablak" + +msgid "R&emember size && position" +msgstr "Méret és pozíció &megjegyzése" + +msgid "Re&nderer" +msgstr "&Megjelenítő" + +msgid "&SDL (Software)" +msgstr "&SDL (Szoftveres)" + +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardveres)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 Core)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "Méretek kézi megadása..." + +msgid "F&orce 4:3 display ratio" +msgstr "&Rögzített 4:3 képarány" + +msgid "&Window scale factor" +msgstr "&Ablak méretezési tényező" + +msgid "&0.5x" +msgstr "&0,5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1,&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Szűrési mód" + +msgid "&Nearest" +msgstr "&Szomszédos" + +msgid "&Linear" +msgstr "&Lineáris" + +msgid "Hi&DPI scaling" +msgstr "Hi&DPI méretezés" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Teljes képernyő\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Teljes képernyős &méretezés" + +msgid "&Full screen stretch" +msgstr "&Nyújtás a teljes képernyőre" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Négyzetes képpontok (aránytartás)" + +msgid "&Integer scale" +msgstr "&Egész tényezős nagyítás" + +msgid "E&GA/(S)VGA settings" +msgstr "E&GA/(S)VGA beállítások" + +msgid "&Inverted VGA monitor" +msgstr "&Invertált VGA kijelző" + +msgid "VGA screen &type" +msgstr "VGA képernyő &típusa" + +msgid "RGB &Color" +msgstr "RGB &színes" + +msgid "&RGB Grayscale" +msgstr "&RGB szürkeárnyalatos" + +msgid "&Amber monitor" +msgstr "&Gyömbér kijelző" + +msgid "&Green monitor" +msgstr "&Zöld kijelző" + +msgid "&White monitor" +msgstr "&Fehér kijelző" + +msgid "Grayscale &conversion type" +msgstr "Szürkéskála &konzerziós eljárás" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Átlag szerint" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "CGA/PCjr/Tandy/E&GA/(S)VGA túlpásztázás" + +msgid "Change contrast for &monochrome display" +msgstr "Kontraszt illesztése &monokróm kijelzőhöz" + +msgid "&Media" +msgstr "&Média" + +msgid "&Tools" +msgstr "&Eszközök" + +msgid "&Settings..." +msgstr "&Konfigurálás..." + +msgid "&Update status bar icons" +msgstr "Állapotsori ikonok &frissítése" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "&Képernyőkép készítése\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Beállítások..." + +msgid "Enable &Discord integration" +msgstr "&Discord integráció engedélyezése" + +msgid "Sound &gain..." +msgstr "&Hangerőszabályzó..." + +msgid "Begin trace\tCtrl+T" +msgstr "Nyomkövetés megkezdése\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Nyomkövetés befejezése\tCtrl+T" + +msgid "&Logging" +msgstr "&Naplózás" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "BusLogic naplók engedélyezése\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "CD-ROM naplók engedélyezése\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Hajlékonylemez (86F) naplók engedélyezése\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Hajlékonylemez-vezérlő naplók engedélyezése\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "IDE naplók engedélyezése\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Soros port naplók engedélyezése\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Hálózati naplók engedélyezése\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "Töréspontok &naplózása\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "&Videómemória lementése\tCtrl+F1" + +msgid "&Help" +msgstr "&Súgó" + +msgid "&Documentation..." +msgstr "&Dokumentáció..." + +msgid "&About 86Box..." +msgstr "A 86Box &névjegye..." + +msgid "&New image..." +msgstr "&Új képfájl létrehozása..." + +msgid "&Existing image..." +msgstr "Meglévő képfájl &megnyitása..." + +msgid "Existing image (&Write-protected)..." +msgstr "Meglévő képfájl megnyitása (&írásvédett)..." + +msgid "&Record" +msgstr "&Felvétel" + +msgid "&Play" +msgstr "&Lejátszás" + +msgid "&Rewind to the beginning" +msgstr "&Visszatekerés az elejére" + +msgid "&Fast forward to the end" +msgstr "&Előretekerés a végére" + +msgid "E&ject" +msgstr "&Kiadás" + +msgid "&Image..." +msgstr "Kép&fájl..." + +msgid "E&xport to 86F..." +msgstr "E&xportálás 86F formátumba..." + +msgid "&Mute" +msgstr "&Némítás" + +msgid "E&mpty" +msgstr "&Kiadás" + +msgid "&Reload previous image" +msgstr "Előző képfájl &újratöltése" + +msgid "&Image" +msgstr "&Meglévő képfájl &megnyitása..." + +msgid "Target &framerate" +msgstr "Cél &képkockasebesség" + +msgid "&Sync with video" +msgstr "&Szinkronizálás a videóval " + +msgid "&25 fps" +msgstr "&25 fps" + +msgid "&30 fps" +msgstr "&30 fps" + +msgid "&50 fps" +msgstr "&50 fps" + +msgid "&60 fps" +msgstr "&60 fps" + +msgid "&75 fps" +msgstr "&75 fps" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "Shader &kiválasztása..." + +msgid "&Remove shader" +msgstr "Shader &eltávolítása" + +msgid "Preferences" +msgstr "Beállítások" + +msgid "Sound Gain" +msgstr "Hangerőszabályzó" + +msgid "New Image" +msgstr "Új képfájl létrehozása" + +msgid "Settings" +msgstr "Konfigurálás" + +msgid "Specify Main Window Dimensions" +msgstr "Főablak méreteinek megadása" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Mégse" + +msgid "Save these settings as &global defaults" +msgstr "Beállítások mentése &globális alapértékként" + +msgid "&Default" +msgstr "&Alapértelmezett" + +msgid "Language:" +msgstr "Nyelv:" + +msgid "Icon set:" +msgstr "Ikonkészlet:" + +msgid "Gain" +msgstr "Hangerő" + +msgid "File name:" +msgstr "Fájlnév:" + +msgid "Disk size:" +msgstr "Méret:" + +msgid "RPM mode:" +msgstr "RPM-mód:" + +msgid "Progress:" +msgstr "Folyamat:" + +msgid "Width:" +msgstr "Szélesség:" + +msgid "Height:" +msgstr "Magasság:" + +msgid "Lock to this size" +msgstr "Rögzítés a megadott méretre" + +msgid "Machine type:" +msgstr "Géptípus:" + +msgid "Machine:" +msgstr "Számítógép:" + +msgid "Configure" +msgstr "Beállítások..." + +msgid "CPU type:" +msgstr "Processzor:" + +msgid "Speed:" +msgstr "Seb.:" + +msgid "FPU:" +msgstr "FPU-egység:" + +msgid "Wait states:" +msgstr "Várak. ciklusok:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Memória:" + +msgid "Time synchronization" +msgstr "Idő szinkronizáció" + +msgid "Disabled" +msgstr "Letiltva" + +msgid "Enabled (local time)" +msgstr "Engedélyezve (helyi idő)" + +msgid "Enabled (UTC)" +msgstr "Engedélyezve (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Dinamikus újrafordítás" + +msgid "Video:" +msgstr "Videokártya:" + +msgid "Voodoo Graphics" +msgstr "Voodoo-gyorsítókártya" + +msgid "Mouse:" +msgstr "Egér:" + +msgid "Joystick:" +msgstr "Játékvezérlő:" + +msgid "Joystick 1..." +msgstr "Játékvez. 1..." + +msgid "Joystick 2..." +msgstr "Játékvez. 2..." + +msgid "Joystick 3..." +msgstr "Játékvez. 3..." + +msgid "Joystick 4..." +msgstr "Játékvez. 4..." + +msgid "Sound card:" +msgstr "Hangkártya:" + +msgid "MIDI Out Device:" +msgstr "MIDI-kimenet:" + +msgid "MIDI In Device:" +msgstr "MIDI-bemenet:" + +msgid "Standalone MPU-401" +msgstr "Különálló MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "FLOAT32 használata" + +msgid "Network type:" +msgstr "Hálózati típusa:" + +msgid "PCap device:" +msgstr "PCap eszköz:" + +msgid "Network adapter:" +msgstr "Hálózati kártya:" + +msgid "LPT1 Device:" +msgstr "LPT1 eszköz:" + +msgid "LPT2 Device:" +msgstr "LPT2 eszköz:" + +msgid "LPT3 Device:" +msgstr "LPT3 eszköz:" + +msgid "Serial port 1" +msgstr "Soros port 1" + +msgid "Serial port 2" +msgstr "Soros port 2" + +msgid "Serial port 3" +msgstr "Soros port 3" + +msgid "Serial port 4" +msgstr "Soros port 4" + +msgid "Parallel port 1" +msgstr "Párhuzamos port 1" + +msgid "Parallel port 2" +msgstr "Párhuzamos port 2" + +msgid "Parallel port 3" +msgstr "Párhuzamos port 3" + +msgid "HD Controller:" +msgstr "Merevl.-vezérlő:" + +msgid "FD Controller:" +msgstr "Floppy-vezérlő:" + +msgid "Tertiary IDE Controller" +msgstr "Harmadlagos IDE-vezérlő" + +msgid "Quaternary IDE Controller" +msgstr "Negyedleges IDE-vezérlő" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Gazdaadapt. 1:" + +msgid "Controller 2:" +msgstr "Gazdaadapt. 2:" + +msgid "Controller 3:" +msgstr "Gazdaadapt. 3:" + +msgid "Controller 4:" +msgstr "Gazdaadapt. 4:" + +msgid "Cassette" +msgstr "Magnókazetta" + +msgid "Hard disks:" +msgstr "Merevlemezek:" + +msgid "&New..." +msgstr "&Új..." + +msgid "&Existing..." +msgstr "&Megnyitás..." + +msgid "&Remove" +msgstr "&Eltávolítás" + +msgid "Bus:" +msgstr "Busz:" + +msgid "Channel:" +msgstr "Csatorna:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Kiválasztás..." + +msgid "Sectors:" +msgstr "Szektor:" + +msgid "Heads:" +msgstr "Fej:" + +msgid "Cylinders:" +msgstr "Cilinder:" + +msgid "Size (MB):" +msgstr "Méret (MB):" + +msgid "Type:" +msgstr "Típus:" + +msgid "Image Format:" +msgstr "Formátum:" + +msgid "Block Size:" +msgstr "Blokkméret:" + +msgid "Floppy drives:" +msgstr "Floppy-meghajtók:" + +msgid "Turbo timings" +msgstr "Turbó időzítés" + +msgid "Check BPB" +msgstr "BPB ellenőrzés" + +msgid "CD-ROM drives:" +msgstr "CD-ROM meghajtók:" + +msgid "MO drives:" +msgstr "MO-meghajtók:" + +msgid "ZIP drives:" +msgstr "ZIP-meghajtók:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA RTC (óra):" + +msgid "ISA Memory Expansion" +msgstr "ISA memóriabővítők" + +msgid "Card 1:" +msgstr "Kártya 1:" + +msgid "Card 2:" +msgstr "Kártya 2:" + +msgid "Card 3:" +msgstr "Kártya 3:" + +msgid "Card 4:" +msgstr "Kártya 4:" + +msgid "ISABugger device" +msgstr "ISABugger eszköz" + +msgid "POST card" +msgstr "POST kártya" + +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Hiba" + +msgid "Fatal error" +msgstr "Végzetes hiba" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Használja a CTRL+ALT+PAGE DOWN gombokat az ablakhoz való visszatéréshez." + +msgid "Speed" +msgstr "Sebesség" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.im? *.zdi)" +msgstr "ZIP-lemezképek (*.im? *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "A 86Box nem talált használható ROM-képeket\n\nKérem töltse le a ROM készletet és bontsa ki a \"roms\" könyvtárba." + +msgid "(empty)" +msgstr "(üres)" + +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "ZIP-lemezképek (*.im? *.zdi);;Minden fájl (*.*)" + +msgid "Turbo" +msgstr "Turbó" + +msgid "On" +msgstr "Bekapcsolva" + +msgid "Off" +msgstr "Kikapcsolva" + +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "Minden képfájl (*.86f *.dsk *.flp *.im? *.*fd?);;Alapvető szektor képfájlok (*.dsk *.flp *.im? *.img *.*fd?);;Felületi képfájlok (*.86f)" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "A számítógép \"%hs\" nem elérhető a \"roms/machines\" mappából hiányzó ROM-képek miatt. Ehelyett egy másik gép kerül futtatásra." + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "A videokártya \"%hs\" nem elérhető a \"roms/video\" mappából hiányzó ROM-képek miatt. Ehelyett egy másik kártya kerül futtatásra." + +msgid "Machine" +msgstr "Számítógép" + +msgid "Display" +msgstr "Megjelenítő" + +msgid "Input devices" +msgstr "Beviteli eszközök" + +msgid "Sound" +msgstr "Hang" + +msgid "Network" +msgstr "Hálózat" + +msgid "Ports (COM & LPT)" +msgstr "Portok (COM és LPT)" + +msgid "Storage controllers" +msgstr "Tárolóvezérlők" + +msgid "Hard disks" +msgstr "Merevlemezek" + +msgid "Floppy & CD-ROM drives" +msgstr "Floppy és CD-ROM meghajtók" + +msgid "Other removable devices" +msgstr "Egyéb cserélhető tárolók" + +msgid "Other peripherals" +msgstr "Egyéb perifériák" + +msgid "Surface images (*.86f)" +msgstr "Felületi képfájlok (*.86f)" + +msgid "Click to capture mouse" +msgstr "Kattintson az egér elfogásához" + +msgid "Press F8+F12 to release mouse" +msgstr "Nyomja meg az F8+F12-t az egér elengédéséhez" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Nyomja meg az F8+F12-t vagy a középső gombot az egér elengédéséhez" + +msgid "Unable to initialize FluidSynth" +msgstr "Nem sikerült a FluidSynth inicializálása" + +msgid "Bus" +msgstr "Busz" + +msgid "File" +msgstr "Fájl" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Nem sikerült inicializálni a videó megjelenítőt." + +msgid "Default" +msgstr "Alapértelmezett" + +msgid "%i Wait state(s)" +msgstr "%i várakozási ciklus(ok)" + +msgid "Type" +msgstr "Típus" + +msgid "Failed to set up PCap" +msgstr "Nem sikerült a PCap beállítása" + +msgid "No PCap devices found" +msgstr "Nem találhatóak PCap eszközök" + +msgid "Invalid PCap device" +msgstr "Érvénytelen PCap eszköz" + +msgid "Standard 2-button joystick(s)" +msgstr "Szabványos 2-gombos játékvezérlő(k)" + +msgid "Standard 4-button joystick" +msgstr "Szabványos 4-gombos játékvezérlő" + +msgid "Standard 6-button joystick" +msgstr "Szabványos 6-gombos játékvezérlő" + +msgid "Standard 8-button joystick" +msgstr "Szabványos 8-gombos játékvezérlő" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Nincs" + +msgid "Unable to load keyboard accelerators." +msgstr "Nem lehet betölteni a billentyűzetgyorsítókat." + +msgid "Unable to register raw input." +msgstr "A közvetlen nyers bevitel regisztrálása nem sikerült." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Floppy %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "Minden képfájl (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Továbbfejlesztett szektor képek (*.imd *.json *.td0);;Alapvető szektor képek (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux képekfájlok (*.fdi);;Felületi képfájlok (*.86f *.mfm);;Minden fájl (*.*)" + +msgid "Unable to initialize FreeType" +msgstr "A FreeType inicializálása nem lehetséges" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Az SDL inicializálása nem lehetséges, az SDL2.dll fájl szükséges" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Biztosan szeretné újraindítani az emulált gépet?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Biztos benne, hogy ki szeretne lépni a 86Box-ból?" + +msgid "Unable to initialize Ghostscript" +msgstr "Nem sikerült inicializálni a Ghostscript-et" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "MO-képfájlok (*.im? *.mdi);;Minden fájl (*.*)" + +msgid "Welcome to 86Box!" +msgstr "Üdvözli önt az 86Box!" + +msgid "Internal controller" +msgstr "Integrált vezérlő" + +msgid "Exit" +msgstr "Kilépés" + +msgid "No ROMs found" +msgstr "Nem találhatóak meg a ROM-képek" + +msgid "Do you want to save the settings?" +msgstr "Szeretné menteni a beállításokat?" + +msgid "This will hard reset the emulated machine." +msgstr "Ezzel hardveresen újraindítja az emulált gépet." + +msgid "Save" +msgstr "Mentés" + +msgid "About 86Box" +msgstr "A 86Box névjegye" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Régi számítógépek emulátora\n\nFejlesztők: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nFordította: Laci bá'\n\nMegjelent a GNU General Public License v2 vagy újabb alatt. További információért lásd a LICENSE fájlt." + +msgid "Hardware not available" +msgstr "Hardver nem elérhető" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Győződjön meg hogy a(z) libpcap telepítve van és jelenleg a libpcap-kompatibilis kapcsolatot használja." + +msgid "Invalid configuration" +msgstr "Érvénytelen konfiguráció" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " szükséges az ESC/P nyomtató emulációhoz." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " szükséges a PostScript fájlok PDF formátumba való automatikus konvertálásához.\n\nAz általános PostScript nyomtatóra küldött dokumentumok PostScript (.ps) fájlként kerülnek mentésre." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " szükséges a FluidSynth MIDI kimenethez." + +msgid "Entering fullscreen mode" +msgstr "Teljes képernyős módra váltás" + +msgid "Don't show this message again" +msgstr "Ne jelenítse meg újra ezt az üzenetet " + +msgid "Don't exit" +msgstr "Ne lépjen ki" + +msgid "Reset" +msgstr "Újraindítás" + +msgid "Don't reset" +msgstr "Ne indítsa újra" + +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "CD-ROM-képek (*.iso *.cue);;Minden fájl (*.*)" + +msgid "%hs Device Configuration" +msgstr "%hs eszközkonfiguráció" + +msgid "Monitor in sleep mode" +msgstr "Képernyő alvó módban" + +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "OpenGL Shaderek (*.glsl);;Minden fájl (*.*)" + +msgid "OpenGL options" +msgstr "OpenGL beállítások" + +msgid "You are loading an unsupported configuration" +msgstr "Egy nem támogatott konfigurációt tölt be" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "A kiválasztott gépen alapuló CPU-típusszűrés le van tiltva ezen az emulált gépen.\n\nEz lehetővé teszi olyan CPU kiválasztását, amely egyébként nem kompatibilis a kiválasztott géppel. Előfordulhat azonban, hogy nem kompatibilis a gép BIOS-ával vagy más szoftverekkel.\n\nA beállítás engedélyezése hivatalosan nem támogatott, és a benyújtott hibajelentéseket érvénytelenként lezárhatjuk." + +msgid "Continue" +msgstr "Folytatás" + +msgid "Cassette: %s" +msgstr "Magnókazetta: %s" + +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Magnókazetta-képek (*.pcm *.raw *.wav *.cas);;Minden fájl (*.*)" + +msgid "Cartridge %i: %ls" +msgstr "ROM-kazetta %i: %ls" + +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "ROM-kazetta képek (*.a *.b *.jrc);;Minden fájl (*.*)" + +msgid "Error initializing renderer" +msgstr "Hiba történt a renderelő inicializálásakor" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "Az OpenGL (3.0 Core) megjelenítő-motort nem sikerült inicializálni. Kérem használjon másik renderelőt." + +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + +msgid "Hard disk (%s)" +msgstr "Merevlemez (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL vagy ESDI CD-ROM meghajtók soha nem léteztek" + +msgid "Custom..." +msgstr "Egyéni..." + +msgid "Custom (large)..." +msgstr "Egyéni (nagy)..." + +msgid "Add New Hard Disk" +msgstr "Új merevlemez hozzáadása" + +msgid "Add Existing Hard Disk" +msgstr "Meglévő merevlemez hozzáadása" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "A HDI lemezképek nem lehetnek nagyobbak 4 GB-nál." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "A lemezképek mérete nem haladhatja meg a 127 GB-ot." + +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Merevlemez-képfájlok (*.hd? *.im? *.vhd);;Minden fájl (*.*)" + +msgid "Unable to read file" +msgstr "A fájl nem olvasható" + +msgid "Unable to write file" +msgstr "A fájl nem írható" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "Az 512-től eltérő szektorméretű HDI vagy HDX képek nem támogatottak." + +msgid "USB is not yet supported" +msgstr "Az USB még nem támogatott" + +msgid "Disk image file already exists" +msgstr "A lemezképfájl már létezik" + +msgid "Please specify a valid file name." +msgstr "Adjon meg egy érvényes fájlnevet." + +msgid "Disk image created" +msgstr "A lemezképfájl létrehozásra került" + +msgid "Make sure the file exists and is readable." +msgstr "Győződjön meg arról, hogy a fájl létezik és olvasható." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Győződjön meg arról, hogy a fájlt egy írható könyvtárba menti." + +msgid "Disk image too large" +msgstr "A lemezképfájl túl nagy" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Ne felejtse el particionálni és formázni az újonnan létrehozott meghajtót." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "A kiválasztott fájl felülírásra kerül. Biztos, hogy ezt kívánja használni?" + +msgid "Unsupported disk image" +msgstr "Nem támogatott lemezkép" + +msgid "Overwrite" +msgstr "Felülírás" + +msgid "Don't overwrite" +msgstr "Ne írja felül" + +msgid "Raw image (.img)" +msgstr "Nyers lemezkép (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDI-lemezkép (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDX-lemezkép (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "Rögzített méretű VHD (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "Dinamikusan bővülő VHD (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Különbség-VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Nagy blokkméret (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Kis blokkméret (512 KB)" + +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "VHD fájlok (*.vhd);;Minden fájl (*.*)" + +msgid "Select the parent VHD" +msgstr "Válassza ki a szülő VHD-t" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Ez azt jelentheti, hogy a szülőkép módosult az eltérő kép létrehozása után.\n\nEz akkor is előfordulhat, ha a képfájlokat áthelyezték vagy másolták, vagy a lemezt létrehozó program hibája miatt.\n\nSzeretné kijavítani az időbélyegeket?" + +msgid "Parent and child disk timestamps do not match" +msgstr "A szülő- és a gyermeklemez időbélyegei nem egyeznek" + +msgid "Could not fix VHD timestamp." +msgstr "Nem sikerült kijavítani a VHD időbélyegét." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (1024 klaszter)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (2048 klaszter)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." + +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." + +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." + +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "Tökéletes RPM" + +msgid "1%% below perfect RPM" +msgstr "1%%-kal a tökéletes RPM alatt" + +msgid "1.5%% below perfect RPM" +msgstr "1.5%%-kal a tökéletes RPM alatt" + +msgid "2%% below perfect RPM" +msgstr "2%%-kal a tökéletes RPM alatt" + +msgid "(System Default)" +msgstr "(A rendszer nyelve)" + diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po index 617719f85..9b9b2c210 100644 --- a/src/qt/languages/it-IT.po +++ b/src/qt/languages/it-IT.po @@ -1,1191 +1,1191 @@ -msgid "&Action" -msgstr "&Azione" - -msgid "&Keyboard requires capture" -msgstr "&Tastiera richiede la cattura" - -msgid "&Right CTRL is left ALT" -msgstr "&CTRL destro è ALT sinistro" - -msgid "&Hard Reset..." -msgstr "&Riavvia..." - -msgid "&Ctrl+Alt+Del\tCtrl+F12" -msgstr "&Ctrl+Alt+Del\tCtrl+F12" - -msgid "Ctrl+Alt+&Esc" -msgstr "Ctrl+Alt+&Esc" - -msgid "&Pause" -msgstr "&Pausa" - -msgid "E&xit..." -msgstr "E&sci..." - -msgid "&View" -msgstr "&Visualizza" - -msgid "&Hide status bar" -msgstr "&Nascondi barra di stato" - -msgid "Hide &toolbar" -msgstr "Hide &toolbar" - -msgid "&Resizeable window" -msgstr "&Finestra ridimensionabile" - -msgid "R&emember size && position" -msgstr "R&icorda dimensioni e posizione" - -msgid "Re&nderer" -msgstr "Re&nderer" - -msgid "&SDL (Software)" -msgstr "&SDL (Software)" - -msgid "SDL (&Hardware)" -msgstr "SDL (&Hardware)" - -msgid "SDL (&OpenGL)" -msgstr "SDL (&OpenGL)" - -msgid "Open&GL (3.0 Core)" -msgstr "Open&GL (3.0 Core)" - -msgid "&VNC" -msgstr "&VNC" - -msgid "Specify dimensions..." -msgstr "Specifica dimensioni..." - -msgid "F&orce 4:3 display ratio" -msgstr "F&orza display 4:3" - -msgid "&Window scale factor" -msgstr "&Fattore scalare della finestra" - -msgid "&0.5x" -msgstr "&0.5x" - -msgid "&1x" -msgstr "&1x" - -msgid "1.&5x" -msgstr "1.&5x" - -msgid "&2x" -msgstr "&2x" - -msgid "Filter method" -msgstr "Metodo filtro" - -msgid "&Nearest" -msgstr "&Dal più vicino" - -msgid "&Linear" -msgstr "&Lineare" - -msgid "Hi&DPI scaling" -msgstr "Scala Hi&DPI" - -msgid "&Fullscreen\tCtrl+Alt+PageUP" -msgstr "&Schermo intero\tCtrl+Alt+PageUP" - -msgid "Fullscreen &stretch mode" -msgstr "Modalità adattamento &schermo intero" - -msgid "&Full screen stretch" -msgstr "&Adatta a schermo intero" - -msgid "&4:3" -msgstr "&4:3" - -msgid "&Square pixels (Keep ratio)" -msgstr "&Pixel quadrati (mantiene l'aspetto)" - -msgid "&Integer scale" -msgstr "&Scala intera" - -msgid "E&GA/(S)VGA settings" -msgstr "Impostazioni E&GA/(S)VGA" - -msgid "&Inverted VGA monitor" -msgstr "&Invertire monitor VGA" - -msgid "VGA screen &type" -msgstr "Schermi VGA &" - -msgid "RGB &Color" -msgstr "RGB &Color" - -msgid "&RGB Grayscale" -msgstr "&RGB Monocroma" - -msgid "&Amber monitor" -msgstr "&Monitor ambra" - -msgid "&Green monitor" -msgstr "&Monitor verde" - -msgid "&White monitor" -msgstr "&Monitor bianco" - -msgid "Grayscale &conversion type" -msgstr "Conversione &scala grigia" - -msgid "BT&601 (NTSC/PAL)" -msgstr "BT&601 (NTSC/PAL)" - -msgid "BT&709 (HDTV)" -msgstr "BT&709 (HDTV)" - -msgid "&Average" -msgstr "&AMedia" - -msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" -msgstr "Sovrascansione CGA/PCjr/Tandy/E&GA/(S)VGA" - -msgid "Change contrast for &monochrome display" -msgstr "Cambia il contrasto per &display monocromatici" - -msgid "&Media" -msgstr "&Dispositivi" - -msgid "&Tools" -msgstr "&Strumenti" - -msgid "&Settings..." -msgstr "&Impostazioni..." - -msgid "&Update status bar icons" -msgstr "&Aggiorna icone della barra di stato" - -msgid "Take s&creenshot\tCtrl+F11" -msgstr "Cattura schermata\tCtrl+F11" - -msgid "&Preferences..." -msgstr "&Preferenze..." - -msgid "Enable &Discord integration" -msgstr "Abilita &integrazione Discord" - -msgid "Sound &gain..." -msgstr "Guadagno &suono..." - -msgid "Begin trace\tCtrl+T" -msgstr "Inizia traccia\tCtrl+T" - -msgid "End trace\tCtrl+T" -msgstr "Ferma traccia\tCtrl+T" - -msgid "&Logging" -msgstr "&Registra" - -msgid "Enable BusLogic logs\tCtrl+F4" -msgstr "Attiva registrazione di BusLogic\tCtrl+F4" - -msgid "Enable CD-ROM logs\tCtrl+F5" -msgstr "Attiva registrazione del CD-ROM\tCtrl+F5" - -msgid "Enable floppy (86F) logs\tCtrl+F6" -msgstr "Attiva registrazione del floppy (86F)\tCtrl+F6" - -msgid "Enable floppy controller logs\tCtrl+F7" -msgstr "Attiva registrazione del controller floppy\tCtrl+F7" - -msgid "Enable IDE logs\tCtrl+F8" -msgstr "Attiva registrazione di IDE\tCtrl+F8" - -msgid "Enable Serial Port logs\tCtrl+F3" -msgstr "Attiva registrazione della porta seriale\tCtrl+F3" - -msgid "Enable Network logs\tCtrl+F9" -msgstr "Attiva registrazione della rete\tCtrl+F9" - -msgid "&Log breakpoint\tCtrl+F10" -msgstr "&Punto di interruzione del registro\tCtrl+F10" - -msgid "Dump &video RAM\tCtrl+F1" -msgstr "Scarica &la RAM video\tCtrl+F1" - -msgid "&Help" -msgstr "&?" - -msgid "&Documentation..." -msgstr "&Documentazione..." - -msgid "&About 86Box..." -msgstr "&Informazioni su 86Box..." - -msgid "&New image..." -msgstr "&Nuova immagine..." - -msgid "&Existing image..." -msgstr "&Immagine esistente..." - -msgid "Existing image (&Write-protected)..." -msgstr "Immagine esistente (&protezione contro scrittura)..." - -msgid "&Record" -msgstr "&Registra" - -msgid "&Play" -msgstr "R&iproduci" - -msgid "&Rewind to the beginning" -msgstr "Ri&avvolgi all'inizio" - -msgid "&Fast forward to the end" -msgstr "A&vanti veloce alla fine" - -msgid "E&ject" -msgstr "&Espelli" - -msgid "&Image..." -msgstr "&Immagine..." - -msgid "E&xport to 86F..." -msgstr "E&sporta in 86F..." - -msgid "&Mute" -msgstr "&Muto" - -msgid "E&mpty" -msgstr "&Espelli" - -msgid "&Reload previous image" -msgstr "&Ricarica l'immagine precedente" - -msgid "&Image" -msgstr "&Immagine" - -msgid "Target &framerate" -msgstr "Imposta obiettivo &fotogrammi" - -msgid "&Sync with video" -msgstr "&Sincronizza col video" - -msgid "&25 fps" -msgstr "&25 FPS" - -msgid "&30 fps" -msgstr "&30 FPS" - -msgid "&50 fps" -msgstr "&50 FPS" - -msgid "&60 fps" -msgstr "&60 FPS" - -msgid "&75 fps" -msgstr "&75 FPS" - -msgid "&VSync" -msgstr "&VSync" - -msgid "&Select shader..." -msgstr "&Seleziona shader..." - -msgid "&Remove shader" -msgstr "&Rimuovi shader" - -msgid "Preferences" -msgstr "Preferenze" - -msgid "Sound Gain" -msgstr "Guadagno del suono" - -msgid "New Image" -msgstr "Nuova immagine" - -msgid "Settings" -msgstr "Impostazioni" - -msgid "Specify Main Window Dimensions" -msgstr "Specifica dimensioni della finestra principale" - -msgid "OK" -msgstr "OK" - -msgid "Cancel" -msgstr "Annulla" - -msgid "Save these settings as &global defaults" -msgstr "Salva queste impostazioni come &predefinite globali" - -msgid "&Default" -msgstr "&Predefinito" - -msgid "Language:" -msgstr "Lingua:" - -msgid "Icon set:" -msgstr "Pacchetto di icone:" - -msgid "Gain" -msgstr "Guadagno" - -msgid "File name:" -msgstr "Nome file:" - -msgid "Disk size:" -msgstr "Dimensioni disco:" - -msgid "RPM mode:" -msgstr "Modalità RPM:" - -msgid "Progress:" -msgstr "Progresso:" - -msgid "Width:" -msgstr "Larghezza:" - -msgid "Height:" -msgstr "Altezza:" - -msgid "Lock to this size" -msgstr "Blocca in queste dimensioni" - -msgid "Machine type:" -msgstr "Tipo di piastra madre:" - -msgid "Machine:" -msgstr "Piastra madre:" - -msgid "Configure" -msgstr "Configura" - -msgid "CPU type:" -msgstr "Tipo del CPU:" - -msgid "Speed:" -msgstr "Veloc.:" - -msgid "FPU:" -msgstr "FPU:" - -msgid "Wait states:" -msgstr "Stati di attesa:" - -msgid "MB" -msgstr "MB" - -msgid "Memory:" -msgstr "Memoria:" - -msgid "Time synchronization" -msgstr "Sincronizzazione dell'ora" - -msgid "Disabled" -msgstr "Disabilitata" - -msgid "Enabled (local time)" -msgstr "Abilitata (ora locale)" - -msgid "Enabled (UTC)" -msgstr "Abilitata (UTC)" - -msgid "Dynamic Recompiler" -msgstr "Ricompilatore dinamico" - -msgid "Video:" -msgstr "Video:" - -msgid "Voodoo Graphics" -msgstr "Grafica Voodoo" - -msgid "Mouse:" -msgstr "Mouse:" - -msgid "Joystick:" -msgstr "Joystick:" - -msgid "Joystick 1..." -msgstr "Joystick 1..." - -msgid "Joystick 2..." -msgstr "Joystick 2..." - -msgid "Joystick 3..." -msgstr "Joystick 3..." - -msgid "Joystick 4..." -msgstr "Joystick 4..." - -msgid "Sound card:" -msgstr "Scheda audio:" - -msgid "MIDI Out Device:" -msgstr "Uscita MIDI:" - -msgid "MIDI In Device:" -msgstr "Entrata MIDI:" - -msgid "Standalone MPU-401" -msgstr "MPU-401 autonomo" - -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - -msgid "Use FLOAT32 sound" -msgstr "Usa suono FLOAT32" - -msgid "Network type:" -msgstr "Tipo di rete:" - -msgid "PCap device:" -msgstr "Dispositivo PCap:" - -msgid "Network adapter:" -msgstr "Scheda di rete:" - -msgid "LPT1 Device:" -msgstr "Dispositivo LPT1:" - -msgid "LPT2 Device:" -msgstr "Dispositivo LPT2:" - -msgid "LPT3 Device:" -msgstr "Dispositivo LPT3:" - -msgid "Serial port 1" -msgstr "Porta seriale 1" - -msgid "Serial port 2" -msgstr "Porta seriale 2" - -msgid "Serial port 3" -msgstr "Porta seriale 3" - -msgid "Serial port 4" -msgstr "Porta seriale 4" - -msgid "Parallel port 1" -msgstr "Porta parallela 1" - -msgid "Parallel port 2" -msgstr "Porta parallela 2" - -msgid "Parallel port 3" -msgstr "Porta parallela 3" - -msgid "HD Controller:" -msgstr "Controller HD:" - -msgid "FD Controller:" -msgstr "Controller FD:" - -msgid "Tertiary IDE Controller" -msgstr "Controller IDE terziario" - -msgid "Quaternary IDE Controller" -msgstr "Controller IDE quaternario" - -msgid "SCSI" -msgstr "SCSI" - -msgid "Controller 1:" -msgstr "Controller 1:" - -msgid "Controller 2:" -msgstr "Controller 2:" - -msgid "Controller 3:" -msgstr "Controller 3:" - -msgid "Controller 4:" -msgstr "Controller 4:" - -msgid "Cassette" -msgstr "Cassetta" - -msgid "Hard disks:" -msgstr "Hard disk:" - -msgid "&New..." -msgstr "&Nuovo..." - -msgid "&Existing..." -msgstr "&Esistente..." - -msgid "&Remove" -msgstr "&Rimouvi" - -msgid "Bus:" -msgstr "Bus:" - -msgid "Channel:" -msgstr "Canale:" - -msgid "ID:" -msgstr "ID:" - -msgid "&Specify..." -msgstr "&Specifica..." - -msgid "Sectors:" -msgstr "Settori:" - -msgid "Heads:" -msgstr "Testine:" - -msgid "Cylinders:" -msgstr "Cilindri:" - -msgid "Size (MB):" -msgstr "Dimensioni (MB):" - -msgid "Type:" -msgstr "Tipo:" - -msgid "Image Format:" -msgstr "Formato immagine:" - -msgid "Block Size:" -msgstr "Dimensioni blocco:" - -msgid "Floppy drives:" -msgstr "Unità floppy:" - -msgid "Turbo timings" -msgstr "Turbo" - -msgid "Check BPB" -msgstr "Verifica BPB" - -msgid "CD-ROM drives:" -msgstr "Unità CD-ROM:" - -msgid "MO drives:" -msgstr "Unità magneto-ottiche:" - -msgid "ZIP drives:" -msgstr "Unità ZIP:" - -msgid "ZIP 250" -msgstr "ZIP 250" - -msgid "ISA RTC:" -msgstr "RTC ISA:" - -msgid "ISA Memory Expansion" -msgstr "Espansione memoria ISA" - -msgid "Card 1:" -msgstr "Scheda 1:" - -msgid "Card 2:" -msgstr "Scheda 2:" - -msgid "Card 3:" -msgstr "Scheda 3:" - -msgid "Card 4:" -msgstr "Scheda 4:" - -msgid "ISABugger device" -msgstr "Dispositivo ISABugger" - -msgid "POST card" -msgstr "Scheda POST" - -msgid "FONT_SIZE" -msgstr "9" - -msgid "FONT_NAME" -msgstr "Segoe UI" - -msgid "86Box" -msgstr "86Box" - -msgid "Error" -msgstr "Errore" - -msgid "Fatal error" -msgstr "Errore fatale" - -msgid "" -msgstr "" - -msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." -msgstr "Usa CTRL+ALT+PAGE DOWN per tornare alla modalità finestra." - -msgid "Speed" -msgstr "Velocità" - -msgid "ZIP %03i %i (%s): %ls" -msgstr "ZIP %03i %i (%s): %ls" - -msgid "ZIP images (*.im? *.zdi)" -msgstr "Immagini ZIP (*.im? *.zdi)" - -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "86Box non può trovare immagini ROM utilizzabili.\n\nPlease download a ROM set and extract it into the \"roms\" directory." - -msgid "(empty)" -msgstr "(empty)" - -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "Immagini ZIP (*.im? *.zdi);;Tutti i file (*.*)" - -msgid "Turbo" -msgstr "Turbo" - -msgid "On" -msgstr "Acceso" - -msgid "Off" -msgstr "Spento" - -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "Tutte le immagini (*.86f *.dsk *.flp *.im? *.*fd?);;Immagini di settori base (*.dsk *.flp *.im? *.img *.*fd?);;Immagini di superficie (*.86f)" - -msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "La macchina \"%hs\" non è disponibile a causa di immagini ROM mancanti nella directory roms/machines. Cambiando ad una macchina disponibile." - -msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "La scheda video \"%hs\" non è disponibile a causa di immagini ROM mancanti nella directory roms/video. Cambiando ad una scheda video disponibile." - -msgid "Machine" -msgstr "Piastra madre" - -msgid "Display" -msgstr "Schermo" - -msgid "Input devices" -msgstr "Dispositivi di entrata" - -msgid "Sound" -msgstr "Audio" - -msgid "Network" -msgstr "Rete" - -msgid "Ports (COM & LPT)" -msgstr "Porte (COM & LPT)" - -msgid "Storage controllers" -msgstr "Controller memoria" - -msgid "Hard disks" -msgstr "Hard disk" - -msgid "Floppy & CD-ROM drives" -msgstr "Unità CD-ROM e Floppy" - -msgid "Other removable devices" -msgstr "Altri dispositivi rimuovibili" - -msgid "Other peripherals" -msgstr "Altre periferiche" - -msgid "Surface images (*.86f)" -msgstr "Immagini di superficie (*.86f)" - -msgid "Click to capture mouse" -msgstr "Fare clic per catturare mouse" - -msgid "Press F8+F12 to release mouse" -msgstr "Premi F8+F12 per rilasciare il mouse" - -msgid "Press F8+F12 or middle button to release mouse" -msgstr "Premi F8+F12 o pulsante centrale per rilasciare il mouse" - -msgid "Unable to initialize FluidSynth" -msgstr "Impossibile inizializzare FluidSynth" - -msgid "Bus" -msgstr "Bus" - -msgid "File" -msgstr "File" - -msgid "C" -msgstr "C" - -msgid "H" -msgstr "H" - -msgid "S" -msgstr "S" - -msgid "KB" -msgstr "KB" - -msgid "Could not initialize the video renderer." -msgstr "Impossibile inizializzare il renderer video." - -msgid "Default" -msgstr "Predefinito" - -msgid "%i Wait state(s)" -msgstr "%i stati d'attesa" - -msgid "Type" -msgstr "Tipo" - -msgid "Failed to set up PCap" -msgstr "Impossibile impostare PCap" - -msgid "No PCap devices found" -msgstr "Nessun dispositivo PCap trovato" - -msgid "Invalid PCap device" -msgstr "Dispositivo PCap invalido" - -msgid "Standard 2-button joystick(s)" -msgstr "Joystick comune da 2 pulsanti" - -msgid "Standard 4-button joystick" -msgstr "Joystick comune da 4 pulsanti" - -msgid "Standard 6-button joystick" -msgstr "Joystick comune da 6 pulsanti" - -msgid "Standard 8-button joystick" -msgstr "Joystick comune da 8 pulsanti" - -msgid "CH Flightstick Pro" -msgstr "CH Flightstick Pro" - -msgid "Microsoft SideWinder Pad" -msgstr "Microsoft SideWinder Pad" - -msgid "Thrustmaster Flight Control System" -msgstr "Thrustmaster Flight Control System" - -msgid "None" -msgstr "Nessuno" - -msgid "Unable to load keyboard accelerators." -msgstr "Impossibile caricare gli acceleratori da tastiera." - -msgid "Unable to register raw input." -msgstr "Impossibile registrare input raw." - -msgid "%u" -msgstr "%u" - -msgid "%u MB (CHS: %i, %i, %i)" -msgstr "%u MB (CHS: %i, %i, %i)" - -msgid "Floppy %i (%s): %ls" -msgstr "Floppy %i (%s): %ls" - -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "Tutte le immagini (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Immagini da settori avanzati (*.imd *.json *.td0);;Imagini da settori basilari (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Immagini flusso (*.fdi);;Immagini da superficie (*.86f *.mfm);;Tutti i file (*.*)" - -msgid "Unable to initialize FreeType" -msgstr "Impossibile inizializzare FreeType" - -msgid "Unable to initialize SDL, SDL2.dll is required" -msgstr "Impossibile inizializzare SDL, SDL2.dll è necessario" - -msgid "Are you sure you want to hard reset the emulated machine?" -msgstr "Sei sicuro di voler riavviare la macchina emulata?" - -msgid "Are you sure you want to exit 86Box?" -msgstr "Sei sicuro di voler uscire da 86Box?" - -msgid "Unable to initialize Ghostscript" -msgstr "Impossibile inizializzare Ghostscript" - -msgid "MO %i (%ls): %ls" -msgstr "MO %i (%ls): %ls" - -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "Immagini MO (*.im? *.mdi);;Tutti i file (*.*)" - -msgid "Welcome to 86Box!" -msgstr "Benvenuti in 86Box!" - -msgid "Internal controller" -msgstr "Controller interno" - -msgid "Exit" -msgstr "Esci" - -msgid "No ROMs found" -msgstr "Nessune immagini ROM trovate" - -msgid "Do you want to save the settings?" -msgstr "Vuole salvare queste impostazioni?" - -msgid "This will hard reset the emulated machine." -msgstr "Questo riavvierà la macchina emulata." - -msgid "Save" -msgstr "Salva" - -msgid "About 86Box" -msgstr "Informazioni su 86Box" - -msgid "86Box v" -msgstr "86Box v" - -msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "Un emulatore di computer vecchi\n\nAutori: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nTradotto da: explorerdotexe\n\nRilasciato sotto la Licenza Pubblica GNU versione 2 o dopo. Vedi LICENSE per maggior informazioni." - -msgid "Hardware not available" -msgstr "Hardware non disponibile" - -msgid "WinPcap" -msgstr "WinPcap" - -msgid "libpcap" -msgstr "libpcap" - -msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." -msgstr "Controlla se libpcap è installato e che tu sia connesso ad una connessione libpcap compatibile." - -msgid "Invalid configuration" -msgstr "Configurazione invalida" - -msgid "freetype.dll" -msgstr "freetype.dll" - -msgid "libfreetype" -msgstr "libfreetype" - -msgid " is required for ESC/P printer emulation." -msgstr " è richesto per l'emuazione di stampanti ESC/P." - -msgid "gsdll32.dll" -msgstr "gsdll32.dll" - -msgid "libgs" -msgstr "libgs" - -msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." -msgstr " è richiesto per la conversione automatica di file PostScript a file PDF.\n\nQualsiasi documento mandato alla stampante generica PostScript sarà salvato come file PostScript. (.ps)" - -msgid "libfluidsynth.dll" -msgstr "libfluidsynth.dll" - -msgid "libfluidsynth" -msgstr "libfluidsynth" - -msgid " is required for FluidSynth MIDI output." -msgstr " è richiesto per l'output FluidSynth MIDI." - -msgid "Entering fullscreen mode" -msgstr "Entrando nella modalità schermo intero" - -msgid "Don't show this message again" -msgstr "Non mostrare più questo messaggio" - -msgid "Don't exit" -msgstr "Non uscire" - -msgid "Reset" -msgstr "Riavvia" - -msgid "Don't reset" -msgstr "Non riavviare" - -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "Immagini CD-ROM (*.iso *.cue);;Tutti i file (*.*)" - -msgid "%hs Device Configuration" -msgstr "Configurazione del dispositivo %hs" - -msgid "Monitor in sleep mode" -msgstr "Monitor in modalità riposo" - -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "Shader OpenGL (*.glsl);;Tutti i file (*.*)" - -msgid "OpenGL options" -msgstr "Impostazioni OpenGL" - -msgid "You are loading an unsupported configuration" -msgstr "Stai caricando una configurazione non supportata" - -msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "Il filtraggio della tipologia di CPU è disabilitato per la macchina selezionata.\n\nQuesto lo rende possibile scegliere un CPU che è altrimenti incompatibile con la macchina selezionata. Tuttavia, portresti incorrere in incompatibilità con il BIOS della macchina o altri programmi. \n\nL'abilitare di questa impostazione non è ufficialmente supportato e tutte le segnalazioni di errori saranno considerate invalide." - -msgid "Continue" -msgstr "Continua" - -msgid "Cassette: %s" -msgstr "Cassetta: %s" - -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Immagini cassetta (*.pcm *.raw *.wav *.cas);;Tutti i file (*.*)" - -msgid "Cartridge %i: %ls" -msgstr "Cartuccia %i: %ls" - -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "Immagini cartuccia (*.a *.b *.jrc);;Tutti i file (*.*)" - -msgid "Error initializing renderer" -msgstr "Error initializing renderer" - -msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." - -msgid "Resume execution" -msgstr "Resume execution" - -msgid "Pause execution" -msgstr "Pause execution" - -msgid "Press Ctrl+Alt+Del" -msgstr "Press Ctrl+Alt+Del" - -msgid "Press Ctrl+Alt+Esc" -msgstr "Press Ctrl+Alt+Esc" - -msgid "Hard reset" -msgstr "Hard reset" - -msgid "ACPI shutdown" -msgstr "ACPI shutdown" - -msgid "Hard disk (%s)" -msgstr "Hard disk (%s)" - -msgid "%01i:%01i" -msgstr "%01i:%01i" - -msgid "%01i" -msgstr "%01i" - -msgid "MFM/RLL or ESDI CD-ROM drives never existed" -msgstr "Le unità CD-ROM MFM/RLL o ESDI non sono mai esistite." - -msgid "Custom..." -msgstr "Personalizzata..." - -msgid "Custom (large)..." -msgstr "Personalizzata (grande)..." - -msgid "Add New Hard Disk" -msgstr "Aggiungi un nuovo disco rigido" - -msgid "Add Existing Hard Disk" -msgstr "Aggiungi un disco rigido esistente" - -msgid "HDI disk images cannot be larger than 4 GB." -msgstr "Le immagini HDI non possono essere più grandi di 4 GB." - -msgid "Disk images cannot be larger than 127 GB." -msgstr "Le immmagini disco non possono essere più grandi di 127 GB." - -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Immagini disco rigido (*.hd? *.im? *.vhd);;Tutti i file (*.*)" - -msgid "Unable to read file" -msgstr "Impossibile leggere il file" - -msgid "Unable to write file" -msgstr "Impossibile scrivere al file" - -msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "Le immagini HDI o HDX con settori di dimensioni diverse da 512 non sono supportati." - -msgid "USB is not yet supported" -msgstr "USB non è ancora supportato" - -msgid "Disk image file already exists" -msgstr "Immagine disco già esiste" - -msgid "Please specify a valid file name." -msgstr "Specifica un nome file valido." - -msgid "Disk image created" -msgstr "Immagine disco creata" - -msgid "Make sure the file exists and is readable." -msgstr "Controlla che il file esiste e che sia leggibile." - -msgid "Make sure the file is being saved to a writable directory." -msgstr "Controlla che il file viene salvato ad un percorso con diritti di scrittura" - -msgid "Disk image too large" -msgstr "Immagine disco troppo grande" - -msgid "Remember to partition and format the newly-created drive." -msgstr "Ricordati di partizionare e formattare il disco appena creato." - -msgid "The selected file will be overwritten. Are you sure you want to use it?" -msgstr "Il file selezionato sarà sovrascritto, sei sicuro di volerlo usare?" - -msgid "Unsupported disk image" -msgstr "Immagine disco non supportata" - -msgid "Overwrite" -msgstr "Sovrascrivi" - -msgid "Don't overwrite" -msgstr "Non sovrascrivere" - -msgid "Raw image (.img)" -msgstr "Immagine raw (.img)" - -msgid "HDI image (.hdi)" -msgstr "Immagine HDI (.hdi)" - -msgid "HDX image (.hdx)" -msgstr "Immagine HDX (.hdx)" - -msgid "Fixed-size VHD (.vhd)" -msgstr "VHD di dimensioni fisse (.vhd)" - -msgid "Dynamic-size VHD (.vhd)" -msgstr "VHD di dimensioni dinamiche (.vhd)" - -msgid "Differencing VHD (.vhd)" -msgstr "VHD differenziato (.vhd)" - -msgid "Large blocks (2 MB)" -msgstr "Blocchi larghi (2 MB)" - -msgid "Small blocks (512 KB)" -msgstr "Blocchi piccoli (512 KB)" - -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "File VHD (*.vhd);;Tutti i file (*.*)" - -msgid "Select the parent VHD" -msgstr "Seleziona il VHD padre." - -msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" -msgstr "Questo potrebbe significare che l'immagine padre sia stata modificata dopo la creazione dell'immagine di differenziazione.\n\nPuò anche succedere se i file immagini sono stati spostati o copiati, o da un errore nel programma che ha creato questo disco.\n\nVuoi aggiustare le marcature di tempo?" - -msgid "Parent and child disk timestamps do not match" -msgstr "Le marcature di tempo padre e figlio non corrispondono" - -msgid "Could not fix VHD timestamp." -msgstr "Impossibile aggiustare marcature di tempo VHD." - -msgid "%01i:%02i" -msgstr "%01i:%02i" - -msgid "MFM/RLL" -msgstr "MFM/RLL" - -msgid "XTA" -msgstr "XTA" - -msgid "ESDI" -msgstr "ESDI" - -msgid "IDE" -msgstr "IDE" - -msgid "ATAPI" -msgstr "ATAPI" - -msgid "MFM/RLL (%01i:%01i)" -msgstr "MFM/RLL (%01i:%01i)" - -msgid "XTA (%01i:%01i)" -msgstr "XTA (%01i:%01i)" - -msgid "ESDI (%01i:%01i)" -msgstr "ESDI (%01i:%01i)" - -msgid "IDE (%01i:%01i)" -msgstr "IDE (%01i:%01i)" - -msgid "ATAPI (%01i:%01i)" -msgstr "ATAPI (%01i:%01i)" - -msgid "SCSI (%01i:%02i)" -msgstr "SCSI (%01i:%02i)" - -msgid "CD-ROM %i (%s): %s" -msgstr "CD-ROM %i (%s): %s" - -msgid "160 kB" -msgstr "160 kB" - -msgid "180 kB" -msgstr "180 kB" - -msgid "320 kB" -msgstr "320 kB" - -msgid "360 kB" -msgstr "360 kB" - -msgid "640 kB" -msgstr "640 kB" - -msgid "720 kB" -msgstr "720 kB" - -msgid "1.2 MB" -msgstr "1.2 MB" - -msgid "1.25 MB" -msgstr "1.25 MB" - -msgid "1.44 MB" -msgstr "1.44 MB" - -msgid "DMF (cluster 1024)" -msgstr "DMF (cluster 1024)" - -msgid "DMF (cluster 2048)" -msgstr "DMF (cluster 2048)" - -msgid "2.88 MB" -msgstr "2.88 MB" - -msgid "ZIP 100" -msgstr "ZIP 100" - -msgid "3.5\" 128Mb M.O. (ISO 10090)" -msgstr "3.5\" 128Mb M.O. (ISO 10090)" - -msgid "3.5\" 230Mb M.O. (ISO 13963)" -msgstr "3.5\" 230Mb M.O. (ISO 13963)" - -msgid "3.5\" 540Mb M.O. (ISO 15498)" -msgstr "3.5\" 540Mb M.O. (ISO 15498)" - -msgid "3.5\" 640Mb M.O. (ISO 15498)" -msgstr "3.5\" 640Mb M.O. (ISO 15498)" - -msgid "3.5\" 1.3Gb M.O. (GigaMO)" -msgstr "3.5\" 1.3Gb M.O. (GigaMO)" - -msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" - -msgid "5.25\" 600Mb M.O." -msgstr "5.25\" 600Mb M.O." - -msgid "5.25\" 650Mb M.O." -msgstr "5.25\" 650Mb M.O." - -msgid "5.25\" 1Gb M.O." -msgstr "5.25\" 1Gb M.O." - -msgid "5.25\" 1.3Gb M.O." -msgstr "5.25\" 1.3Gb M.O." - -msgid "Perfect RPM" -msgstr "RPM perfette" - -msgid "1%% below perfect RPM" -msgstr "RPM 1%% sotto perfezione" - -msgid "1.5%% below perfect RPM" -msgstr "RPM 1.5%% sotto perfezione" - -msgid "2%% below perfect RPM" -msgstr "RPM 2%% sotto perfezione" - -msgid "(System Default)" -msgstr "(Predefinito del sistema)" - +msgid "&Action" +msgstr "&Azione" + +msgid "&Keyboard requires capture" +msgstr "&Tastiera richiede la cattura" + +msgid "&Right CTRL is left ALT" +msgstr "&CTRL destro è ALT sinistro" + +msgid "&Hard Reset..." +msgstr "&Riavvia..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Pausa" + +msgid "E&xit..." +msgstr "E&sci..." + +msgid "&View" +msgstr "&Visualizza" + +msgid "&Hide status bar" +msgstr "&Nascondi barra di stato" + +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + +msgid "&Resizeable window" +msgstr "&Finestra ridimensionabile" + +msgid "R&emember size && position" +msgstr "R&icorda dimensioni e posizione" + +msgid "Re&nderer" +msgstr "Re&nderer" + +msgid "&SDL (Software)" +msgstr "&SDL (Software)" + +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardware)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 Core)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "Specifica dimensioni..." + +msgid "F&orce 4:3 display ratio" +msgstr "F&orza display 4:3" + +msgid "&Window scale factor" +msgstr "&Fattore scalare della finestra" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Metodo filtro" + +msgid "&Nearest" +msgstr "&Dal più vicino" + +msgid "&Linear" +msgstr "&Lineare" + +msgid "Hi&DPI scaling" +msgstr "Scala Hi&DPI" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Schermo intero\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Modalità adattamento &schermo intero" + +msgid "&Full screen stretch" +msgstr "&Adatta a schermo intero" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Pixel quadrati (mantiene l'aspetto)" + +msgid "&Integer scale" +msgstr "&Scala intera" + +msgid "E&GA/(S)VGA settings" +msgstr "Impostazioni E&GA/(S)VGA" + +msgid "&Inverted VGA monitor" +msgstr "&Invertire monitor VGA" + +msgid "VGA screen &type" +msgstr "Schermi VGA &" + +msgid "RGB &Color" +msgstr "RGB &Color" + +msgid "&RGB Grayscale" +msgstr "&RGB Monocroma" + +msgid "&Amber monitor" +msgstr "&Monitor ambra" + +msgid "&Green monitor" +msgstr "&Monitor verde" + +msgid "&White monitor" +msgstr "&Monitor bianco" + +msgid "Grayscale &conversion type" +msgstr "Conversione &scala grigia" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&AMedia" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "Sovrascansione CGA/PCjr/Tandy/E&GA/(S)VGA" + +msgid "Change contrast for &monochrome display" +msgstr "Cambia il contrasto per &display monocromatici" + +msgid "&Media" +msgstr "&Dispositivi" + +msgid "&Tools" +msgstr "&Strumenti" + +msgid "&Settings..." +msgstr "&Impostazioni..." + +msgid "&Update status bar icons" +msgstr "&Aggiorna icone della barra di stato" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Cattura schermata\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Preferenze..." + +msgid "Enable &Discord integration" +msgstr "Abilita &integrazione Discord" + +msgid "Sound &gain..." +msgstr "Guadagno &suono..." + +msgid "Begin trace\tCtrl+T" +msgstr "Inizia traccia\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Ferma traccia\tCtrl+T" + +msgid "&Logging" +msgstr "&Registra" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Attiva registrazione di BusLogic\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Attiva registrazione del CD-ROM\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Attiva registrazione del floppy (86F)\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Attiva registrazione del controller floppy\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Attiva registrazione di IDE\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Attiva registrazione della porta seriale\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Attiva registrazione della rete\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Punto di interruzione del registro\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "Scarica &la RAM video\tCtrl+F1" + +msgid "&Help" +msgstr "&?" + +msgid "&Documentation..." +msgstr "&Documentazione..." + +msgid "&About 86Box..." +msgstr "&Informazioni su 86Box..." + +msgid "&New image..." +msgstr "&Nuova immagine..." + +msgid "&Existing image..." +msgstr "&Immagine esistente..." + +msgid "Existing image (&Write-protected)..." +msgstr "Immagine esistente (&protezione contro scrittura)..." + +msgid "&Record" +msgstr "&Registra" + +msgid "&Play" +msgstr "R&iproduci" + +msgid "&Rewind to the beginning" +msgstr "Ri&avvolgi all'inizio" + +msgid "&Fast forward to the end" +msgstr "A&vanti veloce alla fine" + +msgid "E&ject" +msgstr "&Espelli" + +msgid "&Image..." +msgstr "&Immagine..." + +msgid "E&xport to 86F..." +msgstr "E&sporta in 86F..." + +msgid "&Mute" +msgstr "&Muto" + +msgid "E&mpty" +msgstr "&Espelli" + +msgid "&Reload previous image" +msgstr "&Ricarica l'immagine precedente" + +msgid "&Image" +msgstr "&Immagine" + +msgid "Target &framerate" +msgstr "Imposta obiettivo &fotogrammi" + +msgid "&Sync with video" +msgstr "&Sincronizza col video" + +msgid "&25 fps" +msgstr "&25 FPS" + +msgid "&30 fps" +msgstr "&30 FPS" + +msgid "&50 fps" +msgstr "&50 FPS" + +msgid "&60 fps" +msgstr "&60 FPS" + +msgid "&75 fps" +msgstr "&75 FPS" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Seleziona shader..." + +msgid "&Remove shader" +msgstr "&Rimuovi shader" + +msgid "Preferences" +msgstr "Preferenze" + +msgid "Sound Gain" +msgstr "Guadagno del suono" + +msgid "New Image" +msgstr "Nuova immagine" + +msgid "Settings" +msgstr "Impostazioni" + +msgid "Specify Main Window Dimensions" +msgstr "Specifica dimensioni della finestra principale" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Annulla" + +msgid "Save these settings as &global defaults" +msgstr "Salva queste impostazioni come &predefinite globali" + +msgid "&Default" +msgstr "&Predefinito" + +msgid "Language:" +msgstr "Lingua:" + +msgid "Icon set:" +msgstr "Pacchetto di icone:" + +msgid "Gain" +msgstr "Guadagno" + +msgid "File name:" +msgstr "Nome file:" + +msgid "Disk size:" +msgstr "Dimensioni disco:" + +msgid "RPM mode:" +msgstr "Modalità RPM:" + +msgid "Progress:" +msgstr "Progresso:" + +msgid "Width:" +msgstr "Larghezza:" + +msgid "Height:" +msgstr "Altezza:" + +msgid "Lock to this size" +msgstr "Blocca in queste dimensioni" + +msgid "Machine type:" +msgstr "Tipo di piastra madre:" + +msgid "Machine:" +msgstr "Piastra madre:" + +msgid "Configure" +msgstr "Configura" + +msgid "CPU type:" +msgstr "Tipo del CPU:" + +msgid "Speed:" +msgstr "Veloc.:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "Stati di attesa:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Memoria:" + +msgid "Time synchronization" +msgstr "Sincronizzazione dell'ora" + +msgid "Disabled" +msgstr "Disabilitata" + +msgid "Enabled (local time)" +msgstr "Abilitata (ora locale)" + +msgid "Enabled (UTC)" +msgstr "Abilitata (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Ricompilatore dinamico" + +msgid "Video:" +msgstr "Video:" + +msgid "Voodoo Graphics" +msgstr "Grafica Voodoo" + +msgid "Mouse:" +msgstr "Mouse:" + +msgid "Joystick:" +msgstr "Joystick:" + +msgid "Joystick 1..." +msgstr "Joystick 1..." + +msgid "Joystick 2..." +msgstr "Joystick 2..." + +msgid "Joystick 3..." +msgstr "Joystick 3..." + +msgid "Joystick 4..." +msgstr "Joystick 4..." + +msgid "Sound card:" +msgstr "Scheda audio:" + +msgid "MIDI Out Device:" +msgstr "Uscita MIDI:" + +msgid "MIDI In Device:" +msgstr "Entrata MIDI:" + +msgid "Standalone MPU-401" +msgstr "MPU-401 autonomo" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Usa suono FLOAT32" + +msgid "Network type:" +msgstr "Tipo di rete:" + +msgid "PCap device:" +msgstr "Dispositivo PCap:" + +msgid "Network adapter:" +msgstr "Scheda di rete:" + +msgid "LPT1 Device:" +msgstr "Dispositivo LPT1:" + +msgid "LPT2 Device:" +msgstr "Dispositivo LPT2:" + +msgid "LPT3 Device:" +msgstr "Dispositivo LPT3:" + +msgid "Serial port 1" +msgstr "Porta seriale 1" + +msgid "Serial port 2" +msgstr "Porta seriale 2" + +msgid "Serial port 3" +msgstr "Porta seriale 3" + +msgid "Serial port 4" +msgstr "Porta seriale 4" + +msgid "Parallel port 1" +msgstr "Porta parallela 1" + +msgid "Parallel port 2" +msgstr "Porta parallela 2" + +msgid "Parallel port 3" +msgstr "Porta parallela 3" + +msgid "HD Controller:" +msgstr "Controller HD:" + +msgid "FD Controller:" +msgstr "Controller FD:" + +msgid "Tertiary IDE Controller" +msgstr "Controller IDE terziario" + +msgid "Quaternary IDE Controller" +msgstr "Controller IDE quaternario" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Controller 1:" + +msgid "Controller 2:" +msgstr "Controller 2:" + +msgid "Controller 3:" +msgstr "Controller 3:" + +msgid "Controller 4:" +msgstr "Controller 4:" + +msgid "Cassette" +msgstr "Cassetta" + +msgid "Hard disks:" +msgstr "Hard disk:" + +msgid "&New..." +msgstr "&Nuovo..." + +msgid "&Existing..." +msgstr "&Esistente..." + +msgid "&Remove" +msgstr "&Rimouvi" + +msgid "Bus:" +msgstr "Bus:" + +msgid "Channel:" +msgstr "Canale:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Specifica..." + +msgid "Sectors:" +msgstr "Settori:" + +msgid "Heads:" +msgstr "Testine:" + +msgid "Cylinders:" +msgstr "Cilindri:" + +msgid "Size (MB):" +msgstr "Dimensioni (MB):" + +msgid "Type:" +msgstr "Tipo:" + +msgid "Image Format:" +msgstr "Formato immagine:" + +msgid "Block Size:" +msgstr "Dimensioni blocco:" + +msgid "Floppy drives:" +msgstr "Unità floppy:" + +msgid "Turbo timings" +msgstr "Turbo" + +msgid "Check BPB" +msgstr "Verifica BPB" + +msgid "CD-ROM drives:" +msgstr "Unità CD-ROM:" + +msgid "MO drives:" +msgstr "Unità magneto-ottiche:" + +msgid "ZIP drives:" +msgstr "Unità ZIP:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "RTC ISA:" + +msgid "ISA Memory Expansion" +msgstr "Espansione memoria ISA" + +msgid "Card 1:" +msgstr "Scheda 1:" + +msgid "Card 2:" +msgstr "Scheda 2:" + +msgid "Card 3:" +msgstr "Scheda 3:" + +msgid "Card 4:" +msgstr "Scheda 4:" + +msgid "ISABugger device" +msgstr "Dispositivo ISABugger" + +msgid "POST card" +msgstr "Scheda POST" + +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Errore" + +msgid "Fatal error" +msgstr "Errore fatale" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Usa CTRL+ALT+PAGE DOWN per tornare alla modalità finestra." + +msgid "Speed" +msgstr "Velocità" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.im? *.zdi)" +msgstr "Immagini ZIP (*.im? *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box non può trovare immagini ROM utilizzabili.\n\nPlease download a ROM set and extract it into the \"roms\" directory." + +msgid "(empty)" +msgstr "(empty)" + +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "Immagini ZIP (*.im? *.zdi);;Tutti i file (*.*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Acceso" + +msgid "Off" +msgstr "Spento" + +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "Tutte le immagini (*.86f *.dsk *.flp *.im? *.*fd?);;Immagini di settori base (*.dsk *.flp *.im? *.img *.*fd?);;Immagini di superficie (*.86f)" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "La macchina \"%hs\" non è disponibile a causa di immagini ROM mancanti nella directory roms/machines. Cambiando ad una macchina disponibile." + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "La scheda video \"%hs\" non è disponibile a causa di immagini ROM mancanti nella directory roms/video. Cambiando ad una scheda video disponibile." + +msgid "Machine" +msgstr "Piastra madre" + +msgid "Display" +msgstr "Schermo" + +msgid "Input devices" +msgstr "Dispositivi di entrata" + +msgid "Sound" +msgstr "Audio" + +msgid "Network" +msgstr "Rete" + +msgid "Ports (COM & LPT)" +msgstr "Porte (COM & LPT)" + +msgid "Storage controllers" +msgstr "Controller memoria" + +msgid "Hard disks" +msgstr "Hard disk" + +msgid "Floppy & CD-ROM drives" +msgstr "Unità CD-ROM e Floppy" + +msgid "Other removable devices" +msgstr "Altri dispositivi rimuovibili" + +msgid "Other peripherals" +msgstr "Altre periferiche" + +msgid "Surface images (*.86f)" +msgstr "Immagini di superficie (*.86f)" + +msgid "Click to capture mouse" +msgstr "Fare clic per catturare mouse" + +msgid "Press F8+F12 to release mouse" +msgstr "Premi F8+F12 per rilasciare il mouse" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Premi F8+F12 o pulsante centrale per rilasciare il mouse" + +msgid "Unable to initialize FluidSynth" +msgstr "Impossibile inizializzare FluidSynth" + +msgid "Bus" +msgstr "Bus" + +msgid "File" +msgstr "File" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Impossibile inizializzare il renderer video." + +msgid "Default" +msgstr "Predefinito" + +msgid "%i Wait state(s)" +msgstr "%i stati d'attesa" + +msgid "Type" +msgstr "Tipo" + +msgid "Failed to set up PCap" +msgstr "Impossibile impostare PCap" + +msgid "No PCap devices found" +msgstr "Nessun dispositivo PCap trovato" + +msgid "Invalid PCap device" +msgstr "Dispositivo PCap invalido" + +msgid "Standard 2-button joystick(s)" +msgstr "Joystick comune da 2 pulsanti" + +msgid "Standard 4-button joystick" +msgstr "Joystick comune da 4 pulsanti" + +msgid "Standard 6-button joystick" +msgstr "Joystick comune da 6 pulsanti" + +msgid "Standard 8-button joystick" +msgstr "Joystick comune da 8 pulsanti" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Nessuno" + +msgid "Unable to load keyboard accelerators." +msgstr "Impossibile caricare gli acceleratori da tastiera." + +msgid "Unable to register raw input." +msgstr "Impossibile registrare input raw." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Floppy %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "Tutte le immagini (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Immagini da settori avanzati (*.imd *.json *.td0);;Imagini da settori basilari (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Immagini flusso (*.fdi);;Immagini da superficie (*.86f *.mfm);;Tutti i file (*.*)" + +msgid "Unable to initialize FreeType" +msgstr "Impossibile inizializzare FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Impossibile inizializzare SDL, SDL2.dll è necessario" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Sei sicuro di voler riavviare la macchina emulata?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Sei sicuro di voler uscire da 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Impossibile inizializzare Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "Immagini MO (*.im? *.mdi);;Tutti i file (*.*)" + +msgid "Welcome to 86Box!" +msgstr "Benvenuti in 86Box!" + +msgid "Internal controller" +msgstr "Controller interno" + +msgid "Exit" +msgstr "Esci" + +msgid "No ROMs found" +msgstr "Nessune immagini ROM trovate" + +msgid "Do you want to save the settings?" +msgstr "Vuole salvare queste impostazioni?" + +msgid "This will hard reset the emulated machine." +msgstr "Questo riavvierà la macchina emulata." + +msgid "Save" +msgstr "Salva" + +msgid "About 86Box" +msgstr "Informazioni su 86Box" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Un emulatore di computer vecchi\n\nAutori: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nTradotto da: explorerdotexe\n\nRilasciato sotto la Licenza Pubblica GNU versione 2 o dopo. Vedi LICENSE per maggior informazioni." + +msgid "Hardware not available" +msgstr "Hardware non disponibile" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Controlla se libpcap è installato e che tu sia connesso ad una connessione libpcap compatibile." + +msgid "Invalid configuration" +msgstr "Configurazione invalida" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " è richesto per l'emuazione di stampanti ESC/P." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " è richiesto per la conversione automatica di file PostScript a file PDF.\n\nQualsiasi documento mandato alla stampante generica PostScript sarà salvato come file PostScript. (.ps)" + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " è richiesto per l'output FluidSynth MIDI." + +msgid "Entering fullscreen mode" +msgstr "Entrando nella modalità schermo intero" + +msgid "Don't show this message again" +msgstr "Non mostrare più questo messaggio" + +msgid "Don't exit" +msgstr "Non uscire" + +msgid "Reset" +msgstr "Riavvia" + +msgid "Don't reset" +msgstr "Non riavviare" + +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "Immagini CD-ROM (*.iso *.cue);;Tutti i file (*.*)" + +msgid "%hs Device Configuration" +msgstr "Configurazione del dispositivo %hs" + +msgid "Monitor in sleep mode" +msgstr "Monitor in modalità riposo" + +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "Shader OpenGL (*.glsl);;Tutti i file (*.*)" + +msgid "OpenGL options" +msgstr "Impostazioni OpenGL" + +msgid "You are loading an unsupported configuration" +msgstr "Stai caricando una configurazione non supportata" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "Il filtraggio della tipologia di CPU è disabilitato per la macchina selezionata.\n\nQuesto lo rende possibile scegliere un CPU che è altrimenti incompatibile con la macchina selezionata. Tuttavia, portresti incorrere in incompatibilità con il BIOS della macchina o altri programmi. \n\nL'abilitare di questa impostazione non è ufficialmente supportato e tutte le segnalazioni di errori saranno considerate invalide." + +msgid "Continue" +msgstr "Continua" + +msgid "Cassette: %s" +msgstr "Cassetta: %s" + +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Immagini cassetta (*.pcm *.raw *.wav *.cas);;Tutti i file (*.*)" + +msgid "Cartridge %i: %ls" +msgstr "Cartuccia %i: %ls" + +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "Immagini cartuccia (*.a *.b *.jrc);;Tutti i file (*.*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + +msgid "Hard disk (%s)" +msgstr "Hard disk (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "Le unità CD-ROM MFM/RLL o ESDI non sono mai esistite." + +msgid "Custom..." +msgstr "Personalizzata..." + +msgid "Custom (large)..." +msgstr "Personalizzata (grande)..." + +msgid "Add New Hard Disk" +msgstr "Aggiungi un nuovo disco rigido" + +msgid "Add Existing Hard Disk" +msgstr "Aggiungi un disco rigido esistente" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "Le immagini HDI non possono essere più grandi di 4 GB." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Le immmagini disco non possono essere più grandi di 127 GB." + +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Immagini disco rigido (*.hd? *.im? *.vhd);;Tutti i file (*.*)" + +msgid "Unable to read file" +msgstr "Impossibile leggere il file" + +msgid "Unable to write file" +msgstr "Impossibile scrivere al file" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "Le immagini HDI o HDX con settori di dimensioni diverse da 512 non sono supportati." + +msgid "USB is not yet supported" +msgstr "USB non è ancora supportato" + +msgid "Disk image file already exists" +msgstr "Immagine disco già esiste" + +msgid "Please specify a valid file name." +msgstr "Specifica un nome file valido." + +msgid "Disk image created" +msgstr "Immagine disco creata" + +msgid "Make sure the file exists and is readable." +msgstr "Controlla che il file esiste e che sia leggibile." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Controlla che il file viene salvato ad un percorso con diritti di scrittura" + +msgid "Disk image too large" +msgstr "Immagine disco troppo grande" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Ricordati di partizionare e formattare il disco appena creato." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Il file selezionato sarà sovrascritto, sei sicuro di volerlo usare?" + +msgid "Unsupported disk image" +msgstr "Immagine disco non supportata" + +msgid "Overwrite" +msgstr "Sovrascrivi" + +msgid "Don't overwrite" +msgstr "Non sovrascrivere" + +msgid "Raw image (.img)" +msgstr "Immagine raw (.img)" + +msgid "HDI image (.hdi)" +msgstr "Immagine HDI (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "Immagine HDX (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD di dimensioni fisse (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD di dimensioni dinamiche (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "VHD differenziato (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Blocchi larghi (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Blocchi piccoli (512 KB)" + +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "File VHD (*.vhd);;Tutti i file (*.*)" + +msgid "Select the parent VHD" +msgstr "Seleziona il VHD padre." + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Questo potrebbe significare che l'immagine padre sia stata modificata dopo la creazione dell'immagine di differenziazione.\n\nPuò anche succedere se i file immagini sono stati spostati o copiati, o da un errore nel programma che ha creato questo disco.\n\nVuoi aggiustare le marcature di tempo?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Le marcature di tempo padre e figlio non corrispondono" + +msgid "Could not fix VHD timestamp." +msgstr "Impossibile aggiustare marcature di tempo VHD." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (cluster 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (cluster 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." + +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." + +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." + +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "RPM perfette" + +msgid "1%% below perfect RPM" +msgstr "RPM 1%% sotto perfezione" + +msgid "1.5%% below perfect RPM" +msgstr "RPM 1.5%% sotto perfezione" + +msgid "2%% below perfect RPM" +msgstr "RPM 2%% sotto perfezione" + +msgid "(System Default)" +msgstr "(Predefinito del sistema)" + diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po index a0afac074..8cc878c54 100644 --- a/src/qt/languages/ja-JP.po +++ b/src/qt/languages/ja-JP.po @@ -1,1191 +1,1191 @@ -msgid "&Action" -msgstr "動作(&A)" - -msgid "&Keyboard requires capture" -msgstr "キーボードはキャプチャが必要(&K)" - -msgid "&Right CTRL is left ALT" -msgstr "右CTRLを左ALTへ(&R)" - -msgid "&Hard Reset..." -msgstr "ハードリセット(&H)..." - -msgid "&Ctrl+Alt+Del\tCtrl+F12" -msgstr "Ctrl+Alt+Del(&C)\tCtrl+F12" - -msgid "Ctrl+Alt+&Esc" -msgstr "Ctrl+Alt+Esc(&E)" - -msgid "&Pause" -msgstr "一時停止(&P)" - -msgid "E&xit..." -msgstr "終了(&X)..." - -msgid "&View" -msgstr "表示(&V)" - -msgid "&Hide status bar" -msgstr "ステータスバーを隠す(&H)" - -msgid "Hide &toolbar" -msgstr "ツールバーを隠す(&T)" - -msgid "&Resizeable window" -msgstr "ウィンドウのサイズをリサイズ可能(&R)" - -msgid "R&emember size && position" -msgstr "ウィンドウのサイズと位置を記憶(&E)" - -msgid "Re&nderer" -msgstr "レンダラー(&N)" - -msgid "&SDL (Software)" -msgstr "SDL (ソフトウェア)(&S)" - -msgid "SDL (&Hardware)" -msgstr "SDL (ハードウェア)(&H)" - -msgid "SDL (&OpenGL)" -msgstr "SDL (OpenGL)(&O)" - -msgid "Open&GL (3.0 Core)" -msgstr "OpenGL (3.0コア)(&G)" - -msgid "&VNC" -msgstr "VNC(&V)" - -msgid "Specify dimensions..." -msgstr "ウィンドウのサイズを指定..." - -msgid "F&orce 4:3 display ratio" -msgstr "4:3アスペクト比を固定(&O)" - -msgid "&Window scale factor" -msgstr "ウィンドウの表示倍率(&W)" - -msgid "&0.5x" -msgstr "0.5x(&0)" - -msgid "&1x" -msgstr "1x(&1)" - -msgid "1.&5x" -msgstr "1.5x(&5)" - -msgid "&2x" -msgstr "2x(&2)" - -msgid "Filter method" -msgstr "フィルター方式" - -msgid "&Nearest" -msgstr "最近傍補間(&N)" - -msgid "&Linear" -msgstr "線形補間(&L)" - -msgid "Hi&DPI scaling" -msgstr "HiDPIスケーリング(&D)" - -msgid "&Fullscreen\tCtrl+Alt+PageUP" -msgstr "フルスクリーン(&F)\tCtrl+Alt+PageUP" - -msgid "Fullscreen &stretch mode" -msgstr "フルスクリーンのスケール(&S)" - -msgid "&Full screen stretch" -msgstr "フルスクリーンに拡大(&F)" - -msgid "&4:3" -msgstr "4:3(&4)" - -msgid "&Square pixels (Keep ratio)" -msgstr "正方形ピクセル(アスペクト比を維持)(&S)" - -msgid "&Integer scale" -msgstr "整数倍(&I)" - -msgid "E&GA/(S)VGA settings" -msgstr "E&GA/(S)VGAの設定" - -msgid "&Inverted VGA monitor" -msgstr "色を反転(&I)" - -msgid "VGA screen &type" -msgstr "画面タイプ(&T)" - -msgid "RGB &Color" -msgstr "RGB(カラー)(&C)" - -msgid "&RGB Grayscale" -msgstr "RGB(グレースケール)(&R)" - -msgid "&Amber monitor" -msgstr "モニター(琥珀色)(&A)" - -msgid "&Green monitor" -msgstr "モニター(緑色)(&G)" - -msgid "&White monitor" -msgstr "モニター(白色)(&W)" - -msgid "Grayscale &conversion type" -msgstr "グレースケール変換タイプ(&C)" - -msgid "BT&601 (NTSC/PAL)" -msgstr "BT601 (NTSC/PAL)(&6)" - -msgid "BT&709 (HDTV)" -msgstr "BT709 (HDTV)(&7)" - -msgid "&Average" -msgstr "平均(&A)" - -msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" -msgstr "CGA/PCjr/Tandy/EGA/(S)VGAオーバースキャン(&G)" - -msgid "Change contrast for &monochrome display" -msgstr "単色モニター用コントラストを変更(&M)" - -msgid "&Media" -msgstr "メディア(&M)" - -msgid "&Tools" -msgstr "ツール(&T)" - -msgid "&Settings..." -msgstr "設定(&S)..." - -msgid "&Update status bar icons" -msgstr "ステータスバーのアイコンを更新(&U)" - -msgid "Take s&creenshot\tCtrl+F11" -msgstr "スクリーンショットを撮る(&C)\tCtrl+F11" - -msgid "&Preferences..." -msgstr "環境設定(&P)..." - -msgid "Enable &Discord integration" -msgstr "Discordとの連携機能(&D)" - -msgid "Sound &gain..." -msgstr "音量を調節(&G)..." - -msgid "Begin trace\tCtrl+T" -msgstr "トレース開始\tCtrl+T" - -msgid "End trace\tCtrl+T" -msgstr "トレース終了\tCtrl+T" - -msgid "&Logging" -msgstr "ログ(&L)" - -msgid "Enable BusLogic logs\tCtrl+F4" -msgstr "BusLogicのログを有効\tCtrl+F4" - -msgid "Enable CD-ROM logs\tCtrl+F5" -msgstr "CD-ROMのログを有効\tCtrl+F5" - -msgid "Enable floppy (86F) logs\tCtrl+F6" -msgstr "フロッピー(86F)のログを有効\tCtrl+F6" - -msgid "Enable floppy controller logs\tCtrl+F7" -msgstr "フロッピーコントローラーのログを有効\tCtrl+F7" - -msgid "Enable IDE logs\tCtrl+F8" -msgstr "IDEのログを有効\tCtrl+F8" - -msgid "Enable Serial Port logs\tCtrl+F3" -msgstr "シリアルポートのログを有効\tCtrl+F3" - -msgid "Enable Network logs\tCtrl+F9" -msgstr "ネットワークのログを有効\tCtrl+F9" - -msgid "&Log breakpoint\tCtrl+F10" -msgstr "ブレークポイントのログを有効(&L)\tCtrl+F10" - -msgid "Dump &video RAM\tCtrl+F1" -msgstr "ビデオRAMのダンプを有効(&V)\tCtrl+F1" - -msgid "&Help" -msgstr "ヘルプ(&H)" - -msgid "&Documentation..." -msgstr "ドキュメント(&D)..." - -msgid "&About 86Box..." -msgstr "86Boxのバージョン情報(&A)..." - -msgid "&New image..." -msgstr "新規イメージ(&N)..." - -msgid "&Existing image..." -msgstr "既存のイメージを開く(&E)..." - -msgid "Existing image (&Write-protected)..." -msgstr "既存のイメージを開く(書き込み保護)(&W)..." - -msgid "&Record" -msgstr "録音(&R)" - -msgid "&Play" -msgstr "再生(&P)" - -msgid "&Rewind to the beginning" -msgstr "冒頭に巻き戻す(&R)" - -msgid "&Fast forward to the end" -msgstr "最後まで早送り(&F)" - -msgid "E&ject" -msgstr "取り出す(&J)" - -msgid "&Image..." -msgstr "イメージ(&I)..." - -msgid "E&xport to 86F..." -msgstr "86Fイメージにエクスポート(&X)..." - -msgid "&Mute" -msgstr "ミュート(&M)" - -msgid "E&mpty" -msgstr "空(&M)" - -msgid "&Reload previous image" -msgstr "前のイメージを再読み込み(&R)" - -msgid "&Image" -msgstr "イメージ(&I)" - -msgid "Target &framerate" -msgstr "目標フレームレート(&F)" - -msgid "&Sync with video" -msgstr "ビデオと同期(&S)" - -msgid "&25 fps" -msgstr "25 fps(&2)" - -msgid "&30 fps" -msgstr "30 fps(&3)" - -msgid "&50 fps" -msgstr "50 fps(&5)" - -msgid "&60 fps" -msgstr "60 fps(&6)" - -msgid "&75 fps" -msgstr "75 fps(&7)" - -msgid "&VSync" -msgstr "垂直同期(VSync)(&V)" - -msgid "&Select shader..." -msgstr "シェーダーを選択(&S)..." - -msgid "&Remove shader" -msgstr "シェーダーを削除(&R)" - -msgid "Preferences" -msgstr "環境設定" - -msgid "Sound Gain" -msgstr "音量ゲイン" - -msgid "New Image" -msgstr "新規のイメージ" - -msgid "Settings" -msgstr "設定" - -msgid "Specify Main Window Dimensions" -msgstr "メインウィンドウのサイズ指定" - -msgid "OK" -msgstr "OK" - -msgid "Cancel" -msgstr "キャンセル" - -msgid "Save these settings as &global defaults" -msgstr "これらの設定をグローバル既定値として保存する(&G)" - -msgid "&Default" -msgstr "既定値(&D)" - -msgid "Language:" -msgstr "言語:" - -msgid "Icon set:" -msgstr "アイコンセット:" - -msgid "Gain" -msgstr "ゲイン値" - -msgid "File name:" -msgstr "ファイル名:" - -msgid "Disk size:" -msgstr "ディスクサイズ:" - -msgid "RPM mode:" -msgstr "回転数モード:" - -msgid "Progress:" -msgstr "進行状況:" - -msgid "Width:" -msgstr "幅:" - -msgid "Height:" -msgstr "高さ:" - -msgid "Lock to this size" -msgstr "このサイズをロックする" - -msgid "Machine type:" -msgstr "マシンタイプ:" - -msgid "Machine:" -msgstr "マシン:" - -msgid "Configure" -msgstr "設定" - -msgid "CPU type:" -msgstr "CPUタイプ:" - -msgid "Speed:" -msgstr "速度:" - -msgid "FPU:" -msgstr "FPU:" - -msgid "Wait states:" -msgstr "待機状態:" - -msgid "MB" -msgstr "MB" - -msgid "Memory:" -msgstr "メモリ:" - -msgid "Time synchronization" -msgstr "時刻同期機能" - -msgid "Disabled" -msgstr "無効にする" - -msgid "Enabled (local time)" -msgstr "有効にする (現地時間)" - -msgid "Enabled (UTC)" -msgstr "有効にする (UTC)" - -msgid "Dynamic Recompiler" -msgstr "動的リコンパイラ" - -msgid "Video:" -msgstr "ビデオカード:" - -msgid "Voodoo Graphics" -msgstr "Voodooグラフィック" - -msgid "Mouse:" -msgstr "マウス:" - -msgid "Joystick:" -msgstr "ジョイスティック:" - -msgid "Joystick 1..." -msgstr "ジョイスティック1..." - -msgid "Joystick 2..." -msgstr "ジョイスティック2..." - -msgid "Joystick 3..." -msgstr "ジョイスティック3..." - -msgid "Joystick 4..." -msgstr "ジョイスティック4..." - -msgid "Sound card:" -msgstr "サウンドカード:" - -msgid "MIDI Out Device:" -msgstr "MIDI出力デバイス:" - -msgid "MIDI In Device:" -msgstr "MIDI入力デバイス:" - -msgid "Standalone MPU-401" -msgstr "独立型MPU-401" - -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - -msgid "Use FLOAT32 sound" -msgstr "FLOAT32サウンドを使用する" - -msgid "Network type:" -msgstr "ネットワークタイプ:" - -msgid "PCap device:" -msgstr "PCapデバイス:" - -msgid "Network adapter:" -msgstr "ネットワークアダプター:" - -msgid "LPT1 Device:" -msgstr "LPT1デバイス:" - -msgid "LPT2 Device:" -msgstr "LPT2デバイス:" - -msgid "LPT3 Device:" -msgstr "LPT3デバイス:" - -msgid "Serial port 1" -msgstr "シリアルポート1" - -msgid "Serial port 2" -msgstr "シリアルポート2" - -msgid "Serial port 3" -msgstr "シリアルポート3" - -msgid "Serial port 4" -msgstr "シリアルポート4" - -msgid "Parallel port 1" -msgstr "パラレルポート1" - -msgid "Parallel port 2" -msgstr "パラレルポート2" - -msgid "Parallel port 3" -msgstr "パラレルポート3" - -msgid "HD Controller:" -msgstr "HDコントローラー:" - -msgid "FD Controller:" -msgstr "FDコントローラー:" - -msgid "Tertiary IDE Controller" -msgstr "第三のIDEコントローラー" - -msgid "Quaternary IDE Controller" -msgstr "第四のIDEコントローラー" - -msgid "SCSI" -msgstr "SCSI" - -msgid "Controller 1:" -msgstr "コントローラー1:" - -msgid "Controller 2:" -msgstr "コントローラー2:" - -msgid "Controller 3:" -msgstr "コントローラー3:" - -msgid "Controller 4:" -msgstr "コントローラー4:" - -msgid "Cassette" -msgstr "カセット" - -msgid "Hard disks:" -msgstr "ハードディスク:" - -msgid "&New..." -msgstr "新規(&N)..." - -msgid "&Existing..." -msgstr "既定(&E)..." - -msgid "&Remove" -msgstr "除去(&R)" - -msgid "Bus:" -msgstr "バス:" - -msgid "Channel:" -msgstr "チャンネル:" - -msgid "ID:" -msgstr "ID:" - -msgid "&Specify..." -msgstr "参照(&S)..." - -msgid "Sectors:" -msgstr "セクター:" - -msgid "Heads:" -msgstr "ヘッド:" - -msgid "Cylinders:" -msgstr "シリンダー:" - -msgid "Size (MB):" -msgstr "サイズ(MB):" - -msgid "Type:" -msgstr "タイプ:" - -msgid "Image Format:" -msgstr "イメージ形式:" - -msgid "Block Size:" -msgstr "ブロックサイズ:" - -msgid "Floppy drives:" -msgstr "フロッピードライブ:" - -msgid "Turbo timings" -msgstr "高速タイミング" - -msgid "Check BPB" -msgstr "BPBをチェック" - -msgid "CD-ROM drives:" -msgstr "CD-ROMドライブ:" - -msgid "MO drives:" -msgstr "光磁気ドライブ:" - -msgid "ZIP drives:" -msgstr "ZIPドライブ:" - -msgid "ZIP 250" -msgstr "ZIP 250" - -msgid "ISA RTC:" -msgstr "ISA RTCカード:" - -msgid "ISA Memory Expansion" -msgstr "ISAメモリー拡張カード" - -msgid "Card 1:" -msgstr "カード1:" - -msgid "Card 2:" -msgstr "カード2:" - -msgid "Card 3:" -msgstr "カード3:" - -msgid "Card 4:" -msgstr "カード4:" - -msgid "ISABugger device" -msgstr "ISABuggerデバイス" - -msgid "POST card" -msgstr "POSTカード" - -msgid "FONT_SIZE" -msgstr "9" - -msgid "FONT_NAME" -msgstr "Meiryo UI" - -msgid "86Box" -msgstr "86Box" - -msgid "Error" -msgstr "エラー" - -msgid "Fatal error" -msgstr "致命的なエラー" - -msgid "" -msgstr "<予約済み>" - -msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." -msgstr "CTRL+ALT+PAGE DOWNでウィンドウモードに戻ります。" - -msgid "Speed" -msgstr "速度" - -msgid "ZIP %03i %i (%s): %ls" -msgstr "ZIP %03i %i (%s): %ls" - -msgid "ZIP images (*.im? *.zdi)" -msgstr "ZIPイメージ (*.im? *.zdi)" - -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "86Boxで使用可能なROMイメージが見つかりませんでした。\n\nROMセットをダウンロードして、「roms」ディレクトリに解凍してください。" - -msgid "(empty)" -msgstr "(空)" - -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "ZIPイメージ (*.im? *.zdi);;すべてのファイル (*.*)" - -msgid "Turbo" -msgstr "高速" - -msgid "On" -msgstr "オン" - -msgid "Off" -msgstr "オフ" - -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "すべてのイメージ (*.86f *.dsk *.flp *.im? *.*fd?);;基本的なセクターイメージ (*.dsk *.flp *.im? *.img *.*fd?);;表面イメージ (*.86f)" - -msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "roms/machinesディレクトリにROMがないため、マシン「%hs」は使用できません。使用可能なマシンに切り替えます。" - -msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "roms/videoディレクトリにROMがないため、ビデオカード「%hs」は使用できません。使用可能なビデオカードに切り替えます。" - -msgid "Machine" -msgstr "マシン" - -msgid "Display" -msgstr "画面表示" - -msgid "Input devices" -msgstr "入力デバイス" - -msgid "Sound" -msgstr "サウンド" - -msgid "Network" -msgstr "ネットワーク" - -msgid "Ports (COM & LPT)" -msgstr "ポート (COM & LPT)" - -msgid "Storage controllers" -msgstr "ストレージコントローラ" - -msgid "Hard disks" -msgstr "ハードディスク" - -msgid "Floppy & CD-ROM drives" -msgstr "フロッピー/CD-ROMドライブ" - -msgid "Other removable devices" -msgstr "その他のリムーバブルデバイス" - -msgid "Other peripherals" -msgstr "その他の周辺装置" - -msgid "Surface images (*.86f)" -msgstr "表面イメージ (*.86f)" - -msgid "Click to capture mouse" -msgstr "クリックするとマウスをキャプチャします" - -msgid "Press F8+F12 to release mouse" -msgstr "F8+F12キーでマウスを解放します" - -msgid "Press F8+F12 or middle button to release mouse" -msgstr "F8+F12キーまたは中ボタンでマウスを解放します" - -msgid "Unable to initialize FluidSynth" -msgstr "FluidSynthが初期化できません" - -msgid "Bus" -msgstr "バス" - -msgid "File" -msgstr "ファイル" - -msgid "C" -msgstr "C" - -msgid "H" -msgstr "H" - -msgid "S" -msgstr "S" - -msgid "KB" -msgstr "KB" - -msgid "Could not initialize the video renderer." -msgstr "ビデオレンダラーが初期化できません。" - -msgid "Default" -msgstr "既定値" - -msgid "%i Wait state(s)" -msgstr "%iつの待機状態" - -msgid "Type" -msgstr "タイプ" - -msgid "Failed to set up PCap" -msgstr "PCapのセットアップに失敗しました" - -msgid "No PCap devices found" -msgstr "PCapデバイスがありません" - -msgid "Invalid PCap device" -msgstr "不正なPCapデバイスです" - -msgid "Standard 2-button joystick(s)" -msgstr "標準ジョイスティック(2ボタン)" - -msgid "Standard 4-button joystick" -msgstr "標準ジョイスティック(4ボタン)" - -msgid "Standard 6-button joystick" -msgstr "標準ジョイスティック(6ボタン)" - -msgid "Standard 8-button joystick" -msgstr "標準ジョイスティック(8ボタン)" - -msgid "CH Flightstick Pro" -msgstr "CH Flightstick Pro" - -msgid "Microsoft SideWinder Pad" -msgstr "Microsoft SideWinder Pad" - -msgid "Thrustmaster Flight Control System" -msgstr "Thrustmaster Flight Control System" - -msgid "None" -msgstr "なし" - -msgid "Unable to load keyboard accelerators." -msgstr "キーボードアクセラレータを読み込めません。" - -msgid "Unable to register raw input." -msgstr "生の入力が登録できません。" - -msgid "%u" -msgstr "%u" - -msgid "%u MB (CHS: %i, %i, %i)" -msgstr "%u MB (CHS: %i, %i, %i)" - -msgid "Floppy %i (%s): %ls" -msgstr "フロッピー %i (%s): %ls" - -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "すべてのイメージ (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;アドバンスドセクターイメージ (*.imd *.json *.td0);;基本セクターイメージ (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;フラックスイメージ (*.fdi);;表面イメージ (*.86f *.mfm);;すべてのファイル (*.*)" - -msgid "Unable to initialize FreeType" -msgstr "FreeTypeが初期化できません" - -msgid "Unable to initialize SDL, SDL2.dll is required" -msgstr "SDLが初期化できません。SDL2.dllが必要です" - -msgid "Are you sure you want to hard reset the emulated machine?" -msgstr "使用中のマシンをハードリセットしますか?" - -msgid "Are you sure you want to exit 86Box?" -msgstr "86Boxを終了しますか?" - -msgid "Unable to initialize Ghostscript" -msgstr "Ghostscriptが初期化できません" - -msgid "MO %i (%ls): %ls" -msgstr "光磁気 %i (%ls): %ls" - -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "光磁気イメージ (*.im? *.mdi);;すべてのファイル (*.*)" - -msgid "Welcome to 86Box!" -msgstr "86Boxへようこそ!" - -msgid "Internal controller" -msgstr "内蔵コントローラー" - -msgid "Exit" -msgstr "終了" - -msgid "No ROMs found" -msgstr "ROMが見つかりません" - -msgid "Do you want to save the settings?" -msgstr "設定を保存しますか?" - -msgid "This will hard reset the emulated machine." -msgstr "保存すると使用中のマシンがハードリセットされます。" - -msgid "Save" -msgstr "保存" - -msgid "About 86Box" -msgstr "86Boxのバージョン情報" - -msgid "86Box v" -msgstr "86Box v" - -msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "古いパソコンのエミュレーター\n\n著者: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nGNU General Public License version 2以降でリリースされています。詳しくは LICENSE をご覧ください。" - -msgid "Hardware not available" -msgstr "ハードウェアが利用できません" - -msgid "WinPcap" -msgstr "WinPcap" - -msgid "libpcap" -msgstr "libpcap" - -msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." -msgstr "がインストールされてるか、libpcapに対応したネットワークに接続されてるか確認してください。" - -msgid "Invalid configuration" -msgstr "不正な設定です" - -msgid "freetype.dll" -msgstr "freetype.dll" - -msgid "libfreetype" -msgstr "libfreetype" - -msgid " is required for ESC/P printer emulation." -msgstr "ESC/Pプリンタのエミュレーションにはlibfreetypeが必要です。" - -msgid "gsdll32.dll" -msgstr "gsdll32.dll" - -msgid "libgs" -msgstr "libgs" - -msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." -msgstr "PostScriptファイルをPDFに自動変換するにはlibgsが必要です。\n\n汎用PostScriptプリンターに送信されたドキュメントは、PostScript(.ps)ファイルとして保存されます。" - -msgid "libfluidsynth.dll" -msgstr "libfluidsynth.dll" - -msgid "libfluidsynth" -msgstr "libfluidsynth" - -msgid " is required for FluidSynth MIDI output." -msgstr "FluidSynthのMIDI出力にはlibfluidsynthが必要です。" - -msgid "Entering fullscreen mode" -msgstr "フルスクリーンに切り替えています" - -msgid "Don't show this message again" -msgstr "今後、このメッセージを表示しない" - -msgid "Don't exit" -msgstr "終了しない" - -msgid "Reset" -msgstr "リセット" - -msgid "Don't reset" -msgstr "リセットしない" - -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "CD-ROMイメージ (*.iso *.cue);;すべてのファイル (*.*)" - -msgid "%hs Device Configuration" -msgstr "%hs デバイスの設定" - -msgid "Monitor in sleep mode" -msgstr "モニターのスリープモード" - -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "OpenGLシェーダー (*.glsl);;すべてのファイル (*.*)" - -msgid "OpenGL options" -msgstr "OpenGL設定" - -msgid "You are loading an unsupported configuration" -msgstr "サポートされていない設定を読み込んでいます" - -msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "選択したマシンに基づくCPUタイプのフィルタリングは、このエミュレートされたマシンでは無効になっています。\n\nこれにより、選択したマシンと互換性のないCPUが選択できます。ただし、マシンのBIOSまたは他のソフトウェアとの互換性が失われる可能性があります。\n\nこの設定の有効化は公式サポートができません。また、バグレポートが無効として閉じられる場合があります。" - -msgid "Continue" -msgstr "続行" - -msgid "Cassette: %s" -msgstr "カセット: %s" - -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "カセットイメージ (*.pcm *.raw *.wav *.cas);;すべてのファイル (*.*)" - -msgid "Cartridge %i: %ls" -msgstr "カートリッジ %i: %ls" - -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "カートリッジイメージ (*.a *.b *.jrc);;すべてのファイル (*.*)" - -msgid "Error initializing renderer" -msgstr "レンダラーの初期化エラー" - -msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "OpenGL (3.0コア) レンダラーが初期化できませんでした。別のレンダラーを使用してください。" - -msgid "Resume execution" -msgstr "実行を再開" - -msgid "Pause execution" -msgstr "実行を一時停止" - -msgid "Press Ctrl+Alt+Del" -msgstr "Ctrl+Alt+DELを押し" - -msgid "Press Ctrl+Alt+Esc" -msgstr "Ctrl+Alt+Escを押し" - -msgid "Hard reset" -msgstr "ハードリセット" - -msgid "ACPI shutdown" -msgstr "ACPIシャットダウン" - -msgid "Hard disk (%s)" -msgstr "ハードディスク (%s)" - -msgid "%01i:%01i" -msgstr "%01i:%01i" - -msgid "%01i" -msgstr "%01i" - -msgid "MFM/RLL or ESDI CD-ROM drives never existed" -msgstr "MFM/RLLまたはESDIのCD-ROMドライブが存在しません" - -msgid "Custom..." -msgstr "カスタム..." - -msgid "Custom (large)..." -msgstr "カスタム (大型)..." - -msgid "Add New Hard Disk" -msgstr "新規のディスクを追加" - -msgid "Add Existing Hard Disk" -msgstr "既定のディスクを追加" - -msgid "HDI disk images cannot be larger than 4 GB." -msgstr "HDIディスクイメージは4GBを超えることはできません。" - -msgid "Disk images cannot be larger than 127 GB." -msgstr "ディスクイメージは127GBを超えることはできません。" - -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "ハードディスクイメージ (*.hd? *.im? *.vhd);;すべてのファイル (*.*)" - -msgid "Unable to read file" -msgstr "ファイルの読み込みができません" - -msgid "Unable to write file" -msgstr "ファイルの書き込みができません" - -msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "512以外のセクタサイズを持つHDIまたはHDXイメージはサポートされていません。" - -msgid "USB is not yet supported" -msgstr "USBはまだサポートされていません" - -msgid "Disk image file already exists" -msgstr "ディスクイメージファイルが既に存在します" - -msgid "Please specify a valid file name." -msgstr "有効なファイル名を指定してください。" - -msgid "Disk image created" -msgstr "ディスクイメージが作成されました" - -msgid "Make sure the file exists and is readable." -msgstr "ファイルが存在し、読み取り可能であることを確認してください。" - -msgid "Make sure the file is being saved to a writable directory." -msgstr "ファイルが書き込み可能なディレクトリに保存されていることを確認してください。" - -msgid "Disk image too large" -msgstr "ディスクイメージのサイズが大きすぎます" - -msgid "Remember to partition and format the newly-created drive." -msgstr "新規ドライブをパーティション分割し、フォーマットを必ずしといてください。" - -msgid "The selected file will be overwritten. Are you sure you want to use it?" -msgstr "選択したファイルが上書きされます。使っていいですか?" - -msgid "Unsupported disk image" -msgstr "サポートされていないディスクイメージ" - -msgid "Overwrite" -msgstr "上書き" - -msgid "Don't overwrite" -msgstr "上書きしない" - -msgid "Raw image (.img)" -msgstr "Rawイメージ (.img)" - -msgid "HDI image (.hdi)" -msgstr "HDIイメージ (.hdi)" - -msgid "HDX image (.hdx)" -msgstr "HDXイメージ (.hdx)" - -msgid "Fixed-size VHD (.vhd)" -msgstr "VHD(容量固定)(.vhd)" - -msgid "Dynamic-size VHD (.vhd)" -msgstr "VHD(容量可変)(.vhd)" - -msgid "Differencing VHD (.vhd)" -msgstr "VHD(差分)(.vhd)" - -msgid "Large blocks (2 MB)" -msgstr "大型ブロック (2 MB)" - -msgid "Small blocks (512 KB)" -msgstr "小型ブロック (512 KB)" - -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "VHDファイル (*.vhd);;すべてのファイル (*.*)" - -msgid "Select the parent VHD" -msgstr "親VHDの選択" - -msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" -msgstr "親イメージがディファレンシングイメージの作成の後に修正した可能性があります。\n\nイメージファイルの移動、コピーまたはこのディスクを作成したプログラムにバグが発生した可能性があります。\n\nタイムスタンプを修正しますか?" - -msgid "Parent and child disk timestamps do not match" -msgstr "親ディスクと子ディスクのタイムスタンプが一致しません" - -msgid "Could not fix VHD timestamp." -msgstr "VHD のタイムスタンプを修正できませんでした。" - -msgid "%01i:%02i" -msgstr "%01i:%02i" - -msgid "MFM/RLL" -msgstr "MFM/RLL" - -msgid "XTA" -msgstr "XTA" - -msgid "ESDI" -msgstr "ESDI" - -msgid "IDE" -msgstr "IDE" - -msgid "ATAPI" -msgstr "ATAPI" - -msgid "MFM/RLL (%01i:%01i)" -msgstr "MFM/RLL (%01i:%01i)" - -msgid "XTA (%01i:%01i)" -msgstr "XTA (%01i:%01i)" - -msgid "ESDI (%01i:%01i)" -msgstr "ESDI (%01i:%01i)" - -msgid "IDE (%01i:%01i)" -msgstr "IDE (%01i:%01i)" - -msgid "ATAPI (%01i:%01i)" -msgstr "ATAPI (%01i:%01i)" - -msgid "SCSI (%01i:%02i)" -msgstr "SCSI (%01i:%02i)" - -msgid "CD-ROM %i (%s): %s" -msgstr "CD-ROM %i (%s): %s" - -msgid "160 kB" -msgstr "160 kB" - -msgid "180 kB" -msgstr "180 kB" - -msgid "320 kB" -msgstr "320 kB" - -msgid "360 kB" -msgstr "360 kB" - -msgid "640 kB" -msgstr "640 kB" - -msgid "720 kB" -msgstr "720 kB" - -msgid "1.2 MB" -msgstr "1.2 MB" - -msgid "1.25 MB" -msgstr "1.25 MB" - -msgid "1.44 MB" -msgstr "1.44 MB" - -msgid "DMF (cluster 1024)" -msgstr "DMF (クラスター1024)" - -msgid "DMF (cluster 2048)" -msgstr "DMF (クラスター2048)" - -msgid "2.88 MB" -msgstr "2.88 MB" - -msgid "ZIP 100" -msgstr "ZIP 100" - -msgid "3.5\" 128Mb M.O. (ISO 10090)" -msgstr "3.5\" 128Mb M.O. (ISO 10090)" - -msgid "3.5\" 230Mb M.O. (ISO 13963)" -msgstr "3.5\" 230Mb M.O. (ISO 13963)" - -msgid "3.5\" 540Mb M.O. (ISO 15498)" -msgstr "3.5\" 540Mb M.O. (ISO 15498)" - -msgid "3.5\" 640Mb M.O. (ISO 15498)" -msgstr "3.5\" 640Mb M.O. (ISO 15498)" - -msgid "3.5\" 1.3Gb M.O. (GigaMO)" -msgstr "3.5\" 1.3Gb M.O. (GigaMO)" - -msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" - -msgid "5.25\" 600Mb M.O." -msgstr "5.25\" 600Mb M.O." - -msgid "5.25\" 650Mb M.O." -msgstr "5.25\" 650Mb M.O." - -msgid "5.25\" 1Gb M.O." -msgstr "5.25\" 1Gb M.O." - -msgid "5.25\" 1.3Gb M.O." -msgstr "5.25\" 1.3Gb M.O." - -msgid "Perfect RPM" -msgstr "規定の回転数" - -msgid "1%% below perfect RPM" -msgstr "1%低い回転数" - -msgid "1.5%% below perfect RPM" -msgstr "1.5%低い回転数" - -msgid "2%% below perfect RPM" -msgstr "2%低い回転数" - -msgid "(System Default)" -msgstr "(システム既定値)" - +msgid "&Action" +msgstr "動作(&A)" + +msgid "&Keyboard requires capture" +msgstr "キーボードはキャプチャが必要(&K)" + +msgid "&Right CTRL is left ALT" +msgstr "右CTRLを左ALTへ(&R)" + +msgid "&Hard Reset..." +msgstr "ハードリセット(&H)..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "Ctrl+Alt+Del(&C)\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+Esc(&E)" + +msgid "&Pause" +msgstr "一時停止(&P)" + +msgid "E&xit..." +msgstr "終了(&X)..." + +msgid "&View" +msgstr "表示(&V)" + +msgid "&Hide status bar" +msgstr "ステータスバーを隠す(&H)" + +msgid "Hide &toolbar" +msgstr "ツールバーを隠す(&T)" + +msgid "&Resizeable window" +msgstr "ウィンドウのサイズをリサイズ可能(&R)" + +msgid "R&emember size && position" +msgstr "ウィンドウのサイズと位置を記憶(&E)" + +msgid "Re&nderer" +msgstr "レンダラー(&N)" + +msgid "&SDL (Software)" +msgstr "SDL (ソフトウェア)(&S)" + +msgid "SDL (&Hardware)" +msgstr "SDL (ハードウェア)(&H)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (OpenGL)(&O)" + +msgid "Open&GL (3.0 Core)" +msgstr "OpenGL (3.0コア)(&G)" + +msgid "&VNC" +msgstr "VNC(&V)" + +msgid "Specify dimensions..." +msgstr "ウィンドウのサイズを指定..." + +msgid "F&orce 4:3 display ratio" +msgstr "4:3アスペクト比を固定(&O)" + +msgid "&Window scale factor" +msgstr "ウィンドウの表示倍率(&W)" + +msgid "&0.5x" +msgstr "0.5x(&0)" + +msgid "&1x" +msgstr "1x(&1)" + +msgid "1.&5x" +msgstr "1.5x(&5)" + +msgid "&2x" +msgstr "2x(&2)" + +msgid "Filter method" +msgstr "フィルター方式" + +msgid "&Nearest" +msgstr "最近傍補間(&N)" + +msgid "&Linear" +msgstr "線形補間(&L)" + +msgid "Hi&DPI scaling" +msgstr "HiDPIスケーリング(&D)" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "フルスクリーン(&F)\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "フルスクリーンのスケール(&S)" + +msgid "&Full screen stretch" +msgstr "フルスクリーンに拡大(&F)" + +msgid "&4:3" +msgstr "4:3(&4)" + +msgid "&Square pixels (Keep ratio)" +msgstr "正方形ピクセル(アスペクト比を維持)(&S)" + +msgid "&Integer scale" +msgstr "整数倍(&I)" + +msgid "E&GA/(S)VGA settings" +msgstr "E&GA/(S)VGAの設定" + +msgid "&Inverted VGA monitor" +msgstr "色を反転(&I)" + +msgid "VGA screen &type" +msgstr "画面タイプ(&T)" + +msgid "RGB &Color" +msgstr "RGB(カラー)(&C)" + +msgid "&RGB Grayscale" +msgstr "RGB(グレースケール)(&R)" + +msgid "&Amber monitor" +msgstr "モニター(琥珀色)(&A)" + +msgid "&Green monitor" +msgstr "モニター(緑色)(&G)" + +msgid "&White monitor" +msgstr "モニター(白色)(&W)" + +msgid "Grayscale &conversion type" +msgstr "グレースケール変換タイプ(&C)" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT601 (NTSC/PAL)(&6)" + +msgid "BT&709 (HDTV)" +msgstr "BT709 (HDTV)(&7)" + +msgid "&Average" +msgstr "平均(&A)" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "CGA/PCjr/Tandy/EGA/(S)VGAオーバースキャン(&G)" + +msgid "Change contrast for &monochrome display" +msgstr "単色モニター用コントラストを変更(&M)" + +msgid "&Media" +msgstr "メディア(&M)" + +msgid "&Tools" +msgstr "ツール(&T)" + +msgid "&Settings..." +msgstr "設定(&S)..." + +msgid "&Update status bar icons" +msgstr "ステータスバーのアイコンを更新(&U)" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "スクリーンショットを撮る(&C)\tCtrl+F11" + +msgid "&Preferences..." +msgstr "環境設定(&P)..." + +msgid "Enable &Discord integration" +msgstr "Discordとの連携機能(&D)" + +msgid "Sound &gain..." +msgstr "音量を調節(&G)..." + +msgid "Begin trace\tCtrl+T" +msgstr "トレース開始\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "トレース終了\tCtrl+T" + +msgid "&Logging" +msgstr "ログ(&L)" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "BusLogicのログを有効\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "CD-ROMのログを有効\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "フロッピー(86F)のログを有効\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "フロッピーコントローラーのログを有効\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "IDEのログを有効\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "シリアルポートのログを有効\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "ネットワークのログを有効\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "ブレークポイントのログを有効(&L)\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "ビデオRAMのダンプを有効(&V)\tCtrl+F1" + +msgid "&Help" +msgstr "ヘルプ(&H)" + +msgid "&Documentation..." +msgstr "ドキュメント(&D)..." + +msgid "&About 86Box..." +msgstr "86Boxのバージョン情報(&A)..." + +msgid "&New image..." +msgstr "新規イメージ(&N)..." + +msgid "&Existing image..." +msgstr "既存のイメージを開く(&E)..." + +msgid "Existing image (&Write-protected)..." +msgstr "既存のイメージを開く(書き込み保護)(&W)..." + +msgid "&Record" +msgstr "録音(&R)" + +msgid "&Play" +msgstr "再生(&P)" + +msgid "&Rewind to the beginning" +msgstr "冒頭に巻き戻す(&R)" + +msgid "&Fast forward to the end" +msgstr "最後まで早送り(&F)" + +msgid "E&ject" +msgstr "取り出す(&J)" + +msgid "&Image..." +msgstr "イメージ(&I)..." + +msgid "E&xport to 86F..." +msgstr "86Fイメージにエクスポート(&X)..." + +msgid "&Mute" +msgstr "ミュート(&M)" + +msgid "E&mpty" +msgstr "空(&M)" + +msgid "&Reload previous image" +msgstr "前のイメージを再読み込み(&R)" + +msgid "&Image" +msgstr "イメージ(&I)" + +msgid "Target &framerate" +msgstr "目標フレームレート(&F)" + +msgid "&Sync with video" +msgstr "ビデオと同期(&S)" + +msgid "&25 fps" +msgstr "25 fps(&2)" + +msgid "&30 fps" +msgstr "30 fps(&3)" + +msgid "&50 fps" +msgstr "50 fps(&5)" + +msgid "&60 fps" +msgstr "60 fps(&6)" + +msgid "&75 fps" +msgstr "75 fps(&7)" + +msgid "&VSync" +msgstr "垂直同期(VSync)(&V)" + +msgid "&Select shader..." +msgstr "シェーダーを選択(&S)..." + +msgid "&Remove shader" +msgstr "シェーダーを削除(&R)" + +msgid "Preferences" +msgstr "環境設定" + +msgid "Sound Gain" +msgstr "音量ゲイン" + +msgid "New Image" +msgstr "新規のイメージ" + +msgid "Settings" +msgstr "設定" + +msgid "Specify Main Window Dimensions" +msgstr "メインウィンドウのサイズ指定" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "キャンセル" + +msgid "Save these settings as &global defaults" +msgstr "これらの設定をグローバル既定値として保存する(&G)" + +msgid "&Default" +msgstr "既定値(&D)" + +msgid "Language:" +msgstr "言語:" + +msgid "Icon set:" +msgstr "アイコンセット:" + +msgid "Gain" +msgstr "ゲイン値" + +msgid "File name:" +msgstr "ファイル名:" + +msgid "Disk size:" +msgstr "ディスクサイズ:" + +msgid "RPM mode:" +msgstr "回転数モード:" + +msgid "Progress:" +msgstr "進行状況:" + +msgid "Width:" +msgstr "幅:" + +msgid "Height:" +msgstr "高さ:" + +msgid "Lock to this size" +msgstr "このサイズをロックする" + +msgid "Machine type:" +msgstr "マシンタイプ:" + +msgid "Machine:" +msgstr "マシン:" + +msgid "Configure" +msgstr "設定" + +msgid "CPU type:" +msgstr "CPUタイプ:" + +msgid "Speed:" +msgstr "速度:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "待機状態:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "メモリ:" + +msgid "Time synchronization" +msgstr "時刻同期機能" + +msgid "Disabled" +msgstr "無効にする" + +msgid "Enabled (local time)" +msgstr "有効にする (現地時間)" + +msgid "Enabled (UTC)" +msgstr "有効にする (UTC)" + +msgid "Dynamic Recompiler" +msgstr "動的リコンパイラ" + +msgid "Video:" +msgstr "ビデオカード:" + +msgid "Voodoo Graphics" +msgstr "Voodooグラフィック" + +msgid "Mouse:" +msgstr "マウス:" + +msgid "Joystick:" +msgstr "ジョイスティック:" + +msgid "Joystick 1..." +msgstr "ジョイスティック1..." + +msgid "Joystick 2..." +msgstr "ジョイスティック2..." + +msgid "Joystick 3..." +msgstr "ジョイスティック3..." + +msgid "Joystick 4..." +msgstr "ジョイスティック4..." + +msgid "Sound card:" +msgstr "サウンドカード:" + +msgid "MIDI Out Device:" +msgstr "MIDI出力デバイス:" + +msgid "MIDI In Device:" +msgstr "MIDI入力デバイス:" + +msgid "Standalone MPU-401" +msgstr "独立型MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "FLOAT32サウンドを使用する" + +msgid "Network type:" +msgstr "ネットワークタイプ:" + +msgid "PCap device:" +msgstr "PCapデバイス:" + +msgid "Network adapter:" +msgstr "ネットワークアダプター:" + +msgid "LPT1 Device:" +msgstr "LPT1デバイス:" + +msgid "LPT2 Device:" +msgstr "LPT2デバイス:" + +msgid "LPT3 Device:" +msgstr "LPT3デバイス:" + +msgid "Serial port 1" +msgstr "シリアルポート1" + +msgid "Serial port 2" +msgstr "シリアルポート2" + +msgid "Serial port 3" +msgstr "シリアルポート3" + +msgid "Serial port 4" +msgstr "シリアルポート4" + +msgid "Parallel port 1" +msgstr "パラレルポート1" + +msgid "Parallel port 2" +msgstr "パラレルポート2" + +msgid "Parallel port 3" +msgstr "パラレルポート3" + +msgid "HD Controller:" +msgstr "HDコントローラー:" + +msgid "FD Controller:" +msgstr "FDコントローラー:" + +msgid "Tertiary IDE Controller" +msgstr "第三のIDEコントローラー" + +msgid "Quaternary IDE Controller" +msgstr "第四のIDEコントローラー" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "コントローラー1:" + +msgid "Controller 2:" +msgstr "コントローラー2:" + +msgid "Controller 3:" +msgstr "コントローラー3:" + +msgid "Controller 4:" +msgstr "コントローラー4:" + +msgid "Cassette" +msgstr "カセット" + +msgid "Hard disks:" +msgstr "ハードディスク:" + +msgid "&New..." +msgstr "新規(&N)..." + +msgid "&Existing..." +msgstr "既定(&E)..." + +msgid "&Remove" +msgstr "除去(&R)" + +msgid "Bus:" +msgstr "バス:" + +msgid "Channel:" +msgstr "チャンネル:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "参照(&S)..." + +msgid "Sectors:" +msgstr "セクター:" + +msgid "Heads:" +msgstr "ヘッド:" + +msgid "Cylinders:" +msgstr "シリンダー:" + +msgid "Size (MB):" +msgstr "サイズ(MB):" + +msgid "Type:" +msgstr "タイプ:" + +msgid "Image Format:" +msgstr "イメージ形式:" + +msgid "Block Size:" +msgstr "ブロックサイズ:" + +msgid "Floppy drives:" +msgstr "フロッピードライブ:" + +msgid "Turbo timings" +msgstr "高速タイミング" + +msgid "Check BPB" +msgstr "BPBをチェック" + +msgid "CD-ROM drives:" +msgstr "CD-ROMドライブ:" + +msgid "MO drives:" +msgstr "光磁気ドライブ:" + +msgid "ZIP drives:" +msgstr "ZIPドライブ:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA RTCカード:" + +msgid "ISA Memory Expansion" +msgstr "ISAメモリー拡張カード" + +msgid "Card 1:" +msgstr "カード1:" + +msgid "Card 2:" +msgstr "カード2:" + +msgid "Card 3:" +msgstr "カード3:" + +msgid "Card 4:" +msgstr "カード4:" + +msgid "ISABugger device" +msgstr "ISABuggerデバイス" + +msgid "POST card" +msgstr "POSTカード" + +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" +msgstr "Meiryo UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "エラー" + +msgid "Fatal error" +msgstr "致命的なエラー" + +msgid "" +msgstr "<予約済み>" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "CTRL+ALT+PAGE DOWNでウィンドウモードに戻ります。" + +msgid "Speed" +msgstr "速度" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.im? *.zdi)" +msgstr "ZIPイメージ (*.im? *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Boxで使用可能なROMイメージが見つかりませんでした。\n\nROMセットをダウンロードして、「roms」ディレクトリに解凍してください。" + +msgid "(empty)" +msgstr "(空)" + +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "ZIPイメージ (*.im? *.zdi);;すべてのファイル (*.*)" + +msgid "Turbo" +msgstr "高速" + +msgid "On" +msgstr "オン" + +msgid "Off" +msgstr "オフ" + +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "すべてのイメージ (*.86f *.dsk *.flp *.im? *.*fd?);;基本的なセクターイメージ (*.dsk *.flp *.im? *.img *.*fd?);;表面イメージ (*.86f)" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "roms/machinesディレクトリにROMがないため、マシン「%hs」は使用できません。使用可能なマシンに切り替えます。" + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "roms/videoディレクトリにROMがないため、ビデオカード「%hs」は使用できません。使用可能なビデオカードに切り替えます。" + +msgid "Machine" +msgstr "マシン" + +msgid "Display" +msgstr "画面表示" + +msgid "Input devices" +msgstr "入力デバイス" + +msgid "Sound" +msgstr "サウンド" + +msgid "Network" +msgstr "ネットワーク" + +msgid "Ports (COM & LPT)" +msgstr "ポート (COM & LPT)" + +msgid "Storage controllers" +msgstr "ストレージコントローラ" + +msgid "Hard disks" +msgstr "ハードディスク" + +msgid "Floppy & CD-ROM drives" +msgstr "フロッピー/CD-ROMドライブ" + +msgid "Other removable devices" +msgstr "その他のリムーバブルデバイス" + +msgid "Other peripherals" +msgstr "その他の周辺装置" + +msgid "Surface images (*.86f)" +msgstr "表面イメージ (*.86f)" + +msgid "Click to capture mouse" +msgstr "クリックするとマウスをキャプチャします" + +msgid "Press F8+F12 to release mouse" +msgstr "F8+F12キーでマウスを解放します" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "F8+F12キーまたは中ボタンでマウスを解放します" + +msgid "Unable to initialize FluidSynth" +msgstr "FluidSynthが初期化できません" + +msgid "Bus" +msgstr "バス" + +msgid "File" +msgstr "ファイル" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "ビデオレンダラーが初期化できません。" + +msgid "Default" +msgstr "既定値" + +msgid "%i Wait state(s)" +msgstr "%iつの待機状態" + +msgid "Type" +msgstr "タイプ" + +msgid "Failed to set up PCap" +msgstr "PCapのセットアップに失敗しました" + +msgid "No PCap devices found" +msgstr "PCapデバイスがありません" + +msgid "Invalid PCap device" +msgstr "不正なPCapデバイスです" + +msgid "Standard 2-button joystick(s)" +msgstr "標準ジョイスティック(2ボタン)" + +msgid "Standard 4-button joystick" +msgstr "標準ジョイスティック(4ボタン)" + +msgid "Standard 6-button joystick" +msgstr "標準ジョイスティック(6ボタン)" + +msgid "Standard 8-button joystick" +msgstr "標準ジョイスティック(8ボタン)" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "なし" + +msgid "Unable to load keyboard accelerators." +msgstr "キーボードアクセラレータを読み込めません。" + +msgid "Unable to register raw input." +msgstr "生の入力が登録できません。" + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "フロッピー %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "すべてのイメージ (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;アドバンスドセクターイメージ (*.imd *.json *.td0);;基本セクターイメージ (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;フラックスイメージ (*.fdi);;表面イメージ (*.86f *.mfm);;すべてのファイル (*.*)" + +msgid "Unable to initialize FreeType" +msgstr "FreeTypeが初期化できません" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "SDLが初期化できません。SDL2.dllが必要です" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "使用中のマシンをハードリセットしますか?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "86Boxを終了しますか?" + +msgid "Unable to initialize Ghostscript" +msgstr "Ghostscriptが初期化できません" + +msgid "MO %i (%ls): %ls" +msgstr "光磁気 %i (%ls): %ls" + +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "光磁気イメージ (*.im? *.mdi);;すべてのファイル (*.*)" + +msgid "Welcome to 86Box!" +msgstr "86Boxへようこそ!" + +msgid "Internal controller" +msgstr "内蔵コントローラー" + +msgid "Exit" +msgstr "終了" + +msgid "No ROMs found" +msgstr "ROMが見つかりません" + +msgid "Do you want to save the settings?" +msgstr "設定を保存しますか?" + +msgid "This will hard reset the emulated machine." +msgstr "保存すると使用中のマシンがハードリセットされます。" + +msgid "Save" +msgstr "保存" + +msgid "About 86Box" +msgstr "86Boxのバージョン情報" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "古いパソコンのエミュレーター\n\n著者: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nGNU General Public License version 2以降でリリースされています。詳しくは LICENSE をご覧ください。" + +msgid "Hardware not available" +msgstr "ハードウェアが利用できません" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "がインストールされてるか、libpcapに対応したネットワークに接続されてるか確認してください。" + +msgid "Invalid configuration" +msgstr "不正な設定です" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr "ESC/Pプリンタのエミュレーションにはlibfreetypeが必要です。" + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr "PostScriptファイルをPDFに自動変換するにはlibgsが必要です。\n\n汎用PostScriptプリンターに送信されたドキュメントは、PostScript(.ps)ファイルとして保存されます。" + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr "FluidSynthのMIDI出力にはlibfluidsynthが必要です。" + +msgid "Entering fullscreen mode" +msgstr "フルスクリーンに切り替えています" + +msgid "Don't show this message again" +msgstr "今後、このメッセージを表示しない" + +msgid "Don't exit" +msgstr "終了しない" + +msgid "Reset" +msgstr "リセット" + +msgid "Don't reset" +msgstr "リセットしない" + +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "CD-ROMイメージ (*.iso *.cue);;すべてのファイル (*.*)" + +msgid "%hs Device Configuration" +msgstr "%hs デバイスの設定" + +msgid "Monitor in sleep mode" +msgstr "モニターのスリープモード" + +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "OpenGLシェーダー (*.glsl);;すべてのファイル (*.*)" + +msgid "OpenGL options" +msgstr "OpenGL設定" + +msgid "You are loading an unsupported configuration" +msgstr "サポートされていない設定を読み込んでいます" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "選択したマシンに基づくCPUタイプのフィルタリングは、このエミュレートされたマシンでは無効になっています。\n\nこれにより、選択したマシンと互換性のないCPUが選択できます。ただし、マシンのBIOSまたは他のソフトウェアとの互換性が失われる可能性があります。\n\nこの設定の有効化は公式サポートができません。また、バグレポートが無効として閉じられる場合があります。" + +msgid "Continue" +msgstr "続行" + +msgid "Cassette: %s" +msgstr "カセット: %s" + +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "カセットイメージ (*.pcm *.raw *.wav *.cas);;すべてのファイル (*.*)" + +msgid "Cartridge %i: %ls" +msgstr "カートリッジ %i: %ls" + +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "カートリッジイメージ (*.a *.b *.jrc);;すべてのファイル (*.*)" + +msgid "Error initializing renderer" +msgstr "レンダラーの初期化エラー" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0コア) レンダラーが初期化できませんでした。別のレンダラーを使用してください。" + +msgid "Resume execution" +msgstr "実行を再開" + +msgid "Pause execution" +msgstr "実行を一時停止" + +msgid "Press Ctrl+Alt+Del" +msgstr "Ctrl+Alt+DELを押し" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Ctrl+Alt+Escを押し" + +msgid "Hard reset" +msgstr "ハードリセット" + +msgid "ACPI shutdown" +msgstr "ACPIシャットダウン" + +msgid "Hard disk (%s)" +msgstr "ハードディスク (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLLまたはESDIのCD-ROMドライブが存在しません" + +msgid "Custom..." +msgstr "カスタム..." + +msgid "Custom (large)..." +msgstr "カスタム (大型)..." + +msgid "Add New Hard Disk" +msgstr "新規のディスクを追加" + +msgid "Add Existing Hard Disk" +msgstr "既定のディスクを追加" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "HDIディスクイメージは4GBを超えることはできません。" + +msgid "Disk images cannot be larger than 127 GB." +msgstr "ディスクイメージは127GBを超えることはできません。" + +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "ハードディスクイメージ (*.hd? *.im? *.vhd);;すべてのファイル (*.*)" + +msgid "Unable to read file" +msgstr "ファイルの読み込みができません" + +msgid "Unable to write file" +msgstr "ファイルの書き込みができません" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "512以外のセクタサイズを持つHDIまたはHDXイメージはサポートされていません。" + +msgid "USB is not yet supported" +msgstr "USBはまだサポートされていません" + +msgid "Disk image file already exists" +msgstr "ディスクイメージファイルが既に存在します" + +msgid "Please specify a valid file name." +msgstr "有効なファイル名を指定してください。" + +msgid "Disk image created" +msgstr "ディスクイメージが作成されました" + +msgid "Make sure the file exists and is readable." +msgstr "ファイルが存在し、読み取り可能であることを確認してください。" + +msgid "Make sure the file is being saved to a writable directory." +msgstr "ファイルが書き込み可能なディレクトリに保存されていることを確認してください。" + +msgid "Disk image too large" +msgstr "ディスクイメージのサイズが大きすぎます" + +msgid "Remember to partition and format the newly-created drive." +msgstr "新規ドライブをパーティション分割し、フォーマットを必ずしといてください。" + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "選択したファイルが上書きされます。使っていいですか?" + +msgid "Unsupported disk image" +msgstr "サポートされていないディスクイメージ" + +msgid "Overwrite" +msgstr "上書き" + +msgid "Don't overwrite" +msgstr "上書きしない" + +msgid "Raw image (.img)" +msgstr "Rawイメージ (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDIイメージ (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDXイメージ (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD(容量固定)(.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD(容量可変)(.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "VHD(差分)(.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "大型ブロック (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "小型ブロック (512 KB)" + +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "VHDファイル (*.vhd);;すべてのファイル (*.*)" + +msgid "Select the parent VHD" +msgstr "親VHDの選択" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "親イメージがディファレンシングイメージの作成の後に修正した可能性があります。\n\nイメージファイルの移動、コピーまたはこのディスクを作成したプログラムにバグが発生した可能性があります。\n\nタイムスタンプを修正しますか?" + +msgid "Parent and child disk timestamps do not match" +msgstr "親ディスクと子ディスクのタイムスタンプが一致しません" + +msgid "Could not fix VHD timestamp." +msgstr "VHD のタイムスタンプを修正できませんでした。" + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (クラスター1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (クラスター2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." + +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." + +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." + +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "規定の回転数" + +msgid "1%% below perfect RPM" +msgstr "1%低い回転数" + +msgid "1.5%% below perfect RPM" +msgstr "1.5%低い回転数" + +msgid "2%% below perfect RPM" +msgstr "2%低い回転数" + +msgid "(System Default)" +msgstr "(システム既定値)" + diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index a2bd49c10..fc32e5058 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -1,1191 +1,1191 @@ -msgid "&Action" -msgstr "동작(&A)" - -msgid "&Keyboard requires capture" -msgstr "키보드는 캡쳐가 필요함(&K)" - -msgid "&Right CTRL is left ALT" -msgstr "우측CTRL로 좌측ALT 입력(&R)" - -msgid "&Hard Reset..." -msgstr "재시작(&H)..." - -msgid "&Ctrl+Alt+Del\tCtrl+F12" -msgstr "Ctrl+Alt+Del(&C)\tCtrl+F12" - -msgid "Ctrl+Alt+&Esc" -msgstr "Ctrl+Alt+Esc(&E)" - -msgid "&Pause" -msgstr "일시정지(&P)" - -msgid "E&xit..." -msgstr "끝내기(&X)..." - -msgid "&View" -msgstr "표시(&V)" - -msgid "&Hide status bar" -msgstr "상태 바 숨기기(&H)" - -msgid "Hide &toolbar" -msgstr "Hide &toolbar" - -msgid "&Resizeable window" -msgstr "창 크기 조절 가능하게 하기(&R)" - -msgid "R&emember size && position" -msgstr "창 크기와 위치를 기억하기(&E)" - -msgid "Re&nderer" -msgstr "렌더러(&N)" - -msgid "&SDL (Software)" -msgstr "SDL (소프트웨어)(&S)" - -msgid "SDL (&Hardware)" -msgstr "SDL (하드웨어)(&H)" - -msgid "SDL (&OpenGL)" -msgstr "SDL (OpenGL)(&O)" - -msgid "Open&GL (3.0 Core)" -msgstr "OpenGL (3.0 코어)(&G)" - -msgid "&VNC" -msgstr "VNC(&V)" - -msgid "Specify dimensions..." -msgstr "창 크기 지정하기..." - -msgid "F&orce 4:3 display ratio" -msgstr "화면 비율을 4:3으로 맞추기(&O)" - -msgid "&Window scale factor" -msgstr "창 표시 배율(&W)" - -msgid "&0.5x" -msgstr "0.5배(&0)" - -msgid "&1x" -msgstr "1배(&1)" - -msgid "1.&5x" -msgstr "1.5배(&5)" - -msgid "&2x" -msgstr "2배(&2)" - -msgid "Filter method" -msgstr "필터 형식" - -msgid "&Nearest" -msgstr "최근방 이웃 보간법(&N)" - -msgid "&Linear" -msgstr "선형 보간법(&L)" - -msgid "Hi&DPI scaling" -msgstr "HiDPI 스케일링(&D)" - -msgid "&Fullscreen\tCtrl+Alt+PageUP" -msgstr "전체 화면(&F)\tCtrl+Alt+PageUP" - -msgid "Fullscreen &stretch mode" -msgstr "전체 화면 비율(&S)" - -msgid "&Full screen stretch" -msgstr "전체 화면으로 확대(&F)" - -msgid "&4:3" -msgstr "4:3(&4)" - -msgid "&Square pixels (Keep ratio)" -msgstr "정사각형 픽셀 (비율 유지)(&S)" - -msgid "&Integer scale" -msgstr "정수배 확대(&I)" - -msgid "E&GA/(S)VGA settings" -msgstr "E&GA/(S)VGA 설정" - -msgid "&Inverted VGA monitor" -msgstr "색상 반전된 VGA 모니터(&I)" - -msgid "VGA screen &type" -msgstr "VGA 화면 종류(&T)" - -msgid "RGB &Color" -msgstr "RGB 천연색(&C)" - -msgid "&RGB Grayscale" -msgstr "RGB 회색조(&R)" - -msgid "&Amber monitor" -msgstr "주황색 모니터(&A)" - -msgid "&Green monitor" -msgstr "녹색 모니터(&G)" - -msgid "&White monitor" -msgstr "흰색 모니터(&W)" - -msgid "Grayscale &conversion type" -msgstr "회색조 표현방식(&C)" - -msgid "BT&601 (NTSC/PAL)" -msgstr "BT601 (NTSC/PAL)(&6)" - -msgid "BT&709 (HDTV)" -msgstr "BT709 (HDTV)(&7)" - -msgid "&Average" -msgstr "평균값(&A)" - -msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" -msgstr "CGA/PCjr/Tandy/EGA/(S)VGA 오버스캔(&G)" - -msgid "Change contrast for &monochrome display" -msgstr "흑백 표시를 위한 밝기 조정(&M)" - -msgid "&Media" -msgstr "미디어(&M)" - -msgid "&Tools" -msgstr "도구(&T)" - -msgid "&Settings..." -msgstr "설정(&S)..." - -msgid "&Update status bar icons" -msgstr "상태 바 아이콘 갱신하기(&U)" - -msgid "Take s&creenshot\tCtrl+F11" -msgstr "스크린샷 찍기(&C)\tCtrl+F11" - -msgid "&Preferences..." -msgstr "환경설정(&P)..." - -msgid "Enable &Discord integration" -msgstr "디스코드 연동 활성화하기(&D)" - -msgid "Sound &gain..." -msgstr "음량 증폭(&G)..." - -msgid "Begin trace\tCtrl+T" -msgstr "추적 시작하기\tCtrl+T" - -msgid "End trace\tCtrl+T" -msgstr "추적 끝내기\tCtrl+T" - -msgid "&Logging" -msgstr "로그(&L)" - -msgid "Enable BusLogic logs\tCtrl+F4" -msgstr "BusLogic 로그 켜기\tCtrl+F4" - -msgid "Enable CD-ROM logs\tCtrl+F5" -msgstr "CD-ROM 로그 켜기\tCtrl+F5" - -msgid "Enable floppy (86F) logs\tCtrl+F6" -msgstr "플로피 (86F) 로그 켜기\tCtrl+F6" - -msgid "Enable floppy controller logs\tCtrl+F7" -msgstr "플로피 컨트롤러 로그 켜기\tCtrl+F7" - -msgid "Enable IDE logs\tCtrl+F8" -msgstr "IDE 로그 켜기\tCtrl+F8" - -msgid "Enable Serial Port logs\tCtrl+F3" -msgstr "직렬 포트 로그 켜기\tCtrl+F3" - -msgid "Enable Network logs\tCtrl+F9" -msgstr "네트워크 로그 켜기\tCtrl+F9" - -msgid "&Log breakpoint\tCtrl+F10" -msgstr "중단점 로그 켜기(&L)\tCtrl+F10" - -msgid "Dump &video RAM\tCtrl+F1" -msgstr "비디오 RAM 덤프 켜기(&V)\tCtrl+F1" - -msgid "&Help" -msgstr "도움말(&H)" - -msgid "&Documentation..." -msgstr "문서(&D)..." - -msgid "&About 86Box..." -msgstr "86Box에 대해(&A)..." - -msgid "&New image..." -msgstr "새 이미지(&N)..." - -msgid "&Existing image..." -msgstr "이미지 불러오기(&E)..." - -msgid "Existing image (&Write-protected)..." -msgstr "이미지 불러오기 (쓰기방지)(&W)..." - -msgid "&Record" -msgstr "녹음하기(&R)" - -msgid "&Play" -msgstr "재생하기(&P)" - -msgid "&Rewind to the beginning" -msgstr "맨앞으로 되감기(&R)" - -msgid "&Fast forward to the end" -msgstr "맨끝으로 빨리감기(&F)" - -msgid "E&ject" -msgstr "꺼내기(&J)" - -msgid "&Image..." -msgstr "이미지(&I)..." - -msgid "E&xport to 86F..." -msgstr "86F로 보내기(&X)..." - -msgid "&Mute" -msgstr "음소거(&M)" - -msgid "E&mpty" -msgstr "비었음(&M)" - -msgid "&Reload previous image" -msgstr "이전 이미지 다시 불러오기(&R)" - -msgid "&Image" -msgstr "이미지(&I)" - -msgid "Target &framerate" -msgstr "목표 프레임 레이트(&F)" - -msgid "&Sync with video" -msgstr "비디오와 동기(&S)" - -msgid "&25 fps" -msgstr "25 fps(&2)" - -msgid "&30 fps" -msgstr "30 fps(&3)" - -msgid "&50 fps" -msgstr "50 fps(&5)" - -msgid "&60 fps" -msgstr "60 fps(&6)" - -msgid "&75 fps" -msgstr "75 fps(&7)" - -msgid "&VSync" -msgstr "수직 동기화(&V)" - -msgid "&Select shader..." -msgstr "쉐이더 불러오기(&S)..." - -msgid "&Remove shader" -msgstr "쉐이더 끄기(&R)" - -msgid "Preferences" -msgstr "환경설정" - -msgid "Sound Gain" -msgstr "음량 증폭" - -msgid "New Image" -msgstr "새 이미지" - -msgid "Settings" -msgstr "설정" - -msgid "Specify Main Window Dimensions" -msgstr "창 크기 지정" - -msgid "OK" -msgstr "확인" - -msgid "Cancel" -msgstr "취소" - -msgid "Save these settings as &global defaults" -msgstr "이 설정들을 전역 기본값으로 저장하기(&G)" - -msgid "&Default" -msgstr "기본값(&D)" - -msgid "Language:" -msgstr "언어:" - -msgid "Icon set:" -msgstr "아이콘셋:" - -msgid "Gain" -msgstr "증가값" - -msgid "File name:" -msgstr "파일명:" - -msgid "Disk size:" -msgstr "디스크 용량:" - -msgid "RPM mode:" -msgstr "RPM 모드:" - -msgid "Progress:" -msgstr "진행:" - -msgid "Width:" -msgstr "가로:" - -msgid "Height:" -msgstr "세로:" - -msgid "Lock to this size" -msgstr "크기 고정" - -msgid "Machine type:" -msgstr "머신 종류:" - -msgid "Machine:" -msgstr "기종:" - -msgid "Configure" -msgstr "설정" - -msgid "CPU type:" -msgstr "CPU 종류:" - -msgid "Speed:" -msgstr "속도:" - -msgid "FPU:" -msgstr "FPU:" - -msgid "Wait states:" -msgstr "대기 상태:" - -msgid "MB" -msgstr "MB" - -msgid "Memory:" -msgstr "메모리:" - -msgid "Time synchronization" -msgstr "시간 동기화" - -msgid "Disabled" -msgstr "사용하지 않음" - -msgid "Enabled (local time)" -msgstr "사용 (현지 시간)" - -msgid "Enabled (UTC)" -msgstr "사용 (UTC)" - -msgid "Dynamic Recompiler" -msgstr "동적 재컴파일" - -msgid "Video:" -msgstr "비디오 카드:" - -msgid "Voodoo Graphics" -msgstr "Voodoo 그래픽" - -msgid "Mouse:" -msgstr "마우스:" - -msgid "Joystick:" -msgstr "조이스틱:" - -msgid "Joystick 1..." -msgstr "조이스틱 1..." - -msgid "Joystick 2..." -msgstr "조이스틱 2..." - -msgid "Joystick 3..." -msgstr "조이스틱 3..." - -msgid "Joystick 4..." -msgstr "조이스틱 4..." - -msgid "Sound card:" -msgstr "사운드 카드:" - -msgid "MIDI Out Device:" -msgstr "MIDI 출력 장치:" - -msgid "MIDI In Device:" -msgstr "MIDI 입력 장치:" - -msgid "Standalone MPU-401" -msgstr "MPU-401 단독 사용" - -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - -msgid "Use FLOAT32 sound" -msgstr "FLOAT32 사운드 사용" - -msgid "Network type:" -msgstr "네트워크 종류:" - -msgid "PCap device:" -msgstr "PCap 장치:" - -msgid "Network adapter:" -msgstr "네트워크 어댑터:" - -msgid "LPT1 Device:" -msgstr "LPT1 장치:" - -msgid "LPT2 Device:" -msgstr "LPT2 장치:" - -msgid "LPT3 Device:" -msgstr "LPT3 장치:" - -msgid "Serial port 1" -msgstr "직렬 포트 1" - -msgid "Serial port 2" -msgstr "직렬 포트 2" - -msgid "Serial port 3" -msgstr "직렬 포트 3" - -msgid "Serial port 4" -msgstr "직렬 포트 4" - -msgid "Parallel port 1" -msgstr "병렬 포트 1" - -msgid "Parallel port 2" -msgstr "병렬 포트 2" - -msgid "Parallel port 3" -msgstr "병렬 포트 3" - -msgid "HD Controller:" -msgstr "HD 컨트롤러:" - -msgid "FD Controller:" -msgstr "FD 컨트롤러:" - -msgid "Tertiary IDE Controller" -msgstr "제3의 IDE 컨트롤러" - -msgid "Quaternary IDE Controller" -msgstr "제4의 IDE 컨트롤러" - -msgid "SCSI" -msgstr "SCSI" - -msgid "Controller 1:" -msgstr "컨트롤러 1:" - -msgid "Controller 2:" -msgstr "컨트롤러 2:" - -msgid "Controller 3:" -msgstr "컨트롤러 3:" - -msgid "Controller 4:" -msgstr "컨트롤러 4:" - -msgid "Cassette" -msgstr "카세트 테이프" - -msgid "Hard disks:" -msgstr "하드 디스크:" - -msgid "&New..." -msgstr "새로 만들기(&N)..." - -msgid "&Existing..." -msgstr "불러오기(&E)..." - -msgid "&Remove" -msgstr "목록에서 제거(&R)" - -msgid "Bus:" -msgstr "버스:" - -msgid "Channel:" -msgstr "채널:" - -msgid "ID:" -msgstr "ID:" - -msgid "&Specify..." -msgstr "열기(&S)..." - -msgid "Sectors:" -msgstr "섹터:" - -msgid "Heads:" -msgstr "헤드:" - -msgid "Cylinders:" -msgstr "실린더:" - -msgid "Size (MB):" -msgstr "용량(MB):" - -msgid "Type:" -msgstr "형식:" - -msgid "Image Format:" -msgstr "이미지 포맷:" - -msgid "Block Size:" -msgstr "블록 크기:" - -msgid "Floppy drives:" -msgstr "플로피 드라이브:" - -msgid "Turbo timings" -msgstr "고속 동작" - -msgid "Check BPB" -msgstr "BPB 확인" - -msgid "CD-ROM drives:" -msgstr "CD-ROM 드라이브:" - -msgid "MO drives:" -msgstr "광자기 드라이브:" - -msgid "ZIP drives:" -msgstr "ZIP 드라이브:" - -msgid "ZIP 250" -msgstr "ZIP 250" - -msgid "ISA RTC:" -msgstr "ISA RTC 카드:" - -msgid "ISA Memory Expansion" -msgstr "ISA 메모리 확장 카드" - -msgid "Card 1:" -msgstr "카드 1:" - -msgid "Card 2:" -msgstr "카드 2:" - -msgid "Card 3:" -msgstr "카드 3:" - -msgid "Card 4:" -msgstr "카드 4:" - -msgid "ISABugger device" -msgstr "ISABugger 장치" - -msgid "POST card" -msgstr "POST 카드" - -msgid "FONT_SIZE" -msgstr "9" - -msgid "FONT_NAME" -msgstr "Malgun Gothic" - -msgid "86Box" -msgstr "86Box" - -msgid "Error" -msgstr "오류" - -msgid "Fatal error" -msgstr "치명적인 오류" - -msgid "" -msgstr "<예약됨>" - -msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." -msgstr "CTRL+ALT+PAGE DOWN 키를 누르면 창 모드로 전환합니다." - -msgid "Speed" -msgstr "속도" - -msgid "ZIP %03i %i (%s): %ls" -msgstr "ZIP %03i %i (%s): %ls" - -msgid "ZIP images (*.im? *.zdi)" -msgstr "ZIP 이미지 (*.im? *.zdi)" - -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "86Box에서 사용 가능한 ROM 이미지를 찾을 수 없습니다.\n\nROM 세트를다운로드 후 \"roms\" 디렉토리에 압축을 풀어 주세요." - -msgid "(empty)" -msgstr "(비었음)" - -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "ZIP 이미지 (*.im? *.zdi);;모든 파일 (*.*)" - -msgid "Turbo" -msgstr "터보" - -msgid "On" -msgstr "켜짐" - -msgid "Off" -msgstr "꺼짐" - -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "모든 이미지 (*.86f *.dsk *.flp *.im? *.*fd?);;기본 섹터 이미지 (*.dsk *.flp *.im? *.img *.*fd?);;표면 이미지 (*.86f)" - -msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "roms/machines 디렉토리에 필요한 롬파일이 없어 기종 \"%hs\"을(를) 사용할 수 없습니다. 사용 가능한 기종으로 변경합니다." - -msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "roms/video 디렉토리에 필요한 롬파일이 없어 비디오 카드 \"%hs\"을(를) 사용할 수 없습니다. 사용 가능한 기종으로 변경합니다." - -msgid "Machine" -msgstr "기종" - -msgid "Display" -msgstr "디스플레이" - -msgid "Input devices" -msgstr "입력 장치" - -msgid "Sound" -msgstr "사운드" - -msgid "Network" -msgstr "네트워크" - -msgid "Ports (COM & LPT)" -msgstr "포트 (COM & LPT)" - -msgid "Storage controllers" -msgstr "장치 컨트롤러" - -msgid "Hard disks" -msgstr "하드 디스크" - -msgid "Floppy & CD-ROM drives" -msgstr "플로피 / CD-ROM" - -msgid "Other removable devices" -msgstr "기타 이동식 저장장치" - -msgid "Other peripherals" -msgstr "기타 주변기기" - -msgid "Surface images (*.86f)" -msgstr "표면 이미지 (*.86f)" - -msgid "Click to capture mouse" -msgstr "이 창을 클릭하면 마우스를 사용합니다" - -msgid "Press F8+F12 to release mouse" -msgstr "F12+F8키를 누르면 마우스를 해제합니다" - -msgid "Press F8+F12 or middle button to release mouse" -msgstr "F12+F8키 또는 가운데 버튼을 클릭하면 마우스를 해제합니다" - -msgid "Unable to initialize FluidSynth" -msgstr "FluidSynth를 초기화할 수 없습니다" - -msgid "Bus" -msgstr "버스" - -msgid "File" -msgstr "파일" - -msgid "C" -msgstr "C" - -msgid "H" -msgstr "H" - -msgid "S" -msgstr "S" - -msgid "KB" -msgstr "KB" - -msgid "Could not initialize the video renderer." -msgstr "비디오 렌더러를 초기화할 수 없습니다." - -msgid "Default" -msgstr "기본값" - -msgid "%i Wait state(s)" -msgstr "%i 대기 상태" - -msgid "Type" -msgstr "형식" - -msgid "Failed to set up PCap" -msgstr "PCap 설정에 실패했습니다" - -msgid "No PCap devices found" -msgstr "PCap 장치가 없습니다" - -msgid "Invalid PCap device" -msgstr "PCap 장치가 올바르지 않습니다" - -msgid "Standard 2-button joystick(s)" -msgstr "표준 2버튼 조이스틱" - -msgid "Standard 4-button joystick" -msgstr "표준 4버튼 조이스틱" - -msgid "Standard 6-button joystick" -msgstr "표준 6버튼 조이스틱" - -msgid "Standard 8-button joystick" -msgstr "표준 8버튼 조이스틱" - -msgid "CH Flightstick Pro" -msgstr "CH Flightstick Pro" - -msgid "Microsoft SideWinder Pad" -msgstr "Microsoft SideWinder Pad" - -msgid "Thrustmaster Flight Control System" -msgstr "Thrustmaster Flight Control System" - -msgid "None" -msgstr "없음" - -msgid "Unable to load keyboard accelerators." -msgstr "키보드 가속기를 불러올 수 없습니다." - -msgid "Unable to register raw input." -msgstr "Raw 입력을 등록할 수 없습니다." - -msgid "%u" -msgstr "%u" - -msgid "%u MB (CHS: %i, %i, %i)" -msgstr "%u MB (CHS: %i, %i, %i)" - -msgid "Floppy %i (%s): %ls" -msgstr "플로피 %i (%s): %ls" - -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "모든 이미지 (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;어드밴스드 섹터 이미지 (*.imd *.json *.td0);;기본 섹터 이미지 (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;플럭스 이미지 (*.fdi);;표면 이미지 (*.86f *.mfm);;모든 파일 (*.*)" - -msgid "Unable to initialize FreeType" -msgstr "FreeType을 초기화할 수 없습니다" - -msgid "Unable to initialize SDL, SDL2.dll is required" -msgstr "SDL을 초기화할 수 없습니다. SDL2.dll이 필요합니다" - -msgid "Are you sure you want to hard reset the emulated machine?" -msgstr "실행중인 머신을 재시작하시겠습니까?" - -msgid "Are you sure you want to exit 86Box?" -msgstr "86Box를 끝내시겠습니까?" - -msgid "Unable to initialize Ghostscript" -msgstr "Ghostscript를 초기화할 수 없습니다" - -msgid "MO %i (%ls): %ls" -msgstr "광자기 %i (%ls): %ls" - -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "광자기 이미지 (*.im? *.mdi);;모든 파일 (*.*)" - -msgid "Welcome to 86Box!" -msgstr "86Box에 어서오세요!" - -msgid "Internal controller" -msgstr "내부 컨트롤러" - -msgid "Exit" -msgstr "끝내기" - -msgid "No ROMs found" -msgstr "ROM을 불러올 수 없습니다" - -msgid "Do you want to save the settings?" -msgstr "설정을 저장하시겠습니까?" - -msgid "This will hard reset the emulated machine." -msgstr "사용중인 머신이 재부팅됩니다." - -msgid "Save" -msgstr "저장" - -msgid "About 86Box" -msgstr "86Box에 대해" - -msgid "86Box v" -msgstr "86Box v" - -msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "고전 컴퓨터 에뮬레이터\n\n저자: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nGNU General Public 라이선스 (버전 2 이상)에 의해 배포되었습니다. 자세한 내용은 LICENSE 파일을 읽어 주세요." - -msgid "Hardware not available" -msgstr "하드웨어를 이용할 수 없습니다" - -msgid "WinPcap" -msgstr "WinPcap" - -msgid "libpcap" -msgstr "libpcap" - -msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." -msgstr "이 설치되었는지 libpcap에 대응하는 네트워크에 접속되어 있는지 확인해 주세요." - -msgid "Invalid configuration" -msgstr "올바르지 않은 설정입니다" - -msgid "freetype.dll" -msgstr "freetype.dll" - -msgid "libfreetype" -msgstr "libfreetype" - -msgid " is required for ESC/P printer emulation." -msgstr "ESC/P 프린터 에뮬레이션에 libfreetype이(가) 필요합니다." - -msgid "gsdll32.dll" -msgstr "gsdll32.dll" - -msgid "libgs" -msgstr "libgs" - -msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." -msgstr "은(는) PostScript 파일을 PDF로 자동변환하는 데에 필요합니다.\n\n표준 PostScript 프린터로 보내신 임의의 문서는 PostScript (.ps) 파일로 저장됩니다." - -msgid "libfluidsynth.dll" -msgstr "libfluidsynth.dll" - -msgid "libfluidsynth" -msgstr "libfluidsynth" - -msgid " is required for FluidSynth MIDI output." -msgstr "FluidSynth의 MIDI 출력에 libfluidsynth이(가) 필요합니다." - -msgid "Entering fullscreen mode" -msgstr "전체 화면으로 전환" - -msgid "Don't show this message again" -msgstr "이 메시지 그만 보기" - -msgid "Don't exit" -msgstr "끝내지 않기" - -msgid "Reset" -msgstr "재시작" - -msgid "Don't reset" -msgstr "재시작 안함" - -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "CD-ROM 이미지 (*.iso *.cue);;모든 파일 (*.*)" - -msgid "%hs Device Configuration" -msgstr "%hs 장치 설정" - -msgid "Monitor in sleep mode" -msgstr "모니터 절전 모드" - -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "OpenGL 쉐이더 (*.glsl);;모든 파일 (*.*)" - -msgid "OpenGL options" -msgstr "OpenGL 설정" - -msgid "You are loading an unsupported configuration" -msgstr "지원하지 않는 설정입니다" - -msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "이 에뮬레이트된 기종에 대해 선택한 기종을 기반으로 하는 CPU 종류 필터링이 사용되지 않도록 설정되었습니다.\n\n따라서 선택된 머신과 호환되지 않는 CPU를 선택하실 수 있습니다. 하지만 BIOS 또는 다른 소프트웨어와 호환되지 않을 수 있습니다.\n\n이 설정을 활성화하는 것은 공식적으로 지원되지 않으며, 제출된 버그 보고서는 유효하지 않음으로 닫힐 수 있습니다." - -msgid "Continue" -msgstr "계속" - -msgid "Cassette: %s" -msgstr "카세트: %s" - -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "카세트 이미지 (*.pcm *.raw *.wav *.cas);;모든 파일 (*.*)" - -msgid "Cartridge %i: %ls" -msgstr "카트리지 %i: %ls" - -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "카트리지 이미지 (*.a *.b *.jrc);;모든 파일 (*.*)" - -msgid "Error initializing renderer" -msgstr "Error initializing renderer" - -msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." - -msgid "Resume execution" -msgstr "Resume execution" - -msgid "Pause execution" -msgstr "Pause execution" - -msgid "Press Ctrl+Alt+Del" -msgstr "Press Ctrl+Alt+Del" - -msgid "Press Ctrl+Alt+Esc" -msgstr "Press Ctrl+Alt+Esc" - -msgid "Hard reset" -msgstr "Hard reset" - -msgid "ACPI shutdown" -msgstr "ACPI shutdown" - -msgid "Hard disk (%s)" -msgstr "하드 디스크 (%s)" - -msgid "%01i:%01i" -msgstr "%01i:%01i" - -msgid "%01i" -msgstr "%01i" - -msgid "MFM/RLL or ESDI CD-ROM drives never existed" -msgstr "MFM/RLL 또는 ESDI CD-ROM 드라이브가 존재하지 않습니다" - -msgid "Custom..." -msgstr "사용자 설정..." - -msgid "Custom (large)..." -msgstr "사용자 설정 (대용량)..." - -msgid "Add New Hard Disk" -msgstr "새로 생성" - -msgid "Add Existing Hard Disk" -msgstr "기존 이미지 사용" - -msgid "HDI disk images cannot be larger than 4 GB." -msgstr "HDI 디스크 이미지는 4GB 이상으로 지정할 수 없습니다" - -msgid "Disk images cannot be larger than 127 GB." -msgstr "디스크 이미지는 127GB 이상으로 지정할 수 없습니다" - -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "하드 디스크 이미지 (*.hd? *.im? *.vhd);;모든 파일 (*.*)" - -msgid "Unable to read file" -msgstr "파일을 읽을 수 없습니다" - -msgid "Unable to write file" -msgstr "파일을 저장할 수 없습니다" - -msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "512 바이트 이외의 섹터 크기를 가진 HDI 또는 HDX 형식의 이미지를 생성할 수 없습니다" - -msgid "USB is not yet supported" -msgstr "USB는 아직 지원하지 않습니다" - -msgid "Disk image file already exists" -msgstr "디스크 이미지 파일이 이미 존재합니다" - -msgid "Please specify a valid file name." -msgstr "올바른 파일명을 지정해 주세요." - -msgid "Disk image created" -msgstr "디스크 이미지가 생성되었습니다" - -msgid "Make sure the file exists and is readable." -msgstr "파일이 존재하며 읽을 수 있는지 확인합니다." - -msgid "Make sure the file is being saved to a writable directory." -msgstr "파일이 쓰기 가능한 디렉토리에 저장되고 있는지 확인합니다." - -msgid "Disk image too large" -msgstr "디스크 이미지가 너무 큽니다" - -msgid "Remember to partition and format the newly-created drive." -msgstr "새로 생성한 드라이브의 파티션 설정과 포맷을 꼭 해주세요." - -msgid "The selected file will be overwritten. Are you sure you want to use it?" -msgstr "선택하신 파일을 덮어씌웁니다. 사용하시겠습니까?" - -msgid "Unsupported disk image" -msgstr "지원하지 않는 디스크 이미지입니다" - -msgid "Overwrite" -msgstr "덮어쓰기" - -msgid "Don't overwrite" -msgstr "덮어쓰지 않음" - -msgid "Raw image (.img)" -msgstr "Raw 이미지 (.img)" - -msgid "HDI image (.hdi)" -msgstr "HDI 이미지 (.hdi)" - -msgid "HDX image (.hdx)" -msgstr "HDX 이미지 (.hdx)" - -msgid "Fixed-size VHD (.vhd)" -msgstr "고정 사이즈 VHD (.vhd)" - -msgid "Dynamic-size VHD (.vhd)" -msgstr "동적 사이즈 VHD (.vhd)" - -msgid "Differencing VHD (.vhd)" -msgstr "디퍼런싱 VHD (.vhd)" - -msgid "Large blocks (2 MB)" -msgstr "대형 블록 (2 MB)" - -msgid "Small blocks (512 KB)" -msgstr "소형 블록 (512 KB)" - -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "VHD 파일 (*.vhd);;모든 파일 (*.*)" - -msgid "Select the parent VHD" -msgstr "부모 VHD 선택" - -msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" -msgstr "이는 디퍼런싱 이미지가 생성된 후 부모 이미지가 수정되었음을 의미할 수 있습니다.\n\n이미지 파일이 이동 또는 복사된 경우 또는 이 디스크를 만든 프로그램의 버그로 인해 발생할 수도 있습니다.\n\n타임스탬프를 수정하시겠습니까?" - -msgid "Parent and child disk timestamps do not match" -msgstr "부모 디스크와 자식 디스크의 타임스탬프가 일치하지 않습니다" - -msgid "Could not fix VHD timestamp." -msgstr "VHD 타임스탬프를 고칠 수 없습니다" - -msgid "%01i:%02i" -msgstr "%01i:%02i" - -msgid "MFM/RLL" -msgstr "MFM/RLL" - -msgid "XTA" -msgstr "XTA" - -msgid "ESDI" -msgstr "ESDI" - -msgid "IDE" -msgstr "IDE" - -msgid "ATAPI" -msgstr "ATAPI" - -msgid "MFM/RLL (%01i:%01i)" -msgstr "MFM/RLL (%01i:%01i)" - -msgid "XTA (%01i:%01i)" -msgstr "XTA (%01i:%01i)" - -msgid "ESDI (%01i:%01i)" -msgstr "ESDI (%01i:%01i)" - -msgid "IDE (%01i:%01i)" -msgstr "IDE (%01i:%01i)" - -msgid "ATAPI (%01i:%01i)" -msgstr "ATAPI (%01i:%01i)" - -msgid "SCSI (%01i:%02i)" -msgstr "SCSI (%01i:%02i)" - -msgid "CD-ROM %i (%s): %s" -msgstr "CD-ROM %i (%s): %s" - -msgid "160 kB" -msgstr "160 kB" - -msgid "180 kB" -msgstr "180 kB" - -msgid "320 kB" -msgstr "320 kB" - -msgid "360 kB" -msgstr "360 kB" - -msgid "640 kB" -msgstr "640 kB" - -msgid "720 kB" -msgstr "720 kB" - -msgid "1.2 MB" -msgstr "1.2 MB" - -msgid "1.25 MB" -msgstr "1.25 MB" - -msgid "1.44 MB" -msgstr "1.44 MB" - -msgid "DMF (cluster 1024)" -msgstr "DMF (클러스터 1024)" - -msgid "DMF (cluster 2048)" -msgstr "DMF (클러스터 2048)" - -msgid "2.88 MB" -msgstr "2.88 MB" - -msgid "ZIP 100" -msgstr "ZIP 100" - -msgid "3.5\" 128Mb M.O. (ISO 10090)" -msgstr "3.5\" 128Mb M.O. (ISO 10090)" - -msgid "3.5\" 230Mb M.O. (ISO 13963)" -msgstr "3.5\" 230Mb M.O. (ISO 13963)" - -msgid "3.5\" 540Mb M.O. (ISO 15498)" -msgstr "3.5\" 540Mb M.O. (ISO 15498)" - -msgid "3.5\" 640Mb M.O. (ISO 15498)" -msgstr "3.5\" 640Mb M.O. (ISO 15498)" - -msgid "3.5\" 1.3Gb M.O. (GigaMO)" -msgstr "3.5\" 1.3Gb M.O. (GigaMO)" - -msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" - -msgid "5.25\" 600Mb M.O." -msgstr "5.25\" 600Mb M.O." - -msgid "5.25\" 650Mb M.O." -msgstr "5.25\" 650Mb M.O." - -msgid "5.25\" 1Gb M.O." -msgstr "5.25\" 1Gb M.O." - -msgid "5.25\" 1.3Gb M.O." -msgstr "5.25\" 1.3Gb M.O." - -msgid "Perfect RPM" -msgstr "완벽한 회전수" - -msgid "1%% below perfect RPM" -msgstr "1% 낮은 회전수" - -msgid "1.5%% below perfect RPM" -msgstr "1.5% 낮은 회전수" - -msgid "2%% below perfect RPM" -msgstr "2% 낮은 회전수" - -msgid "(System Default)" -msgstr "(시스템 기본값)" - +msgid "&Action" +msgstr "동작(&A)" + +msgid "&Keyboard requires capture" +msgstr "키보드는 캡쳐가 필요함(&K)" + +msgid "&Right CTRL is left ALT" +msgstr "우측CTRL로 좌측ALT 입력(&R)" + +msgid "&Hard Reset..." +msgstr "재시작(&H)..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "Ctrl+Alt+Del(&C)\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+Esc(&E)" + +msgid "&Pause" +msgstr "일시정지(&P)" + +msgid "E&xit..." +msgstr "끝내기(&X)..." + +msgid "&View" +msgstr "표시(&V)" + +msgid "&Hide status bar" +msgstr "상태 바 숨기기(&H)" + +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + +msgid "&Resizeable window" +msgstr "창 크기 조절 가능하게 하기(&R)" + +msgid "R&emember size && position" +msgstr "창 크기와 위치를 기억하기(&E)" + +msgid "Re&nderer" +msgstr "렌더러(&N)" + +msgid "&SDL (Software)" +msgstr "SDL (소프트웨어)(&S)" + +msgid "SDL (&Hardware)" +msgstr "SDL (하드웨어)(&H)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (OpenGL)(&O)" + +msgid "Open&GL (3.0 Core)" +msgstr "OpenGL (3.0 코어)(&G)" + +msgid "&VNC" +msgstr "VNC(&V)" + +msgid "Specify dimensions..." +msgstr "창 크기 지정하기..." + +msgid "F&orce 4:3 display ratio" +msgstr "화면 비율을 4:3으로 맞추기(&O)" + +msgid "&Window scale factor" +msgstr "창 표시 배율(&W)" + +msgid "&0.5x" +msgstr "0.5배(&0)" + +msgid "&1x" +msgstr "1배(&1)" + +msgid "1.&5x" +msgstr "1.5배(&5)" + +msgid "&2x" +msgstr "2배(&2)" + +msgid "Filter method" +msgstr "필터 형식" + +msgid "&Nearest" +msgstr "최근방 이웃 보간법(&N)" + +msgid "&Linear" +msgstr "선형 보간법(&L)" + +msgid "Hi&DPI scaling" +msgstr "HiDPI 스케일링(&D)" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "전체 화면(&F)\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "전체 화면 비율(&S)" + +msgid "&Full screen stretch" +msgstr "전체 화면으로 확대(&F)" + +msgid "&4:3" +msgstr "4:3(&4)" + +msgid "&Square pixels (Keep ratio)" +msgstr "정사각형 픽셀 (비율 유지)(&S)" + +msgid "&Integer scale" +msgstr "정수배 확대(&I)" + +msgid "E&GA/(S)VGA settings" +msgstr "E&GA/(S)VGA 설정" + +msgid "&Inverted VGA monitor" +msgstr "색상 반전된 VGA 모니터(&I)" + +msgid "VGA screen &type" +msgstr "VGA 화면 종류(&T)" + +msgid "RGB &Color" +msgstr "RGB 천연색(&C)" + +msgid "&RGB Grayscale" +msgstr "RGB 회색조(&R)" + +msgid "&Amber monitor" +msgstr "주황색 모니터(&A)" + +msgid "&Green monitor" +msgstr "녹색 모니터(&G)" + +msgid "&White monitor" +msgstr "흰색 모니터(&W)" + +msgid "Grayscale &conversion type" +msgstr "회색조 표현방식(&C)" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT601 (NTSC/PAL)(&6)" + +msgid "BT&709 (HDTV)" +msgstr "BT709 (HDTV)(&7)" + +msgid "&Average" +msgstr "평균값(&A)" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "CGA/PCjr/Tandy/EGA/(S)VGA 오버스캔(&G)" + +msgid "Change contrast for &monochrome display" +msgstr "흑백 표시를 위한 밝기 조정(&M)" + +msgid "&Media" +msgstr "미디어(&M)" + +msgid "&Tools" +msgstr "도구(&T)" + +msgid "&Settings..." +msgstr "설정(&S)..." + +msgid "&Update status bar icons" +msgstr "상태 바 아이콘 갱신하기(&U)" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "스크린샷 찍기(&C)\tCtrl+F11" + +msgid "&Preferences..." +msgstr "환경설정(&P)..." + +msgid "Enable &Discord integration" +msgstr "디스코드 연동 활성화하기(&D)" + +msgid "Sound &gain..." +msgstr "음량 증폭(&G)..." + +msgid "Begin trace\tCtrl+T" +msgstr "추적 시작하기\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "추적 끝내기\tCtrl+T" + +msgid "&Logging" +msgstr "로그(&L)" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "BusLogic 로그 켜기\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "CD-ROM 로그 켜기\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "플로피 (86F) 로그 켜기\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "플로피 컨트롤러 로그 켜기\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "IDE 로그 켜기\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "직렬 포트 로그 켜기\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "네트워크 로그 켜기\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "중단점 로그 켜기(&L)\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "비디오 RAM 덤프 켜기(&V)\tCtrl+F1" + +msgid "&Help" +msgstr "도움말(&H)" + +msgid "&Documentation..." +msgstr "문서(&D)..." + +msgid "&About 86Box..." +msgstr "86Box에 대해(&A)..." + +msgid "&New image..." +msgstr "새 이미지(&N)..." + +msgid "&Existing image..." +msgstr "이미지 불러오기(&E)..." + +msgid "Existing image (&Write-protected)..." +msgstr "이미지 불러오기 (쓰기방지)(&W)..." + +msgid "&Record" +msgstr "녹음하기(&R)" + +msgid "&Play" +msgstr "재생하기(&P)" + +msgid "&Rewind to the beginning" +msgstr "맨앞으로 되감기(&R)" + +msgid "&Fast forward to the end" +msgstr "맨끝으로 빨리감기(&F)" + +msgid "E&ject" +msgstr "꺼내기(&J)" + +msgid "&Image..." +msgstr "이미지(&I)..." + +msgid "E&xport to 86F..." +msgstr "86F로 보내기(&X)..." + +msgid "&Mute" +msgstr "음소거(&M)" + +msgid "E&mpty" +msgstr "비었음(&M)" + +msgid "&Reload previous image" +msgstr "이전 이미지 다시 불러오기(&R)" + +msgid "&Image" +msgstr "이미지(&I)" + +msgid "Target &framerate" +msgstr "목표 프레임 레이트(&F)" + +msgid "&Sync with video" +msgstr "비디오와 동기(&S)" + +msgid "&25 fps" +msgstr "25 fps(&2)" + +msgid "&30 fps" +msgstr "30 fps(&3)" + +msgid "&50 fps" +msgstr "50 fps(&5)" + +msgid "&60 fps" +msgstr "60 fps(&6)" + +msgid "&75 fps" +msgstr "75 fps(&7)" + +msgid "&VSync" +msgstr "수직 동기화(&V)" + +msgid "&Select shader..." +msgstr "쉐이더 불러오기(&S)..." + +msgid "&Remove shader" +msgstr "쉐이더 끄기(&R)" + +msgid "Preferences" +msgstr "환경설정" + +msgid "Sound Gain" +msgstr "음량 증폭" + +msgid "New Image" +msgstr "새 이미지" + +msgid "Settings" +msgstr "설정" + +msgid "Specify Main Window Dimensions" +msgstr "창 크기 지정" + +msgid "OK" +msgstr "확인" + +msgid "Cancel" +msgstr "취소" + +msgid "Save these settings as &global defaults" +msgstr "이 설정들을 전역 기본값으로 저장하기(&G)" + +msgid "&Default" +msgstr "기본값(&D)" + +msgid "Language:" +msgstr "언어:" + +msgid "Icon set:" +msgstr "아이콘셋:" + +msgid "Gain" +msgstr "증가값" + +msgid "File name:" +msgstr "파일명:" + +msgid "Disk size:" +msgstr "디스크 용량:" + +msgid "RPM mode:" +msgstr "RPM 모드:" + +msgid "Progress:" +msgstr "진행:" + +msgid "Width:" +msgstr "가로:" + +msgid "Height:" +msgstr "세로:" + +msgid "Lock to this size" +msgstr "크기 고정" + +msgid "Machine type:" +msgstr "머신 종류:" + +msgid "Machine:" +msgstr "기종:" + +msgid "Configure" +msgstr "설정" + +msgid "CPU type:" +msgstr "CPU 종류:" + +msgid "Speed:" +msgstr "속도:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "대기 상태:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "메모리:" + +msgid "Time synchronization" +msgstr "시간 동기화" + +msgid "Disabled" +msgstr "사용하지 않음" + +msgid "Enabled (local time)" +msgstr "사용 (현지 시간)" + +msgid "Enabled (UTC)" +msgstr "사용 (UTC)" + +msgid "Dynamic Recompiler" +msgstr "동적 재컴파일" + +msgid "Video:" +msgstr "비디오 카드:" + +msgid "Voodoo Graphics" +msgstr "Voodoo 그래픽" + +msgid "Mouse:" +msgstr "마우스:" + +msgid "Joystick:" +msgstr "조이스틱:" + +msgid "Joystick 1..." +msgstr "조이스틱 1..." + +msgid "Joystick 2..." +msgstr "조이스틱 2..." + +msgid "Joystick 3..." +msgstr "조이스틱 3..." + +msgid "Joystick 4..." +msgstr "조이스틱 4..." + +msgid "Sound card:" +msgstr "사운드 카드:" + +msgid "MIDI Out Device:" +msgstr "MIDI 출력 장치:" + +msgid "MIDI In Device:" +msgstr "MIDI 입력 장치:" + +msgid "Standalone MPU-401" +msgstr "MPU-401 단독 사용" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "FLOAT32 사운드 사용" + +msgid "Network type:" +msgstr "네트워크 종류:" + +msgid "PCap device:" +msgstr "PCap 장치:" + +msgid "Network adapter:" +msgstr "네트워크 어댑터:" + +msgid "LPT1 Device:" +msgstr "LPT1 장치:" + +msgid "LPT2 Device:" +msgstr "LPT2 장치:" + +msgid "LPT3 Device:" +msgstr "LPT3 장치:" + +msgid "Serial port 1" +msgstr "직렬 포트 1" + +msgid "Serial port 2" +msgstr "직렬 포트 2" + +msgid "Serial port 3" +msgstr "직렬 포트 3" + +msgid "Serial port 4" +msgstr "직렬 포트 4" + +msgid "Parallel port 1" +msgstr "병렬 포트 1" + +msgid "Parallel port 2" +msgstr "병렬 포트 2" + +msgid "Parallel port 3" +msgstr "병렬 포트 3" + +msgid "HD Controller:" +msgstr "HD 컨트롤러:" + +msgid "FD Controller:" +msgstr "FD 컨트롤러:" + +msgid "Tertiary IDE Controller" +msgstr "제3의 IDE 컨트롤러" + +msgid "Quaternary IDE Controller" +msgstr "제4의 IDE 컨트롤러" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "컨트롤러 1:" + +msgid "Controller 2:" +msgstr "컨트롤러 2:" + +msgid "Controller 3:" +msgstr "컨트롤러 3:" + +msgid "Controller 4:" +msgstr "컨트롤러 4:" + +msgid "Cassette" +msgstr "카세트 테이프" + +msgid "Hard disks:" +msgstr "하드 디스크:" + +msgid "&New..." +msgstr "새로 만들기(&N)..." + +msgid "&Existing..." +msgstr "불러오기(&E)..." + +msgid "&Remove" +msgstr "목록에서 제거(&R)" + +msgid "Bus:" +msgstr "버스:" + +msgid "Channel:" +msgstr "채널:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "열기(&S)..." + +msgid "Sectors:" +msgstr "섹터:" + +msgid "Heads:" +msgstr "헤드:" + +msgid "Cylinders:" +msgstr "실린더:" + +msgid "Size (MB):" +msgstr "용량(MB):" + +msgid "Type:" +msgstr "형식:" + +msgid "Image Format:" +msgstr "이미지 포맷:" + +msgid "Block Size:" +msgstr "블록 크기:" + +msgid "Floppy drives:" +msgstr "플로피 드라이브:" + +msgid "Turbo timings" +msgstr "고속 동작" + +msgid "Check BPB" +msgstr "BPB 확인" + +msgid "CD-ROM drives:" +msgstr "CD-ROM 드라이브:" + +msgid "MO drives:" +msgstr "광자기 드라이브:" + +msgid "ZIP drives:" +msgstr "ZIP 드라이브:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA RTC 카드:" + +msgid "ISA Memory Expansion" +msgstr "ISA 메모리 확장 카드" + +msgid "Card 1:" +msgstr "카드 1:" + +msgid "Card 2:" +msgstr "카드 2:" + +msgid "Card 3:" +msgstr "카드 3:" + +msgid "Card 4:" +msgstr "카드 4:" + +msgid "ISABugger device" +msgstr "ISABugger 장치" + +msgid "POST card" +msgstr "POST 카드" + +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" +msgstr "Malgun Gothic" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "오류" + +msgid "Fatal error" +msgstr "치명적인 오류" + +msgid "" +msgstr "<예약됨>" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "CTRL+ALT+PAGE DOWN 키를 누르면 창 모드로 전환합니다." + +msgid "Speed" +msgstr "속도" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.im? *.zdi)" +msgstr "ZIP 이미지 (*.im? *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box에서 사용 가능한 ROM 이미지를 찾을 수 없습니다.\n\nROM 세트를다운로드 후 \"roms\" 디렉토리에 압축을 풀어 주세요." + +msgid "(empty)" +msgstr "(비었음)" + +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "ZIP 이미지 (*.im? *.zdi);;모든 파일 (*.*)" + +msgid "Turbo" +msgstr "터보" + +msgid "On" +msgstr "켜짐" + +msgid "Off" +msgstr "꺼짐" + +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "모든 이미지 (*.86f *.dsk *.flp *.im? *.*fd?);;기본 섹터 이미지 (*.dsk *.flp *.im? *.img *.*fd?);;표면 이미지 (*.86f)" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "roms/machines 디렉토리에 필요한 롬파일이 없어 기종 \"%hs\"을(를) 사용할 수 없습니다. 사용 가능한 기종으로 변경합니다." + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "roms/video 디렉토리에 필요한 롬파일이 없어 비디오 카드 \"%hs\"을(를) 사용할 수 없습니다. 사용 가능한 기종으로 변경합니다." + +msgid "Machine" +msgstr "기종" + +msgid "Display" +msgstr "디스플레이" + +msgid "Input devices" +msgstr "입력 장치" + +msgid "Sound" +msgstr "사운드" + +msgid "Network" +msgstr "네트워크" + +msgid "Ports (COM & LPT)" +msgstr "포트 (COM & LPT)" + +msgid "Storage controllers" +msgstr "장치 컨트롤러" + +msgid "Hard disks" +msgstr "하드 디스크" + +msgid "Floppy & CD-ROM drives" +msgstr "플로피 / CD-ROM" + +msgid "Other removable devices" +msgstr "기타 이동식 저장장치" + +msgid "Other peripherals" +msgstr "기타 주변기기" + +msgid "Surface images (*.86f)" +msgstr "표면 이미지 (*.86f)" + +msgid "Click to capture mouse" +msgstr "이 창을 클릭하면 마우스를 사용합니다" + +msgid "Press F8+F12 to release mouse" +msgstr "F12+F8키를 누르면 마우스를 해제합니다" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "F12+F8키 또는 가운데 버튼을 클릭하면 마우스를 해제합니다" + +msgid "Unable to initialize FluidSynth" +msgstr "FluidSynth를 초기화할 수 없습니다" + +msgid "Bus" +msgstr "버스" + +msgid "File" +msgstr "파일" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "비디오 렌더러를 초기화할 수 없습니다." + +msgid "Default" +msgstr "기본값" + +msgid "%i Wait state(s)" +msgstr "%i 대기 상태" + +msgid "Type" +msgstr "형식" + +msgid "Failed to set up PCap" +msgstr "PCap 설정에 실패했습니다" + +msgid "No PCap devices found" +msgstr "PCap 장치가 없습니다" + +msgid "Invalid PCap device" +msgstr "PCap 장치가 올바르지 않습니다" + +msgid "Standard 2-button joystick(s)" +msgstr "표준 2버튼 조이스틱" + +msgid "Standard 4-button joystick" +msgstr "표준 4버튼 조이스틱" + +msgid "Standard 6-button joystick" +msgstr "표준 6버튼 조이스틱" + +msgid "Standard 8-button joystick" +msgstr "표준 8버튼 조이스틱" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "없음" + +msgid "Unable to load keyboard accelerators." +msgstr "키보드 가속기를 불러올 수 없습니다." + +msgid "Unable to register raw input." +msgstr "Raw 입력을 등록할 수 없습니다." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "플로피 %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "모든 이미지 (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;어드밴스드 섹터 이미지 (*.imd *.json *.td0);;기본 섹터 이미지 (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;플럭스 이미지 (*.fdi);;표면 이미지 (*.86f *.mfm);;모든 파일 (*.*)" + +msgid "Unable to initialize FreeType" +msgstr "FreeType을 초기화할 수 없습니다" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "SDL을 초기화할 수 없습니다. SDL2.dll이 필요합니다" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "실행중인 머신을 재시작하시겠습니까?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "86Box를 끝내시겠습니까?" + +msgid "Unable to initialize Ghostscript" +msgstr "Ghostscript를 초기화할 수 없습니다" + +msgid "MO %i (%ls): %ls" +msgstr "광자기 %i (%ls): %ls" + +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "광자기 이미지 (*.im? *.mdi);;모든 파일 (*.*)" + +msgid "Welcome to 86Box!" +msgstr "86Box에 어서오세요!" + +msgid "Internal controller" +msgstr "내부 컨트롤러" + +msgid "Exit" +msgstr "끝내기" + +msgid "No ROMs found" +msgstr "ROM을 불러올 수 없습니다" + +msgid "Do you want to save the settings?" +msgstr "설정을 저장하시겠습니까?" + +msgid "This will hard reset the emulated machine." +msgstr "사용중인 머신이 재부팅됩니다." + +msgid "Save" +msgstr "저장" + +msgid "About 86Box" +msgstr "86Box에 대해" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "고전 컴퓨터 에뮬레이터\n\n저자: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nGNU General Public 라이선스 (버전 2 이상)에 의해 배포되었습니다. 자세한 내용은 LICENSE 파일을 읽어 주세요." + +msgid "Hardware not available" +msgstr "하드웨어를 이용할 수 없습니다" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "이 설치되었는지 libpcap에 대응하는 네트워크에 접속되어 있는지 확인해 주세요." + +msgid "Invalid configuration" +msgstr "올바르지 않은 설정입니다" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr "ESC/P 프린터 에뮬레이션에 libfreetype이(가) 필요합니다." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr "은(는) PostScript 파일을 PDF로 자동변환하는 데에 필요합니다.\n\n표준 PostScript 프린터로 보내신 임의의 문서는 PostScript (.ps) 파일로 저장됩니다." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr "FluidSynth의 MIDI 출력에 libfluidsynth이(가) 필요합니다." + +msgid "Entering fullscreen mode" +msgstr "전체 화면으로 전환" + +msgid "Don't show this message again" +msgstr "이 메시지 그만 보기" + +msgid "Don't exit" +msgstr "끝내지 않기" + +msgid "Reset" +msgstr "재시작" + +msgid "Don't reset" +msgstr "재시작 안함" + +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "CD-ROM 이미지 (*.iso *.cue);;모든 파일 (*.*)" + +msgid "%hs Device Configuration" +msgstr "%hs 장치 설정" + +msgid "Monitor in sleep mode" +msgstr "모니터 절전 모드" + +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "OpenGL 쉐이더 (*.glsl);;모든 파일 (*.*)" + +msgid "OpenGL options" +msgstr "OpenGL 설정" + +msgid "You are loading an unsupported configuration" +msgstr "지원하지 않는 설정입니다" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "이 에뮬레이트된 기종에 대해 선택한 기종을 기반으로 하는 CPU 종류 필터링이 사용되지 않도록 설정되었습니다.\n\n따라서 선택된 머신과 호환되지 않는 CPU를 선택하실 수 있습니다. 하지만 BIOS 또는 다른 소프트웨어와 호환되지 않을 수 있습니다.\n\n이 설정을 활성화하는 것은 공식적으로 지원되지 않으며, 제출된 버그 보고서는 유효하지 않음으로 닫힐 수 있습니다." + +msgid "Continue" +msgstr "계속" + +msgid "Cassette: %s" +msgstr "카세트: %s" + +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "카세트 이미지 (*.pcm *.raw *.wav *.cas);;모든 파일 (*.*)" + +msgid "Cartridge %i: %ls" +msgstr "카트리지 %i: %ls" + +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "카트리지 이미지 (*.a *.b *.jrc);;모든 파일 (*.*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + +msgid "Hard disk (%s)" +msgstr "하드 디스크 (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL 또는 ESDI CD-ROM 드라이브가 존재하지 않습니다" + +msgid "Custom..." +msgstr "사용자 설정..." + +msgid "Custom (large)..." +msgstr "사용자 설정 (대용량)..." + +msgid "Add New Hard Disk" +msgstr "새로 생성" + +msgid "Add Existing Hard Disk" +msgstr "기존 이미지 사용" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "HDI 디스크 이미지는 4GB 이상으로 지정할 수 없습니다" + +msgid "Disk images cannot be larger than 127 GB." +msgstr "디스크 이미지는 127GB 이상으로 지정할 수 없습니다" + +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "하드 디스크 이미지 (*.hd? *.im? *.vhd);;모든 파일 (*.*)" + +msgid "Unable to read file" +msgstr "파일을 읽을 수 없습니다" + +msgid "Unable to write file" +msgstr "파일을 저장할 수 없습니다" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "512 바이트 이외의 섹터 크기를 가진 HDI 또는 HDX 형식의 이미지를 생성할 수 없습니다" + +msgid "USB is not yet supported" +msgstr "USB는 아직 지원하지 않습니다" + +msgid "Disk image file already exists" +msgstr "디스크 이미지 파일이 이미 존재합니다" + +msgid "Please specify a valid file name." +msgstr "올바른 파일명을 지정해 주세요." + +msgid "Disk image created" +msgstr "디스크 이미지가 생성되었습니다" + +msgid "Make sure the file exists and is readable." +msgstr "파일이 존재하며 읽을 수 있는지 확인합니다." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "파일이 쓰기 가능한 디렉토리에 저장되고 있는지 확인합니다." + +msgid "Disk image too large" +msgstr "디스크 이미지가 너무 큽니다" + +msgid "Remember to partition and format the newly-created drive." +msgstr "새로 생성한 드라이브의 파티션 설정과 포맷을 꼭 해주세요." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "선택하신 파일을 덮어씌웁니다. 사용하시겠습니까?" + +msgid "Unsupported disk image" +msgstr "지원하지 않는 디스크 이미지입니다" + +msgid "Overwrite" +msgstr "덮어쓰기" + +msgid "Don't overwrite" +msgstr "덮어쓰지 않음" + +msgid "Raw image (.img)" +msgstr "Raw 이미지 (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDI 이미지 (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDX 이미지 (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "고정 사이즈 VHD (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "동적 사이즈 VHD (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "디퍼런싱 VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "대형 블록 (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "소형 블록 (512 KB)" + +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "VHD 파일 (*.vhd);;모든 파일 (*.*)" + +msgid "Select the parent VHD" +msgstr "부모 VHD 선택" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "이는 디퍼런싱 이미지가 생성된 후 부모 이미지가 수정되었음을 의미할 수 있습니다.\n\n이미지 파일이 이동 또는 복사된 경우 또는 이 디스크를 만든 프로그램의 버그로 인해 발생할 수도 있습니다.\n\n타임스탬프를 수정하시겠습니까?" + +msgid "Parent and child disk timestamps do not match" +msgstr "부모 디스크와 자식 디스크의 타임스탬프가 일치하지 않습니다" + +msgid "Could not fix VHD timestamp." +msgstr "VHD 타임스탬프를 고칠 수 없습니다" + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (클러스터 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (클러스터 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." + +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." + +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." + +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "완벽한 회전수" + +msgid "1%% below perfect RPM" +msgstr "1% 낮은 회전수" + +msgid "1.5%% below perfect RPM" +msgstr "1.5% 낮은 회전수" + +msgid "2%% below perfect RPM" +msgstr "2% 낮은 회전수" + +msgid "(System Default)" +msgstr "(시스템 기본값)" + diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index d8b971294..91fde8023 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -1,1191 +1,1191 @@ -msgid "&Action" -msgstr "&Ação" - -msgid "&Keyboard requires capture" -msgstr "&Teclado requer captura" - -msgid "&Right CTRL is left ALT" -msgstr "CTRL &direito é o ALT esquerdo" - -msgid "&Hard Reset..." -msgstr "&Reinicialização completa..." - -msgid "&Ctrl+Alt+Del\tCtrl+F12" -msgstr "&Ctrl+Alt+Del\tCtrl+F12" - -msgid "Ctrl+Alt+&Esc" -msgstr "Ctrl+Alt+&Esc" - -msgid "&Pause" -msgstr "&Pausar" - -msgid "E&xit..." -msgstr "&Sair..." - -msgid "&View" -msgstr "&Exibir" - -msgid "&Hide status bar" -msgstr "&Ocultar barra de status" - -msgid "Hide &toolbar" -msgstr "Ocultar &barra de ferramenta" - -msgid "&Resizeable window" -msgstr "&Janela redimensionável" - -msgid "R&emember size && position" -msgstr "&Lembrar tamanho e posição" - -msgid "Re&nderer" -msgstr "&Renderizador" - -msgid "&SDL (Software)" -msgstr "&SDL (Software)" - -msgid "SDL (&Hardware)" -msgstr "SDL (&Hardware)" - -msgid "SDL (&OpenGL)" -msgstr "SDL (&OpenGL)" - -msgid "Open&GL (3.0 Core)" -msgstr "Open&GL (Núcleo 3.0)" - -msgid "&VNC" -msgstr "&VNC" - -msgid "Specify dimensions..." -msgstr "Especificar as dimensões..." - -msgid "F&orce 4:3 display ratio" -msgstr "F&orçar proporção de tela em 4:3" - -msgid "&Window scale factor" -msgstr "&Fator de redimensionamento da janela" - -msgid "&0.5x" -msgstr "&0,5x" - -msgid "&1x" -msgstr "&1x" - -msgid "1.&5x" -msgstr "1,&5x" - -msgid "&2x" -msgstr "&2x" - -msgid "Filter method" -msgstr "Método de filtragem" - -msgid "&Nearest" -msgstr "&Mais próximo" - -msgid "&Linear" -msgstr "&Linear" - -msgid "Hi&DPI scaling" -msgstr "Escala Hi&DPI" - -msgid "&Fullscreen\tCtrl+Alt+PageUP" -msgstr "&Tela cheia\tCtrl+Alt+PageUP" - -msgid "Fullscreen &stretch mode" -msgstr "Modo de &redimensionamento da tela cheia" - -msgid "&Full screen stretch" -msgstr "&Tela cheia esticada" - -msgid "&4:3" -msgstr "&4:3" - -msgid "&Square pixels (Keep ratio)" -msgstr "Pixel&s quadrados (manter proporção)" - -msgid "&Integer scale" -msgstr "&Redimensionamento com valores inteiros" - -msgid "E&GA/(S)VGA settings" -msgstr "Configurações E&GA/(S)VGA" - -msgid "&Inverted VGA monitor" -msgstr "Monitor VGA &invertido" - -msgid "VGA screen &type" -msgstr "&Tipo de tela VGA" - -msgid "RGB &Color" -msgstr "&Cor RGB" - -msgid "&RGB Grayscale" -msgstr "Tons de cinza &RGB" - -msgid "&Amber monitor" -msgstr "Monitor &âmbar" - -msgid "&Green monitor" -msgstr "Monitor &verde" - -msgid "&White monitor" -msgstr "Monitor &branco" - -msgid "Grayscale &conversion type" -msgstr "Tipo de &conversão de tons de cinza" - -msgid "BT&601 (NTSC/PAL)" -msgstr "BT&601 (NTSC/PAL)" - -msgid "BT&709 (HDTV)" -msgstr "BT&709 (HDTV)" - -msgid "&Average" -msgstr "&Média" - -msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" -msgstr "Overscan do CGA/PCjr/Tandy/E&GA/(S)VGA" - -msgid "Change contrast for &monochrome display" -msgstr "Alterar contraste para exibição &monocromática" - -msgid "&Media" -msgstr "&Mídia" - -msgid "&Tools" -msgstr "&Ferramentas" - -msgid "&Settings..." -msgstr "&Configurações..." - -msgid "&Update status bar icons" -msgstr "&Atualizar ícones da barra de status" - -msgid "Take s&creenshot\tCtrl+F11" -msgstr "Capturar &tela\tCtrl+F11" - -msgid "&Preferences..." -msgstr "&Preferências..." - -msgid "Enable &Discord integration" -msgstr "Ativar integração com o &Discord" - -msgid "Sound &gain..." -msgstr "&Ganho de som..." - -msgid "Begin trace\tCtrl+T" -msgstr "Inicio do rastreamento\tCtrl+T" - -msgid "End trace\tCtrl+T" -msgstr "Fim do rastreamento\tCtrl+T" - -msgid "&Logging" -msgstr "&Registros" - -msgid "Enable BusLogic logs\tCtrl+F4" -msgstr "Ativar registros da BusLogic\tCtrl+F4" - -msgid "Enable CD-ROM logs\tCtrl+F5" -msgstr "Ativar registros do CD-ROM\tCtrl+F5" - -msgid "Enable floppy (86F) logs\tCtrl+F6" -msgstr "Ativar registros do disquete (86F)\tCtrl+F6" - -msgid "Enable floppy controller logs\tCtrl+F7" -msgstr "Ativar registros do controlador de disquete\tCtrl+F7" - -msgid "Enable IDE logs\tCtrl+F8" -msgstr "Ativar registros da IDE\tCtrl+F8" - -msgid "Enable Serial Port logs\tCtrl+F3" -msgstr "Ativar registros da porta serial\tCtrl+F3" - -msgid "Enable Network logs\tCtrl+F9" -msgstr "Ativar registros da rede\tCtrl+F9" - -msgid "&Log breakpoint\tCtrl+F10" -msgstr "&Ponto de parada no registo\tCtrl+F10" - -msgid "Dump &video RAM\tCtrl+F1" -msgstr "Despejo da RAM de &vídeo\tCtrl+F1" - -msgid "&Help" -msgstr "&Ajuda" - -msgid "&Documentation..." -msgstr "&Documentação..." - -msgid "&About 86Box..." -msgstr "&Sobre o 86Box..." - -msgid "&New image..." -msgstr "&Nova imagem..." - -msgid "&Existing image..." -msgstr "&Imagem existente..." - -msgid "Existing image (&Write-protected)..." -msgstr "Imagem existente (&protegida contra escrita)..." - -msgid "&Record" -msgstr "&Gravar" - -msgid "&Play" -msgstr "&Reproduzir" - -msgid "&Rewind to the beginning" -msgstr "&Rebobinar até o começo" - -msgid "&Fast forward to the end" -msgstr "&Avançar até o fim" - -msgid "E&ject" -msgstr "E&jetar" - -msgid "&Image..." -msgstr "&Imagem..." - -msgid "E&xport to 86F..." -msgstr "E&xportar para 86F..." - -msgid "&Mute" -msgstr "&Sem som" - -msgid "E&mpty" -msgstr "&Vazio" - -msgid "&Reload previous image" -msgstr "&Recarregar imagem anterior" - -msgid "&Image" -msgstr "&Imagem" - -msgid "Target &framerate" -msgstr "&Taxa de quadro pretendida" - -msgid "&Sync with video" -msgstr "&Sincronizar com vídeo" - -msgid "&25 fps" -msgstr "&25 qps" - -msgid "&30 fps" -msgstr "&30 qps" - -msgid "&50 fps" -msgstr "&50 qps" - -msgid "&60 fps" -msgstr "&60 qps" - -msgid "&75 fps" -msgstr "&75 qps" - -msgid "&VSync" -msgstr "Sincronização &vertical" - -msgid "&Select shader..." -msgstr "&Selecionar shader..." - -msgid "&Remove shader" -msgstr "&Remover shader" - -msgid "Preferences" -msgstr "Preferências" - -msgid "Sound Gain" -msgstr "Ganho de som" - -msgid "New Image" -msgstr "Nova imagem de disquete" - -msgid "Settings" -msgstr "Configurações" - -msgid "Specify Main Window Dimensions" -msgstr "Especifique as dimensões da janela principal" - -msgid "OK" -msgstr "OK" - -msgid "Cancel" -msgstr "Cancelar" - -msgid "Save these settings as &global defaults" -msgstr "Usar estas configurações como &padrões globais" - -msgid "&Default" -msgstr "&Padrão" - -msgid "Language:" -msgstr "Idioma:" - -msgid "Icon set:" -msgstr "Pacote de ícones:" - -msgid "Gain" -msgstr "Ganho" - -msgid "File name:" -msgstr "Nome:" - -msgid "Disk size:" -msgstr "Tamanho:" - -msgid "RPM mode:" -msgstr "Modo RPM:" - -msgid "Progress:" -msgstr "Progresso:" - -msgid "Width:" -msgstr "Largura:" - -msgid "Height:" -msgstr "Altura:" - -msgid "Lock to this size" -msgstr "Travar nesse tamanho" - -msgid "Machine type:" -msgstr "Tipo de máquina:" - -msgid "Machine:" -msgstr "Máquina:" - -msgid "Configure" -msgstr "Configurar" - -msgid "CPU type:" -msgstr "Tipo de CPU:" - -msgid "Speed:" -msgstr "Veloc.:" - -msgid "FPU:" -msgstr "FPU:" - -msgid "Wait states:" -msgstr "Estados de espera:" - -msgid "MB" -msgstr "MB" - -msgid "Memory:" -msgstr "Memória:" - -msgid "Time synchronization" -msgstr "Sincronização da hora" - -msgid "Disabled" -msgstr "Desativada" - -msgid "Enabled (local time)" -msgstr "Ativada (hora local)" - -msgid "Enabled (UTC)" -msgstr "Ativada (UTC)" - -msgid "Dynamic Recompiler" -msgstr "Recompilador dinâmico" - -msgid "Video:" -msgstr "Vídeo:" - -msgid "Voodoo Graphics" -msgstr "3DFX Voodoo" - -msgid "Mouse:" -msgstr "Mouse:" - -msgid "Joystick:" -msgstr "Joystick:" - -msgid "Joystick 1..." -msgstr "Joystick 1..." - -msgid "Joystick 2..." -msgstr "Joystick 2..." - -msgid "Joystick 3..." -msgstr "Joystick 3..." - -msgid "Joystick 4..." -msgstr "Joystick 4..." - -msgid "Sound card:" -msgstr "Placa de som:" - -msgid "MIDI Out Device:" -msgstr "Disp. saída MIDI:" - -msgid "MIDI In Device:" -msgstr "Disp. entrada MIDI:" - -msgid "Standalone MPU-401" -msgstr "MPU-401 autônomo" - -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - -msgid "Use FLOAT32 sound" -msgstr "Usar som FLOAT32" - -msgid "Network type:" -msgstr "Tipo de rede:" - -msgid "PCap device:" -msgstr "Dispositivo PCap:" - -msgid "Network adapter:" -msgstr "Adaptador de rede:" - -msgid "LPT1 Device:" -msgstr "Dispositivo LPT1:" - -msgid "LPT2 Device:" -msgstr "Dispositivo LPT2:" - -msgid "LPT3 Device:" -msgstr "Dispositivo LPT3:" - -msgid "Serial port 1" -msgstr "Porta serial 1" - -msgid "Serial port 2" -msgstr "Porta serial 2" - -msgid "Serial port 3" -msgstr "Porta serial 3" - -msgid "Serial port 4" -msgstr "Porta serial 4" - -msgid "Parallel port 1" -msgstr "Porta paralela 1" - -msgid "Parallel port 2" -msgstr "Porta paralela 2" - -msgid "Parallel port 3" -msgstr "Porta paralela 3" - -msgid "HD Controller:" -msgstr "Controlador HD:" - -msgid "FD Controller:" -msgstr "Controlador FD:" - -msgid "Tertiary IDE Controller" -msgstr "Controlador IDE terciário" - -msgid "Quaternary IDE Controller" -msgstr "Controlador IDE quaternário" - -msgid "SCSI" -msgstr "SCSI" - -msgid "Controller 1:" -msgstr "Controlador 1:" - -msgid "Controller 2:" -msgstr "Controlador 2:" - -msgid "Controller 3:" -msgstr "Controlador 3:" - -msgid "Controller 4:" -msgstr "Controlador 4:" - -msgid "Cassette" -msgstr "Cassete" - -msgid "Hard disks:" -msgstr "Discos rígidos:" - -msgid "&New..." -msgstr "&Novo..." - -msgid "&Existing..." -msgstr "&Existente..." - -msgid "&Remove" -msgstr "&Remover" - -msgid "Bus:" -msgstr "Bar.:" - -msgid "Channel:" -msgstr "Canal:" - -msgid "ID:" -msgstr "ID:" - -msgid "&Specify..." -msgstr "&Especificar..." - -msgid "Sectors:" -msgstr "Setores:" - -msgid "Heads:" -msgstr "Cabeças:" - -msgid "Cylinders:" -msgstr "Cilindros:" - -msgid "Size (MB):" -msgstr "Tamanho (MB):" - -msgid "Type:" -msgstr "Tipo:" - -msgid "Image Format:" -msgstr "Formato:" - -msgid "Block Size:" -msgstr "Bloco:" - -msgid "Floppy drives:" -msgstr "Unidades de disquete:" - -msgid "Turbo timings" -msgstr "Turbo" - -msgid "Check BPB" -msgstr "Verificar BPB" - -msgid "CD-ROM drives:" -msgstr "Unidades de CD-ROM:" - -msgid "MO drives:" -msgstr "Unidades magneto-ópticas:" - -msgid "ZIP drives:" -msgstr "Unidades ZIP:" - -msgid "ZIP 250" -msgstr "ZIP 250" - -msgid "ISA RTC:" -msgstr "RTC ISA:" - -msgid "ISA Memory Expansion" -msgstr "Expansão de memória ISA" - -msgid "Card 1:" -msgstr "Placa 1:" - -msgid "Card 2:" -msgstr "Placa 2:" - -msgid "Card 3:" -msgstr "Placa 3:" - -msgid "Card 4:" -msgstr "Placa 4:" - -msgid "ISABugger device" -msgstr "Dispositivo ISABugger" - -msgid "POST card" -msgstr "Placa de diagnóstico" - -msgid "FONT_SIZE" -msgstr "9" - -msgid "FONT_NAME" -msgstr "Segoe UI" - -msgid "86Box" -msgstr "86Box" - -msgid "Error" -msgstr "Erro" - -msgid "Fatal error" -msgstr "Erro fatal" - -msgid "" -msgstr "" - -msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." -msgstr "Use CTRL+ALT+PAGE DOWN para retornar ao modo janela" - -msgid "Speed" -msgstr "Velocidade" - -msgid "ZIP %03i %i (%s): %ls" -msgstr "ZIP %03i %i (%s): %ls" - -msgid "ZIP images (*.im? *.zdi)" -msgstr "Imagens ZIP (*.im? *.zdi)" - -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "O 86Box não conseguiu encontrar nenhuma imagem de ROM utilizável.\n\nPor favor, baixe um conjunto de ROM e extraia no diretório \"roms\"." - -msgid "(empty)" -msgstr "(vazio)" - -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "Imagens ZIP (*.im? *.zdi);;Todos os arquivos (*.*)" - -msgid "Turbo" -msgstr "Turbo" - -msgid "On" -msgstr "Lig." - -msgid "Off" -msgstr "Desl." - -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "Todas as imagens (*.86f *.dsk *.flp *.im? *.*fd?);;Imagens de setor básico (*.dsk *.flp *.im? *.img *.*fd?);;Imagens de superfície (*.86f)" - -msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "A máquina \"%hs\" não está disponível devido à falta de ROMs no diretório roms/machines. Mudando para uma máquina disponível." - -msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "A placa de vídeo \"%hs\" não está disponível devido à falta de ROMs no diretório roms/video. Mudando para uma placa de vídeo disponível." - -msgid "Machine" -msgstr "Máquina" - -msgid "Display" -msgstr "Vídeo" - -msgid "Input devices" -msgstr "Dispositivos de entrada" - -msgid "Sound" -msgstr "Som" - -msgid "Network" -msgstr "Rede" - -msgid "Ports (COM & LPT)" -msgstr "Portas (COM & LPT)" - -msgid "Storage controllers" -msgstr "Controladores de armaz." - -msgid "Hard disks" -msgstr "Discos rígidos" - -msgid "Floppy & CD-ROM drives" -msgstr "Disquete & CD-ROM" - -msgid "Other removable devices" -msgstr "Dispos. removíveis" - -msgid "Other peripherals" -msgstr "Outros periféricos" - -msgid "Surface images (*.86f)" -msgstr "Imagens de superfície (*.86f)" - -msgid "Click to capture mouse" -msgstr "Clique para capturar o mouse" - -msgid "Press F8+F12 to release mouse" -msgstr "Aperte F8+F12 para liberar o mouse" - -msgid "Press F8+F12 or middle button to release mouse" -msgstr "Aperte F8+F12 ou botão do meio para liberar o mouse" - -msgid "Unable to initialize FluidSynth" -msgstr "Não foi possível inicializar o FluidSynth" - -msgid "Bus" -msgstr "Barramento" - -msgid "File" -msgstr "Arquivo" - -msgid "C" -msgstr "CI" - -msgid "H" -msgstr "CA" - -msgid "S" -msgstr "SE" - -msgid "KB" -msgstr "KB" - -msgid "Could not initialize the video renderer." -msgstr "Não foi possível inicializar o renderizador de vídeo." - -msgid "Default" -msgstr "Padrão" - -msgid "%i Wait state(s)" -msgstr "%i estado(s) de espera" - -msgid "Type" -msgstr "Tipo" - -msgid "Failed to set up PCap" -msgstr "Não foi possível configurar o PCap" - -msgid "No PCap devices found" -msgstr "Nenhum dispositivo PCap encontrado" - -msgid "Invalid PCap device" -msgstr "Dispositivo PCap inválido" - -msgid "Standard 2-button joystick(s)" -msgstr "Joystick padrão de 2 botões" - -msgid "Standard 4-button joystick" -msgstr "Joystick padrão de 4 botões" - -msgid "Standard 6-button joystick" -msgstr "Joystick padrão de 6 botões" - -msgid "Standard 8-button joystick" -msgstr "Joystick padrão de 8 botões" - -msgid "CH Flightstick Pro" -msgstr "CH Flightstick Pro" - -msgid "Microsoft SideWinder Pad" -msgstr "Microsoft SideWinder Pad" - -msgid "Thrustmaster Flight Control System" -msgstr "Thrustmaster Flight Control System" - -msgid "None" -msgstr "Nada" - -msgid "Unable to load keyboard accelerators." -msgstr "Não foi possível carregar os aceleradores do teclado." - -msgid "Unable to register raw input." -msgstr "Não foi possível registrar a entrada bruta." - -msgid "%u" -msgstr "%u" - -msgid "%u MB (CHS: %i, %i, %i)" -msgstr "%u MB (CHS: %i, %i, %i)" - -msgid "Floppy %i (%s): %ls" -msgstr "Disquete %i (%s): %ls" - -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "Todas as imagens (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Imagens de setor avançado (*.imd *.json *.td0);;Imagens de setor básico (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Imagens de fluxo (*.fdi);;Imagens de superfície (*.86f *.mfm);;Todos os arquivos (*.*)" - -msgid "Unable to initialize FreeType" -msgstr "Não foi possível inicializar o FreeType" - -msgid "Unable to initialize SDL, SDL2.dll is required" -msgstr "Não é possível inicializar o SDL, é necessário o SDL2.dll" - -msgid "Are you sure you want to hard reset the emulated machine?" -msgstr "Tem certeza de que deseja reiniciar completamente a máquina emulada?" - -msgid "Are you sure you want to exit 86Box?" -msgstr "Tem certeza de que deseja sair do 86Box?" - -msgid "Unable to initialize Ghostscript" -msgstr "Não é possível inicializar o Ghostscript" - -msgid "MO %i (%ls): %ls" -msgstr "Magneto-óptico %i (%ls): %ls" - -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "Imagens magneto-ópticas (*.im? *.mdi);;Todos os arquivos (*.*)" - -msgid "Welcome to 86Box!" -msgstr "Bem-vindo ao 86Box!" - -msgid "Internal controller" -msgstr "Controlador interno" - -msgid "Exit" -msgstr "Sair" - -msgid "No ROMs found" -msgstr "Nenhum ROM encontrada" - -msgid "Do you want to save the settings?" -msgstr "Você deseja salvar as configurações?" - -msgid "This will hard reset the emulated machine." -msgstr "Isto fará com que a máquina emulada seja reinicializada." - -msgid "Save" -msgstr "Salvar" - -msgid "About 86Box" -msgstr "Sobre o 86Box" - -msgid "86Box v" -msgstr "86Box versão" - -msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "Um emulador de computadores antigos\n\nAutores: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, e outros.\n\nTraduzido por: Altieres Lima da Silva\n\nLançado sob a Licença Pública Geral GNU versão 2 ou posterior. Veja o arquivo LICENSE para mais informações." - -msgid "Hardware not available" -msgstr "Hardware não disponível" - -msgid "WinPcap" -msgstr "WinPcap" - -msgid "libpcap" -msgstr "libpcap" - -msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." -msgstr "Certifique-se de que libpcap esteja instalado e que você tenha uma conexão de rede compatível com libpcap." - -msgid "Invalid configuration" -msgstr "Configuração inválida" - -msgid "freetype.dll" -msgstr "freetype.dll" - -msgid "libfreetype" -msgstr "libfreetype" - -msgid " is required for ESC/P printer emulation." -msgstr " é necessário para emulação de impressora ESC/P." - -msgid "gsdll32.dll" -msgstr "gsdll32.dll" - -msgid "libgs" -msgstr "libgs" - -msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." -msgstr " é necessário para a conversão automática de arquivos PostScript para PDF.\n\nQualquer documento enviado para a impressora genérica PostScript será salvo como arquivos PostScript (.ps)." - -msgid "libfluidsynth.dll" -msgstr "libfluidsynth.dll" - -msgid "libfluidsynth" -msgstr "libfluidsynth" - -msgid " is required for FluidSynth MIDI output." -msgstr " é necessário para a saída MIDI FluidSynth." - -msgid "Entering fullscreen mode" -msgstr "Entrando no modo de tela cheia" - -msgid "Don't show this message again" -msgstr "Não exibir esta mensagem novamente" - -msgid "Don't exit" -msgstr "Não sair" - -msgid "Reset" -msgstr "Reiniciar" - -msgid "Don't reset" -msgstr "Não reiniciar" - -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "Imagens de CD-ROM (*.iso *.cue);;Todos os arquivos (*.*)" - -msgid "%hs Device Configuration" -msgstr "Configuração do dispositivo %hs" - -msgid "Monitor in sleep mode" -msgstr "Monitor em modo de suspensão" - -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "Shaders OpenGL (*.glsl);;Todos os arquivos (*.*)" - -msgid "OpenGL options" -msgstr "Opções do OpenGL" - -msgid "You are loading an unsupported configuration" -msgstr "Você está carregando uma configuração não suportada" - -msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "A filtragem do tipo CPU baseada na máquina selecionada é desativada para esta máquina emulada.\n\nIsto torna possível escolher uma CPU que de outra forma seria incompatível com a máquina selecionada. Entretanto, você pode encontrar incompatibilidades com a BIOS da máquina ou outro software.\n\nA ativação desta configuração não é oficialmente suportada e qualquer relatório de erro arquivado pode ser fechado como inválido." - -msgid "Continue" -msgstr "Continuar" - -msgid "Cassette: %s" -msgstr "Cassete: %s" - -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Imagens de cassete (*.pcm *.raw *.wav *.cas);;Todos os arquivos (*.*)" - -msgid "Cartridge %i: %ls" -msgstr "Cartucho %i: %ls" - -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "Imagens de cartucho (*.a *.b *.jrc);;Todos os arquivos (*.*)" - -msgid "Error initializing renderer" -msgstr "Erro ao inicializar o renderizador" - -msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "O renderizador OpenGL (Núcleo 3.0) não pôde ser inicializado. Use outro renderizador." - -msgid "Resume execution" -msgstr "Continuar a execução" - -msgid "Pause execution" -msgstr "Pausar a execução" - -msgid "Press Ctrl+Alt+Del" -msgstr "Pressionar Ctrl+Alt+Del" - -msgid "Press Ctrl+Alt+Esc" -msgstr "Pressionar Ctrl+Alt+Esc" - -msgid "Hard reset" -msgstr "Reinicialização completa" - -msgid "ACPI shutdown" -msgstr "Desligamento por ACPI" - -msgid "Hard disk (%s)" -msgstr "Disco rígido (%s)" - -msgid "%01i:%01i" -msgstr "%01i:%01i" - -msgid "%01i" -msgstr "%01i" - -msgid "MFM/RLL or ESDI CD-ROM drives never existed" -msgstr "As unidades de CD-ROM MFM/RLL ou ESDI nunca existiram" - -msgid "Custom..." -msgstr "Personalizado..." - -msgid "Custom (large)..." -msgstr "Personalizado (grande)..." - -msgid "Add New Hard Disk" -msgstr "Adicionar novo disco rígido" - -msgid "Add Existing Hard Disk" -msgstr "Adicionar disco rígido existente" - -msgid "HDI disk images cannot be larger than 4 GB." -msgstr "As imagens de disco HDI não podem ser maiores do que 4GB." - -msgid "Disk images cannot be larger than 127 GB." -msgstr "As imagens de disco não podem ser maiores do que 127GB." - -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Imagens de disco rígido (*.hd? *.im? *.vhd);;Todos os arquivos (*.*)" - -msgid "Unable to read file" -msgstr "Não foi possível ler o arquivo" - -msgid "Unable to write file" -msgstr "Não foi possível escrever o arquivo" - -msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "Imagens HDI ou HDX com um tamanho de setor que não seja 512 não são suportadas." - -msgid "USB is not yet supported" -msgstr "O USB ainda não é suportado" - -msgid "Disk image file already exists" -msgstr "Esta imagem existe" - -msgid "Please specify a valid file name." -msgstr "Digite um nome de arquivo válido." - -msgid "Disk image created" -msgstr "A imagem foi criada com sucesso" - -msgid "Make sure the file exists and is readable." -msgstr "Certifique-se de que o arquivo existe e é legível." - -msgid "Make sure the file is being saved to a writable directory." -msgstr "Certifique-se de que o arquivo está sendo salvo em um diretório gravável." - -msgid "Disk image too large" -msgstr "A imagem do disco é muito grande" - -msgid "Remember to partition and format the newly-created drive." -msgstr "Lembre-se de particionar e formatar a unidade recém-criada." - -msgid "The selected file will be overwritten. Are you sure you want to use it?" -msgstr "O arquivo selecionado será sobrescrito. Você tem certeza de que deseja usá-lo?" - -msgid "Unsupported disk image" -msgstr "Imagem de disco sem suporte" - -msgid "Overwrite" -msgstr "Sobrescrever" - -msgid "Don't overwrite" -msgstr "Não sobrescrever" - -msgid "Raw image (.img)" -msgstr "Imagem bruta (.img)" - -msgid "HDI image (.hdi)" -msgstr "Imagem HDI (.hdi)" - -msgid "HDX image (.hdx)" -msgstr "Imagem HDX (.hdx)" - -msgid "Fixed-size VHD (.vhd)" -msgstr "VHD de tamanho fixo (.vhd)" - -msgid "Dynamic-size VHD (.vhd)" -msgstr "VHD de tamanho dinâmico (.vhd)" - -msgid "Differencing VHD (.vhd)" -msgstr "VHD diferencial (.vhd)" - -msgid "Large blocks (2 MB)" -msgstr "Blocos grandes (2 MB)" - -msgid "Small blocks (512 KB)" -msgstr "Blocos pequenos (512 KB)" - -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "Arquivos VHD (*.vhd);;Todos os arquivos (*.*)" - -msgid "Select the parent VHD" -msgstr "Selecione o VHD pai" - -msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" -msgstr "Isto pode significar que a imagem de origem foi modificada após a criação da imagem diferencial.\n\nTambém pode acontecer caso os arquivos de imagem tenham sido movidos ou copiados, ou por um erro no programa que criou este disco.\n\nVocê quer consertar os marcadores de tempo?" - -msgid "Parent and child disk timestamps do not match" -msgstr "A data/hora dos arquivos de pais e filhos não correspondem" - -msgid "Could not fix VHD timestamp." -msgstr "Não foi possível consertar o carimbo de data/hora da VHD." - -msgid "%01i:%02i" -msgstr "%01i:%02i" - -msgid "MFM/RLL" -msgstr "MFM/RLL" - -msgid "XTA" -msgstr "XTA" - -msgid "ESDI" -msgstr "ESDI" - -msgid "IDE" -msgstr "IDE" - -msgid "ATAPI" -msgstr "ATAPI" - -msgid "MFM/RLL (%01i:%01i)" -msgstr "MFM/RLL (%01i:%01i)" - -msgid "XTA (%01i:%01i)" -msgstr "XTA (%01i:%01i)" - -msgid "ESDI (%01i:%01i)" -msgstr "ESDI (%01i:%01i)" - -msgid "IDE (%01i:%01i)" -msgstr "IDE (%01i:%01i)" - -msgid "ATAPI (%01i:%01i)" -msgstr "ATAPI (%01i:%01i)" - -msgid "SCSI (%01i:%02i)" -msgstr "SCSI (%01i:%02i)" - -msgid "CD-ROM %i (%s): %s" -msgstr "CD-ROM %i (%s): %s" - -msgid "160 kB" -msgstr "160 kB" - -msgid "180 kB" -msgstr "180 kB" - -msgid "320 kB" -msgstr "320 kB" - -msgid "360 kB" -msgstr "360 kB" - -msgid "640 kB" -msgstr "640 kB" - -msgid "720 kB" -msgstr "720 kB" - -msgid "1.2 MB" -msgstr "1.2 MB" - -msgid "1.25 MB" -msgstr "1.25 MB" - -msgid "1.44 MB" -msgstr "1.44 MB" - -msgid "DMF (cluster 1024)" -msgstr "DMF (cluster 1024)" - -msgid "DMF (cluster 2048)" -msgstr "DMF (cluster 2048)" - -msgid "2.88 MB" -msgstr "2.88 MB" - -msgid "ZIP 100" -msgstr "ZIP 100" - -msgid "3.5\" 128Mb M.O. (ISO 10090)" -msgstr "3.5\" 128Mb M.O. (ISO 10090)" - -msgid "3.5\" 230Mb M.O. (ISO 13963)" -msgstr "3.5\" 230Mb M.O. (ISO 13963)" - -msgid "3.5\" 540Mb M.O. (ISO 15498)" -msgstr "3.5\" 540Mb M.O. (ISO 15498)" - -msgid "3.5\" 640Mb M.O. (ISO 15498)" -msgstr "3.5\" 640Mb M.O. (ISO 15498)" - -msgid "3.5\" 1.3Gb M.O. (GigaMO)" -msgstr "3.5\" 1.3Gb M.O. (GigaMO)" - -msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" - -msgid "5.25\" 600Mb M.O." -msgstr "5.25\" 600Mb M.O." - -msgid "5.25\" 650Mb M.O." -msgstr "5.25\" 650Mb M.O." - -msgid "5.25\" 1Gb M.O." -msgstr "5.25\" 1Gb M.O." - -msgid "5.25\" 1.3Gb M.O." -msgstr "5.25\" 1.3Gb M.O." - -msgid "Perfect RPM" -msgstr "RPM perfeita" - -msgid "1%% below perfect RPM" -msgstr "1%% abaixo das RPM perfeita" - -msgid "1.5%% below perfect RPM" -msgstr "1.5%% abaixo das RPM perfeita" - -msgid "2%% below perfect RPM" -msgstr "2%% abaixo das RPM perfeita" - -msgid "(System Default)" -msgstr "(Padrão do sistema)" - +msgid "&Action" +msgstr "&Ação" + +msgid "&Keyboard requires capture" +msgstr "&Teclado requer captura" + +msgid "&Right CTRL is left ALT" +msgstr "CTRL &direito é o ALT esquerdo" + +msgid "&Hard Reset..." +msgstr "&Reinicialização completa..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Pausar" + +msgid "E&xit..." +msgstr "&Sair..." + +msgid "&View" +msgstr "&Exibir" + +msgid "&Hide status bar" +msgstr "&Ocultar barra de status" + +msgid "Hide &toolbar" +msgstr "Ocultar &barra de ferramenta" + +msgid "&Resizeable window" +msgstr "&Janela redimensionável" + +msgid "R&emember size && position" +msgstr "&Lembrar tamanho e posição" + +msgid "Re&nderer" +msgstr "&Renderizador" + +msgid "&SDL (Software)" +msgstr "&SDL (Software)" + +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardware)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (Núcleo 3.0)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "Especificar as dimensões..." + +msgid "F&orce 4:3 display ratio" +msgstr "F&orçar proporção de tela em 4:3" + +msgid "&Window scale factor" +msgstr "&Fator de redimensionamento da janela" + +msgid "&0.5x" +msgstr "&0,5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1,&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Método de filtragem" + +msgid "&Nearest" +msgstr "&Mais próximo" + +msgid "&Linear" +msgstr "&Linear" + +msgid "Hi&DPI scaling" +msgstr "Escala Hi&DPI" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Tela cheia\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Modo de &redimensionamento da tela cheia" + +msgid "&Full screen stretch" +msgstr "&Tela cheia esticada" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "Pixel&s quadrados (manter proporção)" + +msgid "&Integer scale" +msgstr "&Redimensionamento com valores inteiros" + +msgid "E&GA/(S)VGA settings" +msgstr "Configurações E&GA/(S)VGA" + +msgid "&Inverted VGA monitor" +msgstr "Monitor VGA &invertido" + +msgid "VGA screen &type" +msgstr "&Tipo de tela VGA" + +msgid "RGB &Color" +msgstr "&Cor RGB" + +msgid "&RGB Grayscale" +msgstr "Tons de cinza &RGB" + +msgid "&Amber monitor" +msgstr "Monitor &âmbar" + +msgid "&Green monitor" +msgstr "Monitor &verde" + +msgid "&White monitor" +msgstr "Monitor &branco" + +msgid "Grayscale &conversion type" +msgstr "Tipo de &conversão de tons de cinza" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Média" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "Overscan do CGA/PCjr/Tandy/E&GA/(S)VGA" + +msgid "Change contrast for &monochrome display" +msgstr "Alterar contraste para exibição &monocromática" + +msgid "&Media" +msgstr "&Mídia" + +msgid "&Tools" +msgstr "&Ferramentas" + +msgid "&Settings..." +msgstr "&Configurações..." + +msgid "&Update status bar icons" +msgstr "&Atualizar ícones da barra de status" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Capturar &tela\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Preferências..." + +msgid "Enable &Discord integration" +msgstr "Ativar integração com o &Discord" + +msgid "Sound &gain..." +msgstr "&Ganho de som..." + +msgid "Begin trace\tCtrl+T" +msgstr "Inicio do rastreamento\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Fim do rastreamento\tCtrl+T" + +msgid "&Logging" +msgstr "&Registros" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Ativar registros da BusLogic\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Ativar registros do CD-ROM\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Ativar registros do disquete (86F)\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Ativar registros do controlador de disquete\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Ativar registros da IDE\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Ativar registros da porta serial\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Ativar registros da rede\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Ponto de parada no registo\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "Despejo da RAM de &vídeo\tCtrl+F1" + +msgid "&Help" +msgstr "&Ajuda" + +msgid "&Documentation..." +msgstr "&Documentação..." + +msgid "&About 86Box..." +msgstr "&Sobre o 86Box..." + +msgid "&New image..." +msgstr "&Nova imagem..." + +msgid "&Existing image..." +msgstr "&Imagem existente..." + +msgid "Existing image (&Write-protected)..." +msgstr "Imagem existente (&protegida contra escrita)..." + +msgid "&Record" +msgstr "&Gravar" + +msgid "&Play" +msgstr "&Reproduzir" + +msgid "&Rewind to the beginning" +msgstr "&Rebobinar até o começo" + +msgid "&Fast forward to the end" +msgstr "&Avançar até o fim" + +msgid "E&ject" +msgstr "E&jetar" + +msgid "&Image..." +msgstr "&Imagem..." + +msgid "E&xport to 86F..." +msgstr "E&xportar para 86F..." + +msgid "&Mute" +msgstr "&Sem som" + +msgid "E&mpty" +msgstr "&Vazio" + +msgid "&Reload previous image" +msgstr "&Recarregar imagem anterior" + +msgid "&Image" +msgstr "&Imagem" + +msgid "Target &framerate" +msgstr "&Taxa de quadro pretendida" + +msgid "&Sync with video" +msgstr "&Sincronizar com vídeo" + +msgid "&25 fps" +msgstr "&25 qps" + +msgid "&30 fps" +msgstr "&30 qps" + +msgid "&50 fps" +msgstr "&50 qps" + +msgid "&60 fps" +msgstr "&60 qps" + +msgid "&75 fps" +msgstr "&75 qps" + +msgid "&VSync" +msgstr "Sincronização &vertical" + +msgid "&Select shader..." +msgstr "&Selecionar shader..." + +msgid "&Remove shader" +msgstr "&Remover shader" + +msgid "Preferences" +msgstr "Preferências" + +msgid "Sound Gain" +msgstr "Ganho de som" + +msgid "New Image" +msgstr "Nova imagem de disquete" + +msgid "Settings" +msgstr "Configurações" + +msgid "Specify Main Window Dimensions" +msgstr "Especifique as dimensões da janela principal" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Save these settings as &global defaults" +msgstr "Usar estas configurações como &padrões globais" + +msgid "&Default" +msgstr "&Padrão" + +msgid "Language:" +msgstr "Idioma:" + +msgid "Icon set:" +msgstr "Pacote de ícones:" + +msgid "Gain" +msgstr "Ganho" + +msgid "File name:" +msgstr "Nome:" + +msgid "Disk size:" +msgstr "Tamanho:" + +msgid "RPM mode:" +msgstr "Modo RPM:" + +msgid "Progress:" +msgstr "Progresso:" + +msgid "Width:" +msgstr "Largura:" + +msgid "Height:" +msgstr "Altura:" + +msgid "Lock to this size" +msgstr "Travar nesse tamanho" + +msgid "Machine type:" +msgstr "Tipo de máquina:" + +msgid "Machine:" +msgstr "Máquina:" + +msgid "Configure" +msgstr "Configurar" + +msgid "CPU type:" +msgstr "Tipo de CPU:" + +msgid "Speed:" +msgstr "Veloc.:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "Estados de espera:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Memória:" + +msgid "Time synchronization" +msgstr "Sincronização da hora" + +msgid "Disabled" +msgstr "Desativada" + +msgid "Enabled (local time)" +msgstr "Ativada (hora local)" + +msgid "Enabled (UTC)" +msgstr "Ativada (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Recompilador dinâmico" + +msgid "Video:" +msgstr "Vídeo:" + +msgid "Voodoo Graphics" +msgstr "3DFX Voodoo" + +msgid "Mouse:" +msgstr "Mouse:" + +msgid "Joystick:" +msgstr "Joystick:" + +msgid "Joystick 1..." +msgstr "Joystick 1..." + +msgid "Joystick 2..." +msgstr "Joystick 2..." + +msgid "Joystick 3..." +msgstr "Joystick 3..." + +msgid "Joystick 4..." +msgstr "Joystick 4..." + +msgid "Sound card:" +msgstr "Placa de som:" + +msgid "MIDI Out Device:" +msgstr "Disp. saída MIDI:" + +msgid "MIDI In Device:" +msgstr "Disp. entrada MIDI:" + +msgid "Standalone MPU-401" +msgstr "MPU-401 autônomo" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Usar som FLOAT32" + +msgid "Network type:" +msgstr "Tipo de rede:" + +msgid "PCap device:" +msgstr "Dispositivo PCap:" + +msgid "Network adapter:" +msgstr "Adaptador de rede:" + +msgid "LPT1 Device:" +msgstr "Dispositivo LPT1:" + +msgid "LPT2 Device:" +msgstr "Dispositivo LPT2:" + +msgid "LPT3 Device:" +msgstr "Dispositivo LPT3:" + +msgid "Serial port 1" +msgstr "Porta serial 1" + +msgid "Serial port 2" +msgstr "Porta serial 2" + +msgid "Serial port 3" +msgstr "Porta serial 3" + +msgid "Serial port 4" +msgstr "Porta serial 4" + +msgid "Parallel port 1" +msgstr "Porta paralela 1" + +msgid "Parallel port 2" +msgstr "Porta paralela 2" + +msgid "Parallel port 3" +msgstr "Porta paralela 3" + +msgid "HD Controller:" +msgstr "Controlador HD:" + +msgid "FD Controller:" +msgstr "Controlador FD:" + +msgid "Tertiary IDE Controller" +msgstr "Controlador IDE terciário" + +msgid "Quaternary IDE Controller" +msgstr "Controlador IDE quaternário" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Controlador 1:" + +msgid "Controller 2:" +msgstr "Controlador 2:" + +msgid "Controller 3:" +msgstr "Controlador 3:" + +msgid "Controller 4:" +msgstr "Controlador 4:" + +msgid "Cassette" +msgstr "Cassete" + +msgid "Hard disks:" +msgstr "Discos rígidos:" + +msgid "&New..." +msgstr "&Novo..." + +msgid "&Existing..." +msgstr "&Existente..." + +msgid "&Remove" +msgstr "&Remover" + +msgid "Bus:" +msgstr "Bar.:" + +msgid "Channel:" +msgstr "Canal:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Especificar..." + +msgid "Sectors:" +msgstr "Setores:" + +msgid "Heads:" +msgstr "Cabeças:" + +msgid "Cylinders:" +msgstr "Cilindros:" + +msgid "Size (MB):" +msgstr "Tamanho (MB):" + +msgid "Type:" +msgstr "Tipo:" + +msgid "Image Format:" +msgstr "Formato:" + +msgid "Block Size:" +msgstr "Bloco:" + +msgid "Floppy drives:" +msgstr "Unidades de disquete:" + +msgid "Turbo timings" +msgstr "Turbo" + +msgid "Check BPB" +msgstr "Verificar BPB" + +msgid "CD-ROM drives:" +msgstr "Unidades de CD-ROM:" + +msgid "MO drives:" +msgstr "Unidades magneto-ópticas:" + +msgid "ZIP drives:" +msgstr "Unidades ZIP:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "RTC ISA:" + +msgid "ISA Memory Expansion" +msgstr "Expansão de memória ISA" + +msgid "Card 1:" +msgstr "Placa 1:" + +msgid "Card 2:" +msgstr "Placa 2:" + +msgid "Card 3:" +msgstr "Placa 3:" + +msgid "Card 4:" +msgstr "Placa 4:" + +msgid "ISABugger device" +msgstr "Dispositivo ISABugger" + +msgid "POST card" +msgstr "Placa de diagnóstico" + +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Erro" + +msgid "Fatal error" +msgstr "Erro fatal" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Use CTRL+ALT+PAGE DOWN para retornar ao modo janela" + +msgid "Speed" +msgstr "Velocidade" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.im? *.zdi)" +msgstr "Imagens ZIP (*.im? *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "O 86Box não conseguiu encontrar nenhuma imagem de ROM utilizável.\n\nPor favor, baixe um conjunto de ROM e extraia no diretório \"roms\"." + +msgid "(empty)" +msgstr "(vazio)" + +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "Imagens ZIP (*.im? *.zdi);;Todos os arquivos (*.*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Lig." + +msgid "Off" +msgstr "Desl." + +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "Todas as imagens (*.86f *.dsk *.flp *.im? *.*fd?);;Imagens de setor básico (*.dsk *.flp *.im? *.img *.*fd?);;Imagens de superfície (*.86f)" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "A máquina \"%hs\" não está disponível devido à falta de ROMs no diretório roms/machines. Mudando para uma máquina disponível." + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "A placa de vídeo \"%hs\" não está disponível devido à falta de ROMs no diretório roms/video. Mudando para uma placa de vídeo disponível." + +msgid "Machine" +msgstr "Máquina" + +msgid "Display" +msgstr "Vídeo" + +msgid "Input devices" +msgstr "Dispositivos de entrada" + +msgid "Sound" +msgstr "Som" + +msgid "Network" +msgstr "Rede" + +msgid "Ports (COM & LPT)" +msgstr "Portas (COM & LPT)" + +msgid "Storage controllers" +msgstr "Controladores de armaz." + +msgid "Hard disks" +msgstr "Discos rígidos" + +msgid "Floppy & CD-ROM drives" +msgstr "Disquete & CD-ROM" + +msgid "Other removable devices" +msgstr "Dispos. removíveis" + +msgid "Other peripherals" +msgstr "Outros periféricos" + +msgid "Surface images (*.86f)" +msgstr "Imagens de superfície (*.86f)" + +msgid "Click to capture mouse" +msgstr "Clique para capturar o mouse" + +msgid "Press F8+F12 to release mouse" +msgstr "Aperte F8+F12 para liberar o mouse" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Aperte F8+F12 ou botão do meio para liberar o mouse" + +msgid "Unable to initialize FluidSynth" +msgstr "Não foi possível inicializar o FluidSynth" + +msgid "Bus" +msgstr "Barramento" + +msgid "File" +msgstr "Arquivo" + +msgid "C" +msgstr "CI" + +msgid "H" +msgstr "CA" + +msgid "S" +msgstr "SE" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Não foi possível inicializar o renderizador de vídeo." + +msgid "Default" +msgstr "Padrão" + +msgid "%i Wait state(s)" +msgstr "%i estado(s) de espera" + +msgid "Type" +msgstr "Tipo" + +msgid "Failed to set up PCap" +msgstr "Não foi possível configurar o PCap" + +msgid "No PCap devices found" +msgstr "Nenhum dispositivo PCap encontrado" + +msgid "Invalid PCap device" +msgstr "Dispositivo PCap inválido" + +msgid "Standard 2-button joystick(s)" +msgstr "Joystick padrão de 2 botões" + +msgid "Standard 4-button joystick" +msgstr "Joystick padrão de 4 botões" + +msgid "Standard 6-button joystick" +msgstr "Joystick padrão de 6 botões" + +msgid "Standard 8-button joystick" +msgstr "Joystick padrão de 8 botões" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Nada" + +msgid "Unable to load keyboard accelerators." +msgstr "Não foi possível carregar os aceleradores do teclado." + +msgid "Unable to register raw input." +msgstr "Não foi possível registrar a entrada bruta." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Disquete %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "Todas as imagens (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Imagens de setor avançado (*.imd *.json *.td0);;Imagens de setor básico (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Imagens de fluxo (*.fdi);;Imagens de superfície (*.86f *.mfm);;Todos os arquivos (*.*)" + +msgid "Unable to initialize FreeType" +msgstr "Não foi possível inicializar o FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Não é possível inicializar o SDL, é necessário o SDL2.dll" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Tem certeza de que deseja reiniciar completamente a máquina emulada?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Tem certeza de que deseja sair do 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Não é possível inicializar o Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "Magneto-óptico %i (%ls): %ls" + +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "Imagens magneto-ópticas (*.im? *.mdi);;Todos os arquivos (*.*)" + +msgid "Welcome to 86Box!" +msgstr "Bem-vindo ao 86Box!" + +msgid "Internal controller" +msgstr "Controlador interno" + +msgid "Exit" +msgstr "Sair" + +msgid "No ROMs found" +msgstr "Nenhum ROM encontrada" + +msgid "Do you want to save the settings?" +msgstr "Você deseja salvar as configurações?" + +msgid "This will hard reset the emulated machine." +msgstr "Isto fará com que a máquina emulada seja reinicializada." + +msgid "Save" +msgstr "Salvar" + +msgid "About 86Box" +msgstr "Sobre o 86Box" + +msgid "86Box v" +msgstr "86Box versão" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Um emulador de computadores antigos\n\nAutores: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, e outros.\n\nTraduzido por: Altieres Lima da Silva\n\nLançado sob a Licença Pública Geral GNU versão 2 ou posterior. Veja o arquivo LICENSE para mais informações." + +msgid "Hardware not available" +msgstr "Hardware não disponível" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Certifique-se de que libpcap esteja instalado e que você tenha uma conexão de rede compatível com libpcap." + +msgid "Invalid configuration" +msgstr "Configuração inválida" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " é necessário para emulação de impressora ESC/P." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " é necessário para a conversão automática de arquivos PostScript para PDF.\n\nQualquer documento enviado para a impressora genérica PostScript será salvo como arquivos PostScript (.ps)." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " é necessário para a saída MIDI FluidSynth." + +msgid "Entering fullscreen mode" +msgstr "Entrando no modo de tela cheia" + +msgid "Don't show this message again" +msgstr "Não exibir esta mensagem novamente" + +msgid "Don't exit" +msgstr "Não sair" + +msgid "Reset" +msgstr "Reiniciar" + +msgid "Don't reset" +msgstr "Não reiniciar" + +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "Imagens de CD-ROM (*.iso *.cue);;Todos os arquivos (*.*)" + +msgid "%hs Device Configuration" +msgstr "Configuração do dispositivo %hs" + +msgid "Monitor in sleep mode" +msgstr "Monitor em modo de suspensão" + +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "Shaders OpenGL (*.glsl);;Todos os arquivos (*.*)" + +msgid "OpenGL options" +msgstr "Opções do OpenGL" + +msgid "You are loading an unsupported configuration" +msgstr "Você está carregando uma configuração não suportada" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "A filtragem do tipo CPU baseada na máquina selecionada é desativada para esta máquina emulada.\n\nIsto torna possível escolher uma CPU que de outra forma seria incompatível com a máquina selecionada. Entretanto, você pode encontrar incompatibilidades com a BIOS da máquina ou outro software.\n\nA ativação desta configuração não é oficialmente suportada e qualquer relatório de erro arquivado pode ser fechado como inválido." + +msgid "Continue" +msgstr "Continuar" + +msgid "Cassette: %s" +msgstr "Cassete: %s" + +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Imagens de cassete (*.pcm *.raw *.wav *.cas);;Todos os arquivos (*.*)" + +msgid "Cartridge %i: %ls" +msgstr "Cartucho %i: %ls" + +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "Imagens de cartucho (*.a *.b *.jrc);;Todos os arquivos (*.*)" + +msgid "Error initializing renderer" +msgstr "Erro ao inicializar o renderizador" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "O renderizador OpenGL (Núcleo 3.0) não pôde ser inicializado. Use outro renderizador." + +msgid "Resume execution" +msgstr "Continuar a execução" + +msgid "Pause execution" +msgstr "Pausar a execução" + +msgid "Press Ctrl+Alt+Del" +msgstr "Pressionar Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Pressionar Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Reinicialização completa" + +msgid "ACPI shutdown" +msgstr "Desligamento por ACPI" + +msgid "Hard disk (%s)" +msgstr "Disco rígido (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "As unidades de CD-ROM MFM/RLL ou ESDI nunca existiram" + +msgid "Custom..." +msgstr "Personalizado..." + +msgid "Custom (large)..." +msgstr "Personalizado (grande)..." + +msgid "Add New Hard Disk" +msgstr "Adicionar novo disco rígido" + +msgid "Add Existing Hard Disk" +msgstr "Adicionar disco rígido existente" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "As imagens de disco HDI não podem ser maiores do que 4GB." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "As imagens de disco não podem ser maiores do que 127GB." + +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Imagens de disco rígido (*.hd? *.im? *.vhd);;Todos os arquivos (*.*)" + +msgid "Unable to read file" +msgstr "Não foi possível ler o arquivo" + +msgid "Unable to write file" +msgstr "Não foi possível escrever o arquivo" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "Imagens HDI ou HDX com um tamanho de setor que não seja 512 não são suportadas." + +msgid "USB is not yet supported" +msgstr "O USB ainda não é suportado" + +msgid "Disk image file already exists" +msgstr "Esta imagem existe" + +msgid "Please specify a valid file name." +msgstr "Digite um nome de arquivo válido." + +msgid "Disk image created" +msgstr "A imagem foi criada com sucesso" + +msgid "Make sure the file exists and is readable." +msgstr "Certifique-se de que o arquivo existe e é legível." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Certifique-se de que o arquivo está sendo salvo em um diretório gravável." + +msgid "Disk image too large" +msgstr "A imagem do disco é muito grande" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Lembre-se de particionar e formatar a unidade recém-criada." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "O arquivo selecionado será sobrescrito. Você tem certeza de que deseja usá-lo?" + +msgid "Unsupported disk image" +msgstr "Imagem de disco sem suporte" + +msgid "Overwrite" +msgstr "Sobrescrever" + +msgid "Don't overwrite" +msgstr "Não sobrescrever" + +msgid "Raw image (.img)" +msgstr "Imagem bruta (.img)" + +msgid "HDI image (.hdi)" +msgstr "Imagem HDI (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "Imagem HDX (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD de tamanho fixo (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD de tamanho dinâmico (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "VHD diferencial (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Blocos grandes (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Blocos pequenos (512 KB)" + +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "Arquivos VHD (*.vhd);;Todos os arquivos (*.*)" + +msgid "Select the parent VHD" +msgstr "Selecione o VHD pai" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Isto pode significar que a imagem de origem foi modificada após a criação da imagem diferencial.\n\nTambém pode acontecer caso os arquivos de imagem tenham sido movidos ou copiados, ou por um erro no programa que criou este disco.\n\nVocê quer consertar os marcadores de tempo?" + +msgid "Parent and child disk timestamps do not match" +msgstr "A data/hora dos arquivos de pais e filhos não correspondem" + +msgid "Could not fix VHD timestamp." +msgstr "Não foi possível consertar o carimbo de data/hora da VHD." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (cluster 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (cluster 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." + +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." + +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." + +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "RPM perfeita" + +msgid "1%% below perfect RPM" +msgstr "1%% abaixo das RPM perfeita" + +msgid "1.5%% below perfect RPM" +msgstr "1.5%% abaixo das RPM perfeita" + +msgid "2%% below perfect RPM" +msgstr "2%% abaixo das RPM perfeita" + +msgid "(System Default)" +msgstr "(Padrão do sistema)" + diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index 42626b6d5..b86eee86e 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -1,1191 +1,1191 @@ -msgid "&Action" -msgstr "&Ação" - -msgid "&Keyboard requires capture" -msgstr "&Teclado requere captura" - -msgid "&Right CTRL is left ALT" -msgstr "&CTRL direito é ALT esquerdo" - -msgid "&Hard Reset..." -msgstr "&Reinicialização completa..." - -msgid "&Ctrl+Alt+Del\tCtrl+F12" -msgstr "&Ctrl+Alt+Del\tCtrl+F12" - -msgid "Ctrl+Alt+&Esc" -msgstr "Ctrl+Alt+&Esc" - -msgid "&Pause" -msgstr "&Pausa" - -msgid "E&xit..." -msgstr "&Sair..." - -msgid "&View" -msgstr "&Ver" - -msgid "&Hide status bar" -msgstr "&Ocultar barra de estado" - -msgid "Hide &toolbar" -msgstr "Hide &toolbar" - -msgid "&Resizeable window" -msgstr "&Janela redimensionável" - -msgid "R&emember size && position" -msgstr "&Lembrar tamanho e posição" - -msgid "Re&nderer" -msgstr "&Renderizador" - -msgid "&SDL (Software)" -msgstr "&SDL (Software)" - -msgid "SDL (&Hardware)" -msgstr "SDL (&Hardware)" - -msgid "SDL (&OpenGL)" -msgstr "SDL (&OpenGL)" - -msgid "Open&GL (3.0 Core)" -msgstr "Open&GL (Núcleo 3.0)" - -msgid "&VNC" -msgstr "&VNC" - -msgid "Specify dimensions..." -msgstr "&Especificar dimensões..." - -msgid "F&orce 4:3 display ratio" -msgstr "&Forçar rácio de visualização 4:3" - -msgid "&Window scale factor" -msgstr "F&actor de escala de janela" - -msgid "&0.5x" -msgstr "&0.5x" - -msgid "&1x" -msgstr "&1x" - -msgid "1.&5x" -msgstr "1.&5x" - -msgid "&2x" -msgstr "&2x" - -msgid "Filter method" -msgstr "Método de filtragem" - -msgid "&Nearest" -msgstr "&Mais próximo" - -msgid "&Linear" -msgstr "&Linear" - -msgid "Hi&DPI scaling" -msgstr "Escala Hi&DPI" - -msgid "&Fullscreen\tCtrl+Alt+PageUP" -msgstr "E&crã cheio\tCtrl+Alt+PageUP" - -msgid "Fullscreen &stretch mode" -msgstr "Modo &de estiramento em ecrã cheio" - -msgid "&Full screen stretch" -msgstr "&Estiramento em ecrã cheio" - -msgid "&4:3" -msgstr "&4:3" - -msgid "&Square pixels (Keep ratio)" -msgstr "Pixels &quadrados (Manter rácio)" - -msgid "&Integer scale" -msgstr "Escala &inteira" - -msgid "E&GA/(S)VGA settings" -msgstr "Definições E&GA/(S)VGA" - -msgid "&Inverted VGA monitor" -msgstr "Monitor VGA &invertido" - -msgid "VGA screen &type" -msgstr "&Tipo de ecrã VGA" - -msgid "RGB &Color" -msgstr "&Cores RGB" - -msgid "&RGB Grayscale" -msgstr "&RGB em escala de cinzentos" - -msgid "&Amber monitor" -msgstr "Monitor âmb&ar" - -msgid "&Green monitor" -msgstr "Monitor &verde" - -msgid "&White monitor" -msgstr "Monitor &branco" - -msgid "Grayscale &conversion type" -msgstr "Tipo de &conversão para escala de cinzentos" - -msgid "BT&601 (NTSC/PAL)" -msgstr "BT&601 (NTSC/PAL)" - -msgid "BT&709 (HDTV)" -msgstr "BT&709 (HDTV)" - -msgid "&Average" -msgstr "&Media" - -msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" -msgstr "Overscan de CGA/PCjr/Tandy/E&GA/(S)VGA" - -msgid "Change contrast for &monochrome display" -msgstr "Mudar &contraste para ecrã monocromático" - -msgid "&Media" -msgstr "&Media" - -msgid "&Tools" -msgstr "&Ferramentas" - -msgid "&Settings..." -msgstr "&Definições..." - -msgid "&Update status bar icons" -msgstr "&Atualizar ícones da barra de estado" - -msgid "Take s&creenshot\tCtrl+F11" -msgstr "Gravar imagem de ecrã\tCtrl+F11" - -msgid "&Preferences..." -msgstr "&Preferências..." - -msgid "Enable &Discord integration" -msgstr "Ativar integração com &Discord" - -msgid "Sound &gain..." -msgstr "&Ganho de som..." - -msgid "Begin trace\tCtrl+T" -msgstr "Iniciar o rastreio\tCtrl+T" - -msgid "End trace\tCtrl+T" -msgstr "Terminar o rastreio\tCtrl+T" - -msgid "&Logging" -msgstr "&Registo" - -msgid "Enable BusLogic logs\tCtrl+F4" -msgstr "Ativar registo BusLogic\tCtrl+F4" - -msgid "Enable CD-ROM logs\tCtrl+F5" -msgstr "Ativar registo do CD-ROM\tCtrl+F5" - -msgid "Enable floppy (86F) logs\tCtrl+F6" -msgstr "Ativar registo de disquetes (86F)\tCtrl+F6" - -msgid "Enable floppy controller logs\tCtrl+F7" -msgstr "Ativar registo do controlador de disquetes\tCtrl+F7" - -msgid "Enable IDE logs\tCtrl+F8" -msgstr "Ativar registo IDE\tCtrl+F8" - -msgid "Enable Serial Port logs\tCtrl+F3" -msgstr "Ativar registo da porta série\tCtrl+F3" - -msgid "Enable Network logs\tCtrl+F9" -msgstr "Ativar registo de rede\tCtrl+F9" - -msgid "&Log breakpoint\tCtrl+F10" -msgstr "&Ponto de paragem no registo\tCtrl+F10" - -msgid "Dump &video RAM\tCtrl+F1" -msgstr "Despejo de RAM &vídeo\tCtrl+F1" - -msgid "&Help" -msgstr "&Ajuda" - -msgid "&Documentation..." -msgstr "&Documentação..." - -msgid "&About 86Box..." -msgstr "&Acerca do 86Box..." - -msgid "&New image..." -msgstr "&Nova imagem..." - -msgid "&Existing image..." -msgstr "Imagem &existente..." - -msgid "Existing image (&Write-protected)..." -msgstr "Imagem existente (&Proteção contra escrita)..." - -msgid "&Record" -msgstr "&Gravar" - -msgid "&Play" -msgstr "&Reproduzir" - -msgid "&Rewind to the beginning" -msgstr "Re&bobinar para o início" - -msgid "&Fast forward to the end" -msgstr "&Avanço rápido para o fim" - -msgid "E&ject" -msgstr "E&jetar" - -msgid "&Image..." -msgstr "&Imagem..." - -msgid "E&xport to 86F..." -msgstr "E&xportar para 86F..." - -msgid "&Mute" -msgstr "&Mute" - -msgid "E&mpty" -msgstr "&CDROM vazio" - -msgid "&Reload previous image" -msgstr "&Recarregar imagem anterior" - -msgid "&Image" -msgstr "&Imagem" - -msgid "Target &framerate" -msgstr "&Taxa de quadros de destino" - -msgid "&Sync with video" -msgstr "&Sincronizar com vídeo" - -msgid "&25 fps" -msgstr "&25 q/s" - -msgid "&30 fps" -msgstr "&30 q/s" - -msgid "&50 fps" -msgstr "&50 q/s" - -msgid "&60 fps" -msgstr "&60 q/s" - -msgid "&75 fps" -msgstr "&75 q/s" - -msgid "&VSync" -msgstr "&VSync" - -msgid "&Select shader..." -msgstr "&Selecionar shader..." - -msgid "&Remove shader" -msgstr "&Remover shader" - -msgid "Preferences" -msgstr "Preferências" - -msgid "Sound Gain" -msgstr "Ganho de som" - -msgid "New Image" -msgstr "Nova imagem" - -msgid "Settings" -msgstr "Definições" - -msgid "Specify Main Window Dimensions" -msgstr "Especificar dimensões da janela principal" - -msgid "OK" -msgstr "OK" - -msgid "Cancel" -msgstr "Cancelar" - -msgid "Save these settings as &global defaults" -msgstr "Guardar estas definições como padrões &globais" - -msgid "&Default" -msgstr "&Padrão" - -msgid "Language:" -msgstr "Idioma:" - -msgid "Icon set:" -msgstr "Pacote de ícones:" - -msgid "Gain" -msgstr "Ganho" - -msgid "File name:" -msgstr "Nome:" - -msgid "Disk size:" -msgstr "Tamanho:" - -msgid "RPM mode:" -msgstr "Modo RPM:" - -msgid "Progress:" -msgstr "Progresso:" - -msgid "Width:" -msgstr "Largura:" - -msgid "Height:" -msgstr "Altura:" - -msgid "Lock to this size" -msgstr "Fixar neste tamanho" - -msgid "Machine type:" -msgstr "Tipo de máquina:" - -msgid "Machine:" -msgstr "Máquina:" - -msgid "Configure" -msgstr "Configurar" - -msgid "CPU type:" -msgstr "Tipo do CPU:" - -msgid "Speed:" -msgstr "Velocidade:" - -msgid "FPU:" -msgstr "FPU:" - -msgid "Wait states:" -msgstr "Estados de espera:" - -msgid "MB" -msgstr "MB" - -msgid "Memory:" -msgstr "Memória:" - -msgid "Time synchronization" -msgstr "Sincronização da hora" - -msgid "Disabled" -msgstr "Desativada" - -msgid "Enabled (local time)" -msgstr "Ativada (hora local)" - -msgid "Enabled (UTC)" -msgstr "Ativada (UTC)" - -msgid "Dynamic Recompiler" -msgstr "Recompilador dinâmico" - -msgid "Video:" -msgstr "Vídeo:" - -msgid "Voodoo Graphics" -msgstr "Gráficos Voodoo" - -msgid "Mouse:" -msgstr "Rato:" - -msgid "Joystick:" -msgstr "Joystick:" - -msgid "Joystick 1..." -msgstr "Joystick 1..." - -msgid "Joystick 2..." -msgstr "Joystick 2..." - -msgid "Joystick 3..." -msgstr "Joystick 3..." - -msgid "Joystick 4..." -msgstr "Joystick 4..." - -msgid "Sound card:" -msgstr "Placa de som:" - -msgid "MIDI Out Device:" -msgstr "Disp. saída MIDI:" - -msgid "MIDI In Device:" -msgstr "Disp. entrada MIDI:" - -msgid "Standalone MPU-401" -msgstr "MPU-401 autónomo" - -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - -msgid "Use FLOAT32 sound" -msgstr "Utilizar som FLOAT32" - -msgid "Network type:" -msgstr "Tipo de rede:" - -msgid "PCap device:" -msgstr "Dispositivo PCap:" - -msgid "Network adapter:" -msgstr "Placa de rede:" - -msgid "LPT1 Device:" -msgstr "Dispositivo LPT1:" - -msgid "LPT2 Device:" -msgstr "Dispositivo LPT2:" - -msgid "LPT3 Device:" -msgstr "Dispositivo LPT3:" - -msgid "Serial port 1" -msgstr "Porta de série 1" - -msgid "Serial port 2" -msgstr "Porta de série 2" - -msgid "Serial port 3" -msgstr "Porta de série 3" - -msgid "Serial port 4" -msgstr "Porta de série 4" - -msgid "Parallel port 1" -msgstr "Porta paralela 1" - -msgid "Parallel port 2" -msgstr "Porta paralela 2" - -msgid "Parallel port 3" -msgstr "Porta paralela 3" - -msgid "HD Controller:" -msgstr "Controlador HD:" - -msgid "FD Controller:" -msgstr "Controlador FD:" - -msgid "Tertiary IDE Controller" -msgstr "Controlador IDE terciário" - -msgid "Quaternary IDE Controller" -msgstr "Controlador IDE quaternário" - -msgid "SCSI" -msgstr "SCSI" - -msgid "Controller 1:" -msgstr "Controlador 1:" - -msgid "Controller 2:" -msgstr "Controlador 2:" - -msgid "Controller 3:" -msgstr "Controlador 3:" - -msgid "Controller 4:" -msgstr "Controlador 4:" - -msgid "Cassette" -msgstr "Cassete" - -msgid "Hard disks:" -msgstr "Discos rígidos:" - -msgid "&New..." -msgstr "&Novo..." - -msgid "&Existing..." -msgstr "&Existente..." - -msgid "&Remove" -msgstr "&Remover" - -msgid "Bus:" -msgstr "Barram.:" - -msgid "Channel:" -msgstr "Canal:" - -msgid "ID:" -msgstr "ID:" - -msgid "&Specify..." -msgstr "&Especificar..." - -msgid "Sectors:" -msgstr "Sectores:" - -msgid "Heads:" -msgstr "Cabeças:" - -msgid "Cylinders:" -msgstr "Cilindros:" - -msgid "Size (MB):" -msgstr "Tamanho (MB):" - -msgid "Type:" -msgstr "Tipo:" - -msgid "Image Format:" -msgstr "Formato de imagem:" - -msgid "Block Size:" -msgstr "Tamanho de bloco:" - -msgid "Floppy drives:" -msgstr "Unidades de disquete:" - -msgid "Turbo timings" -msgstr "Velocidade turbo" - -msgid "Check BPB" -msgstr "Verificar BPB" - -msgid "CD-ROM drives:" -msgstr "Unidades CD-ROM:" - -msgid "MO drives:" -msgstr "Unidades magneto-ópticas:" - -msgid "ZIP drives:" -msgstr "Unidades ZIP:" - -msgid "ZIP 250" -msgstr "ZIP 250" - -msgid "ISA RTC:" -msgstr "ISA RTC:" - -msgid "ISA Memory Expansion" -msgstr "Expansão de memória ISA" - -msgid "Card 1:" -msgstr "Placa 1:" - -msgid "Card 2:" -msgstr "Placa 2:" - -msgid "Card 3:" -msgstr "Placa 3:" - -msgid "Card 4:" -msgstr "Placa 4:" - -msgid "ISABugger device" -msgstr "Dispositivo ISABugger" - -msgid "POST card" -msgstr "Placa POST" - -msgid "FONT_SIZE" -msgstr "9" - -msgid "FONT_NAME" -msgstr "Segoe UI" - -msgid "86Box" -msgstr "86Box" - -msgid "Error" -msgstr "Erro" - -msgid "Fatal error" -msgstr "Erro fatal" - -msgid "" -msgstr "" - -msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." -msgstr "Pressione CTRL+ALT+PAGE DOWN para voltar ao modo de janela." - -msgid "Speed" -msgstr "Velocidade" - -msgid "ZIP %03i %i (%s): %ls" -msgstr "ZIP %03i %i (%s): %ls" - -msgid "ZIP images (*.im? *.zdi)" -msgstr "Imagens ZIP (*.im? *.zdi)" - -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "O 86Box não conseguiu encontrar nenhuma imagem ROM utilizável.\n\nPor favor, vá a href=\"https://github.com/86Box/roms/releases/latest\">descarregue um pacote ROM e instale-o na pasta \"roms\"." - -msgid "(empty)" -msgstr "(empty)" - -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "Imagens ZIP (*.im? *.zdi);;Todos os ficheiros (*.*)" - -msgid "Turbo" -msgstr "Turbo" - -msgid "On" -msgstr "Ativado" - -msgid "Off" -msgstr "Desativado" - -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "Todas as imagens (*.86f *.dsk *.flp *.im? *.*fd?);;Imagens básicas de sector (*.dsk *.flp *.im? *.img *.*fd?);;Imagens de superfície (*.86f)" - -msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "A máquina \"%hs\" não está disponível devido à falta de ROMs na pasta roms/machines. A mudar para uma máquina disponível." - -msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "A placa vídeo \"%hs\" não está disponível devido à falta de ROMs na pasta roms/video. A mudar para uma placa vídeo disponível." - -msgid "Machine" -msgstr "Máquina" - -msgid "Display" -msgstr "Apresentação" - -msgid "Input devices" -msgstr "Dispositivos de entrada" - -msgid "Sound" -msgstr "Som" - -msgid "Network" -msgstr "Rede" - -msgid "Ports (COM & LPT)" -msgstr "Portas (COM e LPT)" - -msgid "Storage controllers" -msgstr "Dispositivos de armazenamento" - -msgid "Hard disks" -msgstr "Discos rígidos" - -msgid "Floppy & CD-ROM drives" -msgstr "Unidades de disquete e CD-ROM" - -msgid "Other removable devices" -msgstr "Outros dispostivos removíveis" - -msgid "Other peripherals" -msgstr "Outros dispositivos" - -msgid "Surface images (*.86f)" -msgstr "Imagens de superfície (*.86f)" - -msgid "Click to capture mouse" -msgstr "Clique para capturar o rato" - -msgid "Press F8+F12 to release mouse" -msgstr "Pressione F8+F12 para soltar o rato" - -msgid "Press F8+F12 or middle button to release mouse" -msgstr "Pressione F8+F12 ou tecla média para soltar o rato" - -msgid "Unable to initialize FluidSynth" -msgstr "Não foi possível inicializar o FluidSynth" - -msgid "Bus" -msgstr "Barramento" - -msgid "File" -msgstr "Ficheiro" - -msgid "C" -msgstr "C" - -msgid "H" -msgstr "C" - -msgid "S" -msgstr "S" - -msgid "KB" -msgstr "KB" - -msgid "Could not initialize the video renderer." -msgstr "Não foi possível inicializar o renderizador vídeo." - -msgid "Default" -msgstr "Padrão" - -msgid "%i Wait state(s)" -msgstr "%i estado(s) de espera" - -msgid "Type" -msgstr "Tipo" - -msgid "Failed to set up PCap" -msgstr "Falha na configuração de PCap" - -msgid "No PCap devices found" -msgstr "Não foi encontrado um dispositivo PCap" - -msgid "Invalid PCap device" -msgstr "Dispositivo PCap inválido" - -msgid "Standard 2-button joystick(s)" -msgstr "Joystick(s) standard de 2 botões" - -msgid "Standard 4-button joystick" -msgstr "Joystick(s) standard de 4 botões" - -msgid "Standard 6-button joystick" -msgstr "Joystick(s) standard de 6 botões" - -msgid "Standard 8-button joystick" -msgstr "Joystick(s) standard de 8 botões" - -msgid "CH Flightstick Pro" -msgstr "CH Flightstick Pro" - -msgid "Microsoft SideWinder Pad" -msgstr "Microsoft SideWinder Pad" - -msgid "Thrustmaster Flight Control System" -msgstr "Thrustmaster Flight Control System" - -msgid "None" -msgstr "Nenhum" - -msgid "Unable to load keyboard accelerators." -msgstr "Não foi possível inicializar os aceleradores de teclado." - -msgid "Unable to register raw input." -msgstr "Não foi possível registar a entrada bruta." - -msgid "%u" -msgstr "%u" - -msgid "%u MB (CHS: %i, %i, %i)" -msgstr "%u MB (CCS: %i, %i, %i)" - -msgid "Floppy %i (%s): %ls" -msgstr "Disquete %i (%s): %ls" - -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "Todas as imagens (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Imagens avançadas de sector (*.imd *.json *.td0);;Imagens básicas de sector (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Imagens de fluxo (*.fdi);;Imagens de superfície (*.86f *.mfm);;Todos os ficheiros (*.*)" - -msgid "Unable to initialize FreeType" -msgstr "Não foi possível inicializar o FreeType" - -msgid "Unable to initialize SDL, SDL2.dll is required" -msgstr "Não foi possível inicializar o SDL. O ficheiro SDL2.dll é necessário!" - -msgid "Are you sure you want to hard reset the emulated machine?" -msgstr "Tem a certeza de que quer um reinício completo da máquina emulada?" - -msgid "Are you sure you want to exit 86Box?" -msgstr "Tem a certeza de que quer sair do 86Box?" - -msgid "Unable to initialize Ghostscript" -msgstr "Não foi possível inicializar o Ghostscript" - -msgid "MO %i (%ls): %ls" -msgstr "Magneto-óptico %i (%ls): %ls" - -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "Imagens magneto-ópticas (*.im? *.mdi);;Todas as imagens (*.*)" - -msgid "Welcome to 86Box!" -msgstr "Bem-vindos ao 86Box!" - -msgid "Internal controller" -msgstr "Controlador interno" - -msgid "Exit" -msgstr "Sair" - -msgid "No ROMs found" -msgstr "Não foi encontrada nenhuma ROM" - -msgid "Do you want to save the settings?" -msgstr "Deseja guardar as definições?" - -msgid "This will hard reset the emulated machine." -msgstr "Isto irá causar um reinício completo da máquina emulada." - -msgid "Save" -msgstr "Guardar" - -msgid "About 86Box" -msgstr "Acerca do 86Box" - -msgid "86Box v" -msgstr "86Box v" - -msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "Um emulador de computadores antigos\n\nAutores: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nUsado sob a licença GNU General Public License versão 2 ou posterior. Veja o ficheiro LICENSE para mais informações." - -msgid "Hardware not available" -msgstr "Hardware não disponível" - -msgid "WinPcap" -msgstr "WinPcap" - -msgid "libpcap" -msgstr "libpcap" - -msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." -msgstr "Certifique-se de que a biblioteca libpcap está instalada e de que está a utilizar uma ligação de rede compatível com a biblioteca libpcap." - -msgid "Invalid configuration" -msgstr "Configuração inválida" - -msgid "freetype.dll" -msgstr "freetype.dll" - -msgid "libfreetype" -msgstr "libfreetype" - -msgid " is required for ESC/P printer emulation." -msgstr " é requerida para a emulação de impressora ESC/P." - -msgid "gsdll32.dll" -msgstr "gsdll32.dll" - -msgid "libgs" -msgstr "libgs" - -msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." -msgstr " é requerido para a conversão automática de ficheiros PostScript para ficheiros PDF.\n\nQualquer documento enviado para a impressora PostScript genérica será gravado como um ficheiro PostScript (.ps)." - -msgid "libfluidsynth.dll" -msgstr "libfluidsynth.dll" - -msgid "libfluidsynth" -msgstr "libfluidsynth" - -msgid " is required for FluidSynth MIDI output." -msgstr " é necessário para a saída MIDI FluidSynth MIDI." - -msgid "Entering fullscreen mode" -msgstr "A entrar no modo de ecrã cheio" - -msgid "Don't show this message again" -msgstr "Não mostrar mais esta mensagem" - -msgid "Don't exit" -msgstr "Não sair" - -msgid "Reset" -msgstr "Reiniciar" - -msgid "Don't reset" -msgstr "Não reiniciar" - -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "Imagens CD-ROM (*.iso *.cue);;Todos os ficheiros (*.*)" - -msgid "%hs Device Configuration" -msgstr "Configuração de dispositivo %hs" - -msgid "Monitor in sleep mode" -msgstr "Ecrã em modo de sono" - -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "Shaders OpenGL (*.glsl);;Todos os ficheiros (*.*)" - -msgid "OpenGL options" -msgstr "Opções de OpenGL" - -msgid "You are loading an unsupported configuration" -msgstr "Está a carregar uma configuração sem suporte!" - -msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "A filtragem do tipo de CPU baseada na máquina escolhida está desativada para esta máquina emulada.\n\nIsto torna possível escolher um CPU que, de outra forma, não seria compatível com a máquina escolhida. No entanto, pode não ser compatível com a BIOS da máquina ou outros programas.\n\nA activação desta definição não tem suporte oficial e qualquer relatório de erros pode ser fechado como inválido." - -msgid "Continue" -msgstr "Continuar" - -msgid "Cassette: %s" -msgstr "Cassete: %s" - -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Imagens de cassete (*.pcm *.raw *.wav *.cas);;Todos os ficheiros (*.*)" - -msgid "Cartridge %i: %ls" -msgstr "Cartucho %i: %ls" - -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "Imagens de cartucho (*.a *.b *.jrc);;Todos os ficheiros (*.*)" - -msgid "Error initializing renderer" -msgstr "Error initializing renderer" - -msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." - -msgid "Resume execution" -msgstr "Resume execution" - -msgid "Pause execution" -msgstr "Pause execution" - -msgid "Press Ctrl+Alt+Del" -msgstr "Press Ctrl+Alt+Del" - -msgid "Press Ctrl+Alt+Esc" -msgstr "Press Ctrl+Alt+Esc" - -msgid "Hard reset" -msgstr "Hard reset" - -msgid "ACPI shutdown" -msgstr "ACPI shutdown" - -msgid "Hard disk (%s)" -msgstr "Disco rígido (%s)" - -msgid "%01i:%01i" -msgstr "%01i:%01i" - -msgid "%01i" -msgstr "%01i" - -msgid "MFM/RLL or ESDI CD-ROM drives never existed" -msgstr "Unidades CD-ROM com barramento MFM/RLL ou ESDI nunca existiram!" - -msgid "Custom..." -msgstr "Personalizado..." - -msgid "Custom (large)..." -msgstr "Personalizado (grande)..." - -msgid "Add New Hard Disk" -msgstr "Adicionar novo disco rígido" - -msgid "Add Existing Hard Disk" -msgstr "Adicionar disco rígido existente" - -msgid "HDI disk images cannot be larger than 4 GB." -msgstr "As imagens de disco HDI não podem ter mais de 4 GB." - -msgid "Disk images cannot be larger than 127 GB." -msgstr "As imagens de disco não podem ter mais de 127 GB." - -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Imagens de disco rígido (*.hd? *.im? *.vhd);;Todos os ficheiros (*.*)" - -msgid "Unable to read file" -msgstr "Não foi possível ler o ficheiro" - -msgid "Unable to write file" -msgstr "Não foi possível escrever o ficheiro" - -msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "Imagens HDI ou HDX com um tamanho de sector diferente de 512 não são suportadas." - -msgid "USB is not yet supported" -msgstr "O barramento USB ainda não tem suporte" - -msgid "Disk image file already exists" -msgstr "A imagem de disco já existe" - -msgid "Please specify a valid file name." -msgstr "Por favor, especifique um nome de ficheiro válido." - -msgid "Disk image created" -msgstr "Imagem de disco criada" - -msgid "Make sure the file exists and is readable." -msgstr "Certifique-se de que o ficheiro existe e é legível." - -msgid "Make sure the file is being saved to a writable directory." -msgstr "Certifique-se de que o ficheiro está a ser guardado numa pasta editável." - -msgid "Disk image too large" -msgstr "Imagem de disco muito grande" - -msgid "Remember to partition and format the newly-created drive." -msgstr "Lembre-se de particionar e formatar o novo disco criado." - -msgid "The selected file will be overwritten. Are you sure you want to use it?" -msgstr "O ficheiro selecionado será sobrescrito. Tem a certeza de que quer utilizá-lo?" - -msgid "Unsupported disk image" -msgstr "Imagem de disco sem suporte" - -msgid "Overwrite" -msgstr "Sobrescrever" - -msgid "Don't overwrite" -msgstr "Não sobrescrever" - -msgid "Raw image (.img)" -msgstr "Imagem bruta (.img)" - -msgid "HDI image (.hdi)" -msgstr "Imagem HDI (.hdi)" - -msgid "HDX image (.hdx)" -msgstr "Imagem HDX (.hdx)" - -msgid "Fixed-size VHD (.vhd)" -msgstr "VHD com tamanho fixo (.vhd)" - -msgid "Dynamic-size VHD (.vhd)" -msgstr "VHD com tamanho dinâmico (.vhd)" - -msgid "Differencing VHD (.vhd)" -msgstr "VHD diferenciador (.vhd)" - -msgid "Large blocks (2 MB)" -msgstr "Blocos grandes (2 MB)" - -msgid "Small blocks (512 KB)" -msgstr "Blocos pequenos (512 KB)" - -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "Ficheiros VHD (*.vhd);;Todos os ficheiros (*.*)" - -msgid "Select the parent VHD" -msgstr "Seleccione o VHD pai" - -msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" -msgstr "Isto pode significar que a imagem pai foi modificada depois da criação da imagem diferenciadora.\n\nTambém pode acontecer se os ficheiros da imagem foram movidos ou copiados ou por causa de um erro no programa que criou este disco.\n\nQuer corrigir os carimbos de data/hora?" - -msgid "Parent and child disk timestamps do not match" -msgstr "Os carimbos de data/hora dos discos pai e filho não correspondem!" - -msgid "Could not fix VHD timestamp." -msgstr "Não foi possível corrigir o carimbo de data/hora do VHD." - -msgid "%01i:%02i" -msgstr "%01i:%02i" - -msgid "MFM/RLL" -msgstr "MFM/RLL" - -msgid "XTA" -msgstr "XTA" - -msgid "ESDI" -msgstr "ESDI" - -msgid "IDE" -msgstr "IDE" - -msgid "ATAPI" -msgstr "ATAPI" - -msgid "MFM/RLL (%01i:%01i)" -msgstr "MFM/RLL (%01i:%01i)" - -msgid "XTA (%01i:%01i)" -msgstr "XTA (%01i:%01i)" - -msgid "ESDI (%01i:%01i)" -msgstr "ESDI (%01i:%01i)" - -msgid "IDE (%01i:%01i)" -msgstr "IDE (%01i:%01i)" - -msgid "ATAPI (%01i:%01i)" -msgstr "ATAPI (%01i:%01i)" - -msgid "SCSI (%01i:%02i)" -msgstr "SCSI (%01i:%02i)" - -msgid "CD-ROM %i (%s): %s" -msgstr "CD-ROM %i (%s): %s" - -msgid "160 kB" -msgstr "160 kB" - -msgid "180 kB" -msgstr "180 kB" - -msgid "320 kB" -msgstr "320 kB" - -msgid "360 kB" -msgstr "360 kB" - -msgid "640 kB" -msgstr "640 kB" - -msgid "720 kB" -msgstr "720 kB" - -msgid "1.2 MB" -msgstr "1.2 MB" - -msgid "1.25 MB" -msgstr "1.25 MB" - -msgid "1.44 MB" -msgstr "1.44 MB" - -msgid "DMF (cluster 1024)" -msgstr "DMF (cluster 1024)" - -msgid "DMF (cluster 2048)" -msgstr "DMF (cluster 2048)" - -msgid "2.88 MB" -msgstr "2.88 MB" - -msgid "ZIP 100" -msgstr "ZIP 100" - -msgid "3.5\" 128Mb M.O. (ISO 10090)" -msgstr "3.5\" 128Mb M.O. (ISO 10090)" - -msgid "3.5\" 230Mb M.O. (ISO 13963)" -msgstr "3.5\" 230Mb M.O. (ISO 13963)" - -msgid "3.5\" 540Mb M.O. (ISO 15498)" -msgstr "3.5\" 540Mb M.O. (ISO 15498)" - -msgid "3.5\" 640Mb M.O. (ISO 15498)" -msgstr "3.5\" 640Mb M.O. (ISO 15498)" - -msgid "3.5\" 1.3Gb M.O. (GigaMO)" -msgstr "3.5\" 1.3Gb M.O. (GigaMO)" - -msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" - -msgid "5.25\" 600Mb M.O." -msgstr "5.25\" 600Mb M.O." - -msgid "5.25\" 650Mb M.O." -msgstr "5.25\" 650Mb M.O." - -msgid "5.25\" 1Gb M.O." -msgstr "5.25\" 1Gb M.O." - -msgid "5.25\" 1.3Gb M.O." -msgstr "5.25\" 1.3Gb M.O." - -msgid "Perfect RPM" -msgstr "RPM perfeito" - -msgid "1%% below perfect RPM" -msgstr "RPM 1%% abaixo do RPM perfeito" - -msgid "1.5%% below perfect RPM" -msgstr "RPM 1.5%% abaixo do RPM perfeito" - -msgid "2%% below perfect RPM" -msgstr "RPM 2%% abaixo do RPM perfeito" - -msgid "(System Default)" -msgstr "(Padrão do sistema)" - +msgid "&Action" +msgstr "&Ação" + +msgid "&Keyboard requires capture" +msgstr "&Teclado requere captura" + +msgid "&Right CTRL is left ALT" +msgstr "&CTRL direito é ALT esquerdo" + +msgid "&Hard Reset..." +msgstr "&Reinicialização completa..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Pausa" + +msgid "E&xit..." +msgstr "&Sair..." + +msgid "&View" +msgstr "&Ver" + +msgid "&Hide status bar" +msgstr "&Ocultar barra de estado" + +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + +msgid "&Resizeable window" +msgstr "&Janela redimensionável" + +msgid "R&emember size && position" +msgstr "&Lembrar tamanho e posição" + +msgid "Re&nderer" +msgstr "&Renderizador" + +msgid "&SDL (Software)" +msgstr "&SDL (Software)" + +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardware)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (Núcleo 3.0)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "&Especificar dimensões..." + +msgid "F&orce 4:3 display ratio" +msgstr "&Forçar rácio de visualização 4:3" + +msgid "&Window scale factor" +msgstr "F&actor de escala de janela" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Método de filtragem" + +msgid "&Nearest" +msgstr "&Mais próximo" + +msgid "&Linear" +msgstr "&Linear" + +msgid "Hi&DPI scaling" +msgstr "Escala Hi&DPI" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "E&crã cheio\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Modo &de estiramento em ecrã cheio" + +msgid "&Full screen stretch" +msgstr "&Estiramento em ecrã cheio" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "Pixels &quadrados (Manter rácio)" + +msgid "&Integer scale" +msgstr "Escala &inteira" + +msgid "E&GA/(S)VGA settings" +msgstr "Definições E&GA/(S)VGA" + +msgid "&Inverted VGA monitor" +msgstr "Monitor VGA &invertido" + +msgid "VGA screen &type" +msgstr "&Tipo de ecrã VGA" + +msgid "RGB &Color" +msgstr "&Cores RGB" + +msgid "&RGB Grayscale" +msgstr "&RGB em escala de cinzentos" + +msgid "&Amber monitor" +msgstr "Monitor âmb&ar" + +msgid "&Green monitor" +msgstr "Monitor &verde" + +msgid "&White monitor" +msgstr "Monitor &branco" + +msgid "Grayscale &conversion type" +msgstr "Tipo de &conversão para escala de cinzentos" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Media" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "Overscan de CGA/PCjr/Tandy/E&GA/(S)VGA" + +msgid "Change contrast for &monochrome display" +msgstr "Mudar &contraste para ecrã monocromático" + +msgid "&Media" +msgstr "&Media" + +msgid "&Tools" +msgstr "&Ferramentas" + +msgid "&Settings..." +msgstr "&Definições..." + +msgid "&Update status bar icons" +msgstr "&Atualizar ícones da barra de estado" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Gravar imagem de ecrã\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Preferências..." + +msgid "Enable &Discord integration" +msgstr "Ativar integração com &Discord" + +msgid "Sound &gain..." +msgstr "&Ganho de som..." + +msgid "Begin trace\tCtrl+T" +msgstr "Iniciar o rastreio\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Terminar o rastreio\tCtrl+T" + +msgid "&Logging" +msgstr "&Registo" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Ativar registo BusLogic\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Ativar registo do CD-ROM\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Ativar registo de disquetes (86F)\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Ativar registo do controlador de disquetes\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Ativar registo IDE\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Ativar registo da porta série\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Ativar registo de rede\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Ponto de paragem no registo\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "Despejo de RAM &vídeo\tCtrl+F1" + +msgid "&Help" +msgstr "&Ajuda" + +msgid "&Documentation..." +msgstr "&Documentação..." + +msgid "&About 86Box..." +msgstr "&Acerca do 86Box..." + +msgid "&New image..." +msgstr "&Nova imagem..." + +msgid "&Existing image..." +msgstr "Imagem &existente..." + +msgid "Existing image (&Write-protected)..." +msgstr "Imagem existente (&Proteção contra escrita)..." + +msgid "&Record" +msgstr "&Gravar" + +msgid "&Play" +msgstr "&Reproduzir" + +msgid "&Rewind to the beginning" +msgstr "Re&bobinar para o início" + +msgid "&Fast forward to the end" +msgstr "&Avanço rápido para o fim" + +msgid "E&ject" +msgstr "E&jetar" + +msgid "&Image..." +msgstr "&Imagem..." + +msgid "E&xport to 86F..." +msgstr "E&xportar para 86F..." + +msgid "&Mute" +msgstr "&Mute" + +msgid "E&mpty" +msgstr "&CDROM vazio" + +msgid "&Reload previous image" +msgstr "&Recarregar imagem anterior" + +msgid "&Image" +msgstr "&Imagem" + +msgid "Target &framerate" +msgstr "&Taxa de quadros de destino" + +msgid "&Sync with video" +msgstr "&Sincronizar com vídeo" + +msgid "&25 fps" +msgstr "&25 q/s" + +msgid "&30 fps" +msgstr "&30 q/s" + +msgid "&50 fps" +msgstr "&50 q/s" + +msgid "&60 fps" +msgstr "&60 q/s" + +msgid "&75 fps" +msgstr "&75 q/s" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Selecionar shader..." + +msgid "&Remove shader" +msgstr "&Remover shader" + +msgid "Preferences" +msgstr "Preferências" + +msgid "Sound Gain" +msgstr "Ganho de som" + +msgid "New Image" +msgstr "Nova imagem" + +msgid "Settings" +msgstr "Definições" + +msgid "Specify Main Window Dimensions" +msgstr "Especificar dimensões da janela principal" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Save these settings as &global defaults" +msgstr "Guardar estas definições como padrões &globais" + +msgid "&Default" +msgstr "&Padrão" + +msgid "Language:" +msgstr "Idioma:" + +msgid "Icon set:" +msgstr "Pacote de ícones:" + +msgid "Gain" +msgstr "Ganho" + +msgid "File name:" +msgstr "Nome:" + +msgid "Disk size:" +msgstr "Tamanho:" + +msgid "RPM mode:" +msgstr "Modo RPM:" + +msgid "Progress:" +msgstr "Progresso:" + +msgid "Width:" +msgstr "Largura:" + +msgid "Height:" +msgstr "Altura:" + +msgid "Lock to this size" +msgstr "Fixar neste tamanho" + +msgid "Machine type:" +msgstr "Tipo de máquina:" + +msgid "Machine:" +msgstr "Máquina:" + +msgid "Configure" +msgstr "Configurar" + +msgid "CPU type:" +msgstr "Tipo do CPU:" + +msgid "Speed:" +msgstr "Velocidade:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "Estados de espera:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Memória:" + +msgid "Time synchronization" +msgstr "Sincronização da hora" + +msgid "Disabled" +msgstr "Desativada" + +msgid "Enabled (local time)" +msgstr "Ativada (hora local)" + +msgid "Enabled (UTC)" +msgstr "Ativada (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Recompilador dinâmico" + +msgid "Video:" +msgstr "Vídeo:" + +msgid "Voodoo Graphics" +msgstr "Gráficos Voodoo" + +msgid "Mouse:" +msgstr "Rato:" + +msgid "Joystick:" +msgstr "Joystick:" + +msgid "Joystick 1..." +msgstr "Joystick 1..." + +msgid "Joystick 2..." +msgstr "Joystick 2..." + +msgid "Joystick 3..." +msgstr "Joystick 3..." + +msgid "Joystick 4..." +msgstr "Joystick 4..." + +msgid "Sound card:" +msgstr "Placa de som:" + +msgid "MIDI Out Device:" +msgstr "Disp. saída MIDI:" + +msgid "MIDI In Device:" +msgstr "Disp. entrada MIDI:" + +msgid "Standalone MPU-401" +msgstr "MPU-401 autónomo" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Utilizar som FLOAT32" + +msgid "Network type:" +msgstr "Tipo de rede:" + +msgid "PCap device:" +msgstr "Dispositivo PCap:" + +msgid "Network adapter:" +msgstr "Placa de rede:" + +msgid "LPT1 Device:" +msgstr "Dispositivo LPT1:" + +msgid "LPT2 Device:" +msgstr "Dispositivo LPT2:" + +msgid "LPT3 Device:" +msgstr "Dispositivo LPT3:" + +msgid "Serial port 1" +msgstr "Porta de série 1" + +msgid "Serial port 2" +msgstr "Porta de série 2" + +msgid "Serial port 3" +msgstr "Porta de série 3" + +msgid "Serial port 4" +msgstr "Porta de série 4" + +msgid "Parallel port 1" +msgstr "Porta paralela 1" + +msgid "Parallel port 2" +msgstr "Porta paralela 2" + +msgid "Parallel port 3" +msgstr "Porta paralela 3" + +msgid "HD Controller:" +msgstr "Controlador HD:" + +msgid "FD Controller:" +msgstr "Controlador FD:" + +msgid "Tertiary IDE Controller" +msgstr "Controlador IDE terciário" + +msgid "Quaternary IDE Controller" +msgstr "Controlador IDE quaternário" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Controlador 1:" + +msgid "Controller 2:" +msgstr "Controlador 2:" + +msgid "Controller 3:" +msgstr "Controlador 3:" + +msgid "Controller 4:" +msgstr "Controlador 4:" + +msgid "Cassette" +msgstr "Cassete" + +msgid "Hard disks:" +msgstr "Discos rígidos:" + +msgid "&New..." +msgstr "&Novo..." + +msgid "&Existing..." +msgstr "&Existente..." + +msgid "&Remove" +msgstr "&Remover" + +msgid "Bus:" +msgstr "Barram.:" + +msgid "Channel:" +msgstr "Canal:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Especificar..." + +msgid "Sectors:" +msgstr "Sectores:" + +msgid "Heads:" +msgstr "Cabeças:" + +msgid "Cylinders:" +msgstr "Cilindros:" + +msgid "Size (MB):" +msgstr "Tamanho (MB):" + +msgid "Type:" +msgstr "Tipo:" + +msgid "Image Format:" +msgstr "Formato de imagem:" + +msgid "Block Size:" +msgstr "Tamanho de bloco:" + +msgid "Floppy drives:" +msgstr "Unidades de disquete:" + +msgid "Turbo timings" +msgstr "Velocidade turbo" + +msgid "Check BPB" +msgstr "Verificar BPB" + +msgid "CD-ROM drives:" +msgstr "Unidades CD-ROM:" + +msgid "MO drives:" +msgstr "Unidades magneto-ópticas:" + +msgid "ZIP drives:" +msgstr "Unidades ZIP:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA RTC:" + +msgid "ISA Memory Expansion" +msgstr "Expansão de memória ISA" + +msgid "Card 1:" +msgstr "Placa 1:" + +msgid "Card 2:" +msgstr "Placa 2:" + +msgid "Card 3:" +msgstr "Placa 3:" + +msgid "Card 4:" +msgstr "Placa 4:" + +msgid "ISABugger device" +msgstr "Dispositivo ISABugger" + +msgid "POST card" +msgstr "Placa POST" + +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Erro" + +msgid "Fatal error" +msgstr "Erro fatal" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Pressione CTRL+ALT+PAGE DOWN para voltar ao modo de janela." + +msgid "Speed" +msgstr "Velocidade" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.im? *.zdi)" +msgstr "Imagens ZIP (*.im? *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "O 86Box não conseguiu encontrar nenhuma imagem ROM utilizável.\n\nPor favor, vá a href=\"https://github.com/86Box/roms/releases/latest\">descarregue um pacote ROM e instale-o na pasta \"roms\"." + +msgid "(empty)" +msgstr "(empty)" + +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "Imagens ZIP (*.im? *.zdi);;Todos os ficheiros (*.*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Ativado" + +msgid "Off" +msgstr "Desativado" + +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "Todas as imagens (*.86f *.dsk *.flp *.im? *.*fd?);;Imagens básicas de sector (*.dsk *.flp *.im? *.img *.*fd?);;Imagens de superfície (*.86f)" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "A máquina \"%hs\" não está disponível devido à falta de ROMs na pasta roms/machines. A mudar para uma máquina disponível." + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "A placa vídeo \"%hs\" não está disponível devido à falta de ROMs na pasta roms/video. A mudar para uma placa vídeo disponível." + +msgid "Machine" +msgstr "Máquina" + +msgid "Display" +msgstr "Apresentação" + +msgid "Input devices" +msgstr "Dispositivos de entrada" + +msgid "Sound" +msgstr "Som" + +msgid "Network" +msgstr "Rede" + +msgid "Ports (COM & LPT)" +msgstr "Portas (COM e LPT)" + +msgid "Storage controllers" +msgstr "Dispositivos de armazenamento" + +msgid "Hard disks" +msgstr "Discos rígidos" + +msgid "Floppy & CD-ROM drives" +msgstr "Unidades de disquete e CD-ROM" + +msgid "Other removable devices" +msgstr "Outros dispostivos removíveis" + +msgid "Other peripherals" +msgstr "Outros dispositivos" + +msgid "Surface images (*.86f)" +msgstr "Imagens de superfície (*.86f)" + +msgid "Click to capture mouse" +msgstr "Clique para capturar o rato" + +msgid "Press F8+F12 to release mouse" +msgstr "Pressione F8+F12 para soltar o rato" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Pressione F8+F12 ou tecla média para soltar o rato" + +msgid "Unable to initialize FluidSynth" +msgstr "Não foi possível inicializar o FluidSynth" + +msgid "Bus" +msgstr "Barramento" + +msgid "File" +msgstr "Ficheiro" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "C" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Não foi possível inicializar o renderizador vídeo." + +msgid "Default" +msgstr "Padrão" + +msgid "%i Wait state(s)" +msgstr "%i estado(s) de espera" + +msgid "Type" +msgstr "Tipo" + +msgid "Failed to set up PCap" +msgstr "Falha na configuração de PCap" + +msgid "No PCap devices found" +msgstr "Não foi encontrado um dispositivo PCap" + +msgid "Invalid PCap device" +msgstr "Dispositivo PCap inválido" + +msgid "Standard 2-button joystick(s)" +msgstr "Joystick(s) standard de 2 botões" + +msgid "Standard 4-button joystick" +msgstr "Joystick(s) standard de 4 botões" + +msgid "Standard 6-button joystick" +msgstr "Joystick(s) standard de 6 botões" + +msgid "Standard 8-button joystick" +msgstr "Joystick(s) standard de 8 botões" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Nenhum" + +msgid "Unable to load keyboard accelerators." +msgstr "Não foi possível inicializar os aceleradores de teclado." + +msgid "Unable to register raw input." +msgstr "Não foi possível registar a entrada bruta." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CCS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Disquete %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "Todas as imagens (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Imagens avançadas de sector (*.imd *.json *.td0);;Imagens básicas de sector (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Imagens de fluxo (*.fdi);;Imagens de superfície (*.86f *.mfm);;Todos os ficheiros (*.*)" + +msgid "Unable to initialize FreeType" +msgstr "Não foi possível inicializar o FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Não foi possível inicializar o SDL. O ficheiro SDL2.dll é necessário!" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Tem a certeza de que quer um reinício completo da máquina emulada?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Tem a certeza de que quer sair do 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Não foi possível inicializar o Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "Magneto-óptico %i (%ls): %ls" + +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "Imagens magneto-ópticas (*.im? *.mdi);;Todas as imagens (*.*)" + +msgid "Welcome to 86Box!" +msgstr "Bem-vindos ao 86Box!" + +msgid "Internal controller" +msgstr "Controlador interno" + +msgid "Exit" +msgstr "Sair" + +msgid "No ROMs found" +msgstr "Não foi encontrada nenhuma ROM" + +msgid "Do you want to save the settings?" +msgstr "Deseja guardar as definições?" + +msgid "This will hard reset the emulated machine." +msgstr "Isto irá causar um reinício completo da máquina emulada." + +msgid "Save" +msgstr "Guardar" + +msgid "About 86Box" +msgstr "Acerca do 86Box" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Um emulador de computadores antigos\n\nAutores: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nUsado sob a licença GNU General Public License versão 2 ou posterior. Veja o ficheiro LICENSE para mais informações." + +msgid "Hardware not available" +msgstr "Hardware não disponível" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Certifique-se de que a biblioteca libpcap está instalada e de que está a utilizar uma ligação de rede compatível com a biblioteca libpcap." + +msgid "Invalid configuration" +msgstr "Configuração inválida" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " é requerida para a emulação de impressora ESC/P." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " é requerido para a conversão automática de ficheiros PostScript para ficheiros PDF.\n\nQualquer documento enviado para a impressora PostScript genérica será gravado como um ficheiro PostScript (.ps)." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " é necessário para a saída MIDI FluidSynth MIDI." + +msgid "Entering fullscreen mode" +msgstr "A entrar no modo de ecrã cheio" + +msgid "Don't show this message again" +msgstr "Não mostrar mais esta mensagem" + +msgid "Don't exit" +msgstr "Não sair" + +msgid "Reset" +msgstr "Reiniciar" + +msgid "Don't reset" +msgstr "Não reiniciar" + +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "Imagens CD-ROM (*.iso *.cue);;Todos os ficheiros (*.*)" + +msgid "%hs Device Configuration" +msgstr "Configuração de dispositivo %hs" + +msgid "Monitor in sleep mode" +msgstr "Ecrã em modo de sono" + +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "Shaders OpenGL (*.glsl);;Todos os ficheiros (*.*)" + +msgid "OpenGL options" +msgstr "Opções de OpenGL" + +msgid "You are loading an unsupported configuration" +msgstr "Está a carregar uma configuração sem suporte!" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "A filtragem do tipo de CPU baseada na máquina escolhida está desativada para esta máquina emulada.\n\nIsto torna possível escolher um CPU que, de outra forma, não seria compatível com a máquina escolhida. No entanto, pode não ser compatível com a BIOS da máquina ou outros programas.\n\nA activação desta definição não tem suporte oficial e qualquer relatório de erros pode ser fechado como inválido." + +msgid "Continue" +msgstr "Continuar" + +msgid "Cassette: %s" +msgstr "Cassete: %s" + +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Imagens de cassete (*.pcm *.raw *.wav *.cas);;Todos os ficheiros (*.*)" + +msgid "Cartridge %i: %ls" +msgstr "Cartucho %i: %ls" + +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "Imagens de cartucho (*.a *.b *.jrc);;Todos os ficheiros (*.*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + +msgid "Hard disk (%s)" +msgstr "Disco rígido (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "Unidades CD-ROM com barramento MFM/RLL ou ESDI nunca existiram!" + +msgid "Custom..." +msgstr "Personalizado..." + +msgid "Custom (large)..." +msgstr "Personalizado (grande)..." + +msgid "Add New Hard Disk" +msgstr "Adicionar novo disco rígido" + +msgid "Add Existing Hard Disk" +msgstr "Adicionar disco rígido existente" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "As imagens de disco HDI não podem ter mais de 4 GB." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "As imagens de disco não podem ter mais de 127 GB." + +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Imagens de disco rígido (*.hd? *.im? *.vhd);;Todos os ficheiros (*.*)" + +msgid "Unable to read file" +msgstr "Não foi possível ler o ficheiro" + +msgid "Unable to write file" +msgstr "Não foi possível escrever o ficheiro" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "Imagens HDI ou HDX com um tamanho de sector diferente de 512 não são suportadas." + +msgid "USB is not yet supported" +msgstr "O barramento USB ainda não tem suporte" + +msgid "Disk image file already exists" +msgstr "A imagem de disco já existe" + +msgid "Please specify a valid file name." +msgstr "Por favor, especifique um nome de ficheiro válido." + +msgid "Disk image created" +msgstr "Imagem de disco criada" + +msgid "Make sure the file exists and is readable." +msgstr "Certifique-se de que o ficheiro existe e é legível." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Certifique-se de que o ficheiro está a ser guardado numa pasta editável." + +msgid "Disk image too large" +msgstr "Imagem de disco muito grande" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Lembre-se de particionar e formatar o novo disco criado." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "O ficheiro selecionado será sobrescrito. Tem a certeza de que quer utilizá-lo?" + +msgid "Unsupported disk image" +msgstr "Imagem de disco sem suporte" + +msgid "Overwrite" +msgstr "Sobrescrever" + +msgid "Don't overwrite" +msgstr "Não sobrescrever" + +msgid "Raw image (.img)" +msgstr "Imagem bruta (.img)" + +msgid "HDI image (.hdi)" +msgstr "Imagem HDI (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "Imagem HDX (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD com tamanho fixo (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD com tamanho dinâmico (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "VHD diferenciador (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Blocos grandes (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Blocos pequenos (512 KB)" + +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "Ficheiros VHD (*.vhd);;Todos os ficheiros (*.*)" + +msgid "Select the parent VHD" +msgstr "Seleccione o VHD pai" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Isto pode significar que a imagem pai foi modificada depois da criação da imagem diferenciadora.\n\nTambém pode acontecer se os ficheiros da imagem foram movidos ou copiados ou por causa de um erro no programa que criou este disco.\n\nQuer corrigir os carimbos de data/hora?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Os carimbos de data/hora dos discos pai e filho não correspondem!" + +msgid "Could not fix VHD timestamp." +msgstr "Não foi possível corrigir o carimbo de data/hora do VHD." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (cluster 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (cluster 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." + +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." + +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." + +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "RPM perfeito" + +msgid "1%% below perfect RPM" +msgstr "RPM 1%% abaixo do RPM perfeito" + +msgid "1.5%% below perfect RPM" +msgstr "RPM 1.5%% abaixo do RPM perfeito" + +msgid "2%% below perfect RPM" +msgstr "RPM 2%% abaixo do RPM perfeito" + +msgid "(System Default)" +msgstr "(Padrão do sistema)" + diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index cb7c0b792..e1acd068a 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -1,1191 +1,1191 @@ -msgid "&Action" -msgstr "&Действие" - -msgid "&Keyboard requires capture" -msgstr "&Клавиатура требует захвата" - -msgid "&Right CTRL is left ALT" -msgstr "&Правый CTRL - это левый ALT" - -msgid "&Hard Reset..." -msgstr "&Холодная перезагрузка..." - -msgid "&Ctrl+Alt+Del\tCtrl+F12" -msgstr "&Ctrl+Alt+Del\tCtrl+F12" - -msgid "Ctrl+Alt+&Esc" -msgstr "Ctrl+Alt+&Esc" - -msgid "&Pause" -msgstr "&Пауза" - -msgid "E&xit..." -msgstr "&Выход..." - -msgid "&View" -msgstr "&Вид" - -msgid "&Hide status bar" -msgstr "&Скрыть строку статуса" - -msgid "Hide &toolbar" -msgstr "Hide &toolbar" - -msgid "&Resizeable window" -msgstr "&Изменяемый размер окна" - -msgid "R&emember size && position" -msgstr "&Запомнить размер и положение" - -msgid "Re&nderer" -msgstr "&Рендерер" - -msgid "&SDL (Software)" -msgstr "&SDL (Software)" - -msgid "SDL (&Hardware)" -msgstr "SDL (&Hardware)" - -msgid "SDL (&OpenGL)" -msgstr "SDL (&OpenGL)" - -msgid "Open&GL (3.0 Core)" -msgstr "Open&GL (3.0)" - -msgid "&VNC" -msgstr "&VNC" - -msgid "Specify dimensions..." -msgstr "&Указать размеры..." - -msgid "F&orce 4:3 display ratio" -msgstr "У&становить соотношение сторон 4:3" - -msgid "&Window scale factor" -msgstr "&Масштаб окна" - -msgid "&0.5x" -msgstr "&0.5x" - -msgid "&1x" -msgstr "&1x" - -msgid "1.&5x" -msgstr "1.&5x" - -msgid "&2x" -msgstr "&2x" - -msgid "Filter method" -msgstr "Метод фильтрации" - -msgid "&Nearest" -msgstr "&Ближайший" - -msgid "&Linear" -msgstr "&Линейный" - -msgid "Hi&DPI scaling" -msgstr "Масштабирование Hi&DPI" - -msgid "&Fullscreen\tCtrl+Alt+PageUP" -msgstr "&Полноэкранный режим\tCtrl+Alt+PageUP" - -msgid "Fullscreen &stretch mode" -msgstr "&Растягивание в полноэкранном режиме" - -msgid "&Full screen stretch" -msgstr "&На весь экран" - -msgid "&4:3" -msgstr "&4:3" - -msgid "&Square pixels (Keep ratio)" -msgstr "&Квадратные пиксели (сохранить соотношение)" - -msgid "&Integer scale" -msgstr "&Целочисленное масштабирование" - -msgid "E&GA/(S)VGA settings" -msgstr "Настройки E&GA/(S)VGA" - -msgid "&Inverted VGA monitor" -msgstr "&Инвертировать цвета VGA" - -msgid "VGA screen &type" -msgstr "&Тип экрана VGA" - -msgid "RGB &Color" -msgstr "RGB &цветной" - -msgid "&RGB Grayscale" -msgstr "&RGB монохромный" - -msgid "&Amber monitor" -msgstr "&Янтарный оттенок" - -msgid "&Green monitor" -msgstr "&Зелёный оттенок" - -msgid "&White monitor" -msgstr "&Белый оттенок" - -msgid "Grayscale &conversion type" -msgstr "Тип монохромного &конвертирования" - -msgid "BT&601 (NTSC/PAL)" -msgstr "BT&601 (NTSC/PAL)" - -msgid "BT&709 (HDTV)" -msgstr "BT&709 (HDTV)" - -msgid "&Average" -msgstr "&Усреднённый" - -msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" -msgstr "Вылеты развёртки CGA/PCjr/Tandy/E&GA/(S)VGA" - -msgid "Change contrast for &monochrome display" -msgstr "Изменить контрастность &монохромного дисплея" - -msgid "&Media" -msgstr "&Носители" - -msgid "&Tools" -msgstr "&Инструменты" - -msgid "&Settings..." -msgstr "&Настройки машины..." - -msgid "&Update status bar icons" -msgstr "&Обновление значков строки статуса" - -msgid "Take s&creenshot\tCtrl+F11" -msgstr "Сделать с&криншот\tCtrl+F11" - -msgid "&Preferences..." -msgstr "&Параметры..." - -msgid "Enable &Discord integration" -msgstr "Включить интеграцию &Discord" - -msgid "Sound &gain..." -msgstr "&Усиление звука..." - -msgid "Begin trace\tCtrl+T" -msgstr "Начать трассировку\tCtrl+T" - -msgid "End trace\tCtrl+T" -msgstr "Завершить трассировку\tCtrl+T" - -msgid "&Logging" -msgstr "&Ведение журнала" - -msgid "Enable BusLogic logs\tCtrl+F4" -msgstr "Включить журналы BusLogic\tCtrl+F4" - -msgid "Enable CD-ROM logs\tCtrl+F5" -msgstr "Включить журналы CD-ROM\tCtrl+F5" - -msgid "Enable floppy (86F) logs\tCtrl+F6" -msgstr "Включить журналы дискет (86F)\tCtrl+F6" - -msgid "Enable floppy controller logs\tCtrl+F7" -msgstr "Включить журналы контроллера дискет\tCtrl+F7" - -msgid "Enable IDE logs\tCtrl+F8" -msgstr "Включить журналы IDE\tCtrl+F8" - -msgid "Enable Serial Port logs\tCtrl+F3" -msgstr "Включить журналы COM порта\tCtrl+F3" - -msgid "Enable Network logs\tCtrl+F9" -msgstr "Включить журналы сети\tCtrl+F9" - -msgid "&Log breakpoint\tCtrl+F10" -msgstr "&Точка останова журнала\tCtrl+F10" - -msgid "Dump &video RAM\tCtrl+F1" -msgstr "&Выгрузка дампа видео-ОЗУ\tCtrl+F1" - -msgid "&Help" -msgstr "&Помощь" - -msgid "&Documentation..." -msgstr "&Документация..." - -msgid "&About 86Box..." -msgstr "&О программе 86Box..." - -msgid "&New image..." -msgstr "&Новый образ..." - -msgid "&Existing image..." -msgstr "&Выбрать образ..." - -msgid "Existing image (&Write-protected)..." -msgstr "Выбрать образ (&Защита от записи)..." - -msgid "&Record" -msgstr "&Запись" - -msgid "&Play" -msgstr "&Воспроизведение" - -msgid "&Rewind to the beginning" -msgstr "&Перемотка на начало" - -msgid "&Fast forward to the end" -msgstr "&Перемотка в конец" - -msgid "E&ject" -msgstr "И&звлечь" - -msgid "&Image..." -msgstr "&Образ..." - -msgid "E&xport to 86F..." -msgstr "Э&кспорт в 86F..." - -msgid "&Mute" -msgstr "&Mute" - -msgid "E&mpty" -msgstr "П&устой" - -msgid "&Reload previous image" -msgstr "&Снова загрузить предыдущий образ" - -msgid "&Image" -msgstr "&Образ..." - -msgid "Target &framerate" -msgstr "Целевая &частота кадров" - -msgid "&Sync with video" -msgstr "&Синхронизация с видео" - -msgid "&25 fps" -msgstr "&25 кадров в секунду" - -msgid "&30 fps" -msgstr "&30 кадров в секунду" - -msgid "&50 fps" -msgstr "&50 кадров в секунду" - -msgid "&60 fps" -msgstr "&60 кадров в секунду" - -msgid "&75 fps" -msgstr "&75 кадров в секунду" - -msgid "&VSync" -msgstr "&VSync" - -msgid "&Select shader..." -msgstr "&Выбрать шейдер..." - -msgid "&Remove shader" -msgstr "&Удалить шейдер" - -msgid "Preferences" -msgstr "Параметры" - -msgid "Sound Gain" -msgstr "Усиление звука" - -msgid "New Image" -msgstr "Новый образ" - -msgid "Settings" -msgstr "Настройки" - -msgid "Specify Main Window Dimensions" -msgstr "Указать размеры главного окна" - -msgid "OK" -msgstr "OK" - -msgid "Cancel" -msgstr "Отмена" - -msgid "Save these settings as &global defaults" -msgstr "Сохранить эти параметры как &глобальные по умолчанию" - -msgid "&Default" -msgstr "&По умолчанию" - -msgid "Language:" -msgstr "Язык:" - -msgid "Icon set:" -msgstr "Набор иконок:" - -msgid "Gain" -msgstr "Усиление" - -msgid "File name:" -msgstr "Имя файла:" - -msgid "Disk size:" -msgstr "Размер диска:" - -msgid "RPM mode:" -msgstr "RPM режим:" - -msgid "Progress:" -msgstr "Прогресс:" - -msgid "Width:" -msgstr "Ширина:" - -msgid "Height:" -msgstr "Высота:" - -msgid "Lock to this size" -msgstr "Зафиксировать размер" - -msgid "Machine type:" -msgstr "Тип машины:" - -msgid "Machine:" -msgstr "Системная плата:" - -msgid "Configure" -msgstr "Настройка" - -msgid "CPU type:" -msgstr "Тип ЦПУ:" - -msgid "Speed:" -msgstr "Speed:" - -msgid "FPU:" -msgstr "FPU:" - -msgid "Wait states:" -msgstr "Циклы ожидания:" - -msgid "MB" -msgstr "МБ" - -msgid "Memory:" -msgstr "Память:" - -msgid "Time synchronization" -msgstr "Синхронизация времени" - -msgid "Disabled" -msgstr "Отключить" - -msgid "Enabled (local time)" -msgstr "Включить (местное)" - -msgid "Enabled (UTC)" -msgstr "Включить (UTC)" - -msgid "Dynamic Recompiler" -msgstr "Динамический рекомпилятор" - -msgid "Video:" -msgstr "Видеокарта:" - -msgid "Voodoo Graphics" -msgstr "Ускоритель Voodoo" - -msgid "Mouse:" -msgstr "Мышь:" - -msgid "Joystick:" -msgstr "Джойстик:" - -msgid "Joystick 1..." -msgstr "Джойстик 1..." - -msgid "Joystick 2..." -msgstr "Джойстик 2..." - -msgid "Joystick 3..." -msgstr "Джойстик 3..." - -msgid "Joystick 4..." -msgstr "Джойстик 4..." - -msgid "Sound card:" -msgstr "Звуковая карта:" - -msgid "MIDI Out Device:" -msgstr "MIDI Out устр-во:" - -msgid "MIDI In Device:" -msgstr "MIDI In устр-во:" - -msgid "Standalone MPU-401" -msgstr "Отдельный MPU-401" - -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - -msgid "Use FLOAT32 sound" -msgstr "FLOAT32 звук" - -msgid "Network type:" -msgstr "Тип сети:" - -msgid "PCap device:" -msgstr "Устройство PCap:" - -msgid "Network adapter:" -msgstr "Сетевая карта:" - -msgid "LPT1 Device:" -msgstr "Устройство LPT1:" - -msgid "LPT2 Device:" -msgstr "Устройство LPT2:" - -msgid "LPT3 Device:" -msgstr "Устройство LPT3:" - -msgid "Serial port 1" -msgstr "Последов. порт COM1" - -msgid "Serial port 2" -msgstr "Последов. порт COM2" - -msgid "Serial port 3" -msgstr "Последов. порт COM3" - -msgid "Serial port 4" -msgstr "Последов. порт COM4" - -msgid "Parallel port 1" -msgstr "Параллельный порт LPT1" - -msgid "Parallel port 2" -msgstr "Параллельный порт LPT2" - -msgid "Parallel port 3" -msgstr "Параллельный порт LPT3" - -msgid "HD Controller:" -msgstr "Контроллер HD:" - -msgid "FD Controller:" -msgstr "Контроллер FD:" - -msgid "Tertiary IDE Controller" -msgstr "Третичный IDE контроллер" - -msgid "Quaternary IDE Controller" -msgstr "Четвертичный IDE контроллер" - -msgid "SCSI" -msgstr "SCSI" - -msgid "Controller 1:" -msgstr "Контроллер 1:" - -msgid "Controller 2:" -msgstr "Контроллер 2:" - -msgid "Controller 3:" -msgstr "Контроллер 3:" - -msgid "Controller 4:" -msgstr "Контроллер 4:" - -msgid "Cassette" -msgstr "Кассета" - -msgid "Hard disks:" -msgstr "Жёсткие диски:" - -msgid "&New..." -msgstr "&Создать..." - -msgid "&Existing..." -msgstr "&Выбрать..." - -msgid "&Remove" -msgstr "&Убрать" - -msgid "Bus:" -msgstr "Шина:" - -msgid "Channel:" -msgstr "Канал:" - -msgid "ID:" -msgstr "ID:" - -msgid "&Specify..." -msgstr "&Указать..." - -msgid "Sectors:" -msgstr "Сектора:" - -msgid "Heads:" -msgstr "Головки:" - -msgid "Cylinders:" -msgstr "Цилиндры:" - -msgid "Size (MB):" -msgstr "Размер (МБ):" - -msgid "Type:" -msgstr "Тип:" - -msgid "Image Format:" -msgstr "Тип образа:" - -msgid "Block Size:" -msgstr "Размер блока:" - -msgid "Floppy drives:" -msgstr "Гибкие диски:" - -msgid "Turbo timings" -msgstr "Турбо тайминги" - -msgid "Check BPB" -msgstr "Проверять BPB" - -msgid "CD-ROM drives:" -msgstr "Дисководы CD-ROM:" - -msgid "MO drives:" -msgstr "Магнитооптические дисководы:" - -msgid "ZIP drives:" -msgstr "ZIP дисководы:" - -msgid "ZIP 250" -msgstr "ZIP 250" - -msgid "ISA RTC:" -msgstr "ISA RTC:" - -msgid "ISA Memory Expansion" -msgstr "Карта расширения памяти (ISA)" - -msgid "Card 1:" -msgstr "Карта 1:" - -msgid "Card 2:" -msgstr "Карта 2:" - -msgid "Card 3:" -msgstr "Карта 3:" - -msgid "Card 4:" -msgstr "Карта 4:" - -msgid "ISABugger device" -msgstr "Устройство ISABugger" - -msgid "POST card" -msgstr "Карта POST" - -msgid "FONT_SIZE" -msgstr "9" - -msgid "FONT_NAME" -msgstr "Segoe UI" - -msgid "86Box" -msgstr "86Box" - -msgid "Error" -msgstr "Ошибка" - -msgid "Fatal error" -msgstr "Неустранимая ошибка" - -msgid "" -msgstr "<зарезервировано>" - -msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." -msgstr "Нажмите CTRL + ALT + PAGE DOWN для возврата в оконный режим." - -msgid "Speed" -msgstr "Скорость" - -msgid "ZIP %03i %i (%s): %ls" -msgstr "ZIP %03i %i (%s): %ls" - -msgid "ZIP images (*.im? *.zdi)" -msgstr "Образы ZIP (*.im? *.zdi)" - -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "86Box не смог найти ни одного подходящего для использования файла с ПЗУ.\n\nПожалуйста скачайте набор ПЗУ и извлеките его в каталог \"roms\"." - -msgid "(empty)" -msgstr "(пусто)" - -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "Образы ZIP (*.im? *.zdi);;Все файлы (*.*)" - -msgid "Turbo" -msgstr "Турбо" - -msgid "On" -msgstr "Вкл" - -msgid "Off" -msgstr "Выкл" - -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "Все образы (*.86f *.dsk *.flp *.im? *.*fd?);;Простые посекторные образы (*.dsk *.flp *.im? *.img *.*fd?);;Surface образы (*.86f)" - -msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "Системная плата \"%hs\" недоступна из-за отсутствия файла её ПЗУ в каталоге roms/machines. Переключение на доступную системную плату." - -msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "Видеокарта \"%hs\" недоступна из-за отсутствия файла её ПЗУ в каталоге roms/video. Переключение на доступную видеокарту." - -msgid "Machine" -msgstr "Компьютер" - -msgid "Display" -msgstr "Дисплей" - -msgid "Input devices" -msgstr "Устройства ввода" - -msgid "Sound" -msgstr "Звук" - -msgid "Network" -msgstr "Сеть" - -msgid "Ports (COM & LPT)" -msgstr "Порты (COM и LPT)" - -msgid "Storage controllers" -msgstr "Контроллеры дисков" - -msgid "Hard disks" -msgstr "Жёсткие диски" - -msgid "Floppy & CD-ROM drives" -msgstr "Гибкие диски и CD-ROM" - -msgid "Other removable devices" -msgstr "Другие съёмные устр-ва" - -msgid "Other peripherals" -msgstr "Другая периферия" - -msgid "Surface images (*.86f)" -msgstr "Образы Surface (*.86f)" - -msgid "Click to capture mouse" -msgstr "Щёлкните мышью для захвата курсора" - -msgid "Press F8+F12 to release mouse" -msgstr "Нажмите F8+F12 чтобы освободить курсор" - -msgid "Press F8+F12 or middle button to release mouse" -msgstr "Нажмите F8+F12 или среднюю кнопку мыши чтобы освободить курсор" - -msgid "Unable to initialize FluidSynth" -msgstr "Невозможно инициализировать FluidSynth" - -msgid "Bus" -msgstr "Шина" - -msgid "File" -msgstr "Файл" - -msgid "C" -msgstr "C" - -msgid "H" -msgstr "H" - -msgid "S" -msgstr "S" - -msgid "KB" -msgstr "КБ" - -msgid "Could not initialize the video renderer." -msgstr "Не удалось инициализировать рендерер видео." - -msgid "Default" -msgstr "По умолчанию" - -msgid "%i Wait state(s)" -msgstr "%i WS" - -msgid "Type" -msgstr "Тип" - -msgid "Failed to set up PCap" -msgstr "Не удалось настроить PCap" - -msgid "No PCap devices found" -msgstr "Устройства PCap не найдены" - -msgid "Invalid PCap device" -msgstr "Неверное устройство PCap" - -msgid "Standard 2-button joystick(s)" -msgstr "Стандартный 2-кнопочный джойстик" - -msgid "Standard 4-button joystick" -msgstr "Стандартный 4-кнопочный джойстик" - -msgid "Standard 6-button joystick" -msgstr "Стандартный 6-кнопочный джойстик" - -msgid "Standard 8-button joystick" -msgstr "Стандартный 8-кнопочный джойстик" - -msgid "CH Flightstick Pro" -msgstr "CH Flightstick Pro" - -msgid "Microsoft SideWinder Pad" -msgstr "Microsoft SideWinder Pad" - -msgid "Thrustmaster Flight Control System" -msgstr "Система управления полетом Thrustmaster" - -msgid "None" -msgstr "Нет" - -msgid "Unable to load keyboard accelerators." -msgstr "Невозможно загрузить ускорители клавиатуры." - -msgid "Unable to register raw input." -msgstr "Невозможно зарегистрировать необработанный ввод." - -msgid "%u" -msgstr "%u" - -msgid "%u MB (CHS: %i, %i, %i)" -msgstr "%u МБ (CHS: %i, %i, %i)" - -msgid "Floppy %i (%s): %ls" -msgstr "Дисковод %i (%s): %ls" - -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "Все образы (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Расширенные образы секторов (*.imd *.json *.td0);;Основные образы секторов (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Образы Flux (*.fdi);;Образы Surface (*.86f *.mfm);;Все файлы (*.*)" - -msgid "Unable to initialize FreeType" -msgstr "Невозможно инициализировать FreeType" - -msgid "Unable to initialize SDL, SDL2.dll is required" -msgstr "Невозможно инициализировать SDL, требуется SDL2.dll" - -msgid "Are you sure you want to hard reset the emulated machine?" -msgstr "Вы уверены, что хотите выполнить холодную перезагрузку эмулируемой машины?" - -msgid "Are you sure you want to exit 86Box?" -msgstr "Вы уверены, что хотите выйти из 86Box?" - -msgid "Unable to initialize Ghostscript" -msgstr "Невозможно инициализировать Ghostscript" - -msgid "MO %i (%ls): %ls" -msgstr "Магнитооптический %i (%ls): %ls" - -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "Образы магнитооптических дисков (*.im? *.mdi);;Все файлы (*.*)" - -msgid "Welcome to 86Box!" -msgstr "Добро пожаловать в 86Box!" - -msgid "Internal controller" -msgstr "Встроенный контроллер" - -msgid "Exit" -msgstr "Выход" - -msgid "No ROMs found" -msgstr "ПЗУ не найдены" - -msgid "Do you want to save the settings?" -msgstr "Хотите ли вы сохранить настройки?" - -msgid "This will hard reset the emulated machine." -msgstr "Это приведет к холодной перезагрузке эмулируемой машины." - -msgid "Save" -msgstr "Сохранить" - -msgid "About 86Box" -msgstr "О 86Box" - -msgid "86Box v" -msgstr "86Box v." - -msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "Эмулятор старых компьютеров\n\nАвторы: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nВыпускается под лицензией GNU General Public License версии 2 или более поздней. Дополнительную информацию см. в файле LICENSE." - -msgid "Hardware not available" -msgstr "Оборудование недоступно" - -msgid "WinPcap" -msgstr "WinPcap" - -msgid "libpcap" -msgstr "libpcap" - -msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." -msgstr "Убедитесь, что libpcap установлен и ваше сетевое соединение, совместимо с libpcap." - -msgid "Invalid configuration" -msgstr "Недопустимая конфигурация" - -msgid "freetype.dll" -msgstr "freetype.dll" - -msgid "libfreetype" -msgstr "libfreetype" - -msgid " is required for ESC/P printer emulation." -msgstr "Для эмуляции принтера ESC/P требуется libfreetype." - -msgid "gsdll32.dll" -msgstr "gsdll32.dll" - -msgid "libgs" -msgstr "libgs" - -msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." -msgstr " требуется для автоматического преобразования файлов PostScript в PDF.\n\nВсе документы, отправленные на общий принтер PostScript, будут сохранены в виде файлов PostScript (.ps)." - -msgid "libfluidsynth.dll" -msgstr "libfluidsynth.dll" - -msgid "libfluidsynth" -msgstr "libfluidsynth" - -msgid " is required for FluidSynth MIDI output." -msgstr "Для FluidSynth MIDI-вывода требуется libfluidsynth." - -msgid "Entering fullscreen mode" -msgstr "Вход в полноэкранный режим" - -msgid "Don't show this message again" -msgstr "Больше не показывать это сообщение" - -msgid "Don't exit" -msgstr "Не выходить" - -msgid "Reset" -msgstr "Перезагрузить" - -msgid "Don't reset" -msgstr "Не перезагружать" - -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "Образы CD-ROM (*.iso *.cue);;Все файлы (*.*)" - -msgid "%hs Device Configuration" -msgstr "Конфигурация устройства %hs" - -msgid "Monitor in sleep mode" -msgstr "Монитор в спящем режиме" - -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "Шейдеры OpenGL (*.glsl);;Все файлы (*.*)" - -msgid "OpenGL options" -msgstr "Параметры OpenGL" - -msgid "You are loading an unsupported configuration" -msgstr "Вы загружаете неподдерживаемую конфигурацию" - -msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "Выбор типов CPU для этой системной платы на данной эмулируемой машине отключен.\n\nЭто позволяет выбрать процессор, который в противном случае несовместим с выбранной материнской платой. Однако, вы можете столкнуться с несовместимостью с BIOS материнской платы или другим ПО.\n\nВключение этого параметра официально не поддерживается, и все поданные отчеты об ошибках могут быть закрыты как недействительные." - -msgid "Continue" -msgstr "Продолжить" - -msgid "Cassette: %s" -msgstr "Кассета: %s" - -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Образы кассет (*.pcm *.raw *.wav *.cas);;Все файлы (*.*)" - -msgid "Cartridge %i: %ls" -msgstr "Картридж %i: %ls" - -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "Образы картриджей (*.a *.b *.jrc);;Все файлы (*.*)" - -msgid "Error initializing renderer" -msgstr "Error initializing renderer" - -msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." - -msgid "Resume execution" -msgstr "Resume execution" - -msgid "Pause execution" -msgstr "Pause execution" - -msgid "Press Ctrl+Alt+Del" -msgstr "Press Ctrl+Alt+Del" - -msgid "Press Ctrl+Alt+Esc" -msgstr "Press Ctrl+Alt+Esc" - -msgid "Hard reset" -msgstr "Hard reset" - -msgid "ACPI shutdown" -msgstr "ACPI shutdown" - -msgid "Hard disk (%s)" -msgstr "Жёсткий диск (%s)" - -msgid "%01i:%01i" -msgstr "%01i:%01i" - -msgid "%01i" -msgstr "%01i" - -msgid "MFM/RLL or ESDI CD-ROM drives never existed" -msgstr "MFM/RLL или ESDI дисководов CD-ROM никогда не существовало" - -msgid "Custom..." -msgstr "Custom..." - -msgid "Custom (large)..." -msgstr "Custom (large)..." - -msgid "Add New Hard Disk" -msgstr "Создать новый жёсткий диск" - -msgid "Add Existing Hard Disk" -msgstr "Добавить существующий жёсткий диск" - -msgid "HDI disk images cannot be larger than 4 GB." -msgstr "Размер образов дисков HDI не может превышать 4 ГБ." - -msgid "Disk images cannot be larger than 127 GB." -msgstr "Размер образов дисков не может превышать 127 ГБ." - -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Образы жёстких дисков (*.hd? *.im? *.vhd);;Все файлы (*.*)" - -msgid "Unable to read file" -msgstr "Невозможно прочитать файл" - -msgid "Unable to write file" -msgstr "Невозможно записать файл" - -msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "Образы HDI или HDX с размером сектора, отличным от 512, не поддерживаются." - -msgid "USB is not yet supported" -msgstr "USB пока не поддерживается" - -msgid "Disk image file already exists" -msgstr "Файл образа диска уже существует" - -msgid "Please specify a valid file name." -msgstr "Пожалуйста, укажите правильное имя файла." - -msgid "Disk image created" -msgstr "Образ диска создан" - -msgid "Make sure the file exists and is readable." -msgstr "Убедитесь, что файл существует и доступен для чтения." - -msgid "Make sure the file is being saved to a writable directory." -msgstr "Убедитесь, что файл сохраняется в директории доступной для записи." - -msgid "Disk image too large" -msgstr "Слишком большой образ диска" - -msgid "Remember to partition and format the newly-created drive." -msgstr "Не забудьте разметить и отформатировать вновь созданный диск." - -msgid "The selected file will be overwritten. Are you sure you want to use it?" -msgstr "Выбранный файл будет перезаписан. Вы уверены, что хотите использовать его?" - -msgid "Unsupported disk image" -msgstr "Неподдерживаемый образ диска" - -msgid "Overwrite" -msgstr "Перезаписать" - -msgid "Don't overwrite" -msgstr "Не перезаписывать" - -msgid "Raw image (.img)" -msgstr "RAW образ (.img)" - -msgid "HDI image (.hdi)" -msgstr "Образ HDI (.hdi)" - -msgid "HDX image (.hdx)" -msgstr "Образ HDX (.hdx)" - -msgid "Fixed-size VHD (.vhd)" -msgstr "VHD фиксированного размера (.vhd)" - -msgid "Dynamic-size VHD (.vhd)" -msgstr "VHD динамического размера (.vhd)" - -msgid "Differencing VHD (.vhd)" -msgstr "Дифференцированный образ VHD (.vhd)" - -msgid "Large blocks (2 MB)" -msgstr "Большие блоки (2 МБ)" - -msgid "Small blocks (512 KB)" -msgstr "Маленькие блоки (512 КБ)" - -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "Файлы VHD (*.vhd);;Все файлы (*.*)" - -msgid "Select the parent VHD" -msgstr "Выберите родительский VHD" - -msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" -msgstr "Это может означать, что родительский образ был изменён после того, как был создан дифференцированный образ.\n\nЭто также может произойти, если файлы образа были перемещены или скопированы, или из-за ошибки в программе, создавшей этот диск.\n\nВы хотите исправить временные метки?" - -msgid "Parent and child disk timestamps do not match" -msgstr "Временные метки родительского и дочернего дисков не совпадают" - -msgid "Could not fix VHD timestamp." -msgstr "Не удалось исправить временную метку VHD." - -msgid "%01i:%02i" -msgstr "%01i:%02i" - -msgid "MFM/RLL" -msgstr "MFM/RLL" - -msgid "XTA" -msgstr "XTA" - -msgid "ESDI" -msgstr "ESDI" - -msgid "IDE" -msgstr "IDE" - -msgid "ATAPI" -msgstr "ATAPI" - -msgid "MFM/RLL (%01i:%01i)" -msgstr "MFM/RLL (%01i:%01i)" - -msgid "XTA (%01i:%01i)" -msgstr "XTA (%01i:%01i)" - -msgid "ESDI (%01i:%01i)" -msgstr "ESDI (%01i:%01i)" - -msgid "IDE (%01i:%01i)" -msgstr "IDE (%01i:%01i)" - -msgid "ATAPI (%01i:%01i)" -msgstr "ATAPI (%01i:%01i)" - -msgid "SCSI (%01i:%02i)" -msgstr "SCSI (%01i:%02i)" - -msgid "CD-ROM %i (%s): %s" -msgstr "CD-ROM %i (%s): %s" - -msgid "160 kB" -msgstr "160 кБ" - -msgid "180 kB" -msgstr "180 кБ" - -msgid "320 kB" -msgstr "320 кБ" - -msgid "360 kB" -msgstr "360 кБ" - -msgid "640 kB" -msgstr "640 кБ" - -msgid "720 kB" -msgstr "720 кБ" - -msgid "1.2 MB" -msgstr "1.2 МБ" - -msgid "1.25 MB" -msgstr "1.25 МБ" - -msgid "1.44 MB" -msgstr "1.44 МБ" - -msgid "DMF (cluster 1024)" -msgstr "DMF (кластер 1024)" - -msgid "DMF (cluster 2048)" -msgstr "DMF (кластер 2048)" - -msgid "2.88 MB" -msgstr "2.88 МБ" - -msgid "ZIP 100" -msgstr "ZIP 100" - -msgid "3.5\" 128Mb M.O. (ISO 10090)" -msgstr "3.5\" 128Мб M.O. (ISO 10090)" - -msgid "3.5\" 230Mb M.O. (ISO 13963)" -msgstr "3.5\" 230Мб M.O. (ISO 13963)" - -msgid "3.5\" 540Mb M.O. (ISO 15498)" -msgstr "3.5\" 540Мб M.O. (ISO 15498)" - -msgid "3.5\" 640Mb M.O. (ISO 15498)" -msgstr "3.5\" 640Мб M.O. (ISO 15498)" - -msgid "3.5\" 1.3Gb M.O. (GigaMO)" -msgstr "3.5\" 1.3Гб M.O. (GigaMO)" - -msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5\" 2.3Гб M.O. (GigaMO 2)" - -msgid "5.25\" 600Mb M.O." -msgstr "5.25\" 600Мб M.O." - -msgid "5.25\" 650Mb M.O." -msgstr "5.25\" 650Мб M.O." - -msgid "5.25\" 1Gb M.O." -msgstr "5.25\" 1Гб M.O." - -msgid "5.25\" 1.3Gb M.O." -msgstr "5.25\" 1.3Гб M.O." - -msgid "Perfect RPM" -msgstr "Точный RPM" - -msgid "1%% below perfect RPM" -msgstr "На 1% медленнее точного RPM" - -msgid "1.5%% below perfect RPM" -msgstr "На 1.5% медленнее точного RPM" - -msgid "2%% below perfect RPM" -msgstr "На 2% медленнее точного RPM" - -msgid "(System Default)" -msgstr "(Системный)" - +msgid "&Action" +msgstr "&Действие" + +msgid "&Keyboard requires capture" +msgstr "&Клавиатура требует захвата" + +msgid "&Right CTRL is left ALT" +msgstr "&Правый CTRL - это левый ALT" + +msgid "&Hard Reset..." +msgstr "&Холодная перезагрузка..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Пауза" + +msgid "E&xit..." +msgstr "&Выход..." + +msgid "&View" +msgstr "&Вид" + +msgid "&Hide status bar" +msgstr "&Скрыть строку статуса" + +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + +msgid "&Resizeable window" +msgstr "&Изменяемый размер окна" + +msgid "R&emember size && position" +msgstr "&Запомнить размер и положение" + +msgid "Re&nderer" +msgstr "&Рендерер" + +msgid "&SDL (Software)" +msgstr "&SDL (Software)" + +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardware)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "&Указать размеры..." + +msgid "F&orce 4:3 display ratio" +msgstr "У&становить соотношение сторон 4:3" + +msgid "&Window scale factor" +msgstr "&Масштаб окна" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Метод фильтрации" + +msgid "&Nearest" +msgstr "&Ближайший" + +msgid "&Linear" +msgstr "&Линейный" + +msgid "Hi&DPI scaling" +msgstr "Масштабирование Hi&DPI" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Полноэкранный режим\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "&Растягивание в полноэкранном режиме" + +msgid "&Full screen stretch" +msgstr "&На весь экран" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Квадратные пиксели (сохранить соотношение)" + +msgid "&Integer scale" +msgstr "&Целочисленное масштабирование" + +msgid "E&GA/(S)VGA settings" +msgstr "Настройки E&GA/(S)VGA" + +msgid "&Inverted VGA monitor" +msgstr "&Инвертировать цвета VGA" + +msgid "VGA screen &type" +msgstr "&Тип экрана VGA" + +msgid "RGB &Color" +msgstr "RGB &цветной" + +msgid "&RGB Grayscale" +msgstr "&RGB монохромный" + +msgid "&Amber monitor" +msgstr "&Янтарный оттенок" + +msgid "&Green monitor" +msgstr "&Зелёный оттенок" + +msgid "&White monitor" +msgstr "&Белый оттенок" + +msgid "Grayscale &conversion type" +msgstr "Тип монохромного &конвертирования" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Усреднённый" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "Вылеты развёртки CGA/PCjr/Tandy/E&GA/(S)VGA" + +msgid "Change contrast for &monochrome display" +msgstr "Изменить контрастность &монохромного дисплея" + +msgid "&Media" +msgstr "&Носители" + +msgid "&Tools" +msgstr "&Инструменты" + +msgid "&Settings..." +msgstr "&Настройки машины..." + +msgid "&Update status bar icons" +msgstr "&Обновление значков строки статуса" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Сделать с&криншот\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Параметры..." + +msgid "Enable &Discord integration" +msgstr "Включить интеграцию &Discord" + +msgid "Sound &gain..." +msgstr "&Усиление звука..." + +msgid "Begin trace\tCtrl+T" +msgstr "Начать трассировку\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Завершить трассировку\tCtrl+T" + +msgid "&Logging" +msgstr "&Ведение журнала" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Включить журналы BusLogic\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Включить журналы CD-ROM\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Включить журналы дискет (86F)\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Включить журналы контроллера дискет\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Включить журналы IDE\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Включить журналы COM порта\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Включить журналы сети\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Точка останова журнала\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "&Выгрузка дампа видео-ОЗУ\tCtrl+F1" + +msgid "&Help" +msgstr "&Помощь" + +msgid "&Documentation..." +msgstr "&Документация..." + +msgid "&About 86Box..." +msgstr "&О программе 86Box..." + +msgid "&New image..." +msgstr "&Новый образ..." + +msgid "&Existing image..." +msgstr "&Выбрать образ..." + +msgid "Existing image (&Write-protected)..." +msgstr "Выбрать образ (&Защита от записи)..." + +msgid "&Record" +msgstr "&Запись" + +msgid "&Play" +msgstr "&Воспроизведение" + +msgid "&Rewind to the beginning" +msgstr "&Перемотка на начало" + +msgid "&Fast forward to the end" +msgstr "&Перемотка в конец" + +msgid "E&ject" +msgstr "И&звлечь" + +msgid "&Image..." +msgstr "&Образ..." + +msgid "E&xport to 86F..." +msgstr "Э&кспорт в 86F..." + +msgid "&Mute" +msgstr "&Mute" + +msgid "E&mpty" +msgstr "П&устой" + +msgid "&Reload previous image" +msgstr "&Снова загрузить предыдущий образ" + +msgid "&Image" +msgstr "&Образ..." + +msgid "Target &framerate" +msgstr "Целевая &частота кадров" + +msgid "&Sync with video" +msgstr "&Синхронизация с видео" + +msgid "&25 fps" +msgstr "&25 кадров в секунду" + +msgid "&30 fps" +msgstr "&30 кадров в секунду" + +msgid "&50 fps" +msgstr "&50 кадров в секунду" + +msgid "&60 fps" +msgstr "&60 кадров в секунду" + +msgid "&75 fps" +msgstr "&75 кадров в секунду" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Выбрать шейдер..." + +msgid "&Remove shader" +msgstr "&Удалить шейдер" + +msgid "Preferences" +msgstr "Параметры" + +msgid "Sound Gain" +msgstr "Усиление звука" + +msgid "New Image" +msgstr "Новый образ" + +msgid "Settings" +msgstr "Настройки" + +msgid "Specify Main Window Dimensions" +msgstr "Указать размеры главного окна" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Отмена" + +msgid "Save these settings as &global defaults" +msgstr "Сохранить эти параметры как &глобальные по умолчанию" + +msgid "&Default" +msgstr "&По умолчанию" + +msgid "Language:" +msgstr "Язык:" + +msgid "Icon set:" +msgstr "Набор иконок:" + +msgid "Gain" +msgstr "Усиление" + +msgid "File name:" +msgstr "Имя файла:" + +msgid "Disk size:" +msgstr "Размер диска:" + +msgid "RPM mode:" +msgstr "RPM режим:" + +msgid "Progress:" +msgstr "Прогресс:" + +msgid "Width:" +msgstr "Ширина:" + +msgid "Height:" +msgstr "Высота:" + +msgid "Lock to this size" +msgstr "Зафиксировать размер" + +msgid "Machine type:" +msgstr "Тип машины:" + +msgid "Machine:" +msgstr "Системная плата:" + +msgid "Configure" +msgstr "Настройка" + +msgid "CPU type:" +msgstr "Тип ЦПУ:" + +msgid "Speed:" +msgstr "Speed:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "Циклы ожидания:" + +msgid "MB" +msgstr "МБ" + +msgid "Memory:" +msgstr "Память:" + +msgid "Time synchronization" +msgstr "Синхронизация времени" + +msgid "Disabled" +msgstr "Отключить" + +msgid "Enabled (local time)" +msgstr "Включить (местное)" + +msgid "Enabled (UTC)" +msgstr "Включить (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Динамический рекомпилятор" + +msgid "Video:" +msgstr "Видеокарта:" + +msgid "Voodoo Graphics" +msgstr "Ускоритель Voodoo" + +msgid "Mouse:" +msgstr "Мышь:" + +msgid "Joystick:" +msgstr "Джойстик:" + +msgid "Joystick 1..." +msgstr "Джойстик 1..." + +msgid "Joystick 2..." +msgstr "Джойстик 2..." + +msgid "Joystick 3..." +msgstr "Джойстик 3..." + +msgid "Joystick 4..." +msgstr "Джойстик 4..." + +msgid "Sound card:" +msgstr "Звуковая карта:" + +msgid "MIDI Out Device:" +msgstr "MIDI Out устр-во:" + +msgid "MIDI In Device:" +msgstr "MIDI In устр-во:" + +msgid "Standalone MPU-401" +msgstr "Отдельный MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "FLOAT32 звук" + +msgid "Network type:" +msgstr "Тип сети:" + +msgid "PCap device:" +msgstr "Устройство PCap:" + +msgid "Network adapter:" +msgstr "Сетевая карта:" + +msgid "LPT1 Device:" +msgstr "Устройство LPT1:" + +msgid "LPT2 Device:" +msgstr "Устройство LPT2:" + +msgid "LPT3 Device:" +msgstr "Устройство LPT3:" + +msgid "Serial port 1" +msgstr "Последов. порт COM1" + +msgid "Serial port 2" +msgstr "Последов. порт COM2" + +msgid "Serial port 3" +msgstr "Последов. порт COM3" + +msgid "Serial port 4" +msgstr "Последов. порт COM4" + +msgid "Parallel port 1" +msgstr "Параллельный порт LPT1" + +msgid "Parallel port 2" +msgstr "Параллельный порт LPT2" + +msgid "Parallel port 3" +msgstr "Параллельный порт LPT3" + +msgid "HD Controller:" +msgstr "Контроллер HD:" + +msgid "FD Controller:" +msgstr "Контроллер FD:" + +msgid "Tertiary IDE Controller" +msgstr "Третичный IDE контроллер" + +msgid "Quaternary IDE Controller" +msgstr "Четвертичный IDE контроллер" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Контроллер 1:" + +msgid "Controller 2:" +msgstr "Контроллер 2:" + +msgid "Controller 3:" +msgstr "Контроллер 3:" + +msgid "Controller 4:" +msgstr "Контроллер 4:" + +msgid "Cassette" +msgstr "Кассета" + +msgid "Hard disks:" +msgstr "Жёсткие диски:" + +msgid "&New..." +msgstr "&Создать..." + +msgid "&Existing..." +msgstr "&Выбрать..." + +msgid "&Remove" +msgstr "&Убрать" + +msgid "Bus:" +msgstr "Шина:" + +msgid "Channel:" +msgstr "Канал:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Указать..." + +msgid "Sectors:" +msgstr "Сектора:" + +msgid "Heads:" +msgstr "Головки:" + +msgid "Cylinders:" +msgstr "Цилиндры:" + +msgid "Size (MB):" +msgstr "Размер (МБ):" + +msgid "Type:" +msgstr "Тип:" + +msgid "Image Format:" +msgstr "Тип образа:" + +msgid "Block Size:" +msgstr "Размер блока:" + +msgid "Floppy drives:" +msgstr "Гибкие диски:" + +msgid "Turbo timings" +msgstr "Турбо тайминги" + +msgid "Check BPB" +msgstr "Проверять BPB" + +msgid "CD-ROM drives:" +msgstr "Дисководы CD-ROM:" + +msgid "MO drives:" +msgstr "Магнитооптические дисководы:" + +msgid "ZIP drives:" +msgstr "ZIP дисководы:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA RTC:" + +msgid "ISA Memory Expansion" +msgstr "Карта расширения памяти (ISA)" + +msgid "Card 1:" +msgstr "Карта 1:" + +msgid "Card 2:" +msgstr "Карта 2:" + +msgid "Card 3:" +msgstr "Карта 3:" + +msgid "Card 4:" +msgstr "Карта 4:" + +msgid "ISABugger device" +msgstr "Устройство ISABugger" + +msgid "POST card" +msgstr "Карта POST" + +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Ошибка" + +msgid "Fatal error" +msgstr "Неустранимая ошибка" + +msgid "" +msgstr "<зарезервировано>" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Нажмите CTRL + ALT + PAGE DOWN для возврата в оконный режим." + +msgid "Speed" +msgstr "Скорость" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.im? *.zdi)" +msgstr "Образы ZIP (*.im? *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box не смог найти ни одного подходящего для использования файла с ПЗУ.\n\nПожалуйста скачайте набор ПЗУ и извлеките его в каталог \"roms\"." + +msgid "(empty)" +msgstr "(пусто)" + +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "Образы ZIP (*.im? *.zdi);;Все файлы (*.*)" + +msgid "Turbo" +msgstr "Турбо" + +msgid "On" +msgstr "Вкл" + +msgid "Off" +msgstr "Выкл" + +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "Все образы (*.86f *.dsk *.flp *.im? *.*fd?);;Простые посекторные образы (*.dsk *.flp *.im? *.img *.*fd?);;Surface образы (*.86f)" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Системная плата \"%hs\" недоступна из-за отсутствия файла её ПЗУ в каталоге roms/machines. Переключение на доступную системную плату." + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Видеокарта \"%hs\" недоступна из-за отсутствия файла её ПЗУ в каталоге roms/video. Переключение на доступную видеокарту." + +msgid "Machine" +msgstr "Компьютер" + +msgid "Display" +msgstr "Дисплей" + +msgid "Input devices" +msgstr "Устройства ввода" + +msgid "Sound" +msgstr "Звук" + +msgid "Network" +msgstr "Сеть" + +msgid "Ports (COM & LPT)" +msgstr "Порты (COM и LPT)" + +msgid "Storage controllers" +msgstr "Контроллеры дисков" + +msgid "Hard disks" +msgstr "Жёсткие диски" + +msgid "Floppy & CD-ROM drives" +msgstr "Гибкие диски и CD-ROM" + +msgid "Other removable devices" +msgstr "Другие съёмные устр-ва" + +msgid "Other peripherals" +msgstr "Другая периферия" + +msgid "Surface images (*.86f)" +msgstr "Образы Surface (*.86f)" + +msgid "Click to capture mouse" +msgstr "Щёлкните мышью для захвата курсора" + +msgid "Press F8+F12 to release mouse" +msgstr "Нажмите F8+F12 чтобы освободить курсор" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Нажмите F8+F12 или среднюю кнопку мыши чтобы освободить курсор" + +msgid "Unable to initialize FluidSynth" +msgstr "Невозможно инициализировать FluidSynth" + +msgid "Bus" +msgstr "Шина" + +msgid "File" +msgstr "Файл" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "КБ" + +msgid "Could not initialize the video renderer." +msgstr "Не удалось инициализировать рендерер видео." + +msgid "Default" +msgstr "По умолчанию" + +msgid "%i Wait state(s)" +msgstr "%i WS" + +msgid "Type" +msgstr "Тип" + +msgid "Failed to set up PCap" +msgstr "Не удалось настроить PCap" + +msgid "No PCap devices found" +msgstr "Устройства PCap не найдены" + +msgid "Invalid PCap device" +msgstr "Неверное устройство PCap" + +msgid "Standard 2-button joystick(s)" +msgstr "Стандартный 2-кнопочный джойстик" + +msgid "Standard 4-button joystick" +msgstr "Стандартный 4-кнопочный джойстик" + +msgid "Standard 6-button joystick" +msgstr "Стандартный 6-кнопочный джойстик" + +msgid "Standard 8-button joystick" +msgstr "Стандартный 8-кнопочный джойстик" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Система управления полетом Thrustmaster" + +msgid "None" +msgstr "Нет" + +msgid "Unable to load keyboard accelerators." +msgstr "Невозможно загрузить ускорители клавиатуры." + +msgid "Unable to register raw input." +msgstr "Невозможно зарегистрировать необработанный ввод." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u МБ (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Дисковод %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "Все образы (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Расширенные образы секторов (*.imd *.json *.td0);;Основные образы секторов (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Образы Flux (*.fdi);;Образы Surface (*.86f *.mfm);;Все файлы (*.*)" + +msgid "Unable to initialize FreeType" +msgstr "Невозможно инициализировать FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Невозможно инициализировать SDL, требуется SDL2.dll" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Вы уверены, что хотите выполнить холодную перезагрузку эмулируемой машины?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Вы уверены, что хотите выйти из 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Невозможно инициализировать Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "Магнитооптический %i (%ls): %ls" + +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "Образы магнитооптических дисков (*.im? *.mdi);;Все файлы (*.*)" + +msgid "Welcome to 86Box!" +msgstr "Добро пожаловать в 86Box!" + +msgid "Internal controller" +msgstr "Встроенный контроллер" + +msgid "Exit" +msgstr "Выход" + +msgid "No ROMs found" +msgstr "ПЗУ не найдены" + +msgid "Do you want to save the settings?" +msgstr "Хотите ли вы сохранить настройки?" + +msgid "This will hard reset the emulated machine." +msgstr "Это приведет к холодной перезагрузке эмулируемой машины." + +msgid "Save" +msgstr "Сохранить" + +msgid "About 86Box" +msgstr "О 86Box" + +msgid "86Box v" +msgstr "86Box v." + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Эмулятор старых компьютеров\n\nАвторы: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nВыпускается под лицензией GNU General Public License версии 2 или более поздней. Дополнительную информацию см. в файле LICENSE." + +msgid "Hardware not available" +msgstr "Оборудование недоступно" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Убедитесь, что libpcap установлен и ваше сетевое соединение, совместимо с libpcap." + +msgid "Invalid configuration" +msgstr "Недопустимая конфигурация" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr "Для эмуляции принтера ESC/P требуется libfreetype." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " требуется для автоматического преобразования файлов PostScript в PDF.\n\nВсе документы, отправленные на общий принтер PostScript, будут сохранены в виде файлов PostScript (.ps)." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr "Для FluidSynth MIDI-вывода требуется libfluidsynth." + +msgid "Entering fullscreen mode" +msgstr "Вход в полноэкранный режим" + +msgid "Don't show this message again" +msgstr "Больше не показывать это сообщение" + +msgid "Don't exit" +msgstr "Не выходить" + +msgid "Reset" +msgstr "Перезагрузить" + +msgid "Don't reset" +msgstr "Не перезагружать" + +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "Образы CD-ROM (*.iso *.cue);;Все файлы (*.*)" + +msgid "%hs Device Configuration" +msgstr "Конфигурация устройства %hs" + +msgid "Monitor in sleep mode" +msgstr "Монитор в спящем режиме" + +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "Шейдеры OpenGL (*.glsl);;Все файлы (*.*)" + +msgid "OpenGL options" +msgstr "Параметры OpenGL" + +msgid "You are loading an unsupported configuration" +msgstr "Вы загружаете неподдерживаемую конфигурацию" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "Выбор типов CPU для этой системной платы на данной эмулируемой машине отключен.\n\nЭто позволяет выбрать процессор, который в противном случае несовместим с выбранной материнской платой. Однако, вы можете столкнуться с несовместимостью с BIOS материнской платы или другим ПО.\n\nВключение этого параметра официально не поддерживается, и все поданные отчеты об ошибках могут быть закрыты как недействительные." + +msgid "Continue" +msgstr "Продолжить" + +msgid "Cassette: %s" +msgstr "Кассета: %s" + +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Образы кассет (*.pcm *.raw *.wav *.cas);;Все файлы (*.*)" + +msgid "Cartridge %i: %ls" +msgstr "Картридж %i: %ls" + +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "Образы картриджей (*.a *.b *.jrc);;Все файлы (*.*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + +msgid "Hard disk (%s)" +msgstr "Жёсткий диск (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL или ESDI дисководов CD-ROM никогда не существовало" + +msgid "Custom..." +msgstr "Custom..." + +msgid "Custom (large)..." +msgstr "Custom (large)..." + +msgid "Add New Hard Disk" +msgstr "Создать новый жёсткий диск" + +msgid "Add Existing Hard Disk" +msgstr "Добавить существующий жёсткий диск" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "Размер образов дисков HDI не может превышать 4 ГБ." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Размер образов дисков не может превышать 127 ГБ." + +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Образы жёстких дисков (*.hd? *.im? *.vhd);;Все файлы (*.*)" + +msgid "Unable to read file" +msgstr "Невозможно прочитать файл" + +msgid "Unable to write file" +msgstr "Невозможно записать файл" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "Образы HDI или HDX с размером сектора, отличным от 512, не поддерживаются." + +msgid "USB is not yet supported" +msgstr "USB пока не поддерживается" + +msgid "Disk image file already exists" +msgstr "Файл образа диска уже существует" + +msgid "Please specify a valid file name." +msgstr "Пожалуйста, укажите правильное имя файла." + +msgid "Disk image created" +msgstr "Образ диска создан" + +msgid "Make sure the file exists and is readable." +msgstr "Убедитесь, что файл существует и доступен для чтения." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Убедитесь, что файл сохраняется в директории доступной для записи." + +msgid "Disk image too large" +msgstr "Слишком большой образ диска" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Не забудьте разметить и отформатировать вновь созданный диск." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Выбранный файл будет перезаписан. Вы уверены, что хотите использовать его?" + +msgid "Unsupported disk image" +msgstr "Неподдерживаемый образ диска" + +msgid "Overwrite" +msgstr "Перезаписать" + +msgid "Don't overwrite" +msgstr "Не перезаписывать" + +msgid "Raw image (.img)" +msgstr "RAW образ (.img)" + +msgid "HDI image (.hdi)" +msgstr "Образ HDI (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "Образ HDX (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD фиксированного размера (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD динамического размера (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Дифференцированный образ VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Большие блоки (2 МБ)" + +msgid "Small blocks (512 KB)" +msgstr "Маленькие блоки (512 КБ)" + +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "Файлы VHD (*.vhd);;Все файлы (*.*)" + +msgid "Select the parent VHD" +msgstr "Выберите родительский VHD" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Это может означать, что родительский образ был изменён после того, как был создан дифференцированный образ.\n\nЭто также может произойти, если файлы образа были перемещены или скопированы, или из-за ошибки в программе, создавшей этот диск.\n\nВы хотите исправить временные метки?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Временные метки родительского и дочернего дисков не совпадают" + +msgid "Could not fix VHD timestamp." +msgstr "Не удалось исправить временную метку VHD." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 кБ" + +msgid "180 kB" +msgstr "180 кБ" + +msgid "320 kB" +msgstr "320 кБ" + +msgid "360 kB" +msgstr "360 кБ" + +msgid "640 kB" +msgstr "640 кБ" + +msgid "720 kB" +msgstr "720 кБ" + +msgid "1.2 MB" +msgstr "1.2 МБ" + +msgid "1.25 MB" +msgstr "1.25 МБ" + +msgid "1.44 MB" +msgstr "1.44 МБ" + +msgid "DMF (cluster 1024)" +msgstr "DMF (кластер 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (кластер 2048)" + +msgid "2.88 MB" +msgstr "2.88 МБ" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Мб M.O. (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Мб M.O. (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Мб M.O. (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Мб M.O. (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Гб M.O. (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Гб M.O. (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Мб M.O." + +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Мб M.O." + +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Гб M.O." + +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Гб M.O." + +msgid "Perfect RPM" +msgstr "Точный RPM" + +msgid "1%% below perfect RPM" +msgstr "На 1% медленнее точного RPM" + +msgid "1.5%% below perfect RPM" +msgstr "На 1.5% медленнее точного RPM" + +msgid "2%% below perfect RPM" +msgstr "На 2% медленнее точного RPM" + +msgid "(System Default)" +msgstr "(Системный)" + diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index dd034d4ae..a9f821a9b 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -1,1191 +1,1191 @@ -msgid "&Action" -msgstr "&Dejanja" - -msgid "&Keyboard requires capture" -msgstr "&Tipkovnica potrebuje zajem" - -msgid "&Right CTRL is left ALT" -msgstr "&Desni CTRL je levi ALT" - -msgid "&Hard Reset..." -msgstr "&Ponovni zagon..." - -msgid "&Ctrl+Alt+Del\tCtrl+F12" -msgstr "&Ctrl+Alt+Del\tCtrl+F12" - -msgid "Ctrl+Alt+&Esc" -msgstr "Ctrl+Alt+&Esc" - -msgid "&Pause" -msgstr "&Premor" - -msgid "E&xit..." -msgstr "Iz&hod..." - -msgid "&View" -msgstr "&Pogled" - -msgid "&Hide status bar" -msgstr "&Skrij statusno vrstico" - -msgid "Hide &toolbar" -msgstr "Hide &toolbar" - -msgid "&Resizeable window" -msgstr "S&premenljiva velikost okna" - -msgid "R&emember size && position" -msgstr "&Zapomni si velikost in položaj" - -msgid "Re&nderer" -msgstr "&Upodabljanje" - -msgid "&SDL (Software)" -msgstr "&SDL (programsko)" - -msgid "SDL (&Hardware)" -msgstr "SDL (s&trojno)" - -msgid "SDL (&OpenGL)" -msgstr "SDL (&OpenGL)" - -msgid "Open&GL (3.0 Core)" -msgstr "Open&GL (Jedro 3.0)" - -msgid "&VNC" -msgstr "&VNC" - -msgid "Specify dimensions..." -msgstr "&Določi velikost..." - -msgid "F&orce 4:3 display ratio" -msgstr "&Vsili 4:3 razmerje zaslona" - -msgid "&Window scale factor" -msgstr "&Faktor velikosti okna" - -msgid "&0.5x" -msgstr "&0.5x" - -msgid "&1x" -msgstr "&1x" - -msgid "1.&5x" -msgstr "1.&5x" - -msgid "&2x" -msgstr "&2x" - -msgid "Filter method" -msgstr "&Metoda filtriranja" - -msgid "&Nearest" -msgstr "&Najbližja" - -msgid "&Linear" -msgstr "&Linearna" - -msgid "Hi&DPI scaling" -msgstr "&Raztezanje za visok DPI" - -msgid "&Fullscreen\tCtrl+Alt+PageUP" -msgstr "&Celozaslonski način\tCtrl+Alt+PageUP" - -msgid "Fullscreen &stretch mode" -msgstr "&Način celozaslonskega raztezanja" - -msgid "&Full screen stretch" -msgstr "&Raztegni na celoten zaslon" - -msgid "&4:3" -msgstr "&4:3" - -msgid "&Square pixels (Keep ratio)" -msgstr "&Kvadratni piksli (ohrani razmerje)" - -msgid "&Integer scale" -msgstr "&Celoštevilsko raztezanje" - -msgid "E&GA/(S)VGA settings" -msgstr "Nastavitve E&GA/(S)VGA" - -msgid "&Inverted VGA monitor" -msgstr "&Obrni barve zaslona VGA" - -msgid "VGA screen &type" -msgstr "&Vrsta zaslona VGA" - -msgid "RGB &Color" -msgstr "&Barvni RGB" - -msgid "&RGB Grayscale" -msgstr "&Sivinski RGB" - -msgid "&Amber monitor" -msgstr "&Rumeni zaslon" - -msgid "&Green monitor" -msgstr "&Zeleni zaslon" - -msgid "&White monitor" -msgstr "B&eli zaslon" - -msgid "Grayscale &conversion type" -msgstr "V&rsta pretvorbe sivin" - -msgid "BT&601 (NTSC/PAL)" -msgstr "BT&601 (NTSC/PAL)" - -msgid "BT&709 (HDTV)" -msgstr "BT&709 (HDTV)" - -msgid "&Average" -msgstr "&Povprečje" - -msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" -msgstr "&Presežek slike CGA/PCjr/Tandy/EGA/(S)VGA" - -msgid "Change contrast for &monochrome display" -msgstr "&Spremeni contrast za črno-beli zaslon" - -msgid "&Media" -msgstr "&Mediji" - -msgid "&Tools" -msgstr "&Orodja" - -msgid "&Settings..." -msgstr "&Nastavitve..." - -msgid "&Update status bar icons" -msgstr "&Posodabljaj ikone statusne vrstice" - -msgid "Take s&creenshot\tCtrl+F11" -msgstr "&Zajemi posnetek zaslona\tCtrl+F11" - -msgid "&Preferences..." -msgstr "&Možnosti..." - -msgid "Enable &Discord integration" -msgstr "Omogoči integracijo s programom &Discord" - -msgid "Sound &gain..." -msgstr "&Ojačanje zvoka..." - -msgid "Begin trace\tCtrl+T" -msgstr "Z&ačni sledenje\tCtrl+T" - -msgid "End trace\tCtrl+T" -msgstr "&Končaj sledenje\tCtrl+T" - -msgid "&Logging" -msgstr "&Beleženje" - -msgid "Enable BusLogic logs\tCtrl+F4" -msgstr "Omogoči beleženje za BusLogic\tCtrl+F4" - -msgid "Enable CD-ROM logs\tCtrl+F5" -msgstr "Omogoči beleženje za CD-ROM\tCtrl+F5" - -msgid "Enable floppy (86F) logs\tCtrl+F6" -msgstr "Omogoči beleženje za diskete (86F)\tCtrl+F6" - -msgid "Enable floppy controller logs\tCtrl+F7" -msgstr "Omogoči beleženje za disketni krmilnik\tCtrl+F7" - -msgid "Enable IDE logs\tCtrl+F8" -msgstr "Omogoči beleženje za IDE\tCtrl+F8" - -msgid "Enable Serial Port logs\tCtrl+F3" -msgstr "Omogoči beleženje za serijska vrata\tCtrl+F3" - -msgid "Enable Network logs\tCtrl+F9" -msgstr "Omogoči beleženje za omrežje\tCtrl+F9" - -msgid "&Log breakpoint\tCtrl+F10" -msgstr "&Zabeleži prelomno točko\tCtrl+F10" - -msgid "Dump &video RAM\tCtrl+F1" -msgstr "&Izvozi pomnilnik zaslona\tCtrl+F1" - -msgid "&Help" -msgstr "&Pomoč" - -msgid "&Documentation..." -msgstr "&Dokumentacija..." - -msgid "&About 86Box..." -msgstr "&O programu 86Box..." - -msgid "&New image..." -msgstr "&Nova slika..." - -msgid "&Existing image..." -msgstr "&Obstoječa slika..." - -msgid "Existing image (&Write-protected)..." -msgstr "Obstoječa slika (&samo za branje)..." - -msgid "&Record" -msgstr "Snemaj" - -msgid "&Play" -msgstr "Predvajaj" - -msgid "&Rewind to the beginning" -msgstr "Previj na začetek" - -msgid "&Fast forward to the end" -msgstr "Preskoči na konec" - -msgid "E&ject" -msgstr "Izvrzi" - -msgid "&Image..." -msgstr "Slika..." - -msgid "E&xport to 86F..." -msgstr "&Izvozi v 86F..." - -msgid "&Mute" -msgstr "&Utišaj" - -msgid "E&mpty" -msgstr "&Prazen" - -msgid "&Reload previous image" -msgstr "&Naloži zadnjo sliko" - -msgid "&Image" -msgstr "&Slika" - -msgid "Target &framerate" -msgstr "&Ciljno št. sličic na sekundo" - -msgid "&Sync with video" -msgstr "&Sinhroniziraj z videom" - -msgid "&25 fps" -msgstr "&25 fps" - -msgid "&30 fps" -msgstr "&30 fps" - -msgid "&50 fps" -msgstr "&50 fps" - -msgid "&60 fps" -msgstr "&60 fps" - -msgid "&75 fps" -msgstr "&75 fps" - -msgid "&VSync" -msgstr "&VSync" - -msgid "&Select shader..." -msgstr "&Izberi senčilnik..." - -msgid "&Remove shader" -msgstr "&Odstrani senčilnik" - -msgid "Preferences" -msgstr "Možnosti" - -msgid "Sound Gain" -msgstr "Ojačanje zvoka" - -msgid "New Image" -msgstr "Nova slika" - -msgid "Settings" -msgstr "Nastavitve" - -msgid "Specify Main Window Dimensions" -msgstr "Določi velikost glavnega okna" - -msgid "OK" -msgstr "V redu" - -msgid "Cancel" -msgstr "Prekliči" - -msgid "Save these settings as &global defaults" -msgstr "Shrani te nastavitve kot globalne privzete" - -msgid "&Default" -msgstr "Privzeto" - -msgid "Language:" -msgstr "Jezik:" - -msgid "Icon set:" -msgstr "Komplet ikon:" - -msgid "Gain" -msgstr "Ojačanje" - -msgid "File name:" -msgstr "Ime datoteke:" - -msgid "Disk size:" -msgstr "Velikost diska:" - -msgid "RPM mode:" -msgstr "Način števila obratov:" - -msgid "Progress:" -msgstr "Napredek:" - -msgid "Width:" -msgstr "Širina:" - -msgid "Height:" -msgstr "Višina:" - -msgid "Lock to this size" -msgstr "Zakleni na to velikost" - -msgid "Machine type:" -msgstr "Vrsta sistema:" - -msgid "Machine:" -msgstr "Sistem:" - -msgid "Configure" -msgstr "Nastavi" - -msgid "CPU type:" -msgstr "Vrsta procesorja:" - -msgid "Speed:" -msgstr "Hitrost:" - -msgid "FPU:" -msgstr "Procesor plavajoče vejice:" - -msgid "Wait states:" -msgstr "Čakalna stanja:" - -msgid "MB" -msgstr "MB" - -msgid "Memory:" -msgstr "Spomin:" - -msgid "Time synchronization" -msgstr "Sinhronizacija časa" - -msgid "Disabled" -msgstr "Onemogočeno" - -msgid "Enabled (local time)" -msgstr "Omogočeno (lokalni čas)" - -msgid "Enabled (UTC)" -msgstr "Omogočeno (UTC)" - -msgid "Dynamic Recompiler" -msgstr "Dinamični prevajalnik" - -msgid "Video:" -msgstr "Video:" - -msgid "Voodoo Graphics" -msgstr "Voodoo grafika" - -msgid "Mouse:" -msgstr "Miška:" - -msgid "Joystick:" -msgstr "Igralna palica:" - -msgid "Joystick 1..." -msgstr "Igralna palica 1..." - -msgid "Joystick 2..." -msgstr "Igralna palica 2..." - -msgid "Joystick 3..." -msgstr "Igralna palica 3..." - -msgid "Joystick 4..." -msgstr "Igralna palica 4..." - -msgid "Sound card:" -msgstr "Zvočna kartica:" - -msgid "MIDI Out Device:" -msgstr "Izhodna naprava MIDI:" - -msgid "MIDI In Device:" -msgstr "Vhodna naprava MIDI:" - -msgid "Standalone MPU-401" -msgstr "Samostojen MPU-401" - -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - -msgid "Use FLOAT32 sound" -msgstr "Uporabi FLOAT32 za zvok" - -msgid "Network type:" -msgstr "Vrsta omrežja:" - -msgid "PCap device:" -msgstr "Naprava PCap:" - -msgid "Network adapter:" -msgstr "Omrežna kartica:" - -msgid "LPT1 Device:" -msgstr "Naprava LPT1:" - -msgid "LPT2 Device:" -msgstr "Naprava LPT2:" - -msgid "LPT3 Device:" -msgstr "Naprava LPT3:" - -msgid "Serial port 1" -msgstr "Serijska vrata 1" - -msgid "Serial port 2" -msgstr "Serijska vrata 2" - -msgid "Serial port 3" -msgstr "Serijska vrata 3" - -msgid "Serial port 4" -msgstr "Serijska vrata 4" - -msgid "Parallel port 1" -msgstr "Paralelna vrata 1" - -msgid "Parallel port 2" -msgstr "Paralelna vrata 2" - -msgid "Parallel port 3" -msgstr "Paralelna vrata 3" - -msgid "HD Controller:" -msgstr "Krmilnik trdega diska:" - -msgid "FD Controller:" -msgstr "Krmilnik disketnika:" - -msgid "Tertiary IDE Controller" -msgstr "Terciarni krmilnik IDE" - -msgid "Quaternary IDE Controller" -msgstr "Kvartarni krmilnik IDE" - -msgid "SCSI" -msgstr "SCSI" - -msgid "Controller 1:" -msgstr "Krmilnik 1:" - -msgid "Controller 2:" -msgstr "Krmilnik 2:" - -msgid "Controller 3:" -msgstr "Krmilnik 3:" - -msgid "Controller 4:" -msgstr "Krmilnik 4:" - -msgid "Cassette" -msgstr "Kasetnik" - -msgid "Hard disks:" -msgstr "Trdi diski:" - -msgid "&New..." -msgstr "Nov..." - -msgid "&Existing..." -msgstr "Obstoječ..." - -msgid "&Remove" -msgstr "Odstrani" - -msgid "Bus:" -msgstr "Vodilo:" - -msgid "Channel:" -msgstr "Kanal:" - -msgid "ID:" -msgstr "ID:" - -msgid "&Specify..." -msgstr "Določi..." - -msgid "Sectors:" -msgstr "Sektorji:" - -msgid "Heads:" -msgstr "Glave:" - -msgid "Cylinders:" -msgstr "Cilindri:" - -msgid "Size (MB):" -msgstr "Velikost (MB):" - -msgid "Type:" -msgstr "Vrsta:" - -msgid "Image Format:" -msgstr "Format slike:" - -msgid "Block Size:" -msgstr "Velikost bloka:" - -msgid "Floppy drives:" -msgstr "Disketni pogoni:" - -msgid "Turbo timings" -msgstr "Turbo časovniki" - -msgid "Check BPB" -msgstr "Preverjaj BPB" - -msgid "CD-ROM drives:" -msgstr "Pogoni CD-ROM:" - -msgid "MO drives:" -msgstr "Magnetno-optični pogoni:" - -msgid "ZIP drives:" -msgstr "Pogoni ZIP:" - -msgid "ZIP 250" -msgstr "ZIP 250" - -msgid "ISA RTC:" -msgstr "Ura v realnem času ISA:" - -msgid "ISA Memory Expansion" -msgstr "Razširitev spomina ISA" - -msgid "Card 1:" -msgstr "Kartica 1:" - -msgid "Card 2:" -msgstr "Kartica 2:" - -msgid "Card 3:" -msgstr "Kartica 3:" - -msgid "Card 4:" -msgstr "Kartica 4:" - -msgid "ISABugger device" -msgstr "Naprava ISABugger" - -msgid "POST card" -msgstr "Kartica POST" - -msgid "FONT_SIZE" -msgstr "9" - -msgid "FONT_NAME" -msgstr "Segoe UI" - -msgid "86Box" -msgstr "86Box" - -msgid "Error" -msgstr "Napaka" - -msgid "Fatal error" -msgstr "Kritična napaka" - -msgid "" -msgstr "" - -msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." -msgstr "Pritisnite CTRL+ALT+PAGE DOWN za povratek iz celozaslonskega načina." - -msgid "Speed" -msgstr "Hitrost" - -msgid "ZIP %03i %i (%s): %ls" -msgstr "ZIP %03i %i (%s): %ls" - -msgid "ZIP images (*.im? *.zdi)" -msgstr "ZIP slike (*.im? *.zdi)" - -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "86Box ni našel nobenih uporabnih ROM slik.\n\nProsim prenesite set ROM-ov in ga razširite v mapo \"roms\"." - -msgid "(empty)" -msgstr "(prazno)" - -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "ZIP slike (*.im? *.zdi);;Vse datoteke (*.*)" - -msgid "Turbo" -msgstr "Turbo" - -msgid "On" -msgstr "Vključeno" - -msgid "Off" -msgstr "Izključeno" - -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "Vse slike (*.86f *.dsk *.flp *.im? *.*fd?);;Osnovne sektorske slike (*.dsk *.flp *.im? *.img *.*fd?);;Površinske slike (*.86f)" - -msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "Sistem \"%hs\" ni na voljo zaradi manjkajočih ROM-ov v mapi roms/machines. Preklapljam na drug sistem, ki je na voljo." - -msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "Grafična kartica \"%hs\" ni na voljo zaradi manjkajočih ROM-ov v mapi roms/video. Preklapljam na drugo grafično kartico, ki je na voljo.." - -msgid "Machine" -msgstr "Sistem" - -msgid "Display" -msgstr "Zaslon" - -msgid "Input devices" -msgstr "Vhodne naprave" - -msgid "Sound" -msgstr "Zvok" - -msgid "Network" -msgstr "Omrežje" - -msgid "Ports (COM & LPT)" -msgstr "Vrata (COM & LPT)" - -msgid "Storage controllers" -msgstr "Krmilniki shrambe" - -msgid "Hard disks" -msgstr "Trdi diski" - -msgid "Floppy & CD-ROM drives" -msgstr "Disketni in CD-ROM pogoni" - -msgid "Other removable devices" -msgstr "Druge odstranljive naprave" - -msgid "Other peripherals" -msgstr "Druga periferija" - -msgid "Surface images (*.86f)" -msgstr "Površinske slike (*.86f)" - -msgid "Click to capture mouse" -msgstr "Kliknite za zajem miške" - -msgid "Press F8+F12 to release mouse" -msgstr "Pritisnite F8+F12 za izpust miške" - -msgid "Press F8+F12 or middle button to release mouse" -msgstr "Pritisnite F8+F12 ali srednji gumb za izpust miške" - -msgid "Unable to initialize FluidSynth" -msgstr "Ne morem inicializirati FluidSynth" - -msgid "Bus" -msgstr "Vodilo" - -msgid "File" -msgstr "Datoteka" - -msgid "C" -msgstr "C" - -msgid "H" -msgstr "H" - -msgid "S" -msgstr "S" - -msgid "KB" -msgstr "KB" - -msgid "Could not initialize the video renderer." -msgstr "Ne morem inicializirati pogona upodabljanja." - -msgid "Default" -msgstr "Privzeto" - -msgid "%i Wait state(s)" -msgstr "%i stanj čakanja" - -msgid "Type" -msgstr "Vrsta" - -msgid "Failed to set up PCap" -msgstr "Nastavitev PCap ni uspela" - -msgid "No PCap devices found" -msgstr "Nobena naprava PCap ni bila najdena" - -msgid "Invalid PCap device" -msgstr "Neveljavna naprava PCap" - -msgid "Standard 2-button joystick(s)" -msgstr "Standardna krmilna palica z 2 gumboma" - -msgid "Standard 4-button joystick" -msgstr "Standardna krmilna palica s 4 gumbi" - -msgid "Standard 6-button joystick" -msgstr "Standardna krmilna palica s 6 gumbi" - -msgid "Standard 8-button joystick" -msgstr "Standardna krmilna palica z 8 gumbi" - -msgid "CH Flightstick Pro" -msgstr "CH Flightstick Pro" - -msgid "Microsoft SideWinder Pad" -msgstr "Microsoft SideWinder Pad" - -msgid "Thrustmaster Flight Control System" -msgstr "Thrustmaster Flight Control System" - -msgid "None" -msgstr "Brez" - -msgid "Unable to load keyboard accelerators." -msgstr "Ne morem naložiti pospeševalnikov tipkovnice." - -msgid "Unable to register raw input." -msgstr "Ne morem registrirati neobdelanega vnosa." - -msgid "%u" -msgstr "%u" - -msgid "%u MB (CHS: %i, %i, %i)" -msgstr "%u MB (CHS: %i, %i, %i)" - -msgid "Floppy %i (%s): %ls" -msgstr "Disketa %i (%s): %ls" - -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "Vse slike (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Napredne sektorske slike (*.imd *.json *.td0);;Osnovne sektorske slike (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Tokovne slike (*.fdi);;Površinske slike (*.86f *.mfm);;Vse datoteke (*.*)" - -msgid "Unable to initialize FreeType" -msgstr "Ne morem inicializirati FreeType" - -msgid "Unable to initialize SDL, SDL2.dll is required" -msgstr "Ne morem inicializirati SDL, potrebna je knjižica SDL2.dll" - -msgid "Are you sure you want to hard reset the emulated machine?" -msgstr "Ste prepričani, da želite ponovno zagnati emulirani sistem?" - -msgid "Are you sure you want to exit 86Box?" -msgstr "Ste prepričani, da želite zapreti 86Box?" - -msgid "Unable to initialize Ghostscript" -msgstr "Ne morem inicializirati Ghostscript" - -msgid "MO %i (%ls): %ls" -msgstr "MO %i (%ls): %ls" - -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "Slike MO (*.im? *.mdi);;Vse datoteke (*.*)" - -msgid "Welcome to 86Box!" -msgstr "Dobrodošli v 86Box!" - -msgid "Internal controller" -msgstr "Notranji krmilnik" - -msgid "Exit" -msgstr "Izhod" - -msgid "No ROMs found" -msgstr "Nobeni ROM-i niso bili najdeni" - -msgid "Do you want to save the settings?" -msgstr "Želite shraniti nastavitve?" - -msgid "This will hard reset the emulated machine." -msgstr "To bo ponovno zagnalo emuliran sistem." - -msgid "Save" -msgstr "Shrani" - -msgid "About 86Box" -msgstr "O programu 86Box" - -msgid "86Box v" -msgstr "86Box v" - -msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "Emulator starih računalnikov\n\nAvtorji: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho in drugi.\n\nIzdano pod licenco GNU General Public License različica 2 ali novejša. Glej datoteko LICENSE za več informacij." - -msgid "Hardware not available" -msgstr "Strojna oprema ni na voljo" - -msgid "WinPcap" -msgstr "WinPcap" - -msgid "libpcap" -msgstr "libpcap" - -msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." -msgstr "Prepičajte se, da je nameščen libpcap in da ste na omrežni povezavi, združljivi z " - -msgid "Invalid configuration" -msgstr "Neveljavna konfiguracija" - -msgid "freetype.dll" -msgstr "freetype.dll" - -msgid "libfreetype" -msgstr "libfreetype" - -msgid " is required for ESC/P printer emulation." -msgstr " je potreben za emuliranje ESC/P tiskalnika." - -msgid "gsdll32.dll" -msgstr "gsdll32.dll" - -msgid "libgs" -msgstr "libgs" - -msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." -msgstr " je potreben za samodejno pretvorbo PostScript datotek v PDF.\n\nVsi dokumenti, poslani generičnemu PostScript tiskalniku bodo shranjeni kot PostScript (.ps) datoteke." - -msgid "libfluidsynth.dll" -msgstr "libfluidsynth.dll" - -msgid "libfluidsynth" -msgstr "libfluidsynth" - -msgid " is required for FluidSynth MIDI output." -msgstr " je potreben za FluidSynth MIDI izhod." - -msgid "Entering fullscreen mode" -msgstr "Preklapljam v celozaslonski način" - -msgid "Don't show this message again" -msgstr "Ne pokaži več tega sporočila" - -msgid "Don't exit" -msgstr "Prekliči izhod" - -msgid "Reset" -msgstr "Resetiraj" - -msgid "Don't reset" -msgstr "Ne resetiraj" - -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "Slike CD-ROM (*.iso *.cue);;Vse datoteke (*.*)" - -msgid "%hs Device Configuration" -msgstr "Konfiguracija naprave %hs" - -msgid "Monitor in sleep mode" -msgstr "Zaslon v načinu spanja" - -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "Senčilniki OpenGL (*.glsl);;Vse datoteke (*.*)" - -msgid "OpenGL options" -msgstr "Možnosti OpenGL" - -msgid "You are loading an unsupported configuration" -msgstr "Nalagate nepodprto konfiguracijo" - -msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "Filtriranje vrste procesorja glede na izbran sistem je onemogočeno za ta emuliran sistem.\n\nTako lahko izberete procesor, ki je sicer nezdružljiv z izbranim sistemom. Vendar lahko naletite na nezdružljivosti z BIOS-om sistema ali drugo programsko opremo\n\nOmogočanje te nastavitve ni uradno podprto, vsa poročila o hroščih iz tega naslova pa bodo zaprta kot neveljavna." - -msgid "Continue" -msgstr "Nadaljuj" - -msgid "Cassette: %s" -msgstr "Kaseta: %s" - -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Slike kaset (*.pcm *.raw *.wav *.cas);;Vse datoteke (*.*)" - -msgid "Cartridge %i: %ls" -msgstr "Spominski vložek %i: %ls" - -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "Slike spominskega vložka (*.a *.b *.jrc);;Vse datoteke (*.*)" - -msgid "Error initializing renderer" -msgstr "Error initializing renderer" - -msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." - -msgid "Resume execution" -msgstr "Resume execution" - -msgid "Pause execution" -msgstr "Pause execution" - -msgid "Press Ctrl+Alt+Del" -msgstr "Press Ctrl+Alt+Del" - -msgid "Press Ctrl+Alt+Esc" -msgstr "Press Ctrl+Alt+Esc" - -msgid "Hard reset" -msgstr "Hard reset" - -msgid "ACPI shutdown" -msgstr "ACPI shutdown" - -msgid "Hard disk (%s)" -msgstr "Trdi disk (%s)" - -msgid "%01i:%01i" -msgstr "%01i:%01i" - -msgid "%01i" -msgstr "%01i" - -msgid "MFM/RLL or ESDI CD-ROM drives never existed" -msgstr "MFM/RLL ali ESDI pogoni CD-ROM niso nikoli obstajali" - -msgid "Custom..." -msgstr "Po meri..." - -msgid "Custom (large)..." -msgstr "Po meri (velik)..." - -msgid "Add New Hard Disk" -msgstr "Dodaj nov trdi disk" - -msgid "Add Existing Hard Disk" -msgstr "Dodaj obstoječ trdi disk" - -msgid "HDI disk images cannot be larger than 4 GB." -msgstr "Slike diska HDI ne morejo biti večje od 4 GB." - -msgid "Disk images cannot be larger than 127 GB." -msgstr "Slike diska ne morejo biti večje od 127 GB." - -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Slike trdega diska (*.hd? *.im? *.vhd);;Vse datoteke (*.*)" - -msgid "Unable to read file" -msgstr "Ne morem prebrati datoteke" - -msgid "Unable to write file" -msgstr "Ne morem pisati v datoteko" - -msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "Slike HDI ali HDX, ki nimajo sektorjev velikosti 512 bajtov, niso podprte." - -msgid "USB is not yet supported" -msgstr "USB še ni podprt" - -msgid "Disk image file already exists" -msgstr "Datoteka s sliko diska že obstaja" - -msgid "Please specify a valid file name." -msgstr "Prosim, navedite veljavno ime datoteke." - -msgid "Disk image created" -msgstr "Slika diska ustvarjena" - -msgid "Make sure the file exists and is readable." -msgstr "Prepričajte se, da datoteka obstaja in je berljiva." - -msgid "Make sure the file is being saved to a writable directory." -msgstr "Prepričajte se, da datoteko shranjujete v zapisljivo mapo." - -msgid "Disk image too large" -msgstr "Slika diska je prevelika" - -msgid "Remember to partition and format the newly-created drive." -msgstr "Ne pozabite na novem disku ustvariti particij in jih formatirati." - -msgid "The selected file will be overwritten. Are you sure you want to use it?" -msgstr "Izbrana datoteka bo prepisana. Ali jo res želite uporabiti?" - -msgid "Unsupported disk image" -msgstr "Nepodprta slika diska" - -msgid "Overwrite" -msgstr "Prepiši" - -msgid "Don't overwrite" -msgstr "Ne prepiši" - -msgid "Raw image (.img)" -msgstr "Surova slika (.img)" - -msgid "HDI image (.hdi)" -msgstr "Slika HDI (.hdi)" - -msgid "HDX image (.hdx)" -msgstr "Slika HDX (.hdx)" - -msgid "Fixed-size VHD (.vhd)" -msgstr "VHD fiksne velikosti (.vhd)" - -msgid "Dynamic-size VHD (.vhd)" -msgstr "Dinamičen VHD (.vhd)" - -msgid "Differencing VHD (.vhd)" -msgstr "Diferencialni VHD (.vhd)" - -msgid "Large blocks (2 MB)" -msgstr "Veliki bloki (2 MB)" - -msgid "Small blocks (512 KB)" -msgstr "Mali bloki (512 KB)" - -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "Datoteke VHD (*.vhd);;Vse datoteke (*.*)" - -msgid "Select the parent VHD" -msgstr "Izberite starševsko sliko VHD" - -msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" -msgstr "To lahko pomeni, da je bila starševska slika spremenjena potem, ko je že bila ustvarjena diferencialna slika.\n\nDo tega lahko pride tudi kadar so datoteke slik diska premaknjene ali kopirane, ali pa gre za hrošča v programu, ki je ustvaril ta disk.\n\nŽelite popraviti časovni žig?" - -msgid "Parent and child disk timestamps do not match" -msgstr "Časovna žiga starševske slike diska in slike diska otroka se ne ujemata" - -msgid "Could not fix VHD timestamp." -msgstr "Ne morem popraviti časovnega žiga slike VHD." - -msgid "%01i:%02i" -msgstr "%01i:%02i" - -msgid "MFM/RLL" -msgstr "MFM/RLL" - -msgid "XTA" -msgstr "XTA" - -msgid "ESDI" -msgstr "ESDI" - -msgid "IDE" -msgstr "IDE" - -msgid "ATAPI" -msgstr "ATAPI" - -msgid "MFM/RLL (%01i:%01i)" -msgstr "MFM/RLL (%01i:%01i)" - -msgid "XTA (%01i:%01i)" -msgstr "XTA (%01i:%01i)" - -msgid "ESDI (%01i:%01i)" -msgstr "ESDI (%01i:%01i)" - -msgid "IDE (%01i:%01i)" -msgstr "IDE (%01i:%01i)" - -msgid "ATAPI (%01i:%01i)" -msgstr "ATAPI (%01i:%01i)" - -msgid "SCSI (%01i:%02i)" -msgstr "SCSI (%01i:%02i)" - -msgid "CD-ROM %i (%s): %s" -msgstr "CD-ROM %i (%s): %s" - -msgid "160 kB" -msgstr "160 kB" - -msgid "180 kB" -msgstr "180 kB" - -msgid "320 kB" -msgstr "320 kB" - -msgid "360 kB" -msgstr "360 kB" - -msgid "640 kB" -msgstr "640 kB" - -msgid "720 kB" -msgstr "720 kB" - -msgid "1.2 MB" -msgstr "1.2 MB" - -msgid "1.25 MB" -msgstr "1.25 MB" - -msgid "1.44 MB" -msgstr "1.44 MB" - -msgid "DMF (cluster 1024)" -msgstr "DMF (grozd 1024)" - -msgid "DMF (cluster 2048)" -msgstr "DMF (grozd 2048)" - -msgid "2.88 MB" -msgstr "2.88 MB" - -msgid "ZIP 100" -msgstr "ZIP 100" - -msgid "3.5\" 128Mb M.O. (ISO 10090)" -msgstr "3.5\" 128Mb M.O. (ISO 10090)" - -msgid "3.5\" 230Mb M.O. (ISO 13963)" -msgstr "3.5\" 230Mb M.O. (ISO 13963)" - -msgid "3.5\" 540Mb M.O. (ISO 15498)" -msgstr "3.5\" 540Mb M.O. (ISO 15498)" - -msgid "3.5\" 640Mb M.O. (ISO 15498)" -msgstr "3.5\" 640Mb M.O. (ISO 15498)" - -msgid "3.5\" 1.3Gb M.O. (GigaMO)" -msgstr "3.5\" 1.3Gb M.O. (GigaMO)" - -msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" - -msgid "5.25\" 600Mb M.O." -msgstr "5.25\" 600Mb M.O." - -msgid "5.25\" 650Mb M.O." -msgstr "5.25\" 650Mb M.O." - -msgid "5.25\" 1Gb M.O." -msgstr "5.25\" 1Gb M.O." - -msgid "5.25\" 1.3Gb M.O." -msgstr "5.25\" 1.3Gb M.O." - -msgid "Perfect RPM" -msgstr "Popolni obrati na minuto" - -msgid "1%% below perfect RPM" -msgstr "1%% pod popolnimi obrati" - -msgid "1.5%% below perfect RPM" -msgstr "1.5%% pod popolnimi obrati" - -msgid "2%% below perfect RPM" -msgstr "2%% pod popolnimi obrati" - -msgid "(System Default)" -msgstr "(Sistemsko privzeto)" - +msgid "&Action" +msgstr "&Dejanja" + +msgid "&Keyboard requires capture" +msgstr "&Tipkovnica potrebuje zajem" + +msgid "&Right CTRL is left ALT" +msgstr "&Desni CTRL je levi ALT" + +msgid "&Hard Reset..." +msgstr "&Ponovni zagon..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Premor" + +msgid "E&xit..." +msgstr "Iz&hod..." + +msgid "&View" +msgstr "&Pogled" + +msgid "&Hide status bar" +msgstr "&Skrij statusno vrstico" + +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + +msgid "&Resizeable window" +msgstr "S&premenljiva velikost okna" + +msgid "R&emember size && position" +msgstr "&Zapomni si velikost in položaj" + +msgid "Re&nderer" +msgstr "&Upodabljanje" + +msgid "&SDL (Software)" +msgstr "&SDL (programsko)" + +msgid "SDL (&Hardware)" +msgstr "SDL (s&trojno)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (Jedro 3.0)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "&Določi velikost..." + +msgid "F&orce 4:3 display ratio" +msgstr "&Vsili 4:3 razmerje zaslona" + +msgid "&Window scale factor" +msgstr "&Faktor velikosti okna" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "&Metoda filtriranja" + +msgid "&Nearest" +msgstr "&Najbližja" + +msgid "&Linear" +msgstr "&Linearna" + +msgid "Hi&DPI scaling" +msgstr "&Raztezanje za visok DPI" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Celozaslonski način\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "&Način celozaslonskega raztezanja" + +msgid "&Full screen stretch" +msgstr "&Raztegni na celoten zaslon" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Kvadratni piksli (ohrani razmerje)" + +msgid "&Integer scale" +msgstr "&Celoštevilsko raztezanje" + +msgid "E&GA/(S)VGA settings" +msgstr "Nastavitve E&GA/(S)VGA" + +msgid "&Inverted VGA monitor" +msgstr "&Obrni barve zaslona VGA" + +msgid "VGA screen &type" +msgstr "&Vrsta zaslona VGA" + +msgid "RGB &Color" +msgstr "&Barvni RGB" + +msgid "&RGB Grayscale" +msgstr "&Sivinski RGB" + +msgid "&Amber monitor" +msgstr "&Rumeni zaslon" + +msgid "&Green monitor" +msgstr "&Zeleni zaslon" + +msgid "&White monitor" +msgstr "B&eli zaslon" + +msgid "Grayscale &conversion type" +msgstr "V&rsta pretvorbe sivin" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Povprečje" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "&Presežek slike CGA/PCjr/Tandy/EGA/(S)VGA" + +msgid "Change contrast for &monochrome display" +msgstr "&Spremeni contrast za črno-beli zaslon" + +msgid "&Media" +msgstr "&Mediji" + +msgid "&Tools" +msgstr "&Orodja" + +msgid "&Settings..." +msgstr "&Nastavitve..." + +msgid "&Update status bar icons" +msgstr "&Posodabljaj ikone statusne vrstice" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "&Zajemi posnetek zaslona\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Možnosti..." + +msgid "Enable &Discord integration" +msgstr "Omogoči integracijo s programom &Discord" + +msgid "Sound &gain..." +msgstr "&Ojačanje zvoka..." + +msgid "Begin trace\tCtrl+T" +msgstr "Z&ačni sledenje\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "&Končaj sledenje\tCtrl+T" + +msgid "&Logging" +msgstr "&Beleženje" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Omogoči beleženje za BusLogic\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Omogoči beleženje za CD-ROM\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Omogoči beleženje za diskete (86F)\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Omogoči beleženje za disketni krmilnik\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Omogoči beleženje za IDE\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Omogoči beleženje za serijska vrata\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Omogoči beleženje za omrežje\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Zabeleži prelomno točko\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "&Izvozi pomnilnik zaslona\tCtrl+F1" + +msgid "&Help" +msgstr "&Pomoč" + +msgid "&Documentation..." +msgstr "&Dokumentacija..." + +msgid "&About 86Box..." +msgstr "&O programu 86Box..." + +msgid "&New image..." +msgstr "&Nova slika..." + +msgid "&Existing image..." +msgstr "&Obstoječa slika..." + +msgid "Existing image (&Write-protected)..." +msgstr "Obstoječa slika (&samo za branje)..." + +msgid "&Record" +msgstr "Snemaj" + +msgid "&Play" +msgstr "Predvajaj" + +msgid "&Rewind to the beginning" +msgstr "Previj na začetek" + +msgid "&Fast forward to the end" +msgstr "Preskoči na konec" + +msgid "E&ject" +msgstr "Izvrzi" + +msgid "&Image..." +msgstr "Slika..." + +msgid "E&xport to 86F..." +msgstr "&Izvozi v 86F..." + +msgid "&Mute" +msgstr "&Utišaj" + +msgid "E&mpty" +msgstr "&Prazen" + +msgid "&Reload previous image" +msgstr "&Naloži zadnjo sliko" + +msgid "&Image" +msgstr "&Slika" + +msgid "Target &framerate" +msgstr "&Ciljno št. sličic na sekundo" + +msgid "&Sync with video" +msgstr "&Sinhroniziraj z videom" + +msgid "&25 fps" +msgstr "&25 fps" + +msgid "&30 fps" +msgstr "&30 fps" + +msgid "&50 fps" +msgstr "&50 fps" + +msgid "&60 fps" +msgstr "&60 fps" + +msgid "&75 fps" +msgstr "&75 fps" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Izberi senčilnik..." + +msgid "&Remove shader" +msgstr "&Odstrani senčilnik" + +msgid "Preferences" +msgstr "Možnosti" + +msgid "Sound Gain" +msgstr "Ojačanje zvoka" + +msgid "New Image" +msgstr "Nova slika" + +msgid "Settings" +msgstr "Nastavitve" + +msgid "Specify Main Window Dimensions" +msgstr "Določi velikost glavnega okna" + +msgid "OK" +msgstr "V redu" + +msgid "Cancel" +msgstr "Prekliči" + +msgid "Save these settings as &global defaults" +msgstr "Shrani te nastavitve kot globalne privzete" + +msgid "&Default" +msgstr "Privzeto" + +msgid "Language:" +msgstr "Jezik:" + +msgid "Icon set:" +msgstr "Komplet ikon:" + +msgid "Gain" +msgstr "Ojačanje" + +msgid "File name:" +msgstr "Ime datoteke:" + +msgid "Disk size:" +msgstr "Velikost diska:" + +msgid "RPM mode:" +msgstr "Način števila obratov:" + +msgid "Progress:" +msgstr "Napredek:" + +msgid "Width:" +msgstr "Širina:" + +msgid "Height:" +msgstr "Višina:" + +msgid "Lock to this size" +msgstr "Zakleni na to velikost" + +msgid "Machine type:" +msgstr "Vrsta sistema:" + +msgid "Machine:" +msgstr "Sistem:" + +msgid "Configure" +msgstr "Nastavi" + +msgid "CPU type:" +msgstr "Vrsta procesorja:" + +msgid "Speed:" +msgstr "Hitrost:" + +msgid "FPU:" +msgstr "Procesor plavajoče vejice:" + +msgid "Wait states:" +msgstr "Čakalna stanja:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Spomin:" + +msgid "Time synchronization" +msgstr "Sinhronizacija časa" + +msgid "Disabled" +msgstr "Onemogočeno" + +msgid "Enabled (local time)" +msgstr "Omogočeno (lokalni čas)" + +msgid "Enabled (UTC)" +msgstr "Omogočeno (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Dinamični prevajalnik" + +msgid "Video:" +msgstr "Video:" + +msgid "Voodoo Graphics" +msgstr "Voodoo grafika" + +msgid "Mouse:" +msgstr "Miška:" + +msgid "Joystick:" +msgstr "Igralna palica:" + +msgid "Joystick 1..." +msgstr "Igralna palica 1..." + +msgid "Joystick 2..." +msgstr "Igralna palica 2..." + +msgid "Joystick 3..." +msgstr "Igralna palica 3..." + +msgid "Joystick 4..." +msgstr "Igralna palica 4..." + +msgid "Sound card:" +msgstr "Zvočna kartica:" + +msgid "MIDI Out Device:" +msgstr "Izhodna naprava MIDI:" + +msgid "MIDI In Device:" +msgstr "Vhodna naprava MIDI:" + +msgid "Standalone MPU-401" +msgstr "Samostojen MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "Uporabi FLOAT32 za zvok" + +msgid "Network type:" +msgstr "Vrsta omrežja:" + +msgid "PCap device:" +msgstr "Naprava PCap:" + +msgid "Network adapter:" +msgstr "Omrežna kartica:" + +msgid "LPT1 Device:" +msgstr "Naprava LPT1:" + +msgid "LPT2 Device:" +msgstr "Naprava LPT2:" + +msgid "LPT3 Device:" +msgstr "Naprava LPT3:" + +msgid "Serial port 1" +msgstr "Serijska vrata 1" + +msgid "Serial port 2" +msgstr "Serijska vrata 2" + +msgid "Serial port 3" +msgstr "Serijska vrata 3" + +msgid "Serial port 4" +msgstr "Serijska vrata 4" + +msgid "Parallel port 1" +msgstr "Paralelna vrata 1" + +msgid "Parallel port 2" +msgstr "Paralelna vrata 2" + +msgid "Parallel port 3" +msgstr "Paralelna vrata 3" + +msgid "HD Controller:" +msgstr "Krmilnik trdega diska:" + +msgid "FD Controller:" +msgstr "Krmilnik disketnika:" + +msgid "Tertiary IDE Controller" +msgstr "Terciarni krmilnik IDE" + +msgid "Quaternary IDE Controller" +msgstr "Kvartarni krmilnik IDE" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Krmilnik 1:" + +msgid "Controller 2:" +msgstr "Krmilnik 2:" + +msgid "Controller 3:" +msgstr "Krmilnik 3:" + +msgid "Controller 4:" +msgstr "Krmilnik 4:" + +msgid "Cassette" +msgstr "Kasetnik" + +msgid "Hard disks:" +msgstr "Trdi diski:" + +msgid "&New..." +msgstr "Nov..." + +msgid "&Existing..." +msgstr "Obstoječ..." + +msgid "&Remove" +msgstr "Odstrani" + +msgid "Bus:" +msgstr "Vodilo:" + +msgid "Channel:" +msgstr "Kanal:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "Določi..." + +msgid "Sectors:" +msgstr "Sektorji:" + +msgid "Heads:" +msgstr "Glave:" + +msgid "Cylinders:" +msgstr "Cilindri:" + +msgid "Size (MB):" +msgstr "Velikost (MB):" + +msgid "Type:" +msgstr "Vrsta:" + +msgid "Image Format:" +msgstr "Format slike:" + +msgid "Block Size:" +msgstr "Velikost bloka:" + +msgid "Floppy drives:" +msgstr "Disketni pogoni:" + +msgid "Turbo timings" +msgstr "Turbo časovniki" + +msgid "Check BPB" +msgstr "Preverjaj BPB" + +msgid "CD-ROM drives:" +msgstr "Pogoni CD-ROM:" + +msgid "MO drives:" +msgstr "Magnetno-optični pogoni:" + +msgid "ZIP drives:" +msgstr "Pogoni ZIP:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "Ura v realnem času ISA:" + +msgid "ISA Memory Expansion" +msgstr "Razširitev spomina ISA" + +msgid "Card 1:" +msgstr "Kartica 1:" + +msgid "Card 2:" +msgstr "Kartica 2:" + +msgid "Card 3:" +msgstr "Kartica 3:" + +msgid "Card 4:" +msgstr "Kartica 4:" + +msgid "ISABugger device" +msgstr "Naprava ISABugger" + +msgid "POST card" +msgstr "Kartica POST" + +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Napaka" + +msgid "Fatal error" +msgstr "Kritična napaka" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Pritisnite CTRL+ALT+PAGE DOWN za povratek iz celozaslonskega načina." + +msgid "Speed" +msgstr "Hitrost" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.im? *.zdi)" +msgstr "ZIP slike (*.im? *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box ni našel nobenih uporabnih ROM slik.\n\nProsim prenesite set ROM-ov in ga razširite v mapo \"roms\"." + +msgid "(empty)" +msgstr "(prazno)" + +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "ZIP slike (*.im? *.zdi);;Vse datoteke (*.*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Vključeno" + +msgid "Off" +msgstr "Izključeno" + +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "Vse slike (*.86f *.dsk *.flp *.im? *.*fd?);;Osnovne sektorske slike (*.dsk *.flp *.im? *.img *.*fd?);;Površinske slike (*.86f)" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Sistem \"%hs\" ni na voljo zaradi manjkajočih ROM-ov v mapi roms/machines. Preklapljam na drug sistem, ki je na voljo." + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Grafična kartica \"%hs\" ni na voljo zaradi manjkajočih ROM-ov v mapi roms/video. Preklapljam na drugo grafično kartico, ki je na voljo.." + +msgid "Machine" +msgstr "Sistem" + +msgid "Display" +msgstr "Zaslon" + +msgid "Input devices" +msgstr "Vhodne naprave" + +msgid "Sound" +msgstr "Zvok" + +msgid "Network" +msgstr "Omrežje" + +msgid "Ports (COM & LPT)" +msgstr "Vrata (COM & LPT)" + +msgid "Storage controllers" +msgstr "Krmilniki shrambe" + +msgid "Hard disks" +msgstr "Trdi diski" + +msgid "Floppy & CD-ROM drives" +msgstr "Disketni in CD-ROM pogoni" + +msgid "Other removable devices" +msgstr "Druge odstranljive naprave" + +msgid "Other peripherals" +msgstr "Druga periferija" + +msgid "Surface images (*.86f)" +msgstr "Površinske slike (*.86f)" + +msgid "Click to capture mouse" +msgstr "Kliknite za zajem miške" + +msgid "Press F8+F12 to release mouse" +msgstr "Pritisnite F8+F12 za izpust miške" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Pritisnite F8+F12 ali srednji gumb za izpust miške" + +msgid "Unable to initialize FluidSynth" +msgstr "Ne morem inicializirati FluidSynth" + +msgid "Bus" +msgstr "Vodilo" + +msgid "File" +msgstr "Datoteka" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Ne morem inicializirati pogona upodabljanja." + +msgid "Default" +msgstr "Privzeto" + +msgid "%i Wait state(s)" +msgstr "%i stanj čakanja" + +msgid "Type" +msgstr "Vrsta" + +msgid "Failed to set up PCap" +msgstr "Nastavitev PCap ni uspela" + +msgid "No PCap devices found" +msgstr "Nobena naprava PCap ni bila najdena" + +msgid "Invalid PCap device" +msgstr "Neveljavna naprava PCap" + +msgid "Standard 2-button joystick(s)" +msgstr "Standardna krmilna palica z 2 gumboma" + +msgid "Standard 4-button joystick" +msgstr "Standardna krmilna palica s 4 gumbi" + +msgid "Standard 6-button joystick" +msgstr "Standardna krmilna palica s 6 gumbi" + +msgid "Standard 8-button joystick" +msgstr "Standardna krmilna palica z 8 gumbi" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "Brez" + +msgid "Unable to load keyboard accelerators." +msgstr "Ne morem naložiti pospeševalnikov tipkovnice." + +msgid "Unable to register raw input." +msgstr "Ne morem registrirati neobdelanega vnosa." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Disketa %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "Vse slike (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Napredne sektorske slike (*.imd *.json *.td0);;Osnovne sektorske slike (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Tokovne slike (*.fdi);;Površinske slike (*.86f *.mfm);;Vse datoteke (*.*)" + +msgid "Unable to initialize FreeType" +msgstr "Ne morem inicializirati FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Ne morem inicializirati SDL, potrebna je knjižica SDL2.dll" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Ste prepričani, da želite ponovno zagnati emulirani sistem?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Ste prepričani, da želite zapreti 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Ne morem inicializirati Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "Slike MO (*.im? *.mdi);;Vse datoteke (*.*)" + +msgid "Welcome to 86Box!" +msgstr "Dobrodošli v 86Box!" + +msgid "Internal controller" +msgstr "Notranji krmilnik" + +msgid "Exit" +msgstr "Izhod" + +msgid "No ROMs found" +msgstr "Nobeni ROM-i niso bili najdeni" + +msgid "Do you want to save the settings?" +msgstr "Želite shraniti nastavitve?" + +msgid "This will hard reset the emulated machine." +msgstr "To bo ponovno zagnalo emuliran sistem." + +msgid "Save" +msgstr "Shrani" + +msgid "About 86Box" +msgstr "O programu 86Box" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Emulator starih računalnikov\n\nAvtorji: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho in drugi.\n\nIzdano pod licenco GNU General Public License različica 2 ali novejša. Glej datoteko LICENSE za več informacij." + +msgid "Hardware not available" +msgstr "Strojna oprema ni na voljo" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Prepičajte se, da je nameščen libpcap in da ste na omrežni povezavi, združljivi z " + +msgid "Invalid configuration" +msgstr "Neveljavna konfiguracija" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " je potreben za emuliranje ESC/P tiskalnika." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " je potreben za samodejno pretvorbo PostScript datotek v PDF.\n\nVsi dokumenti, poslani generičnemu PostScript tiskalniku bodo shranjeni kot PostScript (.ps) datoteke." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " je potreben za FluidSynth MIDI izhod." + +msgid "Entering fullscreen mode" +msgstr "Preklapljam v celozaslonski način" + +msgid "Don't show this message again" +msgstr "Ne pokaži več tega sporočila" + +msgid "Don't exit" +msgstr "Prekliči izhod" + +msgid "Reset" +msgstr "Resetiraj" + +msgid "Don't reset" +msgstr "Ne resetiraj" + +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "Slike CD-ROM (*.iso *.cue);;Vse datoteke (*.*)" + +msgid "%hs Device Configuration" +msgstr "Konfiguracija naprave %hs" + +msgid "Monitor in sleep mode" +msgstr "Zaslon v načinu spanja" + +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "Senčilniki OpenGL (*.glsl);;Vse datoteke (*.*)" + +msgid "OpenGL options" +msgstr "Možnosti OpenGL" + +msgid "You are loading an unsupported configuration" +msgstr "Nalagate nepodprto konfiguracijo" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "Filtriranje vrste procesorja glede na izbran sistem je onemogočeno za ta emuliran sistem.\n\nTako lahko izberete procesor, ki je sicer nezdružljiv z izbranim sistemom. Vendar lahko naletite na nezdružljivosti z BIOS-om sistema ali drugo programsko opremo\n\nOmogočanje te nastavitve ni uradno podprto, vsa poročila o hroščih iz tega naslova pa bodo zaprta kot neveljavna." + +msgid "Continue" +msgstr "Nadaljuj" + +msgid "Cassette: %s" +msgstr "Kaseta: %s" + +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Slike kaset (*.pcm *.raw *.wav *.cas);;Vse datoteke (*.*)" + +msgid "Cartridge %i: %ls" +msgstr "Spominski vložek %i: %ls" + +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "Slike spominskega vložka (*.a *.b *.jrc);;Vse datoteke (*.*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + +msgid "Hard disk (%s)" +msgstr "Trdi disk (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL ali ESDI pogoni CD-ROM niso nikoli obstajali" + +msgid "Custom..." +msgstr "Po meri..." + +msgid "Custom (large)..." +msgstr "Po meri (velik)..." + +msgid "Add New Hard Disk" +msgstr "Dodaj nov trdi disk" + +msgid "Add Existing Hard Disk" +msgstr "Dodaj obstoječ trdi disk" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "Slike diska HDI ne morejo biti večje od 4 GB." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Slike diska ne morejo biti večje od 127 GB." + +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Slike trdega diska (*.hd? *.im? *.vhd);;Vse datoteke (*.*)" + +msgid "Unable to read file" +msgstr "Ne morem prebrati datoteke" + +msgid "Unable to write file" +msgstr "Ne morem pisati v datoteko" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "Slike HDI ali HDX, ki nimajo sektorjev velikosti 512 bajtov, niso podprte." + +msgid "USB is not yet supported" +msgstr "USB še ni podprt" + +msgid "Disk image file already exists" +msgstr "Datoteka s sliko diska že obstaja" + +msgid "Please specify a valid file name." +msgstr "Prosim, navedite veljavno ime datoteke." + +msgid "Disk image created" +msgstr "Slika diska ustvarjena" + +msgid "Make sure the file exists and is readable." +msgstr "Prepričajte se, da datoteka obstaja in je berljiva." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Prepričajte se, da datoteko shranjujete v zapisljivo mapo." + +msgid "Disk image too large" +msgstr "Slika diska je prevelika" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Ne pozabite na novem disku ustvariti particij in jih formatirati." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Izbrana datoteka bo prepisana. Ali jo res želite uporabiti?" + +msgid "Unsupported disk image" +msgstr "Nepodprta slika diska" + +msgid "Overwrite" +msgstr "Prepiši" + +msgid "Don't overwrite" +msgstr "Ne prepiši" + +msgid "Raw image (.img)" +msgstr "Surova slika (.img)" + +msgid "HDI image (.hdi)" +msgstr "Slika HDI (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "Slika HDX (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD fiksne velikosti (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "Dinamičen VHD (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Diferencialni VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Veliki bloki (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Mali bloki (512 KB)" + +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "Datoteke VHD (*.vhd);;Vse datoteke (*.*)" + +msgid "Select the parent VHD" +msgstr "Izberite starševsko sliko VHD" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "To lahko pomeni, da je bila starševska slika spremenjena potem, ko je že bila ustvarjena diferencialna slika.\n\nDo tega lahko pride tudi kadar so datoteke slik diska premaknjene ali kopirane, ali pa gre za hrošča v programu, ki je ustvaril ta disk.\n\nŽelite popraviti časovni žig?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Časovna žiga starševske slike diska in slike diska otroka se ne ujemata" + +msgid "Could not fix VHD timestamp." +msgstr "Ne morem popraviti časovnega žiga slike VHD." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (grozd 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (grozd 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." + +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." + +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." + +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "Popolni obrati na minuto" + +msgid "1%% below perfect RPM" +msgstr "1%% pod popolnimi obrati" + +msgid "1.5%% below perfect RPM" +msgstr "1.5%% pod popolnimi obrati" + +msgid "2%% below perfect RPM" +msgstr "2%% pod popolnimi obrati" + +msgid "(System Default)" +msgstr "(Sistemsko privzeto)" + diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po index 022b14502..9b417a311 100644 --- a/src/qt/languages/tr-TR.po +++ b/src/qt/languages/tr-TR.po @@ -1,1191 +1,1191 @@ -msgid "&Action" -msgstr "&Komutlar" - -msgid "&Keyboard requires capture" -msgstr "&Klavye sadece fare yakalandığında çalışsın" - -msgid "&Right CTRL is left ALT" -msgstr "&Sağ CTRL tuşunu sol ALT tuşu olarak ayarla" - -msgid "&Hard Reset..." -msgstr "&Makineyi yeniden başlat..." - -msgid "&Ctrl+Alt+Del\tCtrl+F12" -msgstr "&Ctrl+Alt+Del\tCtrl+F12" - -msgid "Ctrl+Alt+&Esc" -msgstr "Ctrl+Alt+&Esc" - -msgid "&Pause" -msgstr "&Duraklat" - -msgid "E&xit..." -msgstr "Emülatörden &çık..." - -msgid "&View" -msgstr "&Görüntüleme" - -msgid "&Hide status bar" -msgstr "&Durum çubuğunu gizle" - -msgid "Hide &toolbar" -msgstr "Hide &toolbar" - -msgid "&Resizeable window" -msgstr "&Yeniden boyutlandırılabilir pencere" - -msgid "R&emember size && position" -msgstr "&Pencere boyut ve pozisyonunu hatırla" - -msgid "Re&nderer" -msgstr "&İşleyici" - -msgid "&SDL (Software)" -msgstr "&SDL (Yazılım)" - -msgid "SDL (&Hardware)" -msgstr "SDL (&Donanım)" - -msgid "SDL (&OpenGL)" -msgstr "SDL (&OpenGL)" - -msgid "Open&GL (3.0 Core)" -msgstr "Open&GL (3.0 Core)" - -msgid "&VNC" -msgstr "&VNC" - -msgid "Specify dimensions..." -msgstr "Pencere &boyutunu belirle..." - -msgid "F&orce 4:3 display ratio" -msgstr "&4:3 görüntüleme oranına zorla" - -msgid "&Window scale factor" -msgstr "Pencere &ölçek çarpanı" - -msgid "&0.5x" -msgstr "&0.5x" - -msgid "&1x" -msgstr "&1x" - -msgid "1.&5x" -msgstr "1.&5x" - -msgid "&2x" -msgstr "&2x" - -msgid "Filter method" -msgstr "&Filtre metodu" - -msgid "&Nearest" -msgstr "&Nearest (En yakın)" - -msgid "&Linear" -msgstr "&Linear (Doğrusal)" - -msgid "Hi&DPI scaling" -msgstr "Hi&DPI ölçeklemesi" - -msgid "&Fullscreen\tCtrl+Alt+PageUP" -msgstr "&Tam ekran\tCtrl+Alt+PageUP" - -msgid "Fullscreen &stretch mode" -msgstr "Tam ekran &germe modu" - -msgid "&Full screen stretch" -msgstr "&Tam ekrana ger" - -msgid "&4:3" -msgstr "&4:3" - -msgid "&Square pixels (Keep ratio)" -msgstr "&Kare piksel (ölçeği koru)" - -msgid "&Integer scale" -msgstr "Tam &sayı ölçeklemesi" - -msgid "E&GA/(S)VGA settings" -msgstr "EGA/&(S)VGA ayarları" - -msgid "&Inverted VGA monitor" -msgstr "Ters &renk VGA monitör" - -msgid "VGA screen &type" -msgstr "VGA ekran &tipi" - -msgid "RGB &Color" -msgstr "RGB (&renkli)" - -msgid "&RGB Grayscale" -msgstr "RGB (&gri tonlama)" - -msgid "&Amber monitor" -msgstr "&Kehribar rengi monitör" - -msgid "&Green monitor" -msgstr "&Yeşil renk monitör" - -msgid "&White monitor" -msgstr "&Beyaz renk monitör" - -msgid "Grayscale &conversion type" -msgstr "&Gri tonlama dönüştürme tipi" - -msgid "BT&601 (NTSC/PAL)" -msgstr "BT&601 (NTSC/PAL)" - -msgid "BT&709 (HDTV)" -msgstr "BT&709 (HDTV)" - -msgid "&Average" -msgstr "&Ortalama" - -msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" -msgstr "CGA/PCjr/Tandy/E&GA/(S)VGA aşırı taraması" - -msgid "Change contrast for &monochrome display" -msgstr "Gri to&nlamalı görüntü için kontrastı değiştir" - -msgid "&Media" -msgstr "&Medya" - -msgid "&Tools" -msgstr "&Araçlar" - -msgid "&Settings..." -msgstr "&Ayarlar..." - -msgid "&Update status bar icons" -msgstr "Durum &çubuğu ikonlarını güncelle" - -msgid "Take s&creenshot\tCtrl+F11" -msgstr "&Ekran görüntüsü al\tCtrl+F11" - -msgid "&Preferences..." -msgstr "&Tercihler..." - -msgid "Enable &Discord integration" -msgstr "&Discord entegrasyonunu etkinleştir" - -msgid "Sound &gain..." -msgstr "&Ses yükseltici..." - -msgid "Begin trace\tCtrl+T" -msgstr "Begin trace\tCtrl+T" - -msgid "End trace\tCtrl+T" -msgstr "End trace\tCtrl+T" - -msgid "&Logging" -msgstr "&Logging" - -msgid "Enable BusLogic logs\tCtrl+F4" -msgstr "BusLogic kayıtlarını etkinleştir\tCtrl+F4" - -msgid "Enable CD-ROM logs\tCtrl+F5" -msgstr "CD-ROM kayıtlarını etkinleştir\tCtrl+F5" - -msgid "Enable floppy (86F) logs\tCtrl+F6" -msgstr "Disket (86F) kayıtlarını etkinleştir\tCtrl+F6" - -msgid "Enable floppy controller logs\tCtrl+F7" -msgstr "Disket kontrolcüsü kayıtlarını etkinleştir\tCtrl+F7" - -msgid "Enable IDE logs\tCtrl+F8" -msgstr "IDE kayıtlarını etkinleştir\tCtrl+F8" - -msgid "Enable Serial Port logs\tCtrl+F3" -msgstr "Seri Port kayıtlarını etkinleştir\tCtrl+F3" - -msgid "Enable Network logs\tCtrl+F9" -msgstr "Ağ kayıtlarını etkinleştir\tCtrl+F9" - -msgid "&Log breakpoint\tCtrl+F10" -msgstr "&breakpoint'i kayıtla\tCtrl+F10" - -msgid "Dump &video RAM\tCtrl+F1" -msgstr "&Video belleğini depola\tCtrl+F1" - -msgid "&Help" -msgstr "&Yardım" - -msgid "&Documentation..." -msgstr "&Dökümanlar..." - -msgid "&About 86Box..." -msgstr "&86Box Hakkında..." - -msgid "&New image..." -msgstr "&Yeni imaj oluştur..." - -msgid "&Existing image..." -msgstr "&İmaj seç..." - -msgid "Existing image (&Write-protected)..." -msgstr "İmaj &seç (Yazma-korumalı)..." - -msgid "&Record" -msgstr "&Kaydet" - -msgid "&Play" -msgstr "&Oynat" - -msgid "&Rewind to the beginning" -msgstr "&Başlangıca geri sar" - -msgid "&Fast forward to the end" -msgstr "Sona doğru &ileri sar" - -msgid "E&ject" -msgstr "&Çıkar" - -msgid "&Image..." -msgstr "&İmaj..." - -msgid "E&xport to 86F..." -msgstr "&86F dosyası olarak aktar..." - -msgid "&Mute" -msgstr "&Sesi kapat" - -msgid "E&mpty" -msgstr "İmajı &çıkar" - -msgid "&Reload previous image" -msgstr "&Önceki imajı seç" - -msgid "&Image" -msgstr "&İmaj seç" - -msgid "Target &framerate" -msgstr "Hedef &kare oranı" - -msgid "&Sync with video" -msgstr "Video ile &senkronize et" - -msgid "&25 fps" -msgstr "&25 fps" - -msgid "&30 fps" -msgstr "&30 fps" - -msgid "&50 fps" -msgstr "&50 fps" - -msgid "&60 fps" -msgstr "&60 fps" - -msgid "&75 fps" -msgstr "&75 fps" - -msgid "&VSync" -msgstr "&VSync" - -msgid "&Select shader..." -msgstr "Gölgelendirici &seç..." - -msgid "&Remove shader" -msgstr "&Gölgelendiriciyi kaldır" - -msgid "Preferences" -msgstr "Tercihler" - -msgid "Sound Gain" -msgstr "Ses Artırma" - -msgid "New Image" -msgstr "Yeni İmaj" - -msgid "Settings" -msgstr "Ayarlar" - -msgid "Specify Main Window Dimensions" -msgstr "Ana Pencere Boyutunu Belirle" - -msgid "OK" -msgstr "Tamam" - -msgid "Cancel" -msgstr "İptal et" - -msgid "Save these settings as &global defaults" -msgstr "Bu ayarları &varsayılan olarak kaydet" - -msgid "&Default" -msgstr "&Varsayılan" - -msgid "Language:" -msgstr "Dil:" - -msgid "Icon set:" -msgstr "Simge seti:" - -msgid "Gain" -msgstr "Artırma" - -msgid "File name:" -msgstr "Dosya adı:" - -msgid "Disk size:" -msgstr "Disk boyutu:" - -msgid "RPM mode:" -msgstr "RPM modu:" - -msgid "Progress:" -msgstr "İşlem:" - -msgid "Width:" -msgstr "Genişlik:" - -msgid "Height:" -msgstr "Yükseklik:" - -msgid "Lock to this size" -msgstr "Bu boyuta kilitle" - -msgid "Machine type:" -msgstr "Makine türü:" - -msgid "Machine:" -msgstr "Makine:" - -msgid "Configure" -msgstr "Ayarla" - -msgid "CPU type:" -msgstr "CPU türü:" - -msgid "Speed:" -msgstr "Hız:" - -msgid "FPU:" -msgstr "FPU:" - -msgid "Wait states:" -msgstr "Bekleme süreleri:" - -msgid "MB" -msgstr "MB" - -msgid "Memory:" -msgstr "Bellek:" - -msgid "Time synchronization" -msgstr "Zaman senkronizasyonu" - -msgid "Disabled" -msgstr "Devre dışı" - -msgid "Enabled (local time)" -msgstr "Etkin (yerel zaman)" - -msgid "Enabled (UTC)" -msgstr "Etkin (UTC)" - -msgid "Dynamic Recompiler" -msgstr "Dinamik Derleyici" - -msgid "Video:" -msgstr "Ekran kartı:" - -msgid "Voodoo Graphics" -msgstr "Voodoo Grafikleri" - -msgid "Mouse:" -msgstr "Fare:" - -msgid "Joystick:" -msgstr "Oyun kolu:" - -msgid "Joystick 1..." -msgstr "Oyun kolu 1..." - -msgid "Joystick 2..." -msgstr "Oyun kolu 2..." - -msgid "Joystick 3..." -msgstr "Oyun kolu 3..." - -msgid "Joystick 4..." -msgstr "Oyun kolu 4..." - -msgid "Sound card:" -msgstr "Ses kartı:" - -msgid "MIDI Out Device:" -msgstr "MIDI Çıkış Cihazı:" - -msgid "MIDI In Device:" -msgstr "MIDI Giriş Cihazı:" - -msgid "Standalone MPU-401" -msgstr "Bağımsız MPU-401" - -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - -msgid "Use FLOAT32 sound" -msgstr "FLOAT32 ses kullan" - -msgid "Network type:" -msgstr "Ağ tipi:" - -msgid "PCap device:" -msgstr "PCap cihazı:" - -msgid "Network adapter:" -msgstr "Ağ cihazı:" - -msgid "LPT1 Device:" -msgstr "LPT1 Cihazı:" - -msgid "LPT2 Device:" -msgstr "LPT2 Cihazı:" - -msgid "LPT3 Device:" -msgstr "LPT3 Cihazı:" - -msgid "Serial port 1" -msgstr "Seri port 1" - -msgid "Serial port 2" -msgstr "Seri port 2" - -msgid "Serial port 3" -msgstr "Seri port 3" - -msgid "Serial port 4" -msgstr "Seri port 4" - -msgid "Parallel port 1" -msgstr "Paralel port 1" - -msgid "Parallel port 2" -msgstr "Paralel port 2" - -msgid "Parallel port 3" -msgstr "Paralel port 3" - -msgid "HD Controller:" -msgstr "HD Kontrolcüsü:" - -msgid "FD Controller:" -msgstr "FD Kontrolcüsü:" - -msgid "Tertiary IDE Controller" -msgstr "Üçlü IDE Kontrolcüsü" - -msgid "Quaternary IDE Controller" -msgstr "Dörtlü IDE Kontrolcüsü" - -msgid "SCSI" -msgstr "SCSI" - -msgid "Controller 1:" -msgstr "Kontrolcü 1:" - -msgid "Controller 2:" -msgstr "Kontrolcü 2:" - -msgid "Controller 3:" -msgstr "Kontrolcü 3:" - -msgid "Controller 4:" -msgstr "Kontrolcü 4:" - -msgid "Cassette" -msgstr "Kaset" - -msgid "Hard disks:" -msgstr "Hard diskler:" - -msgid "&New..." -msgstr "&Yeni..." - -msgid "&Existing..." -msgstr "&Var olan..." - -msgid "&Remove" -msgstr "&Kaldır" - -msgid "Bus:" -msgstr "Veri yolu:" - -msgid "Channel:" -msgstr "Kanal:" - -msgid "ID:" -msgstr "ID:" - -msgid "&Specify..." -msgstr "&Belirle..." - -msgid "Sectors:" -msgstr "Sektörler:" - -msgid "Heads:" -msgstr "Veri Kafaları:" - -msgid "Cylinders:" -msgstr "Silindirler:" - -msgid "Size (MB):" -msgstr "Boyut (MB):" - -msgid "Type:" -msgstr "Tip:" - -msgid "Image Format:" -msgstr "İmaj Düzeni:" - -msgid "Block Size:" -msgstr "Blok Boyutu:" - -msgid "Floppy drives:" -msgstr "Disket sürücüleri:" - -msgid "Turbo timings" -msgstr "Turbo zamanlamaları" - -msgid "Check BPB" -msgstr "BPB'yi denetle" - -msgid "CD-ROM drives:" -msgstr "CD-ROM sürücüleri:" - -msgid "MO drives:" -msgstr "MO sürücüleri:" - -msgid "ZIP drives:" -msgstr "ZIP sürücüleri:" - -msgid "ZIP 250" -msgstr "ZIP 250" - -msgid "ISA RTC:" -msgstr "ISA RTC:" - -msgid "ISA Memory Expansion" -msgstr "ISA Bellek Artırma" - -msgid "Card 1:" -msgstr "Kart 1:" - -msgid "Card 2:" -msgstr "Kart 2:" - -msgid "Card 3:" -msgstr "Kart 3:" - -msgid "Card 4:" -msgstr "Kart 4:" - -msgid "ISABugger device" -msgstr "ISABugger cihazı" - -msgid "POST card" -msgstr "POST kartı" - -msgid "FONT_SIZE" -msgstr "9" - -msgid "FONT_NAME" -msgstr "Segoe UI" - -msgid "86Box" -msgstr "86Box" - -msgid "Error" -msgstr "Hata" - -msgid "Fatal error" -msgstr "Kritik hata" - -msgid "" -msgstr "" - -msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." -msgstr "Pencere moduna geri dönmek için CTRL+ALT+PAGE DOWN tuşlarına basın." - -msgid "Speed" -msgstr "Hız" - -msgid "ZIP %03i %i (%s): %ls" -msgstr "ZIP %03i %i (%s): %ls" - -msgid "ZIP images (*.im? *.zdi)" -msgstr "ZIP imajları (*.im? *.zdi)" - -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "86Box hiç bir kullanılabilir ROM imajı bulamadı.\n\nLütfen ROM setini indirin ve onu \"Roms\" klasörüne çıkarın." - -msgid "(empty)" -msgstr "(empty)" - -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "ZIP imajları (*.im? *.zdi);;All files (*.*)" - -msgid "Turbo" -msgstr "Turbo" - -msgid "On" -msgstr "Açık" - -msgid "Off" -msgstr "Kapalı" - -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "Tüm imajlar (*.86f *.dsk *.flp *.im? *.*fd?);;Basit sektör imajları (*.dsk *.flp *.im? *.img *.*fd?);;Yüzey imajları (*.86f)" - -msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "\"%hs\" makinesi roms/machines klasöründe mevcut olmayan ROM imajı yüzünden mevcut değil. Mevcut olan bir makineye geçiş yapılıyor." - -msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "\"%hs\" ekran kartı roms/video klasöründe mevcut olmayan ROM imajı yüzünden mevcut değil. Mevcut olan bir ekran kartına geçiş yapılıyor." - -msgid "Machine" -msgstr "Makine" - -msgid "Display" -msgstr "Görüntü" - -msgid "Input devices" -msgstr "Giriş aygıtları" - -msgid "Sound" -msgstr "Ses" - -msgid "Network" -msgstr "Ağ" - -msgid "Ports (COM & LPT)" -msgstr "Portlar (COM & LPT)" - -msgid "Storage controllers" -msgstr "Depolama kontrolcüleri" - -msgid "Hard disks" -msgstr "Hard diskler" - -msgid "Floppy & CD-ROM drives" -msgstr "Disket & CD-ROM sürücüleri" - -msgid "Other removable devices" -msgstr "Diğer kaldırılabilir cihazlar" - -msgid "Other peripherals" -msgstr "Diğer cihazlar" - -msgid "Surface images (*.86f)" -msgstr "Yüzey imajları (*.86f)" - -msgid "Click to capture mouse" -msgstr "Farenin yakalanması için tıklayın" - -msgid "Press F8+F12 to release mouse" -msgstr "Farenin bırakılması için F8+F12 tuşlarına basın" - -msgid "Press F8+F12 or middle button to release mouse" -msgstr "Farenin bırakılması için F8+F12 veya farenin orta tuşuna basın" - -msgid "Unable to initialize FluidSynth" -msgstr "FluidSynth başlatılamadı" - -msgid "Bus" -msgstr "Veri yolu" - -msgid "File" -msgstr "Dosya" - -msgid "C" -msgstr "C" - -msgid "H" -msgstr "H" - -msgid "S" -msgstr "S" - -msgid "KB" -msgstr "KB" - -msgid "Could not initialize the video renderer." -msgstr "Video işleyici başlatılamadı." - -msgid "Default" -msgstr "Varsayılan" - -msgid "%i Wait state(s)" -msgstr "%i Bekleme durumları" - -msgid "Type" -msgstr "Tür" - -msgid "Failed to set up PCap" -msgstr "PCap ayarlanamadı" - -msgid "No PCap devices found" -msgstr "Herhangi bir PCap cihazı bulunamadı" - -msgid "Invalid PCap device" -msgstr "Geçersiz PCap cihazı" - -msgid "Standard 2-button joystick(s)" -msgstr "Standart 2-button oyun kolları" - -msgid "Standard 4-button joystick" -msgstr "Standart 4-button oyun kolu" - -msgid "Standard 6-button joystick" -msgstr "Standart 6-button oyun kolu" - -msgid "Standard 8-button joystick" -msgstr "Standart 8-button oyun kolu" - -msgid "CH Flightstick Pro" -msgstr "CH Flightstick Pro" - -msgid "Microsoft SideWinder Pad" -msgstr "Microsoft SideWinder Pad" - -msgid "Thrustmaster Flight Control System" -msgstr "Thrustmaster Flight Kontrol Sistemi" - -msgid "None" -msgstr "Hiçbiri" - -msgid "Unable to load keyboard accelerators." -msgstr "Klavye ivdirgeçleri yüklenemedi." - -msgid "Unable to register raw input." -msgstr "Ham girdi kaydedilemedi." - -msgid "%u" -msgstr "%u" - -msgid "%u MB (CHS: %i, %i, %i)" -msgstr "%u MB (CHS: %i, %i, %i)" - -msgid "Floppy %i (%s): %ls" -msgstr "Disket %i (%s): %ls" - -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "Tüm imajlar (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Gelişmiş sektör imajları (*.imd *.json *.td0);;Basit sektör imajları (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Yüzey imajları (*.86f *.mfm);;All files (*.*)" - -msgid "Unable to initialize FreeType" -msgstr "FreeType başlatılamadı" - -msgid "Unable to initialize SDL, SDL2.dll is required" -msgstr "SDL başlatılamadı, SDL2.dll gerekmektedir" - -msgid "Are you sure you want to hard reset the emulated machine?" -msgstr "Emüle edilen makineyi yeniden başlatmak istediğinizden emin misiniz?" - -msgid "Are you sure you want to exit 86Box?" -msgstr "86Box'tan çıkmak istediğinize emin misiniz?" - -msgid "Unable to initialize Ghostscript" -msgstr "Ghostscript başlatılamadı" - -msgid "MO %i (%ls): %ls" -msgstr "MO %i (%ls): %ls" - -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "MO imajları (*.im? *.mdi);;All files (*.*)" - -msgid "Welcome to 86Box!" -msgstr "86Box'a hoşgeldiniz!" - -msgid "Internal controller" -msgstr "Dahili kontrolcü" - -msgid "Exit" -msgstr "Çıkış" - -msgid "No ROMs found" -msgstr "Hiçbir ROM imajı bulunamadı" - -msgid "Do you want to save the settings?" -msgstr "Ayarları kaydetmek istediğinizden emin misiniz?" - -msgid "This will hard reset the emulated machine." -msgstr "Bu makineyi yeniden başlatacak." - -msgid "Save" -msgstr "Kaydet" - -msgid "About 86Box" -msgstr "86Box Hakkında" - -msgid "86Box v" -msgstr "86Box v" - -msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "Bir eski bilgisayar emülatörü\n\nYapanlar: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, ve diğerleri.\n\nGNU Genel Kamu Lisansı versiyon 2 veya sonrası altında yayınlanmıştır. Daha fazla bilgi için LICENSE'ı gözden geçirin." - -msgid "Hardware not available" -msgstr "Donanım mevcut değil" - -msgid "WinPcap" -msgstr "WinPcap" - -msgid "libpcap" -msgstr "libpcap" - -msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." -msgstr "libpcap kurulu olduğundan ve libpcap-uyumlu bir internet ağında bulunduğunuzdan emin olun." - -msgid "Invalid configuration" -msgstr "Geçersiz konfigürasyon" - -msgid "freetype.dll" -msgstr "freetype.dll" - -msgid "libfreetype" -msgstr "libfreetype" - -msgid " is required for ESC/P printer emulation." -msgstr " ESC/P yazıcı emülasyonu için gereklidir." - -msgid "gsdll32.dll" -msgstr "gsdll32.dll" - -msgid "libgs" -msgstr "libgs" - -msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." -msgstr " PostScript dosyalarının otomatik olarak PDF dosyalarına çevirilmesi için gereklidir.\n\nGenel PostScript yazıcısına gönderilen tüm dökümanlar PostScript (.ps) dosyaları olarak kaydedilecektir." - -msgid "libfluidsynth.dll" -msgstr "libfluidsynth.dll" - -msgid "libfluidsynth" -msgstr "libfluidsynth" - -msgid " is required for FluidSynth MIDI output." -msgstr " FluidSynth MIDI çıkışı için gereklidir." - -msgid "Entering fullscreen mode" -msgstr "Tam ekran moduna geçiliyor" - -msgid "Don't show this message again" -msgstr "Bu mesajı bir daha gösterme" - -msgid "Don't exit" -msgstr "Çıkış yapma" - -msgid "Reset" -msgstr "Yeniden başlat" - -msgid "Don't reset" -msgstr "Yeniden başlatma" - -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "CD-ROM imajları (*.iso *.cue);;Tüm dosyalar (*.*)" - -msgid "%hs Device Configuration" -msgstr "%hs Cihaz Konfigürasyonu" - -msgid "Monitor in sleep mode" -msgstr "Monitör uyku modunda" - -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "OpenGL Gölgelendiricileri (*.glsl);;Tüm dosyalar (*.*)" - -msgid "OpenGL options" -msgstr "OpenGL ayarları" - -msgid "You are loading an unsupported configuration" -msgstr "Desteklenmeyen bir konfigürasyon yüklüyorsunuz" - -msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "Seçtiğiniz makineye uygun CPU (işlemci) türü filtrelemesi bu emülasyon için devre dışı bırakıldı.\n\nBu, normalde seçilen makine ile uyumlu olmayan bir CPU seçmenizi mümkün kılmaktadır. Ancak, bundan dolayı seçilen makinenin BIOS'u veya diğer yazılımlar ile uyumsuzluk sorunu yaşayabilirsiniz.\n\nBu filtrelemeyi devre dışı bırakmak emülatör tarafından resmi olarak desteklenmemektedir ve açtığınız bug (hata) raporları geçersiz olarak kapatılabilir." - -msgid "Continue" -msgstr "Devam et" - -msgid "Cassette: %s" -msgstr "Kaset: %s" - -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Kaset imajları (*.pcm *.raw *.wav *.cas);;Tüm dosyalar (*.*)" - -msgid "Cartridge %i: %ls" -msgstr "Kartuş %i: %ls" - -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "Kartuş imajları (*.a *.b *.jrc);;Tüm dosyalar (*.*)" - -msgid "Error initializing renderer" -msgstr "Error initializing renderer" - -msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." - -msgid "Resume execution" -msgstr "Resume execution" - -msgid "Pause execution" -msgstr "Pause execution" - -msgid "Press Ctrl+Alt+Del" -msgstr "Press Ctrl+Alt+Del" - -msgid "Press Ctrl+Alt+Esc" -msgstr "Press Ctrl+Alt+Esc" - -msgid "Hard reset" -msgstr "Hard reset" - -msgid "ACPI shutdown" -msgstr "ACPI shutdown" - -msgid "Hard disk (%s)" -msgstr "Hard disk (%s)" - -msgid "%01i:%01i" -msgstr "%01i:%01i" - -msgid "%01i" -msgstr "%01i" - -msgid "MFM/RLL or ESDI CD-ROM drives never existed" -msgstr "MFM/RLL veya ESDI CD-ROM sürücüleri hiçbir zaman var olmamıştır" - -msgid "Custom..." -msgstr "Diğer..." - -msgid "Custom (large)..." -msgstr "Diğer (büyük)..." - -msgid "Add New Hard Disk" -msgstr "Yeni Hard Disk Dosyası Oluştur" - -msgid "Add Existing Hard Disk" -msgstr "Var Olan Hard Disk Dosyası Ekle" - -msgid "HDI disk images cannot be larger than 4 GB." -msgstr "HDI disk imajları 4 GB'tan daha büyük olamaz." - -msgid "Disk images cannot be larger than 127 GB." -msgstr "Disk imajları 127 GB'tan daha büyük olamaz." - -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Hard disk imajları (*.hd? *.im? *.vhd);;Tüm dosyalar (*.*)" - -msgid "Unable to read file" -msgstr "Dosya okunamıyor" - -msgid "Unable to write file" -msgstr "Dosyanın üzerine yazılamıyor" - -msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "512 dışında sektör boyutu olan HDI veya HDX imajları desteklenmemektedir." - -msgid "USB is not yet supported" -msgstr "USB şu anda desteklenmemektedir" - -msgid "Disk image file already exists" -msgstr "Disk imaj dosyası zaten var olmakta" - -msgid "Please specify a valid file name." -msgstr "Lütfen geçerli bir dosya ismi belirleyin." - -msgid "Disk image created" -msgstr "Disk imajı oluşturuldu" - -msgid "Make sure the file exists and is readable." -msgstr "Dosyanın var olduğuna ve okunabildiğine emin olun." - -msgid "Make sure the file is being saved to a writable directory." -msgstr "Dosyanın yazılabilir bir klasöre kaydedildiğinden emin olun." - -msgid "Disk image too large" -msgstr "Disk imajı çok büyük" - -msgid "Remember to partition and format the newly-created drive." -msgstr "Yeni oluşturulan diski bölmeyi ve formatlamayı unutmayın." - -msgid "The selected file will be overwritten. Are you sure you want to use it?" -msgstr "Seçili dosyanın üzerine yazılacaktır. Bunu yapmak istediğinizden emin misiniz?" - -msgid "Unsupported disk image" -msgstr "Desteklenmeyen disk imajı" - -msgid "Overwrite" -msgstr "Üzerine yaz" - -msgid "Don't overwrite" -msgstr "Üzerine yazma" - -msgid "Raw image (.img)" -msgstr "Ham imaj (.img)" - -msgid "HDI image (.hdi)" -msgstr "HDI imajı (.hdi)" - -msgid "HDX image (.hdx)" -msgstr "HDX imajı (.hdx)" - -msgid "Fixed-size VHD (.vhd)" -msgstr "Sabit-boyutlu VHD (.vhd)" - -msgid "Dynamic-size VHD (.vhd)" -msgstr "Dinamik-boyutlu VHD (.vhd)" - -msgid "Differencing VHD (.vhd)" -msgstr "Differencing VHD (.vhd)" - -msgid "Large blocks (2 MB)" -msgstr "Büyük bloklar (2 MB)" - -msgid "Small blocks (512 KB)" -msgstr "Küçük bloklar (512 KB)" - -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "VHD dosyaları (*.vhd);;Tüm dosyalar (*.*)" - -msgid "Select the parent VHD" -msgstr "Ana VHD dosyasını seçin" - -msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" -msgstr "Bu, farkı alınan imaj oluşturulduktan sonra ana imaj dosyasının düzenlendiği anlamına geliyor olabilir.\n\nBu durum ayrıca imaj dosyaları kopyalandığında veya yerleri değiştirildiğinde veya imaj dosyalarını oluşturan programdaki bir hatadan dolayı olmuş olabilir.\n\nZaman damgalarını düzeltmek ister misiniz?" - -msgid "Parent and child disk timestamps do not match" -msgstr "Ana ve ek disk zaman damgaları uyuşmuyor" - -msgid "Could not fix VHD timestamp." -msgstr "VHD zaman damgası düzeltilemedi." - -msgid "%01i:%02i" -msgstr "%01i:%02i" - -msgid "MFM/RLL" -msgstr "MFM/RLL" - -msgid "XTA" -msgstr "XTA" - -msgid "ESDI" -msgstr "ESDI" - -msgid "IDE" -msgstr "IDE" - -msgid "ATAPI" -msgstr "ATAPI" - -msgid "MFM/RLL (%01i:%01i)" -msgstr "MFM/RLL (%01i:%01i)" - -msgid "XTA (%01i:%01i)" -msgstr "XTA (%01i:%01i)" - -msgid "ESDI (%01i:%01i)" -msgstr "ESDI (%01i:%01i)" - -msgid "IDE (%01i:%01i)" -msgstr "IDE (%01i:%01i)" - -msgid "ATAPI (%01i:%01i)" -msgstr "ATAPI (%01i:%01i)" - -msgid "SCSI (%01i:%02i)" -msgstr "SCSI (%01i:%02i)" - -msgid "CD-ROM %i (%s): %s" -msgstr "CD-ROM %i (%s): %s" - -msgid "160 kB" -msgstr "160 kB" - -msgid "180 kB" -msgstr "180 kB" - -msgid "320 kB" -msgstr "320 kB" - -msgid "360 kB" -msgstr "360 kB" - -msgid "640 kB" -msgstr "640 kB" - -msgid "720 kB" -msgstr "720 kB" - -msgid "1.2 MB" -msgstr "1.2 MB" - -msgid "1.25 MB" -msgstr "1.25 MB" - -msgid "1.44 MB" -msgstr "1.44 MB" - -msgid "DMF (cluster 1024)" -msgstr "DMF (cluster 1024)" - -msgid "DMF (cluster 2048)" -msgstr "DMF (cluster 2048)" - -msgid "2.88 MB" -msgstr "2.88 MB" - -msgid "ZIP 100" -msgstr "ZIP 100" - -msgid "3.5\" 128Mb M.O. (ISO 10090)" -msgstr "3.5\" 128Mb M.O. (ISO 10090)" - -msgid "3.5\" 230Mb M.O. (ISO 13963)" -msgstr "3.5\" 230Mb M.O. (ISO 13963)" - -msgid "3.5\" 540Mb M.O. (ISO 15498)" -msgstr "3.5\" 540Mb M.O. (ISO 15498)" - -msgid "3.5\" 640Mb M.O. (ISO 15498)" -msgstr "3.5\" 640Mb M.O. (ISO 15498)" - -msgid "3.5\" 1.3Gb M.O. (GigaMO)" -msgstr "3.5\" 1.3Gb M.O. (GigaMO)" - -msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" - -msgid "5.25\" 600Mb M.O." -msgstr "5.25\" 600Mb M.O." - -msgid "5.25\" 650Mb M.O." -msgstr "5.25\" 650Mb M.O." - -msgid "5.25\" 1Gb M.O." -msgstr "5.25\" 1Gb M.O." - -msgid "5.25\" 1.3Gb M.O." -msgstr "5.25\" 1.3Gb M.O." - -msgid "Perfect RPM" -msgstr "Mükemmel RPM" - -msgid "1%% below perfect RPM" -msgstr "mükemmel RPM değerinin 1%% altı" - -msgid "1.5%% below perfect RPM" -msgstr "mükemmel RPM değerinin 1.5%% altı" - -msgid "2%% below perfect RPM" -msgstr "mükemmel RPM değerinin 2%% altı" - -msgid "(System Default)" -msgstr "(Sistem Varsayılanı)" - +msgid "&Action" +msgstr "&Komutlar" + +msgid "&Keyboard requires capture" +msgstr "&Klavye sadece fare yakalandığında çalışsın" + +msgid "&Right CTRL is left ALT" +msgstr "&Sağ CTRL tuşunu sol ALT tuşu olarak ayarla" + +msgid "&Hard Reset..." +msgstr "&Makineyi yeniden başlat..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Duraklat" + +msgid "E&xit..." +msgstr "Emülatörden &çık..." + +msgid "&View" +msgstr "&Görüntüleme" + +msgid "&Hide status bar" +msgstr "&Durum çubuğunu gizle" + +msgid "Hide &toolbar" +msgstr "Hide &toolbar" + +msgid "&Resizeable window" +msgstr "&Yeniden boyutlandırılabilir pencere" + +msgid "R&emember size && position" +msgstr "&Pencere boyut ve pozisyonunu hatırla" + +msgid "Re&nderer" +msgstr "&İşleyici" + +msgid "&SDL (Software)" +msgstr "&SDL (Yazılım)" + +msgid "SDL (&Hardware)" +msgstr "SDL (&Donanım)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 Core)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "Pencere &boyutunu belirle..." + +msgid "F&orce 4:3 display ratio" +msgstr "&4:3 görüntüleme oranına zorla" + +msgid "&Window scale factor" +msgstr "Pencere &ölçek çarpanı" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "&Filtre metodu" + +msgid "&Nearest" +msgstr "&Nearest (En yakın)" + +msgid "&Linear" +msgstr "&Linear (Doğrusal)" + +msgid "Hi&DPI scaling" +msgstr "Hi&DPI ölçeklemesi" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Tam ekran\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "Tam ekran &germe modu" + +msgid "&Full screen stretch" +msgstr "&Tam ekrana ger" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Kare piksel (ölçeği koru)" + +msgid "&Integer scale" +msgstr "Tam &sayı ölçeklemesi" + +msgid "E&GA/(S)VGA settings" +msgstr "EGA/&(S)VGA ayarları" + +msgid "&Inverted VGA monitor" +msgstr "Ters &renk VGA monitör" + +msgid "VGA screen &type" +msgstr "VGA ekran &tipi" + +msgid "RGB &Color" +msgstr "RGB (&renkli)" + +msgid "&RGB Grayscale" +msgstr "RGB (&gri tonlama)" + +msgid "&Amber monitor" +msgstr "&Kehribar rengi monitör" + +msgid "&Green monitor" +msgstr "&Yeşil renk monitör" + +msgid "&White monitor" +msgstr "&Beyaz renk monitör" + +msgid "Grayscale &conversion type" +msgstr "&Gri tonlama dönüştürme tipi" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Ortalama" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "CGA/PCjr/Tandy/E&GA/(S)VGA aşırı taraması" + +msgid "Change contrast for &monochrome display" +msgstr "Gri to&nlamalı görüntü için kontrastı değiştir" + +msgid "&Media" +msgstr "&Medya" + +msgid "&Tools" +msgstr "&Araçlar" + +msgid "&Settings..." +msgstr "&Ayarlar..." + +msgid "&Update status bar icons" +msgstr "Durum &çubuğu ikonlarını güncelle" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "&Ekran görüntüsü al\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Tercihler..." + +msgid "Enable &Discord integration" +msgstr "&Discord entegrasyonunu etkinleştir" + +msgid "Sound &gain..." +msgstr "&Ses yükseltici..." + +msgid "Begin trace\tCtrl+T" +msgstr "Begin trace\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "End trace\tCtrl+T" + +msgid "&Logging" +msgstr "&Logging" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "BusLogic kayıtlarını etkinleştir\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "CD-ROM kayıtlarını etkinleştir\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Disket (86F) kayıtlarını etkinleştir\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Disket kontrolcüsü kayıtlarını etkinleştir\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "IDE kayıtlarını etkinleştir\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Seri Port kayıtlarını etkinleştir\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Ağ kayıtlarını etkinleştir\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&breakpoint'i kayıtla\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "&Video belleğini depola\tCtrl+F1" + +msgid "&Help" +msgstr "&Yardım" + +msgid "&Documentation..." +msgstr "&Dökümanlar..." + +msgid "&About 86Box..." +msgstr "&86Box Hakkında..." + +msgid "&New image..." +msgstr "&Yeni imaj oluştur..." + +msgid "&Existing image..." +msgstr "&İmaj seç..." + +msgid "Existing image (&Write-protected)..." +msgstr "İmaj &seç (Yazma-korumalı)..." + +msgid "&Record" +msgstr "&Kaydet" + +msgid "&Play" +msgstr "&Oynat" + +msgid "&Rewind to the beginning" +msgstr "&Başlangıca geri sar" + +msgid "&Fast forward to the end" +msgstr "Sona doğru &ileri sar" + +msgid "E&ject" +msgstr "&Çıkar" + +msgid "&Image..." +msgstr "&İmaj..." + +msgid "E&xport to 86F..." +msgstr "&86F dosyası olarak aktar..." + +msgid "&Mute" +msgstr "&Sesi kapat" + +msgid "E&mpty" +msgstr "İmajı &çıkar" + +msgid "&Reload previous image" +msgstr "&Önceki imajı seç" + +msgid "&Image" +msgstr "&İmaj seç" + +msgid "Target &framerate" +msgstr "Hedef &kare oranı" + +msgid "&Sync with video" +msgstr "Video ile &senkronize et" + +msgid "&25 fps" +msgstr "&25 fps" + +msgid "&30 fps" +msgstr "&30 fps" + +msgid "&50 fps" +msgstr "&50 fps" + +msgid "&60 fps" +msgstr "&60 fps" + +msgid "&75 fps" +msgstr "&75 fps" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "Gölgelendirici &seç..." + +msgid "&Remove shader" +msgstr "&Gölgelendiriciyi kaldır" + +msgid "Preferences" +msgstr "Tercihler" + +msgid "Sound Gain" +msgstr "Ses Artırma" + +msgid "New Image" +msgstr "Yeni İmaj" + +msgid "Settings" +msgstr "Ayarlar" + +msgid "Specify Main Window Dimensions" +msgstr "Ana Pencere Boyutunu Belirle" + +msgid "OK" +msgstr "Tamam" + +msgid "Cancel" +msgstr "İptal et" + +msgid "Save these settings as &global defaults" +msgstr "Bu ayarları &varsayılan olarak kaydet" + +msgid "&Default" +msgstr "&Varsayılan" + +msgid "Language:" +msgstr "Dil:" + +msgid "Icon set:" +msgstr "Simge seti:" + +msgid "Gain" +msgstr "Artırma" + +msgid "File name:" +msgstr "Dosya adı:" + +msgid "Disk size:" +msgstr "Disk boyutu:" + +msgid "RPM mode:" +msgstr "RPM modu:" + +msgid "Progress:" +msgstr "İşlem:" + +msgid "Width:" +msgstr "Genişlik:" + +msgid "Height:" +msgstr "Yükseklik:" + +msgid "Lock to this size" +msgstr "Bu boyuta kilitle" + +msgid "Machine type:" +msgstr "Makine türü:" + +msgid "Machine:" +msgstr "Makine:" + +msgid "Configure" +msgstr "Ayarla" + +msgid "CPU type:" +msgstr "CPU türü:" + +msgid "Speed:" +msgstr "Hız:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "Bekleme süreleri:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Bellek:" + +msgid "Time synchronization" +msgstr "Zaman senkronizasyonu" + +msgid "Disabled" +msgstr "Devre dışı" + +msgid "Enabled (local time)" +msgstr "Etkin (yerel zaman)" + +msgid "Enabled (UTC)" +msgstr "Etkin (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Dinamik Derleyici" + +msgid "Video:" +msgstr "Ekran kartı:" + +msgid "Voodoo Graphics" +msgstr "Voodoo Grafikleri" + +msgid "Mouse:" +msgstr "Fare:" + +msgid "Joystick:" +msgstr "Oyun kolu:" + +msgid "Joystick 1..." +msgstr "Oyun kolu 1..." + +msgid "Joystick 2..." +msgstr "Oyun kolu 2..." + +msgid "Joystick 3..." +msgstr "Oyun kolu 3..." + +msgid "Joystick 4..." +msgstr "Oyun kolu 4..." + +msgid "Sound card:" +msgstr "Ses kartı:" + +msgid "MIDI Out Device:" +msgstr "MIDI Çıkış Cihazı:" + +msgid "MIDI In Device:" +msgstr "MIDI Giriş Cihazı:" + +msgid "Standalone MPU-401" +msgstr "Bağımsız MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "FLOAT32 ses kullan" + +msgid "Network type:" +msgstr "Ağ tipi:" + +msgid "PCap device:" +msgstr "PCap cihazı:" + +msgid "Network adapter:" +msgstr "Ağ cihazı:" + +msgid "LPT1 Device:" +msgstr "LPT1 Cihazı:" + +msgid "LPT2 Device:" +msgstr "LPT2 Cihazı:" + +msgid "LPT3 Device:" +msgstr "LPT3 Cihazı:" + +msgid "Serial port 1" +msgstr "Seri port 1" + +msgid "Serial port 2" +msgstr "Seri port 2" + +msgid "Serial port 3" +msgstr "Seri port 3" + +msgid "Serial port 4" +msgstr "Seri port 4" + +msgid "Parallel port 1" +msgstr "Paralel port 1" + +msgid "Parallel port 2" +msgstr "Paralel port 2" + +msgid "Parallel port 3" +msgstr "Paralel port 3" + +msgid "HD Controller:" +msgstr "HD Kontrolcüsü:" + +msgid "FD Controller:" +msgstr "FD Kontrolcüsü:" + +msgid "Tertiary IDE Controller" +msgstr "Üçlü IDE Kontrolcüsü" + +msgid "Quaternary IDE Controller" +msgstr "Dörtlü IDE Kontrolcüsü" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Kontrolcü 1:" + +msgid "Controller 2:" +msgstr "Kontrolcü 2:" + +msgid "Controller 3:" +msgstr "Kontrolcü 3:" + +msgid "Controller 4:" +msgstr "Kontrolcü 4:" + +msgid "Cassette" +msgstr "Kaset" + +msgid "Hard disks:" +msgstr "Hard diskler:" + +msgid "&New..." +msgstr "&Yeni..." + +msgid "&Existing..." +msgstr "&Var olan..." + +msgid "&Remove" +msgstr "&Kaldır" + +msgid "Bus:" +msgstr "Veri yolu:" + +msgid "Channel:" +msgstr "Kanal:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Belirle..." + +msgid "Sectors:" +msgstr "Sektörler:" + +msgid "Heads:" +msgstr "Veri Kafaları:" + +msgid "Cylinders:" +msgstr "Silindirler:" + +msgid "Size (MB):" +msgstr "Boyut (MB):" + +msgid "Type:" +msgstr "Tip:" + +msgid "Image Format:" +msgstr "İmaj Düzeni:" + +msgid "Block Size:" +msgstr "Blok Boyutu:" + +msgid "Floppy drives:" +msgstr "Disket sürücüleri:" + +msgid "Turbo timings" +msgstr "Turbo zamanlamaları" + +msgid "Check BPB" +msgstr "BPB'yi denetle" + +msgid "CD-ROM drives:" +msgstr "CD-ROM sürücüleri:" + +msgid "MO drives:" +msgstr "MO sürücüleri:" + +msgid "ZIP drives:" +msgstr "ZIP sürücüleri:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA RTC:" + +msgid "ISA Memory Expansion" +msgstr "ISA Bellek Artırma" + +msgid "Card 1:" +msgstr "Kart 1:" + +msgid "Card 2:" +msgstr "Kart 2:" + +msgid "Card 3:" +msgstr "Kart 3:" + +msgid "Card 4:" +msgstr "Kart 4:" + +msgid "ISABugger device" +msgstr "ISABugger cihazı" + +msgid "POST card" +msgstr "POST kartı" + +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Hata" + +msgid "Fatal error" +msgstr "Kritik hata" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Pencere moduna geri dönmek için CTRL+ALT+PAGE DOWN tuşlarına basın." + +msgid "Speed" +msgstr "Hız" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.im? *.zdi)" +msgstr "ZIP imajları (*.im? *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box hiç bir kullanılabilir ROM imajı bulamadı.\n\nLütfen ROM setini indirin ve onu \"Roms\" klasörüne çıkarın." + +msgid "(empty)" +msgstr "(empty)" + +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "ZIP imajları (*.im? *.zdi);;All files (*.*)" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Açık" + +msgid "Off" +msgstr "Kapalı" + +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "Tüm imajlar (*.86f *.dsk *.flp *.im? *.*fd?);;Basit sektör imajları (*.dsk *.flp *.im? *.img *.*fd?);;Yüzey imajları (*.86f)" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "\"%hs\" makinesi roms/machines klasöründe mevcut olmayan ROM imajı yüzünden mevcut değil. Mevcut olan bir makineye geçiş yapılıyor." + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "\"%hs\" ekran kartı roms/video klasöründe mevcut olmayan ROM imajı yüzünden mevcut değil. Mevcut olan bir ekran kartına geçiş yapılıyor." + +msgid "Machine" +msgstr "Makine" + +msgid "Display" +msgstr "Görüntü" + +msgid "Input devices" +msgstr "Giriş aygıtları" + +msgid "Sound" +msgstr "Ses" + +msgid "Network" +msgstr "Ağ" + +msgid "Ports (COM & LPT)" +msgstr "Portlar (COM & LPT)" + +msgid "Storage controllers" +msgstr "Depolama kontrolcüleri" + +msgid "Hard disks" +msgstr "Hard diskler" + +msgid "Floppy & CD-ROM drives" +msgstr "Disket & CD-ROM sürücüleri" + +msgid "Other removable devices" +msgstr "Diğer kaldırılabilir cihazlar" + +msgid "Other peripherals" +msgstr "Diğer cihazlar" + +msgid "Surface images (*.86f)" +msgstr "Yüzey imajları (*.86f)" + +msgid "Click to capture mouse" +msgstr "Farenin yakalanması için tıklayın" + +msgid "Press F8+F12 to release mouse" +msgstr "Farenin bırakılması için F8+F12 tuşlarına basın" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Farenin bırakılması için F8+F12 veya farenin orta tuşuna basın" + +msgid "Unable to initialize FluidSynth" +msgstr "FluidSynth başlatılamadı" + +msgid "Bus" +msgstr "Veri yolu" + +msgid "File" +msgstr "Dosya" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "Video işleyici başlatılamadı." + +msgid "Default" +msgstr "Varsayılan" + +msgid "%i Wait state(s)" +msgstr "%i Bekleme durumları" + +msgid "Type" +msgstr "Tür" + +msgid "Failed to set up PCap" +msgstr "PCap ayarlanamadı" + +msgid "No PCap devices found" +msgstr "Herhangi bir PCap cihazı bulunamadı" + +msgid "Invalid PCap device" +msgstr "Geçersiz PCap cihazı" + +msgid "Standard 2-button joystick(s)" +msgstr "Standart 2-button oyun kolları" + +msgid "Standard 4-button joystick" +msgstr "Standart 4-button oyun kolu" + +msgid "Standard 6-button joystick" +msgstr "Standart 6-button oyun kolu" + +msgid "Standard 8-button joystick" +msgstr "Standart 8-button oyun kolu" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Kontrol Sistemi" + +msgid "None" +msgstr "Hiçbiri" + +msgid "Unable to load keyboard accelerators." +msgstr "Klavye ivdirgeçleri yüklenemedi." + +msgid "Unable to register raw input." +msgstr "Ham girdi kaydedilemedi." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Disket %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "Tüm imajlar (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Gelişmiş sektör imajları (*.imd *.json *.td0);;Basit sektör imajları (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Yüzey imajları (*.86f *.mfm);;All files (*.*)" + +msgid "Unable to initialize FreeType" +msgstr "FreeType başlatılamadı" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "SDL başlatılamadı, SDL2.dll gerekmektedir" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Emüle edilen makineyi yeniden başlatmak istediğinizden emin misiniz?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "86Box'tan çıkmak istediğinize emin misiniz?" + +msgid "Unable to initialize Ghostscript" +msgstr "Ghostscript başlatılamadı" + +msgid "MO %i (%ls): %ls" +msgstr "MO %i (%ls): %ls" + +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "MO imajları (*.im? *.mdi);;All files (*.*)" + +msgid "Welcome to 86Box!" +msgstr "86Box'a hoşgeldiniz!" + +msgid "Internal controller" +msgstr "Dahili kontrolcü" + +msgid "Exit" +msgstr "Çıkış" + +msgid "No ROMs found" +msgstr "Hiçbir ROM imajı bulunamadı" + +msgid "Do you want to save the settings?" +msgstr "Ayarları kaydetmek istediğinizden emin misiniz?" + +msgid "This will hard reset the emulated machine." +msgstr "Bu makineyi yeniden başlatacak." + +msgid "Save" +msgstr "Kaydet" + +msgid "About 86Box" +msgstr "86Box Hakkında" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Bir eski bilgisayar emülatörü\n\nYapanlar: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, ve diğerleri.\n\nGNU Genel Kamu Lisansı versiyon 2 veya sonrası altında yayınlanmıştır. Daha fazla bilgi için LICENSE'ı gözden geçirin." + +msgid "Hardware not available" +msgstr "Donanım mevcut değil" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "libpcap kurulu olduğundan ve libpcap-uyumlu bir internet ağında bulunduğunuzdan emin olun." + +msgid "Invalid configuration" +msgstr "Geçersiz konfigürasyon" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr " ESC/P yazıcı emülasyonu için gereklidir." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " PostScript dosyalarının otomatik olarak PDF dosyalarına çevirilmesi için gereklidir.\n\nGenel PostScript yazıcısına gönderilen tüm dökümanlar PostScript (.ps) dosyaları olarak kaydedilecektir." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr " FluidSynth MIDI çıkışı için gereklidir." + +msgid "Entering fullscreen mode" +msgstr "Tam ekran moduna geçiliyor" + +msgid "Don't show this message again" +msgstr "Bu mesajı bir daha gösterme" + +msgid "Don't exit" +msgstr "Çıkış yapma" + +msgid "Reset" +msgstr "Yeniden başlat" + +msgid "Don't reset" +msgstr "Yeniden başlatma" + +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "CD-ROM imajları (*.iso *.cue);;Tüm dosyalar (*.*)" + +msgid "%hs Device Configuration" +msgstr "%hs Cihaz Konfigürasyonu" + +msgid "Monitor in sleep mode" +msgstr "Monitör uyku modunda" + +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "OpenGL Gölgelendiricileri (*.glsl);;Tüm dosyalar (*.*)" + +msgid "OpenGL options" +msgstr "OpenGL ayarları" + +msgid "You are loading an unsupported configuration" +msgstr "Desteklenmeyen bir konfigürasyon yüklüyorsunuz" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "Seçtiğiniz makineye uygun CPU (işlemci) türü filtrelemesi bu emülasyon için devre dışı bırakıldı.\n\nBu, normalde seçilen makine ile uyumlu olmayan bir CPU seçmenizi mümkün kılmaktadır. Ancak, bundan dolayı seçilen makinenin BIOS'u veya diğer yazılımlar ile uyumsuzluk sorunu yaşayabilirsiniz.\n\nBu filtrelemeyi devre dışı bırakmak emülatör tarafından resmi olarak desteklenmemektedir ve açtığınız bug (hata) raporları geçersiz olarak kapatılabilir." + +msgid "Continue" +msgstr "Devam et" + +msgid "Cassette: %s" +msgstr "Kaset: %s" + +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "Kaset imajları (*.pcm *.raw *.wav *.cas);;Tüm dosyalar (*.*)" + +msgid "Cartridge %i: %ls" +msgstr "Kartuş %i: %ls" + +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "Kartuş imajları (*.a *.b *.jrc);;Tüm dosyalar (*.*)" + +msgid "Error initializing renderer" +msgstr "Error initializing renderer" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." + +msgid "Resume execution" +msgstr "Resume execution" + +msgid "Pause execution" +msgstr "Pause execution" + +msgid "Press Ctrl+Alt+Del" +msgstr "Press Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Press Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Hard reset" + +msgid "ACPI shutdown" +msgstr "ACPI shutdown" + +msgid "Hard disk (%s)" +msgstr "Hard disk (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL veya ESDI CD-ROM sürücüleri hiçbir zaman var olmamıştır" + +msgid "Custom..." +msgstr "Diğer..." + +msgid "Custom (large)..." +msgstr "Diğer (büyük)..." + +msgid "Add New Hard Disk" +msgstr "Yeni Hard Disk Dosyası Oluştur" + +msgid "Add Existing Hard Disk" +msgstr "Var Olan Hard Disk Dosyası Ekle" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "HDI disk imajları 4 GB'tan daha büyük olamaz." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Disk imajları 127 GB'tan daha büyük olamaz." + +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "Hard disk imajları (*.hd? *.im? *.vhd);;Tüm dosyalar (*.*)" + +msgid "Unable to read file" +msgstr "Dosya okunamıyor" + +msgid "Unable to write file" +msgstr "Dosyanın üzerine yazılamıyor" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "512 dışında sektör boyutu olan HDI veya HDX imajları desteklenmemektedir." + +msgid "USB is not yet supported" +msgstr "USB şu anda desteklenmemektedir" + +msgid "Disk image file already exists" +msgstr "Disk imaj dosyası zaten var olmakta" + +msgid "Please specify a valid file name." +msgstr "Lütfen geçerli bir dosya ismi belirleyin." + +msgid "Disk image created" +msgstr "Disk imajı oluşturuldu" + +msgid "Make sure the file exists and is readable." +msgstr "Dosyanın var olduğuna ve okunabildiğine emin olun." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Dosyanın yazılabilir bir klasöre kaydedildiğinden emin olun." + +msgid "Disk image too large" +msgstr "Disk imajı çok büyük" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Yeni oluşturulan diski bölmeyi ve formatlamayı unutmayın." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Seçili dosyanın üzerine yazılacaktır. Bunu yapmak istediğinizden emin misiniz?" + +msgid "Unsupported disk image" +msgstr "Desteklenmeyen disk imajı" + +msgid "Overwrite" +msgstr "Üzerine yaz" + +msgid "Don't overwrite" +msgstr "Üzerine yazma" + +msgid "Raw image (.img)" +msgstr "Ham imaj (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDI imajı (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDX imajı (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "Sabit-boyutlu VHD (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "Dinamik-boyutlu VHD (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Differencing VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Büyük bloklar (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Küçük bloklar (512 KB)" + +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "VHD dosyaları (*.vhd);;Tüm dosyalar (*.*)" + +msgid "Select the parent VHD" +msgstr "Ana VHD dosyasını seçin" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Bu, farkı alınan imaj oluşturulduktan sonra ana imaj dosyasının düzenlendiği anlamına geliyor olabilir.\n\nBu durum ayrıca imaj dosyaları kopyalandığında veya yerleri değiştirildiğinde veya imaj dosyalarını oluşturan programdaki bir hatadan dolayı olmuş olabilir.\n\nZaman damgalarını düzeltmek ister misiniz?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Ana ve ek disk zaman damgaları uyuşmuyor" + +msgid "Could not fix VHD timestamp." +msgstr "VHD zaman damgası düzeltilemedi." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (cluster 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (cluster 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Mb M.O. (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Mb M.O. (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Mb M.O. (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Mb M.O. (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Gb M.O. (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Gb M.O. (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Mb M.O." + +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Mb M.O." + +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Gb M.O." + +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Gb M.O." + +msgid "Perfect RPM" +msgstr "Mükemmel RPM" + +msgid "1%% below perfect RPM" +msgstr "mükemmel RPM değerinin 1%% altı" + +msgid "1.5%% below perfect RPM" +msgstr "mükemmel RPM değerinin 1.5%% altı" + +msgid "2%% below perfect RPM" +msgstr "mükemmel RPM değerinin 2%% altı" + +msgid "(System Default)" +msgstr "(Sistem Varsayılanı)" + diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po index 79f259861..62a3e5689 100644 --- a/src/qt/languages/zh-CN.po +++ b/src/qt/languages/zh-CN.po @@ -1,1191 +1,1191 @@ -msgid "&Action" -msgstr "操作(&A)" - -msgid "&Keyboard requires capture" -msgstr "键盘需要捕捉(&K)" - -msgid "&Right CTRL is left ALT" -msgstr "将右 CTRL 键映射为左 ALT 键(&R)" - -msgid "&Hard Reset..." -msgstr "硬重置(&H)..." - -msgid "&Ctrl+Alt+Del\tCtrl+F12" -msgstr "Ctrl+Alt+Del(&C)\tCtrl+F12" - -msgid "Ctrl+Alt+&Esc" -msgstr "Ctrl+Alt+Esc(&E)" - -msgid "&Pause" -msgstr "暂停(&P)" - -msgid "E&xit..." -msgstr "退出(&X)..." - -msgid "&View" -msgstr "查看(&V)" - -msgid "&Hide status bar" -msgstr "隐藏状态栏(&H)" - -msgid "Hide &toolbar" -msgstr "隐藏工具栏(&T)" - -msgid "&Resizeable window" -msgstr "窗口大小可调(&R)" - -msgid "R&emember size && position" -msgstr "记住窗口大小和位置(&E)" - -msgid "Re&nderer" -msgstr "渲染器(&N)" - -msgid "&SDL (Software)" -msgstr "SDL (软件)(&S)" - -msgid "SDL (&Hardware)" -msgstr "SDL (硬件)(&H)" - -msgid "SDL (&OpenGL)" -msgstr "SDL (OpenGL)(&O)" - -msgid "Open&GL (3.0 Core)" -msgstr "OpenGL (3.0 核心)(&G)" - -msgid "&VNC" -msgstr "VNC(&V)" - -msgid "Specify dimensions..." -msgstr "指定窗口大小..." - -msgid "F&orce 4:3 display ratio" -msgstr "强制 4:3 显示比例(&O)" - -msgid "&Window scale factor" -msgstr "窗口缩放系数(&W)" - -msgid "&0.5x" -msgstr "0.5x(&0)" - -msgid "&1x" -msgstr "1x(&1)" - -msgid "1.&5x" -msgstr "1.5x(&5)" - -msgid "&2x" -msgstr "2x(&2)" - -msgid "Filter method" -msgstr "过滤方式" - -msgid "&Nearest" -msgstr "邻近(&N)" - -msgid "&Linear" -msgstr "线性(&L)" - -msgid "Hi&DPI scaling" -msgstr "HiDPI 缩放(&D)" - -msgid "&Fullscreen\tCtrl+Alt+PageUP" -msgstr "全屏(&F)\tCtrl+Alt+PageUP" - -msgid "Fullscreen &stretch mode" -msgstr "全屏拉伸模式(&S)" - -msgid "&Full screen stretch" -msgstr "全屏拉伸(&F)" - -msgid "&4:3" -msgstr "4:3(&4)" - -msgid "&Square pixels (Keep ratio)" -msgstr "保持比例(&S)" - -msgid "&Integer scale" -msgstr "整数比例(&I)" - -msgid "E&GA/(S)VGA settings" -msgstr "EGA/(S)VGA 设置(&G)" - -msgid "&Inverted VGA monitor" -msgstr "VGA 显示器反色显示(&I)" - -msgid "VGA screen &type" -msgstr "VGA 屏幕类型(&T)" - -msgid "RGB &Color" -msgstr "RGB 彩色(&C)" - -msgid "&RGB Grayscale" -msgstr "RGB 灰度(&R)" - -msgid "&Amber monitor" -msgstr "琥珀色单色显示器(&A)" - -msgid "&Green monitor" -msgstr "绿色单色显示器(&G)" - -msgid "&White monitor" -msgstr "白色单色显示器(&W)" - -msgid "Grayscale &conversion type" -msgstr "灰度转换类型(&C)" - -msgid "BT&601 (NTSC/PAL)" -msgstr "BT601 (NTSC/PAL)(&6)" - -msgid "BT&709 (HDTV)" -msgstr "BT709 (HDTV)(&7)" - -msgid "&Average" -msgstr "平均(&A)" - -msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" -msgstr "CGA/PCjr/Tandy/EGA/(S)VGA 过扫描(&G)" - -msgid "Change contrast for &monochrome display" -msgstr "更改单色显示对比度(&M)" - -msgid "&Media" -msgstr "介质(&M)" - -msgid "&Tools" -msgstr "工具(&T)" - -msgid "&Settings..." -msgstr "设置(&S)..." - -msgid "&Update status bar icons" -msgstr "更新状态栏图标(&U)" - -msgid "Take s&creenshot\tCtrl+F11" -msgstr "截图(&C)\tCtrl+F11" - -msgid "&Preferences..." -msgstr "首选项(&P)..." - -msgid "Enable &Discord integration" -msgstr "启用 Discord 集成(&D)" - -msgid "Sound &gain..." -msgstr "音量增益(&G)..." - -msgid "Begin trace\tCtrl+T" -msgstr "开始追踪\tCtrl+T" - -msgid "End trace\tCtrl+T" -msgstr "结束追踪\tCtrl+T" - -msgid "&Logging" -msgstr "记录日志(&L)" - -msgid "Enable BusLogic logs\tCtrl+F4" -msgstr "启用 BusLogic 日志\tCtrl+F4" - -msgid "Enable CD-ROM logs\tCtrl+F5" -msgstr "启用 CD-ROM 日志\tCtrl+F5" - -msgid "Enable floppy (86F) logs\tCtrl+F6" -msgstr "启用软盘 (86F) 日志\tCtrl+F6" - -msgid "Enable floppy controller logs\tCtrl+F7" -msgstr "启用软盘控制器日志\tCtrl+F7" - -msgid "Enable IDE logs\tCtrl+F8" -msgstr "启用 IDE 日志\tCtrl+F8" - -msgid "Enable Serial Port logs\tCtrl+F3" -msgstr "启用串口日志\tCtrl+F3" - -msgid "Enable Network logs\tCtrl+F9" -msgstr "启用网络日志\tCtrl+F9" - -msgid "&Log breakpoint\tCtrl+F10" -msgstr "日志断点(&L)\tCtrl+F10" - -msgid "Dump &video RAM\tCtrl+F1" -msgstr "创建显卡内存转储(&V)\tCtrl+F1" - -msgid "&Help" -msgstr "帮助(&H)" - -msgid "&Documentation..." -msgstr "文档(&D)..." - -msgid "&About 86Box..." -msgstr "关于 86Box(&A)..." - -msgid "&New image..." -msgstr "新建镜像(&N)..." - -msgid "&Existing image..." -msgstr "打开已存在的镜像(&E)..." - -msgid "Existing image (&Write-protected)..." -msgstr "打开已存在的镜像并写保护(&W)..." - -msgid "&Record" -msgstr "录制(&R)" - -msgid "&Play" -msgstr "播放(&P)" - -msgid "&Rewind to the beginning" -msgstr "倒带至起点(&R)" - -msgid "&Fast forward to the end" -msgstr "快进至终点(&F)" - -msgid "E&ject" -msgstr "弹出(&J)" - -msgid "&Image..." -msgstr "镜像(&I)..." - -msgid "E&xport to 86F..." -msgstr "导出为 86F 格式(&x)..." - -msgid "&Mute" -msgstr "静音(&M)" - -msgid "E&mpty" -msgstr "空置驱动器(&M)" - -msgid "&Reload previous image" -msgstr "载入上一个镜像(&R)" - -msgid "&Image" -msgstr "镜像(&I)" - -msgid "Target &framerate" -msgstr "目标帧率(&F)" - -msgid "&Sync with video" -msgstr "与视频同步(&S)" - -msgid "&25 fps" -msgstr "25 fps(&2)" - -msgid "&30 fps" -msgstr "30 fps(&3)" - -msgid "&50 fps" -msgstr "50 fps(&5)" - -msgid "&60 fps" -msgstr "60 fps(&6)" - -msgid "&75 fps" -msgstr "75 fps(&7)" - -msgid "&VSync" -msgstr "垂直同步(&V)" - -msgid "&Select shader..." -msgstr "选择着色器(&S)..." - -msgid "&Remove shader" -msgstr "移除着色器(&R)" - -msgid "Preferences" -msgstr "首选项" - -msgid "Sound Gain" -msgstr "音量增益" - -msgid "New Image" -msgstr "新建镜像" - -msgid "Settings" -msgstr "设置" - -msgid "Specify Main Window Dimensions" -msgstr "指定主窗口大小" - -msgid "OK" -msgstr "确定" - -msgid "Cancel" -msgstr "取消" - -msgid "Save these settings as &global defaults" -msgstr "将以上设置存储为全局默认值(&G)" - -msgid "&Default" -msgstr "默认(&D)" - -msgid "Language:" -msgstr "语言:" - -msgid "Icon set:" -msgstr "图标集:" - -msgid "Gain" -msgstr "增益" - -msgid "File name:" -msgstr "文件名:" - -msgid "Disk size:" -msgstr "磁盘大小:" - -msgid "RPM mode:" -msgstr "转速 (RPM) 模式:" - -msgid "Progress:" -msgstr "进度:" - -msgid "Width:" -msgstr "宽度:" - -msgid "Height:" -msgstr "高度:" - -msgid "Lock to this size" -msgstr "锁定此大小" - -msgid "Machine type:" -msgstr "机器类型:" - -msgid "Machine:" -msgstr "机型:" - -msgid "Configure" -msgstr "配置" - -msgid "CPU type:" -msgstr "CPU 类型:" - -msgid "Speed:" -msgstr "速度:" - -msgid "FPU:" -msgstr "浮点处理器 (FPU):" - -msgid "Wait states:" -msgstr "等待状态 (WS):" - -msgid "MB" -msgstr "MB" - -msgid "Memory:" -msgstr "内存:" - -msgid "Time synchronization" -msgstr "时间同步" - -msgid "Disabled" -msgstr "禁用" - -msgid "Enabled (local time)" -msgstr "启用 (本地时间)" - -msgid "Enabled (UTC)" -msgstr "启用 (UTC)" - -msgid "Dynamic Recompiler" -msgstr "动态重编译器" - -msgid "Video:" -msgstr "显卡:" - -msgid "Voodoo Graphics" -msgstr "Voodoo Graphics" - -msgid "Mouse:" -msgstr "鼠标:" - -msgid "Joystick:" -msgstr "操纵杆:" - -msgid "Joystick 1..." -msgstr "操纵杆 1..." - -msgid "Joystick 2..." -msgstr "操纵杆 2..." - -msgid "Joystick 3..." -msgstr "操纵杆 3..." - -msgid "Joystick 4..." -msgstr "操纵杆 4..." - -msgid "Sound card:" -msgstr "声卡:" - -msgid "MIDI Out Device:" -msgstr "MIDI 输出设备:" - -msgid "MIDI In Device:" -msgstr "MIDI 输入设备:" - -msgid "Standalone MPU-401" -msgstr "独立 MPU-401" - -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - -msgid "Use FLOAT32 sound" -msgstr "使用单精度浮点 (FLOAT32)" - -msgid "Network type:" -msgstr "网络类型:" - -msgid "PCap device:" -msgstr "PCap 设备:" - -msgid "Network adapter:" -msgstr "网络适配器:" - -msgid "LPT1 Device:" -msgstr "LPT1 设备:" - -msgid "LPT2 Device:" -msgstr "LPT2 设备:" - -msgid "LPT3 Device:" -msgstr "LPT3 设备:" - -msgid "Serial port 1" -msgstr "串口 1" - -msgid "Serial port 2" -msgstr "串口 2" - -msgid "Serial port 3" -msgstr "串口 3" - -msgid "Serial port 4" -msgstr "串口 4" - -msgid "Parallel port 1" -msgstr "并口 1" - -msgid "Parallel port 2" -msgstr "并口 2" - -msgid "Parallel port 3" -msgstr "并口 3" - -msgid "HD Controller:" -msgstr "硬盘控制器:" - -msgid "FD Controller:" -msgstr "软盘控制器:" - -msgid "Tertiary IDE Controller" -msgstr "第三 IDE 控制器" - -msgid "Quaternary IDE Controller" -msgstr "第四 IDE 控制器" - -msgid "SCSI" -msgstr "SCSI" - -msgid "Controller 1:" -msgstr "控制器 1:" - -msgid "Controller 2:" -msgstr "控制器 2:" - -msgid "Controller 3:" -msgstr "控制器 3:" - -msgid "Controller 4:" -msgstr "控制器 4:" - -msgid "Cassette" -msgstr "磁带" - -msgid "Hard disks:" -msgstr "硬盘:" - -msgid "&New..." -msgstr "新建(&N)..." - -msgid "&Existing..." -msgstr "已有镜像(&E)..." - -msgid "&Remove" -msgstr "移除(&R)" - -msgid "Bus:" -msgstr "总线:" - -msgid "Channel:" -msgstr "通道:" - -msgid "ID:" -msgstr "ID:" - -msgid "&Specify..." -msgstr "指定(&S)..." - -msgid "Sectors:" -msgstr "扇区(S):" - -msgid "Heads:" -msgstr "磁头(H):" - -msgid "Cylinders:" -msgstr "柱面(C):" - -msgid "Size (MB):" -msgstr "大小 (MB):" - -msgid "Type:" -msgstr "类型:" - -msgid "Image Format:" -msgstr "镜像格式:" - -msgid "Block Size:" -msgstr "块大小:" - -msgid "Floppy drives:" -msgstr "软盘驱动器:" - -msgid "Turbo timings" -msgstr "加速时序" - -msgid "Check BPB" -msgstr "检查 BPB" - -msgid "CD-ROM drives:" -msgstr "光盘驱动器:" - -msgid "MO drives:" -msgstr "磁光盘驱动器:" - -msgid "ZIP drives:" -msgstr "ZIP 驱动器:" - -msgid "ZIP 250" -msgstr "ZIP 250" - -msgid "ISA RTC:" -msgstr "ISA 实时时钟:" - -msgid "ISA Memory Expansion" -msgstr "ISA 内存扩充" - -msgid "Card 1:" -msgstr "扩展卡 1:" - -msgid "Card 2:" -msgstr "扩展卡 2:" - -msgid "Card 3:" -msgstr "扩展卡 3:" - -msgid "Card 4:" -msgstr "扩展卡 4:" - -msgid "ISABugger device" -msgstr "ISABugger 设备" - -msgid "POST card" -msgstr "自检 (POST) 卡" - -msgid "FONT_SIZE" -msgstr "9" - -msgid "FONT_NAME" -msgstr "Microsoft YaHei" - -msgid "86Box" -msgstr "86Box" - -msgid "Error" -msgstr "错误" - -msgid "Fatal error" -msgstr "致命错误" - -msgid "" -msgstr "" - -msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." -msgstr "按 CTRL+ALT+PAGE DOWN 组合键返回到窗口模式。" - -msgid "Speed" -msgstr "速度" - -msgid "ZIP %03i %i (%s): %ls" -msgstr "ZIP %03i %i (%s): %ls" - -msgid "ZIP images (*.im? *.zdi)" -msgstr "ZIP 镜像 (*.im? *.zdi)" - -msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." -msgstr "86Box 找不到任何可用的 ROM 镜像。\n\n请下载ROM 包并将其解压到 \"roms\" 文件夹。" - -msgid "(empty)" -msgstr "(空)" - -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "ZIP 镜像 (*.im? *.zdi);;所有文件 (*.*)" - -msgid "Turbo" -msgstr "加速" - -msgid "On" -msgstr "开" - -msgid "Off" -msgstr "关" - -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "所有镜像 (*.86f *.dsk *.flp *.im? *.*fd?);;基本扇区镜像 (*.dsk *.flp *.im? *.img *.*fd?);;表面镜像 (*.86f)" - -msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "由于 roms/machines 文件夹中缺少合适的 ROM,机型 \"%hs\" 不可用。将切换到其他可用机型。" - -msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "由于 roms/video 文件夹中缺少合适的 ROM,显卡 \"%hs\" 不可用。将切换到其他可用显卡。" - -msgid "Machine" -msgstr "机型" - -msgid "Display" -msgstr "显示" - -msgid "Input devices" -msgstr "输入设备" - -msgid "Sound" -msgstr "声音" - -msgid "Network" -msgstr "网络" - -msgid "Ports (COM & LPT)" -msgstr "端口 (COM 和 LPT)" - -msgid "Storage controllers" -msgstr "存储控制器" - -msgid "Hard disks" -msgstr "硬盘" - -msgid "Floppy & CD-ROM drives" -msgstr "软盘/光盘驱动器" - -msgid "Other removable devices" -msgstr "其他可移动设备" - -msgid "Other peripherals" -msgstr "其他外围设备" - -msgid "Surface images (*.86f)" -msgstr "表面镜像 (*.86f)" - -msgid "Click to capture mouse" -msgstr "单击窗口捕捉鼠标" - -msgid "Press F8+F12 to release mouse" -msgstr "按 F8+F12 释放鼠标" - -msgid "Press F8+F12 or middle button to release mouse" -msgstr "按 F8+F12 或鼠标中键释放鼠标" - -msgid "Unable to initialize FluidSynth" -msgstr "无法初始化 FluidSynth" - -msgid "Bus" -msgstr "总线" - -msgid "File" -msgstr "文件" - -msgid "C" -msgstr "C" - -msgid "H" -msgstr "H" - -msgid "S" -msgstr "S" - -msgid "KB" -msgstr "KB" - -msgid "Could not initialize the video renderer." -msgstr "无法初始化视频渲染器。" - -msgid "Default" -msgstr "默认" - -msgid "%i Wait state(s)" -msgstr "%i 等待状态 (WS)" - -msgid "Type" -msgstr "类型" - -msgid "Failed to set up PCap" -msgstr "设置 PCap 失败" - -msgid "No PCap devices found" -msgstr "未找到 PCap 设备" - -msgid "Invalid PCap device" -msgstr "无效 PCap 设备" - -msgid "Standard 2-button joystick(s)" -msgstr "标准 2 键操纵杆" - -msgid "Standard 4-button joystick" -msgstr "标准 4 键操纵杆" - -msgid "Standard 6-button joystick" -msgstr "标准 6 键操纵杆" - -msgid "Standard 8-button joystick" -msgstr "标准 8 键操纵杆" - -msgid "CH Flightstick Pro" -msgstr "CH Flightstick Pro" - -msgid "Microsoft SideWinder Pad" -msgstr "Microsoft SideWinder Pad" - -msgid "Thrustmaster Flight Control System" -msgstr "Thrustmaster Flight Control System" - -msgid "None" -msgstr "无" - -msgid "Unable to load keyboard accelerators." -msgstr "无法加载键盘加速器。" - -msgid "Unable to register raw input." -msgstr "无法注册原始输入。" - -msgid "%u" -msgstr "%u" - -msgid "%u MB (CHS: %i, %i, %i)" -msgstr "%u MB (CHS: %i, %i, %i)" - -msgid "Floppy %i (%s): %ls" -msgstr "软盘 %i (%s): %ls" - -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "所有镜像 (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;高级扇区镜像 (*.imd *.json *.td0);;基本扇区镜像 (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux 镜像 (*.fdi);;表面镜像 (*.86f *.mfm);;所有文件 (*.*)" - -msgid "Unable to initialize FreeType" -msgstr "无法初始化 FreeType" - -msgid "Unable to initialize SDL, SDL2.dll is required" -msgstr "无法初始化 SDL,需要 SDL2.dll" - -msgid "Are you sure you want to hard reset the emulated machine?" -msgstr "确定要硬重置模拟器吗?" - -msgid "Are you sure you want to exit 86Box?" -msgstr "确定要退出 86Box 吗?" - -msgid "Unable to initialize Ghostscript" -msgstr "无法初始化 Ghostscript" - -msgid "MO %i (%ls): %ls" -msgstr "磁光盘 %i (%ls): %ls" - -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "磁光盘镜像 (*.im? *.mdi);;所有文件 (*.*)" - -msgid "Welcome to 86Box!" -msgstr "欢迎使用 86Box!" - -msgid "Internal controller" -msgstr "内部控制器" - -msgid "Exit" -msgstr "退出" - -msgid "No ROMs found" -msgstr "找不到 ROM" - -msgid "Do you want to save the settings?" -msgstr "要保存设置吗?" - -msgid "This will hard reset the emulated machine." -msgstr "此操作将硬重置模拟器。" - -msgid "Save" -msgstr "保存" - -msgid "About 86Box" -msgstr "关于 86Box" - -msgid "86Box v" -msgstr "86Box v" - -msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." -msgstr "一个旧式计算机模拟器\n\n作者: Sarah Walker、Miran Grca、Fred N. van Kempen (waltje)、SA1988、Tiseno100、reenigne、leilei、JohnElliott、greatpsycho 等人。\n\n本软件依据 GNU 通用公共许可证第二版或更新版本发布。详情见 LICENSE 文件。" - -msgid "Hardware not available" -msgstr "硬件不可用" - -msgid "WinPcap" -msgstr "WinPcap" - -msgid "libpcap" -msgstr "libpcap" - -msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." -msgstr "请确认 libpcap 已安装且使用兼容 libpcap 的网络连接。" - -msgid "Invalid configuration" -msgstr "无效配置" - -msgid "freetype.dll" -msgstr "freetype.dll" - -msgid "libfreetype" -msgstr "libfreetype" - -msgid " is required for ESC/P printer emulation." -msgstr "ESC/P 打印机模拟需要" - -msgid "gsdll32.dll" -msgstr "gsdll32.dll" - -msgid "libgs" -msgstr "libgs" - -msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." -msgstr " 是将 PostScript 文件转换为 PDF 所需要的库。\n\n使用通用 PostScript 打印机打印的文档将被保存为 PostScript (.ps) 文件。" - -msgid "libfluidsynth.dll" -msgstr "libfluidsynth.dll" - -msgid "libfluidsynth" -msgstr "libfluidsynth" - -msgid " is required for FluidSynth MIDI output." -msgstr "FluidSynth MIDI 输出需要" - -msgid "Entering fullscreen mode" -msgstr "正在进入全屏模式" - -msgid "Don't show this message again" -msgstr "不要再显示此消息" - -msgid "Don't exit" -msgstr "不退出" - -msgid "Reset" -msgstr "重置" - -msgid "Don't reset" -msgstr "不重置" - -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "光盘镜像 (*.iso *.cue);;所有文件 (*.*)" - -msgid "%hs Device Configuration" -msgstr "%hs 设备配置" - -msgid "Monitor in sleep mode" -msgstr "显示器处在睡眠状态" - -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "OpenGL 着色器 (*.glsl);;所有文件 (*.*)" - -msgid "OpenGL options" -msgstr "OpenGL 选项" - -msgid "You are loading an unsupported configuration" -msgstr "正在载入一个不受支持的配置" - -msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "此模拟计算机禁用了基于选定计算机的 CPU 类型过滤。\n\n能够选中与所选机器本不兼容的 CPU,但是可能会遇到与机器 BIOS 或其他软件不兼容的问题。\n\n启用此设置不受官方支持,并且提交的任何错误报告可能会视为无效而关闭。" - -msgid "Continue" -msgstr "继续" - -msgid "Cassette: %s" -msgstr "磁带: %s" - -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "磁带镜像 (*.pcm *.raw *.wav *.cas);;所有文件 (*.*)" - -msgid "Cartridge %i: %ls" -msgstr "卡带 %i: %ls" - -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "卡带镜像 (*.a *.b *.jrc);;所有文件 (*.*)" - -msgid "Error initializing renderer" -msgstr "初始化渲染器时出错" - -msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "无法初始化 OpenGL (3.0 核心) 渲染器。请使用其他渲染器。" - -msgid "Resume execution" -msgstr "恢复执行" - -msgid "Pause execution" -msgstr "暂停执行" - -msgid "Press Ctrl+Alt+Del" -msgstr "按 Ctrl+Alt+Del" - -msgid "Press Ctrl+Alt+Esc" -msgstr "按 Ctrl+Alt+Esc" - -msgid "Hard reset" -msgstr "硬重置" - -msgid "ACPI shutdown" -msgstr "ACPI 关机" - -msgid "Hard disk (%s)" -msgstr "硬盘 (%s)" - -msgid "%01i:%01i" -msgstr "%01i:%01i" - -msgid "%01i" -msgstr "%01i" - -msgid "MFM/RLL or ESDI CD-ROM drives never existed" -msgstr "不存在 MFM/RLL 或 ESDI CD-ROM 驱动器" - -msgid "Custom..." -msgstr "自定义..." - -msgid "Custom (large)..." -msgstr "自定义 (大容量)..." - -msgid "Add New Hard Disk" -msgstr "添加新硬盘" - -msgid "Add Existing Hard Disk" -msgstr "添加已存在的硬盘" - -msgid "HDI disk images cannot be larger than 4 GB." -msgstr "HDI 磁盘镜像不能超过 4 GB。" - -msgid "Disk images cannot be larger than 127 GB." -msgstr "磁盘镜像不能超过 127 GB。" - -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "硬盘镜像 (*.hd? *.im? *.vhd);;所有文件 (*.*)" - -msgid "Unable to read file" -msgstr "无法读取文件" - -msgid "Unable to write file" -msgstr "无法写入文件" - -msgid "HDI or HDX images with a sector size other than 512 are not supported." -msgstr "不支持非 512 字节扇区大小的 HDI 或 HDX 镜像。" - -msgid "USB is not yet supported" -msgstr "尚未支持 USB" - -msgid "Disk image file already exists" -msgstr "磁盘镜像文件已存在" - -msgid "Please specify a valid file name." -msgstr "请指定有效的文件名。" - -msgid "Disk image created" -msgstr "已创建磁盘镜像" - -msgid "Make sure the file exists and is readable." -msgstr "请确定此文件已存在并可读取。" - -msgid "Make sure the file is being saved to a writable directory." -msgstr "请确定此文件保存在可写目录中。" - -msgid "Disk image too large" -msgstr "磁盘镜像太大" - -msgid "Remember to partition and format the newly-created drive." -msgstr "请记得为新创建的镜像分区并格式化。" - -msgid "The selected file will be overwritten. Are you sure you want to use it?" -msgstr "选定的文件将被覆盖。确定继续使用此文件吗?" - -msgid "Unsupported disk image" -msgstr "不支持的磁盘镜像" - -msgid "Overwrite" -msgstr "覆盖" - -msgid "Don't overwrite" -msgstr "不覆盖" - -msgid "Raw image (.img)" -msgstr "原始镜像 (.img)" - -msgid "HDI image (.hdi)" -msgstr "HDI 镜像 (.hdi)" - -msgid "HDX image (.hdx)" -msgstr "HDX 镜像 (.hdx)" - -msgid "Fixed-size VHD (.vhd)" -msgstr "固定大小 VHD (.vhd)" - -msgid "Dynamic-size VHD (.vhd)" -msgstr "动态大小 VHD (.vhd)" - -msgid "Differencing VHD (.vhd)" -msgstr "差分 VHD (.vhd)" - -msgid "Large blocks (2 MB)" -msgstr "大块 (2 MB)" - -msgid "Small blocks (512 KB)" -msgstr "小块 (512 KB)" - -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "VHD 文件 (*.vhd);;所有文件 (*.*)" - -msgid "Select the parent VHD" -msgstr "选择父 VHD 文件" - -msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" -msgstr "父映像可能在创建差异镜像后被修改。\n\n如果镜像文件被移动或复制,或创建此磁盘的程序中存在错误,也可能发生这种情况。\n\n是否需要修复时间戳?" - -msgid "Parent and child disk timestamps do not match" -msgstr "父盘与子盘的时间戳不匹配" - -msgid "Could not fix VHD timestamp." -msgstr "无法修复 VHD 时间戳。" - -msgid "%01i:%02i" -msgstr "%01i:%02i" - -msgid "MFM/RLL" -msgstr "MFM/RLL" - -msgid "XTA" -msgstr "XTA" - -msgid "ESDI" -msgstr "ESDI" - -msgid "IDE" -msgstr "IDE" - -msgid "ATAPI" -msgstr "ATAPI" - -msgid "MFM/RLL (%01i:%01i)" -msgstr "MFM/RLL (%01i:%01i)" - -msgid "XTA (%01i:%01i)" -msgstr "XTA (%01i:%01i)" - -msgid "ESDI (%01i:%01i)" -msgstr "ESDI (%01i:%01i)" - -msgid "IDE (%01i:%01i)" -msgstr "IDE (%01i:%01i)" - -msgid "ATAPI (%01i:%01i)" -msgstr "ATAPI (%01i:%01i)" - -msgid "SCSI (%01i:%02i)" -msgstr "SCSI (%01i:%02i)" - -msgid "CD-ROM %i (%s): %s" -msgstr "光盘 %i (%s): %s" - -msgid "160 kB" -msgstr "160 kB" - -msgid "180 kB" -msgstr "180 kB" - -msgid "320 kB" -msgstr "320 kB" - -msgid "360 kB" -msgstr "360 kB" - -msgid "640 kB" -msgstr "640 kB" - -msgid "720 kB" -msgstr "720 kB" - -msgid "1.2 MB" -msgstr "1.2 MB" - -msgid "1.25 MB" -msgstr "1.25 MB" - -msgid "1.44 MB" -msgstr "1.44 MB" - -msgid "DMF (cluster 1024)" -msgstr "DMF (1024 簇)" - -msgid "DMF (cluster 2048)" -msgstr "DMF (2048 簇)" - -msgid "2.88 MB" -msgstr "2.88 MB" - -msgid "ZIP 100" -msgstr "ZIP 100" - -msgid "3.5\" 128Mb M.O. (ISO 10090)" -msgstr "3.5 英寸 128Mb 磁光盘 (ISO 10090)" - -msgid "3.5\" 230Mb M.O. (ISO 13963)" -msgstr "3.5 英寸 230Mb 磁光盘 (ISO 13963)" - -msgid "3.5\" 540Mb M.O. (ISO 15498)" -msgstr "3.5 英寸 540Mb 磁光盘 (ISO 15498)" - -msgid "3.5\" 640Mb M.O. (ISO 15498)" -msgstr "3.5 英寸 640Mb 磁光盘 (ISO 15498)" - -msgid "3.5\" 1.3Gb M.O. (GigaMO)" -msgstr "3.5 英寸 1.3Gb 磁光盘 (GigaMO)" - -msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" -msgstr "3.5 英寸 2.3Gb 磁光盘 (GigaMO 2)" - -msgid "5.25\" 600Mb M.O." -msgstr "5.25 英寸 600Mb 磁光盘" - -msgid "5.25\" 650Mb M.O." -msgstr "5.25 英寸 650Mb 磁光盘" - -msgid "5.25\" 1Gb M.O." -msgstr "5.25 英寸 1Gb 磁光盘" - -msgid "5.25\" 1.3Gb M.O." -msgstr "5.25 英寸 1.3Gb 磁光盘" - -msgid "Perfect RPM" -msgstr "标准转速 (RPM)" - -msgid "1%% below perfect RPM" -msgstr "低于标准转速的 1%%" - -msgid "1.5%% below perfect RPM" -msgstr "低于标准转速的 1.5%%" - -msgid "2%% below perfect RPM" -msgstr "低于标准转速的 2%%" - -msgid "(System Default)" -msgstr "(系统默认)" - +msgid "&Action" +msgstr "操作(&A)" + +msgid "&Keyboard requires capture" +msgstr "键盘需要捕捉(&K)" + +msgid "&Right CTRL is left ALT" +msgstr "将右 CTRL 键映射为左 ALT 键(&R)" + +msgid "&Hard Reset..." +msgstr "硬重置(&H)..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "Ctrl+Alt+Del(&C)\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+Esc(&E)" + +msgid "&Pause" +msgstr "暂停(&P)" + +msgid "E&xit..." +msgstr "退出(&X)..." + +msgid "&View" +msgstr "查看(&V)" + +msgid "&Hide status bar" +msgstr "隐藏状态栏(&H)" + +msgid "Hide &toolbar" +msgstr "隐藏工具栏(&T)" + +msgid "&Resizeable window" +msgstr "窗口大小可调(&R)" + +msgid "R&emember size && position" +msgstr "记住窗口大小和位置(&E)" + +msgid "Re&nderer" +msgstr "渲染器(&N)" + +msgid "&SDL (Software)" +msgstr "SDL (软件)(&S)" + +msgid "SDL (&Hardware)" +msgstr "SDL (硬件)(&H)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (OpenGL)(&O)" + +msgid "Open&GL (3.0 Core)" +msgstr "OpenGL (3.0 核心)(&G)" + +msgid "&VNC" +msgstr "VNC(&V)" + +msgid "Specify dimensions..." +msgstr "指定窗口大小..." + +msgid "F&orce 4:3 display ratio" +msgstr "强制 4:3 显示比例(&O)" + +msgid "&Window scale factor" +msgstr "窗口缩放系数(&W)" + +msgid "&0.5x" +msgstr "0.5x(&0)" + +msgid "&1x" +msgstr "1x(&1)" + +msgid "1.&5x" +msgstr "1.5x(&5)" + +msgid "&2x" +msgstr "2x(&2)" + +msgid "Filter method" +msgstr "过滤方式" + +msgid "&Nearest" +msgstr "邻近(&N)" + +msgid "&Linear" +msgstr "线性(&L)" + +msgid "Hi&DPI scaling" +msgstr "HiDPI 缩放(&D)" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "全屏(&F)\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "全屏拉伸模式(&S)" + +msgid "&Full screen stretch" +msgstr "全屏拉伸(&F)" + +msgid "&4:3" +msgstr "4:3(&4)" + +msgid "&Square pixels (Keep ratio)" +msgstr "保持比例(&S)" + +msgid "&Integer scale" +msgstr "整数比例(&I)" + +msgid "E&GA/(S)VGA settings" +msgstr "EGA/(S)VGA 设置(&G)" + +msgid "&Inverted VGA monitor" +msgstr "VGA 显示器反色显示(&I)" + +msgid "VGA screen &type" +msgstr "VGA 屏幕类型(&T)" + +msgid "RGB &Color" +msgstr "RGB 彩色(&C)" + +msgid "&RGB Grayscale" +msgstr "RGB 灰度(&R)" + +msgid "&Amber monitor" +msgstr "琥珀色单色显示器(&A)" + +msgid "&Green monitor" +msgstr "绿色单色显示器(&G)" + +msgid "&White monitor" +msgstr "白色单色显示器(&W)" + +msgid "Grayscale &conversion type" +msgstr "灰度转换类型(&C)" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT601 (NTSC/PAL)(&6)" + +msgid "BT&709 (HDTV)" +msgstr "BT709 (HDTV)(&7)" + +msgid "&Average" +msgstr "平均(&A)" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "CGA/PCjr/Tandy/EGA/(S)VGA 过扫描(&G)" + +msgid "Change contrast for &monochrome display" +msgstr "更改单色显示对比度(&M)" + +msgid "&Media" +msgstr "介质(&M)" + +msgid "&Tools" +msgstr "工具(&T)" + +msgid "&Settings..." +msgstr "设置(&S)..." + +msgid "&Update status bar icons" +msgstr "更新状态栏图标(&U)" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "截图(&C)\tCtrl+F11" + +msgid "&Preferences..." +msgstr "首选项(&P)..." + +msgid "Enable &Discord integration" +msgstr "启用 Discord 集成(&D)" + +msgid "Sound &gain..." +msgstr "音量增益(&G)..." + +msgid "Begin trace\tCtrl+T" +msgstr "开始追踪\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "结束追踪\tCtrl+T" + +msgid "&Logging" +msgstr "记录日志(&L)" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "启用 BusLogic 日志\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "启用 CD-ROM 日志\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "启用软盘 (86F) 日志\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "启用软盘控制器日志\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "启用 IDE 日志\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "启用串口日志\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "启用网络日志\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "日志断点(&L)\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "创建显卡内存转储(&V)\tCtrl+F1" + +msgid "&Help" +msgstr "帮助(&H)" + +msgid "&Documentation..." +msgstr "文档(&D)..." + +msgid "&About 86Box..." +msgstr "关于 86Box(&A)..." + +msgid "&New image..." +msgstr "新建镜像(&N)..." + +msgid "&Existing image..." +msgstr "打开已存在的镜像(&E)..." + +msgid "Existing image (&Write-protected)..." +msgstr "打开已存在的镜像并写保护(&W)..." + +msgid "&Record" +msgstr "录制(&R)" + +msgid "&Play" +msgstr "播放(&P)" + +msgid "&Rewind to the beginning" +msgstr "倒带至起点(&R)" + +msgid "&Fast forward to the end" +msgstr "快进至终点(&F)" + +msgid "E&ject" +msgstr "弹出(&J)" + +msgid "&Image..." +msgstr "镜像(&I)..." + +msgid "E&xport to 86F..." +msgstr "导出为 86F 格式(&x)..." + +msgid "&Mute" +msgstr "静音(&M)" + +msgid "E&mpty" +msgstr "空置驱动器(&M)" + +msgid "&Reload previous image" +msgstr "载入上一个镜像(&R)" + +msgid "&Image" +msgstr "镜像(&I)" + +msgid "Target &framerate" +msgstr "目标帧率(&F)" + +msgid "&Sync with video" +msgstr "与视频同步(&S)" + +msgid "&25 fps" +msgstr "25 fps(&2)" + +msgid "&30 fps" +msgstr "30 fps(&3)" + +msgid "&50 fps" +msgstr "50 fps(&5)" + +msgid "&60 fps" +msgstr "60 fps(&6)" + +msgid "&75 fps" +msgstr "75 fps(&7)" + +msgid "&VSync" +msgstr "垂直同步(&V)" + +msgid "&Select shader..." +msgstr "选择着色器(&S)..." + +msgid "&Remove shader" +msgstr "移除着色器(&R)" + +msgid "Preferences" +msgstr "首选项" + +msgid "Sound Gain" +msgstr "音量增益" + +msgid "New Image" +msgstr "新建镜像" + +msgid "Settings" +msgstr "设置" + +msgid "Specify Main Window Dimensions" +msgstr "指定主窗口大小" + +msgid "OK" +msgstr "确定" + +msgid "Cancel" +msgstr "取消" + +msgid "Save these settings as &global defaults" +msgstr "将以上设置存储为全局默认值(&G)" + +msgid "&Default" +msgstr "默认(&D)" + +msgid "Language:" +msgstr "语言:" + +msgid "Icon set:" +msgstr "图标集:" + +msgid "Gain" +msgstr "增益" + +msgid "File name:" +msgstr "文件名:" + +msgid "Disk size:" +msgstr "磁盘大小:" + +msgid "RPM mode:" +msgstr "转速 (RPM) 模式:" + +msgid "Progress:" +msgstr "进度:" + +msgid "Width:" +msgstr "宽度:" + +msgid "Height:" +msgstr "高度:" + +msgid "Lock to this size" +msgstr "锁定此大小" + +msgid "Machine type:" +msgstr "机器类型:" + +msgid "Machine:" +msgstr "机型:" + +msgid "Configure" +msgstr "配置" + +msgid "CPU type:" +msgstr "CPU 类型:" + +msgid "Speed:" +msgstr "速度:" + +msgid "FPU:" +msgstr "浮点处理器 (FPU):" + +msgid "Wait states:" +msgstr "等待状态 (WS):" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "内存:" + +msgid "Time synchronization" +msgstr "时间同步" + +msgid "Disabled" +msgstr "禁用" + +msgid "Enabled (local time)" +msgstr "启用 (本地时间)" + +msgid "Enabled (UTC)" +msgstr "启用 (UTC)" + +msgid "Dynamic Recompiler" +msgstr "动态重编译器" + +msgid "Video:" +msgstr "显卡:" + +msgid "Voodoo Graphics" +msgstr "Voodoo Graphics" + +msgid "Mouse:" +msgstr "鼠标:" + +msgid "Joystick:" +msgstr "操纵杆:" + +msgid "Joystick 1..." +msgstr "操纵杆 1..." + +msgid "Joystick 2..." +msgstr "操纵杆 2..." + +msgid "Joystick 3..." +msgstr "操纵杆 3..." + +msgid "Joystick 4..." +msgstr "操纵杆 4..." + +msgid "Sound card:" +msgstr "声卡:" + +msgid "MIDI Out Device:" +msgstr "MIDI 输出设备:" + +msgid "MIDI In Device:" +msgstr "MIDI 输入设备:" + +msgid "Standalone MPU-401" +msgstr "独立 MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "使用单精度浮点 (FLOAT32)" + +msgid "Network type:" +msgstr "网络类型:" + +msgid "PCap device:" +msgstr "PCap 设备:" + +msgid "Network adapter:" +msgstr "网络适配器:" + +msgid "LPT1 Device:" +msgstr "LPT1 设备:" + +msgid "LPT2 Device:" +msgstr "LPT2 设备:" + +msgid "LPT3 Device:" +msgstr "LPT3 设备:" + +msgid "Serial port 1" +msgstr "串口 1" + +msgid "Serial port 2" +msgstr "串口 2" + +msgid "Serial port 3" +msgstr "串口 3" + +msgid "Serial port 4" +msgstr "串口 4" + +msgid "Parallel port 1" +msgstr "并口 1" + +msgid "Parallel port 2" +msgstr "并口 2" + +msgid "Parallel port 3" +msgstr "并口 3" + +msgid "HD Controller:" +msgstr "硬盘控制器:" + +msgid "FD Controller:" +msgstr "软盘控制器:" + +msgid "Tertiary IDE Controller" +msgstr "第三 IDE 控制器" + +msgid "Quaternary IDE Controller" +msgstr "第四 IDE 控制器" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "控制器 1:" + +msgid "Controller 2:" +msgstr "控制器 2:" + +msgid "Controller 3:" +msgstr "控制器 3:" + +msgid "Controller 4:" +msgstr "控制器 4:" + +msgid "Cassette" +msgstr "磁带" + +msgid "Hard disks:" +msgstr "硬盘:" + +msgid "&New..." +msgstr "新建(&N)..." + +msgid "&Existing..." +msgstr "已有镜像(&E)..." + +msgid "&Remove" +msgstr "移除(&R)" + +msgid "Bus:" +msgstr "总线:" + +msgid "Channel:" +msgstr "通道:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "指定(&S)..." + +msgid "Sectors:" +msgstr "扇区(S):" + +msgid "Heads:" +msgstr "磁头(H):" + +msgid "Cylinders:" +msgstr "柱面(C):" + +msgid "Size (MB):" +msgstr "大小 (MB):" + +msgid "Type:" +msgstr "类型:" + +msgid "Image Format:" +msgstr "镜像格式:" + +msgid "Block Size:" +msgstr "块大小:" + +msgid "Floppy drives:" +msgstr "软盘驱动器:" + +msgid "Turbo timings" +msgstr "加速时序" + +msgid "Check BPB" +msgstr "检查 BPB" + +msgid "CD-ROM drives:" +msgstr "光盘驱动器:" + +msgid "MO drives:" +msgstr "磁光盘驱动器:" + +msgid "ZIP drives:" +msgstr "ZIP 驱动器:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA 实时时钟:" + +msgid "ISA Memory Expansion" +msgstr "ISA 内存扩充" + +msgid "Card 1:" +msgstr "扩展卡 1:" + +msgid "Card 2:" +msgstr "扩展卡 2:" + +msgid "Card 3:" +msgstr "扩展卡 3:" + +msgid "Card 4:" +msgstr "扩展卡 4:" + +msgid "ISABugger device" +msgstr "ISABugger 设备" + +msgid "POST card" +msgstr "自检 (POST) 卡" + +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" +msgstr "Microsoft YaHei" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "错误" + +msgid "Fatal error" +msgstr "致命错误" + +msgid "" +msgstr "" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "按 CTRL+ALT+PAGE DOWN 组合键返回到窗口模式。" + +msgid "Speed" +msgstr "速度" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images (*.im? *.zdi)" +msgstr "ZIP 镜像 (*.im? *.zdi)" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box 找不到任何可用的 ROM 镜像。\n\n请下载ROM 包并将其解压到 \"roms\" 文件夹。" + +msgid "(empty)" +msgstr "(空)" + +msgid "ZIP images (*.im? *.zdi);;All files (*.*)" +msgstr "ZIP 镜像 (*.im? *.zdi);;所有文件 (*.*)" + +msgid "Turbo" +msgstr "加速" + +msgid "On" +msgstr "开" + +msgid "Off" +msgstr "关" + +msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" +msgstr "所有镜像 (*.86f *.dsk *.flp *.im? *.*fd?);;基本扇区镜像 (*.dsk *.flp *.im? *.img *.*fd?);;表面镜像 (*.86f)" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "由于 roms/machines 文件夹中缺少合适的 ROM,机型 \"%hs\" 不可用。将切换到其他可用机型。" + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "由于 roms/video 文件夹中缺少合适的 ROM,显卡 \"%hs\" 不可用。将切换到其他可用显卡。" + +msgid "Machine" +msgstr "机型" + +msgid "Display" +msgstr "显示" + +msgid "Input devices" +msgstr "输入设备" + +msgid "Sound" +msgstr "声音" + +msgid "Network" +msgstr "网络" + +msgid "Ports (COM & LPT)" +msgstr "端口 (COM 和 LPT)" + +msgid "Storage controllers" +msgstr "存储控制器" + +msgid "Hard disks" +msgstr "硬盘" + +msgid "Floppy & CD-ROM drives" +msgstr "软盘/光盘驱动器" + +msgid "Other removable devices" +msgstr "其他可移动设备" + +msgid "Other peripherals" +msgstr "其他外围设备" + +msgid "Surface images (*.86f)" +msgstr "表面镜像 (*.86f)" + +msgid "Click to capture mouse" +msgstr "单击窗口捕捉鼠标" + +msgid "Press F8+F12 to release mouse" +msgstr "按 F8+F12 释放鼠标" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "按 F8+F12 或鼠标中键释放鼠标" + +msgid "Unable to initialize FluidSynth" +msgstr "无法初始化 FluidSynth" + +msgid "Bus" +msgstr "总线" + +msgid "File" +msgstr "文件" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Could not initialize the video renderer." +msgstr "无法初始化视频渲染器。" + +msgid "Default" +msgstr "默认" + +msgid "%i Wait state(s)" +msgstr "%i 等待状态 (WS)" + +msgid "Type" +msgstr "类型" + +msgid "Failed to set up PCap" +msgstr "设置 PCap 失败" + +msgid "No PCap devices found" +msgstr "未找到 PCap 设备" + +msgid "Invalid PCap device" +msgstr "无效 PCap 设备" + +msgid "Standard 2-button joystick(s)" +msgstr "标准 2 键操纵杆" + +msgid "Standard 4-button joystick" +msgstr "标准 4 键操纵杆" + +msgid "Standard 6-button joystick" +msgstr "标准 6 键操纵杆" + +msgid "Standard 8-button joystick" +msgstr "标准 8 键操纵杆" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Thrustmaster Flight Control System" + +msgid "None" +msgstr "无" + +msgid "Unable to load keyboard accelerators." +msgstr "无法加载键盘加速器。" + +msgid "Unable to register raw input." +msgstr "无法注册原始输入。" + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u MB (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "软盘 %i (%s): %ls" + +msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" +msgstr "所有镜像 (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;高级扇区镜像 (*.imd *.json *.td0);;基本扇区镜像 (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux 镜像 (*.fdi);;表面镜像 (*.86f *.mfm);;所有文件 (*.*)" + +msgid "Unable to initialize FreeType" +msgstr "无法初始化 FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "无法初始化 SDL,需要 SDL2.dll" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "确定要硬重置模拟器吗?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "确定要退出 86Box 吗?" + +msgid "Unable to initialize Ghostscript" +msgstr "无法初始化 Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "磁光盘 %i (%ls): %ls" + +msgid "MO images (*.im? *.mdi);;All files (*.*)" +msgstr "磁光盘镜像 (*.im? *.mdi);;所有文件 (*.*)" + +msgid "Welcome to 86Box!" +msgstr "欢迎使用 86Box!" + +msgid "Internal controller" +msgstr "内部控制器" + +msgid "Exit" +msgstr "退出" + +msgid "No ROMs found" +msgstr "找不到 ROM" + +msgid "Do you want to save the settings?" +msgstr "要保存设置吗?" + +msgid "This will hard reset the emulated machine." +msgstr "此操作将硬重置模拟器。" + +msgid "Save" +msgstr "保存" + +msgid "About 86Box" +msgstr "关于 86Box" + +msgid "86Box v" +msgstr "86Box v" + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "一个旧式计算机模拟器\n\n作者: Sarah Walker、Miran Grca、Fred N. van Kempen (waltje)、SA1988、Tiseno100、reenigne、leilei、JohnElliott、greatpsycho 等人。\n\n本软件依据 GNU 通用公共许可证第二版或更新版本发布。详情见 LICENSE 文件。" + +msgid "Hardware not available" +msgstr "硬件不可用" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "请确认 libpcap 已安装且使用兼容 libpcap 的网络连接。" + +msgid "Invalid configuration" +msgstr "无效配置" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr "ESC/P 打印机模拟需要" + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " 是将 PostScript 文件转换为 PDF 所需要的库。\n\n使用通用 PostScript 打印机打印的文档将被保存为 PostScript (.ps) 文件。" + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr "FluidSynth MIDI 输出需要" + +msgid "Entering fullscreen mode" +msgstr "正在进入全屏模式" + +msgid "Don't show this message again" +msgstr "不要再显示此消息" + +msgid "Don't exit" +msgstr "不退出" + +msgid "Reset" +msgstr "重置" + +msgid "Don't reset" +msgstr "不重置" + +msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" +msgstr "光盘镜像 (*.iso *.cue);;所有文件 (*.*)" + +msgid "%hs Device Configuration" +msgstr "%hs 设备配置" + +msgid "Monitor in sleep mode" +msgstr "显示器处在睡眠状态" + +msgid "OpenGL Shaders (*.glsl);;All files (*.*)" +msgstr "OpenGL 着色器 (*.glsl);;所有文件 (*.*)" + +msgid "OpenGL options" +msgstr "OpenGL 选项" + +msgid "You are loading an unsupported configuration" +msgstr "正在载入一个不受支持的配置" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "此模拟计算机禁用了基于选定计算机的 CPU 类型过滤。\n\n能够选中与所选机器本不兼容的 CPU,但是可能会遇到与机器 BIOS 或其他软件不兼容的问题。\n\n启用此设置不受官方支持,并且提交的任何错误报告可能会视为无效而关闭。" + +msgid "Continue" +msgstr "继续" + +msgid "Cassette: %s" +msgstr "磁带: %s" + +msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" +msgstr "磁带镜像 (*.pcm *.raw *.wav *.cas);;所有文件 (*.*)" + +msgid "Cartridge %i: %ls" +msgstr "卡带 %i: %ls" + +msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" +msgstr "卡带镜像 (*.a *.b *.jrc);;所有文件 (*.*)" + +msgid "Error initializing renderer" +msgstr "初始化渲染器时出错" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "无法初始化 OpenGL (3.0 核心) 渲染器。请使用其他渲染器。" + +msgid "Resume execution" +msgstr "恢复执行" + +msgid "Pause execution" +msgstr "暂停执行" + +msgid "Press Ctrl+Alt+Del" +msgstr "按 Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "按 Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "硬重置" + +msgid "ACPI shutdown" +msgstr "ACPI 关机" + +msgid "Hard disk (%s)" +msgstr "硬盘 (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "不存在 MFM/RLL 或 ESDI CD-ROM 驱动器" + +msgid "Custom..." +msgstr "自定义..." + +msgid "Custom (large)..." +msgstr "自定义 (大容量)..." + +msgid "Add New Hard Disk" +msgstr "添加新硬盘" + +msgid "Add Existing Hard Disk" +msgstr "添加已存在的硬盘" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "HDI 磁盘镜像不能超过 4 GB。" + +msgid "Disk images cannot be larger than 127 GB." +msgstr "磁盘镜像不能超过 127 GB。" + +msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" +msgstr "硬盘镜像 (*.hd? *.im? *.vhd);;所有文件 (*.*)" + +msgid "Unable to read file" +msgstr "无法读取文件" + +msgid "Unable to write file" +msgstr "无法写入文件" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "不支持非 512 字节扇区大小的 HDI 或 HDX 镜像。" + +msgid "USB is not yet supported" +msgstr "尚未支持 USB" + +msgid "Disk image file already exists" +msgstr "磁盘镜像文件已存在" + +msgid "Please specify a valid file name." +msgstr "请指定有效的文件名。" + +msgid "Disk image created" +msgstr "已创建磁盘镜像" + +msgid "Make sure the file exists and is readable." +msgstr "请确定此文件已存在并可读取。" + +msgid "Make sure the file is being saved to a writable directory." +msgstr "请确定此文件保存在可写目录中。" + +msgid "Disk image too large" +msgstr "磁盘镜像太大" + +msgid "Remember to partition and format the newly-created drive." +msgstr "请记得为新创建的镜像分区并格式化。" + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "选定的文件将被覆盖。确定继续使用此文件吗?" + +msgid "Unsupported disk image" +msgstr "不支持的磁盘镜像" + +msgid "Overwrite" +msgstr "覆盖" + +msgid "Don't overwrite" +msgstr "不覆盖" + +msgid "Raw image (.img)" +msgstr "原始镜像 (.img)" + +msgid "HDI image (.hdi)" +msgstr "HDI 镜像 (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "HDX 镜像 (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "固定大小 VHD (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "动态大小 VHD (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "差分 VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "大块 (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "小块 (512 KB)" + +msgid "VHD files (*.vhd);;All files (*.*)" +msgstr "VHD 文件 (*.vhd);;所有文件 (*.*)" + +msgid "Select the parent VHD" +msgstr "选择父 VHD 文件" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "父映像可能在创建差异镜像后被修改。\n\n如果镜像文件被移动或复制,或创建此磁盘的程序中存在错误,也可能发生这种情况。\n\n是否需要修复时间戳?" + +msgid "Parent and child disk timestamps do not match" +msgstr "父盘与子盘的时间戳不匹配" + +msgid "Could not fix VHD timestamp." +msgstr "无法修复 VHD 时间戳。" + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "光盘 %i (%s): %s" + +msgid "160 kB" +msgstr "160 kB" + +msgid "180 kB" +msgstr "180 kB" + +msgid "320 kB" +msgstr "320 kB" + +msgid "360 kB" +msgstr "360 kB" + +msgid "640 kB" +msgstr "640 kB" + +msgid "720 kB" +msgstr "720 kB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (1024 簇)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (2048 簇)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5 英寸 128Mb 磁光盘 (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5 英寸 230Mb 磁光盘 (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5 英寸 540Mb 磁光盘 (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5 英寸 640Mb 磁光盘 (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5 英寸 1.3Gb 磁光盘 (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5 英寸 2.3Gb 磁光盘 (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5.25 英寸 600Mb 磁光盘" + +msgid "5.25\" 650Mb M.O." +msgstr "5.25 英寸 650Mb 磁光盘" + +msgid "5.25\" 1Gb M.O." +msgstr "5.25 英寸 1Gb 磁光盘" + +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25 英寸 1.3Gb 磁光盘" + +msgid "Perfect RPM" +msgstr "标准转速 (RPM)" + +msgid "1%% below perfect RPM" +msgstr "低于标准转速的 1%%" + +msgid "1.5%% below perfect RPM" +msgstr "低于标准转速的 1.5%%" + +msgid "2%% below perfect RPM" +msgstr "低于标准转速的 2%%" + +msgid "(System Default)" +msgstr "(系统默认)" + From f8f3cfbf4c47eb9e56e1541e84074811ec773b17 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sun, 23 Jan 2022 22:48:36 +0200 Subject: [PATCH 230/278] qt: fix platform specific file dialog filters Translations now only contain translation for the description and extensions are generated in code taking account platform specific differences. --- src/qt/CMakeLists.txt | 2 + src/qt/languages/cs-CZ.po | 56 +++++++++++++++------------ src/qt/languages/de-DE.po | 56 +++++++++++++++------------ src/qt/languages/en-GB.po | 56 +++++++++++++++------------ src/qt/languages/en-US.po | 56 +++++++++++++++------------ src/qt/languages/es-ES.po | 56 +++++++++++++++------------ src/qt/languages/fi-FI.po | 56 +++++++++++++++------------ src/qt/languages/fr-FR.po | 56 +++++++++++++++------------ src/qt/languages/hr-HR.po | 56 +++++++++++++++------------ src/qt/languages/hu-HU.po | 56 +++++++++++++++------------ src/qt/languages/it-IT.po | 56 +++++++++++++++------------ src/qt/languages/ja-JP.po | 56 +++++++++++++++------------ src/qt/languages/ko-KR.po | 56 +++++++++++++++------------ src/qt/languages/pl-PL.po | 56 +++++++++++++++------------ src/qt/languages/pt-BR.po | 56 +++++++++++++++------------ src/qt/languages/pt-PT.po | 56 +++++++++++++++------------ src/qt/languages/ru-RU.po | 56 +++++++++++++++------------ src/qt/languages/sl-SI.po | 56 +++++++++++++++------------ src/qt/languages/tr-TR.po | 56 +++++++++++++++------------ src/qt/languages/zh-CN.po | 56 +++++++++++++++------------ src/qt/qt_harddiskdialog.cpp | 14 ++++++- src/qt/qt_mediamenu.cpp | 71 +++++++++++++++++++++++++++++++---- src/qt/qt_newfloppydialog.cpp | 15 ++++++-- src/qt/qt_util.cpp | 31 +++++++++++++++ src/qt/qt_util.hpp | 14 +++++++ 25 files changed, 724 insertions(+), 487 deletions(-) create mode 100644 src/qt/qt_util.cpp create mode 100644 src/qt/qt_util.hpp diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index a9c1f1697..db497a1bc 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -108,6 +108,8 @@ add_library(ui STATIC qt_progsettings.hpp qt_progsettings.cpp qt_progsettings.ui + qt_util.hpp + qt_util.cpp ../qt_resources.qrc ) diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index f3844b13d..133aa8a0b 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -622,8 +622,8 @@ msgstr "Rychlost" msgid "ZIP %03i %i (%s): %ls" msgstr "ZIP %03i %i (%s): %ls" -msgid "ZIP images (*.im? *.zdi)" -msgstr "Obrazy ZIP disků (*.im? *.zdi)" +msgid "ZIP images" +msgstr "Obrazy ZIP disků" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box nenalezl žádné použitelné image pamětí ROM.\n\nStáhněte sadu obrazů ROM a extrahujte ji do složky \"roms\"." @@ -631,8 +631,8 @@ msgstr "86Box nenalezl žádné použitelné image pamětí ROM.\n\ndownload a ROM set and extract it into the \"roms\" directory." msgstr "86Box konnte keine nutzbaren ROM-Dateien finden.\n\nBitte besuchen Sie download, laden ein ROM-Set herunter und extrahieren dies in das \"roms\"-Verzeichnis." @@ -631,8 +631,8 @@ msgstr "86Box konnte keine nutzbaren ROM-Dateien finden.\n\nBitte besuchen Sie < msgid "(empty)" msgstr "(leer)" -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "ZIP-Images (*.im? *.zdi);;Alle Dateien (*.*)" +msgid "All files" +msgstr "Alle Dateien" msgid "Turbo" msgstr "Turbo" @@ -643,8 +643,14 @@ msgstr "An" msgid "Off" msgstr "Aus" -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "Alle Images (*.86f *.dsk *.flp *.im? *.*fd?);;Basissektorimages (*.dsk *.flp *.im? *.img *.*fd?);;Oberflächenimages (*.86f)" +msgid "All images" +msgstr "Alle Images" + +msgid "Basic sector images" +msgstr "Basissektorimages" + +msgid "Surface images" +msgstr "Oberflächenimages" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "Das System \"%hs\" ist aufgrund von fehlenden ROMs im Verzeichnis roms/machines nicht verfügbar. Es wird auf ein verfügbares System gewechselt." @@ -685,9 +691,6 @@ msgstr "Andere Wechsellaufwerke" msgid "Other peripherals" msgstr "Andere Peripheriegeräte" -msgid "Surface images (*.86f)" -msgstr "Oberflächenimages (*.86f)" - msgid "Click to capture mouse" msgstr "Zum Einfangen des Mauszeigers bitte klicken" @@ -778,8 +781,11 @@ msgstr "%u MB (CHS: %i, %i, %i)" msgid "Floppy %i (%s): %ls" msgstr "Diskette %i (%s): %ls" -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "Alle Images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Fortgeschrittene Sektorimages (*.imd *.json *.td0);;Basissektorimages (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Fluximages (*.fdi);;Oberflächenimages (*.86f *.mfm);;Alle Dateien (*.*)" +msgid "Advanced sector images" +msgstr "Fortgeschrittene Sektorimages" + +msgid "Flux images" +msgstr "Fluximages" msgid "Unable to initialize FreeType" msgstr "FreeType konnte nicht initialisiert werden" @@ -799,8 +805,8 @@ msgstr "Ghostscript konnte nicht initialisiert werden" msgid "MO %i (%ls): %ls" msgstr "MO %i (%ls): %ls" -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "MO-Images (*.im? *.mdi);;Alle Dateien (*.*)" +msgid "MO images" +msgstr "MO-Images" msgid "Welcome to 86Box!" msgstr "Willkommen bei 86Box!" @@ -889,8 +895,8 @@ msgstr "Zurücksetzen" msgid "Don't reset" msgstr "Nicht zurücksetzen" -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "CD-ROM-Images (*.iso *.cue);;Alle Dateien (*.*)" +msgid "CD-ROM images" +msgstr "CD-ROM-Images" msgid "%hs Device Configuration" msgstr "%hs-Gerätekonfiguration" @@ -898,8 +904,8 @@ msgstr "%hs-Gerätekonfiguration" msgid "Monitor in sleep mode" msgstr "Monitor im Standbymodus" -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "OpenGL-Shader (*.glsl);;Alle Dateien (*.*)" +msgid "OpenGL Shaders" +msgstr "OpenGL-Shader" msgid "OpenGL options" msgstr "OpenGL-Optionen" @@ -916,14 +922,14 @@ msgstr "Fortfahren" msgid "Cassette: %s" msgstr "Kassette: %s" -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Kassettenimages (*.pcm *.raw *.wav *.cas);;Alle Dateien (*.*)" +msgid "Cassette images" +msgstr "Kassettenimages" msgid "Cartridge %i: %ls" msgstr "Cartridge %i: %ls" -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "Cartridgeimages (*.a *.b *.jrc);;Alle Dateien (*.*)" +msgid "Cartridge images" +msgstr "Cartridgeimages" msgid "Error initializing renderer" msgstr "Fehler bei der Rendererinitialisierung" @@ -979,8 +985,8 @@ msgstr "HDI-Diskimages können nicht größer als 4 GB groß sein." msgid "Disk images cannot be larger than 127 GB." msgstr "Festplattenimages können nicht größer als 127 GB groß sein." -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Festplattenimages (*.hd? *.im? *.vhd);;Alle Dateien (*.*)" +msgid "Hard disk images" +msgstr "Festplattenimages" msgid "Unable to read file" msgstr "Die Datei konnte nicht gelesen werden" @@ -1051,8 +1057,8 @@ msgstr "Große Blöcke (2 MB)" msgid "Small blocks (512 KB)" msgstr "Kleine Blöcke (512 KB)" -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "VHD-Dateien (*.vhd);;Alle Dateien (*.*)" +msgid "VHD files" +msgstr "VHD-Dateien" msgid "Select the parent VHD" msgstr "Eltern-VHD-Datei bitte auswählen" diff --git a/src/qt/languages/en-GB.po b/src/qt/languages/en-GB.po index bd710bf61..a8e30a550 100644 --- a/src/qt/languages/en-GB.po +++ b/src/qt/languages/en-GB.po @@ -622,8 +622,8 @@ msgstr "Speed" msgid "ZIP %03i %i (%s): %ls" msgstr "ZIP %03i %i (%s): %ls" -msgid "ZIP images (*.im? *.zdi)" -msgstr "ZIP images (*.im? *.zdi)" +msgid "ZIP images" +msgstr "ZIP images" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." @@ -631,8 +631,8 @@ msgstr "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." @@ -631,8 +631,8 @@ msgstr "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box no pudo encontrar ninguna imagen ROM usable.\n\nPor favor descarga un grupo de imágenes y extráelas en el directorio \"roms\"." @@ -631,8 +631,8 @@ msgstr "86Box no pudo encontrar ninguna imagen ROM usable.\n\nPor favor download a ROM set and extract it into the \"roms\" directory." msgstr "86Box ei löytänyt käyttökelpoisia ROM-tiedostoja.\n\nVoit ladata ROM-paketin ja purkaa sen \"roms\" hakemistoon." @@ -631,8 +631,8 @@ msgstr "86Box ei löytänyt käyttökelpoisia ROM-tiedostoja.\n\nVoit download a ROM set and extract it into the \"roms\" directory." msgstr "86Box n'a pas pu trouver d'images ROM utilisables.\n\nS'il vous plait, téléchargez un ensemble ROM et extrayez-le dans le répertoire \"roms\"." @@ -631,8 +631,8 @@ msgstr "86Box n'a pas pu trouver d'images ROM utilisables.\n\nS'il vous plait, < msgid "(empty)" msgstr "(vide)" -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "Images ZIP (*.im? *.zdi);;Tous les fichiers (*.*)" +msgid "All files" +msgstr "Tous les fichiers" msgid "Turbo" msgstr "Turbo" @@ -643,8 +643,14 @@ msgstr "Activé" msgid "Off" msgstr "Désactivé" -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "Tous les images (*.86f *.dsk *.flp *.im? *.*fd?);;Images basiques du secteur (*.dsk *.flp *.im? *.img *.*fd?);;Images de la surface (*.86f)" +msgid "All images" +msgstr "Tous les images" + +msgid "Basic sector images" +msgstr "Images basiques du secteur" + +msgid "Surface images" +msgstr "Images de la surface" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "La machine \"%hs\" n'est pas disponible en raison de l'absence de ROMs dans le répertoire roms/machines. Basculer vers une machine disponible." @@ -685,9 +691,6 @@ msgstr "Autres dispositifs amovibles" msgid "Other peripherals" msgstr "Autres périfériques" -msgid "Surface images (*.86f)" -msgstr "Images de surface (*.86f)" - msgid "Click to capture mouse" msgstr "Cliquer pour capturer la souris" @@ -778,8 +781,11 @@ msgstr "%u Mo (CTS: %i, %i, %i)" msgid "Floppy %i (%s): %ls" msgstr "Disquette %i (%s): %ls" -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "Toutes les images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Images du secteur avancés (*.imd *.json *.td0);;Images du secteur basiques (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Images du flux (*.fdi);;Images de surface (*.86f *.mfm);;Tous les fichiers (*.*)" +msgid "Advanced sector images" +msgstr "Images du secteur avancés" + +msgid "Flux images" +msgstr "Images du flux" msgid "Unable to initialize FreeType" msgstr "Impossible d'initialiser FreeType" @@ -799,8 +805,8 @@ msgstr "Impossible d'initialiser Ghostscript" msgid "MO %i (%ls): %ls" msgstr "Magnéto-optique %i (%ls): %ls" -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "Images magnéto-optiques (*.im? *.mdi);;Tous les fichiers (*.*)" +msgid "MO images" +msgstr "Images magnéto-optiques" msgid "Welcome to 86Box!" msgstr "Bienvenue dans 86Box !" @@ -889,8 +895,8 @@ msgstr "Réinitialiser" msgid "Don't reset" msgstr "Ne pas réinitialiser" -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "Images CD-ROM (*.iso *.cue);;Tous les fichiers (*.*)" +msgid "CD-ROM images" +msgstr "Images CD-ROM" msgid "%hs Device Configuration" msgstr "Configuration du dispositif %hs" @@ -898,8 +904,8 @@ msgstr "Configuration du dispositif %hs" msgid "Monitor in sleep mode" msgstr "Moniteur en mode veille" -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "Shaders OpenGL (*.glsl);;Tous les fichiers (*.*)" +msgid "OpenGL Shaders" +msgstr "Shaders OpenGL" msgid "OpenGL options" msgstr "Options OpenGL" @@ -916,14 +922,14 @@ msgstr "Continuer" msgid "Cassette: %s" msgstr "Cassette: %s" -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Images cassette (*.pcm *.raw *.wav *.cas);;Tous les fichiers (*.*)" +msgid "Cassette images" +msgstr "Images cassette" msgid "Cartridge %i: %ls" msgstr "Cartouche %i: %ls" -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "Images cartouche (*.a *.b *.jrc);;Tous les fichiers (*.*)" +msgid "Cartridge images" +msgstr "Images cartouche" msgid "Error initializing renderer" msgstr "Error initializing renderer" @@ -979,8 +985,8 @@ msgstr "Les images de disque HDI ne peuvent pas avoir une taille supériure à G msgid "Disk images cannot be larger than 127 GB." msgstr "Les images de disque ne peuvent pas avoir un taille supérieure à 127 Go." -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Images de dique dur (*.hd? *.im? *.vhd);;Tous les fichiers (*.*)" +msgid "Hard disk images" +msgstr "Images de dique dur" msgid "Unable to read file" msgstr "Impossible de lire le fichier" @@ -1051,8 +1057,8 @@ msgstr "Blocs grands (2 MB)" msgid "Small blocks (512 KB)" msgstr "Blocs petits (512 KB)" -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "Fichiers VHD (*.vhd);;Tous les fichiers (*.*)" +msgid "VHD files" +msgstr "Fichiers VHD" msgid "Select the parent VHD" msgstr "Sélectionnez le VHD parent" diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index 829c088d5..cca23d075 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -622,8 +622,8 @@ msgstr "Brzina" msgid "ZIP %03i %i (%s): %ls" msgstr "ZIP %03i %i (%s): %ls" -msgid "ZIP images (*.im? *.zdi)" -msgstr "ZIP slike (*.im? *.zdi)" +msgid "ZIP images" +msgstr "ZIP slike" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box nije mogao pronaći upotrebljive ROM datoteke.\n\nMolimte posjetite sknite paket s ROM datotekama i ekstrahirajte paket u \"roms\" mapu." @@ -631,8 +631,8 @@ msgstr "86Box nije mogao pronaći upotrebljive ROM datoteke.\n\nMolimte posjetit msgid "(empty)" msgstr "(prazno)" -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "ZIP slike (*.im? *.zdi);;Sve datoteke (*.*)" +msgid "All files" +msgstr "Sve datoteke" msgid "Turbo" msgstr "Turbo" @@ -643,8 +643,14 @@ msgstr "Uključeno" msgid "Off" msgstr "Isključeno" -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "Sve slike (*.86f *.dsk *.flp *.im? *.*fd?);;BOsnovne sektorske slike (*.dsk *.flp *.im? *.img *.*fd?);;Površinske slike (*.86f)" +msgid "All images" +msgstr "Sve slike" + +msgid "Basic sector images" +msgstr "BOsnovne sektorske slike" + +msgid "Surface images" +msgstr "Površinske slike" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "Sistem \"%hs\" nije dostupan jer ne postoje potrebni ROM-ovi u mapu roms/machines. Prebacivanje na dostupno računalo." @@ -685,9 +691,6 @@ msgstr "Ostali uklonjivi uređaji" msgid "Other peripherals" msgstr "Ostali periferni uređaji" -msgid "Surface images (*.86f)" -msgstr "Površinske slike (*.86f)" - msgid "Click to capture mouse" msgstr "Kliknite da uhvatite miš" @@ -778,8 +781,11 @@ msgstr "%u MB (CHS: %i, %i, %i)" msgid "Floppy %i (%s): %ls" msgstr "Disketa %i (%s): %ls" -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "Sve slike (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Napredne sektorske slike (*.imd *.json *.td0);;Osnovne sektorske slike (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux slike (*.fdi);;Površinske slike (*.86f *.mfm);;Sve datoteke (*.*)" +msgid "Advanced sector images" +msgstr "Napredne sektorske slike" + +msgid "Flux images" +msgstr "Flux slike" msgid "Unable to initialize FreeType" msgstr "Nije moguće inicijalizirati FreeType" @@ -799,8 +805,8 @@ msgstr "Nije moguće inicijalizirati GhostScript" msgid "MO %i (%ls): %ls" msgstr "MO %i (%ls): %ls" -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "MO slike (*.im? *.mdi);;Svi datoteke (*.*)" +msgid "MO images" +msgstr "MO slike" msgid "Welcome to 86Box!" msgstr "Dobrodošli u 86Box!" @@ -889,8 +895,8 @@ msgstr "Resetiraj" msgid "Don't reset" msgstr "Ne resetiraj" -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "CD-ROM slike (*.iso *.cue);;Sve datoteke (*.*)" +msgid "CD-ROM images" +msgstr "CD-ROM slike" msgid "%hs Device Configuration" msgstr "Konfiguracija uređaja %hs " @@ -898,8 +904,8 @@ msgstr "Konfiguracija uređaja %hs " msgid "Monitor in sleep mode" msgstr "Ekran u stanju mirovanja" -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "OpenGL shaderi (*.glsl);;Sve datoteke (*.*)" +msgid "OpenGL Shaders" +msgstr "OpenGL shaderi" msgid "OpenGL options" msgstr "OpenGL opcije" @@ -916,14 +922,14 @@ msgstr "Nastavi" msgid "Cassette: %s" msgstr "Audio kaseta: %s" -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Slike audio kasete (*.pcm *.raw *.wav *.cas);;Sve datoteke (*.*)" +msgid "Cassette images" +msgstr "Slike audio kasete" msgid "Cartridge %i: %ls" msgstr "Kaseta %i: %ls" -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "Slike kasete (*.a *.b *.jrc);;Sve datoteke (*.*)" +msgid "Cartridge images" +msgstr "Slike kasete" msgid "Error initializing renderer" msgstr "Nije moguće inicijalizirati renderer" @@ -979,8 +985,8 @@ msgstr "HDI disk image datoteke ne mogu biti veće od 4 GB." msgid "Disk images cannot be larger than 127 GB." msgstr "Slike tvrdog diska ne mogu biti veće od 127 GB." -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Slike za tvrde diskove (*.hd? *.im? *.vhd);;Sve datoteke (*.*)" +msgid "Hard disk images" +msgstr "Slike za tvrde diskove" msgid "Unable to read file" msgstr "Nije moguće pročitati datoteku" @@ -1051,8 +1057,8 @@ msgstr "Veliki blokovi (2 MB)" msgid "Small blocks (512 KB)" msgstr "Mali blokovi (512 KB)" -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "VHD slike (*.vhd);;Sve datoteke (*.*)" +msgid "VHD files" +msgstr "VHD slike" msgid "Select the parent VHD" msgstr "Izaberi matičnu sliku VHD" diff --git a/src/qt/languages/hu-HU.po b/src/qt/languages/hu-HU.po index aab48983e..0b86b9332 100644 --- a/src/qt/languages/hu-HU.po +++ b/src/qt/languages/hu-HU.po @@ -622,8 +622,8 @@ msgstr "Sebesség" msgid "ZIP %03i %i (%s): %ls" msgstr "ZIP %03i %i (%s): %ls" -msgid "ZIP images (*.im? *.zdi)" -msgstr "ZIP-lemezképek (*.im? *.zdi)" +msgid "ZIP images" +msgstr "ZIP-lemezképek" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "A 86Box nem talált használható ROM-képeket\n\nKérem töltse le a ROM készletet és bontsa ki a \"roms\" könyvtárba." @@ -631,8 +631,8 @@ msgstr "A 86Box nem talált használható ROM-képeket\n\nKérem download a ROM set and extract it into the \"roms\" directory." msgstr "86Box non può trovare immagini ROM utilizzabili.\n\nPlease download a ROM set and extract it into the \"roms\" directory." @@ -631,8 +631,8 @@ msgstr "86Box non può trovare immagini ROM utilizzabili.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Boxで使用可能なROMイメージが見つかりませんでした。\n\nROMセットをダウンロードして、「roms」ディレクトリに解凍してください。" @@ -631,8 +631,8 @@ msgstr "86Boxで使用可能なROMイメージが見つかりませんでした msgid "(empty)" msgstr "(空)" -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "ZIPイメージ (*.im? *.zdi);;すべてのファイル (*.*)" +msgid "All files" +msgstr "すべてのファイル" msgid "Turbo" msgstr "高速" @@ -643,8 +643,14 @@ msgstr "オン" msgid "Off" msgstr "オフ" -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "すべてのイメージ (*.86f *.dsk *.flp *.im? *.*fd?);;基本的なセクターイメージ (*.dsk *.flp *.im? *.img *.*fd?);;表面イメージ (*.86f)" +msgid "All images" +msgstr "すべてのイメージ" + +msgid "Basic sector images" +msgstr "基本的なセクターイメージ" + +msgid "Surface images" +msgstr "表面イメージ" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "roms/machinesディレクトリにROMがないため、マシン「%hs」は使用できません。使用可能なマシンに切り替えます。" @@ -685,9 +691,6 @@ msgstr "その他のリムーバブルデバイス" msgid "Other peripherals" msgstr "その他の周辺装置" -msgid "Surface images (*.86f)" -msgstr "表面イメージ (*.86f)" - msgid "Click to capture mouse" msgstr "クリックするとマウスをキャプチャします" @@ -778,8 +781,11 @@ msgstr "%u MB (CHS: %i, %i, %i)" msgid "Floppy %i (%s): %ls" msgstr "フロッピー %i (%s): %ls" -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "すべてのイメージ (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;アドバンスドセクターイメージ (*.imd *.json *.td0);;基本セクターイメージ (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;フラックスイメージ (*.fdi);;表面イメージ (*.86f *.mfm);;すべてのファイル (*.*)" +msgid "Advanced sector images" +msgstr "アドバンスドセクターイメージ" + +msgid "Flux images" +msgstr "フラックスイメージ" msgid "Unable to initialize FreeType" msgstr "FreeTypeが初期化できません" @@ -799,8 +805,8 @@ msgstr "Ghostscriptが初期化できません" msgid "MO %i (%ls): %ls" msgstr "光磁気 %i (%ls): %ls" -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "光磁気イメージ (*.im? *.mdi);;すべてのファイル (*.*)" +msgid "MO images" +msgstr "光磁気イメージ" msgid "Welcome to 86Box!" msgstr "86Boxへようこそ!" @@ -889,8 +895,8 @@ msgstr "リセット" msgid "Don't reset" msgstr "リセットしない" -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "CD-ROMイメージ (*.iso *.cue);;すべてのファイル (*.*)" +msgid "CD-ROM images" +msgstr "CD-ROMイメージ" msgid "%hs Device Configuration" msgstr "%hs デバイスの設定" @@ -898,8 +904,8 @@ msgstr "%hs デバイスの設定" msgid "Monitor in sleep mode" msgstr "モニターのスリープモード" -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "OpenGLシェーダー (*.glsl);;すべてのファイル (*.*)" +msgid "OpenGL Shaders" +msgstr "OpenGLシェーダー" msgid "OpenGL options" msgstr "OpenGL設定" @@ -916,14 +922,14 @@ msgstr "続行" msgid "Cassette: %s" msgstr "カセット: %s" -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "カセットイメージ (*.pcm *.raw *.wav *.cas);;すべてのファイル (*.*)" +msgid "Cassette images" +msgstr "カセットイメージ" msgid "Cartridge %i: %ls" msgstr "カートリッジ %i: %ls" -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "カートリッジイメージ (*.a *.b *.jrc);;すべてのファイル (*.*)" +msgid "Cartridge images" +msgstr "カートリッジイメージ" msgid "Error initializing renderer" msgstr "レンダラーの初期化エラー" @@ -979,8 +985,8 @@ msgstr "HDIディスクイメージは4GBを超えることはできません。 msgid "Disk images cannot be larger than 127 GB." msgstr "ディスクイメージは127GBを超えることはできません。" -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "ハードディスクイメージ (*.hd? *.im? *.vhd);;すべてのファイル (*.*)" +msgid "Hard disk images" +msgstr "ハードディスクイメージ" msgid "Unable to read file" msgstr "ファイルの読み込みができません" @@ -1051,8 +1057,8 @@ msgstr "大型ブロック (2 MB)" msgid "Small blocks (512 KB)" msgstr "小型ブロック (512 KB)" -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "VHDファイル (*.vhd);;すべてのファイル (*.*)" +msgid "VHD files" +msgstr "VHDファイル" msgid "Select the parent VHD" msgstr "親VHDの選択" diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index fc32e5058..2dd8c27d7 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -622,8 +622,8 @@ msgstr "속도" msgid "ZIP %03i %i (%s): %ls" msgstr "ZIP %03i %i (%s): %ls" -msgid "ZIP images (*.im? *.zdi)" -msgstr "ZIP 이미지 (*.im? *.zdi)" +msgid "ZIP images" +msgstr "ZIP 이미지" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box에서 사용 가능한 ROM 이미지를 찾을 수 없습니다.\n\nROM 세트를다운로드 후 \"roms\" 디렉토리에 압축을 풀어 주세요." @@ -631,8 +631,8 @@ msgstr "86Box에서 사용 가능한 ROM 이미지를 찾을 수 없습니다.\n msgid "(empty)" msgstr "(비었음)" -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "ZIP 이미지 (*.im? *.zdi);;모든 파일 (*.*)" +msgid "All files" +msgstr "모든 파일" msgid "Turbo" msgstr "터보" @@ -643,8 +643,14 @@ msgstr "켜짐" msgid "Off" msgstr "꺼짐" -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "모든 이미지 (*.86f *.dsk *.flp *.im? *.*fd?);;기본 섹터 이미지 (*.dsk *.flp *.im? *.img *.*fd?);;표면 이미지 (*.86f)" +msgid "All images" +msgstr "모든 이미지" + +msgid "Basic sector images" +msgstr "기본 섹터 이미지" + +msgid "Surface images" +msgstr "표면 이미지" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "roms/machines 디렉토리에 필요한 롬파일이 없어 기종 \"%hs\"을(를) 사용할 수 없습니다. 사용 가능한 기종으로 변경합니다." @@ -685,9 +691,6 @@ msgstr "기타 이동식 저장장치" msgid "Other peripherals" msgstr "기타 주변기기" -msgid "Surface images (*.86f)" -msgstr "표면 이미지 (*.86f)" - msgid "Click to capture mouse" msgstr "이 창을 클릭하면 마우스를 사용합니다" @@ -778,8 +781,11 @@ msgstr "%u MB (CHS: %i, %i, %i)" msgid "Floppy %i (%s): %ls" msgstr "플로피 %i (%s): %ls" -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "모든 이미지 (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;어드밴스드 섹터 이미지 (*.imd *.json *.td0);;기본 섹터 이미지 (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;플럭스 이미지 (*.fdi);;표면 이미지 (*.86f *.mfm);;모든 파일 (*.*)" +msgid "Advanced sector images" +msgstr "어드밴스드 섹터 이미지" + +msgid "Flux images" +msgstr "플럭스 이미지" msgid "Unable to initialize FreeType" msgstr "FreeType을 초기화할 수 없습니다" @@ -799,8 +805,8 @@ msgstr "Ghostscript를 초기화할 수 없습니다" msgid "MO %i (%ls): %ls" msgstr "광자기 %i (%ls): %ls" -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "광자기 이미지 (*.im? *.mdi);;모든 파일 (*.*)" +msgid "MO images" +msgstr "광자기 이미지" msgid "Welcome to 86Box!" msgstr "86Box에 어서오세요!" @@ -889,8 +895,8 @@ msgstr "재시작" msgid "Don't reset" msgstr "재시작 안함" -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "CD-ROM 이미지 (*.iso *.cue);;모든 파일 (*.*)" +msgid "CD-ROM images" +msgstr "CD-ROM 이미지" msgid "%hs Device Configuration" msgstr "%hs 장치 설정" @@ -898,8 +904,8 @@ msgstr "%hs 장치 설정" msgid "Monitor in sleep mode" msgstr "모니터 절전 모드" -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "OpenGL 쉐이더 (*.glsl);;모든 파일 (*.*)" +msgid "OpenGL Shaders" +msgstr "OpenGL 쉐이더" msgid "OpenGL options" msgstr "OpenGL 설정" @@ -916,14 +922,14 @@ msgstr "계속" msgid "Cassette: %s" msgstr "카세트: %s" -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "카세트 이미지 (*.pcm *.raw *.wav *.cas);;모든 파일 (*.*)" +msgid "Cassette images" +msgstr "카세트 이미지" msgid "Cartridge %i: %ls" msgstr "카트리지 %i: %ls" -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "카트리지 이미지 (*.a *.b *.jrc);;모든 파일 (*.*)" +msgid "Cartridge images" +msgstr "카트리지 이미지" msgid "Error initializing renderer" msgstr "Error initializing renderer" @@ -979,8 +985,8 @@ msgstr "HDI 디스크 이미지는 4GB 이상으로 지정할 수 없습니다" msgid "Disk images cannot be larger than 127 GB." msgstr "디스크 이미지는 127GB 이상으로 지정할 수 없습니다" -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "하드 디스크 이미지 (*.hd? *.im? *.vhd);;모든 파일 (*.*)" +msgid "Hard disk images" +msgstr "하드 디스크 이미지" msgid "Unable to read file" msgstr "파일을 읽을 수 없습니다" @@ -1051,8 +1057,8 @@ msgstr "대형 블록 (2 MB)" msgid "Small blocks (512 KB)" msgstr "소형 블록 (512 KB)" -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "VHD 파일 (*.vhd);;모든 파일 (*.*)" +msgid "VHD files" +msgstr "VHD 파일" msgid "Select the parent VHD" msgstr "부모 VHD 선택" diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po index a2a255cfb..b57cc5f62 100644 --- a/src/qt/languages/pl-PL.po +++ b/src/qt/languages/pl-PL.po @@ -622,8 +622,8 @@ msgstr "Szybkość" msgid "ZIP %03i %i (%s): %ls" msgstr "ZIP %03i %i (%s): %ls" -msgid "ZIP images (*.im? *.zdi)" -msgstr "Obrazy ZIP (*.im? *.zdi)" +msgid "ZIP images" +msgstr "Obrazy ZIP" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box nie może znaleźć obrazów ROM nadających się do użytku.\n\nProszę pobrać zestaw obrazów ROM ze strony download, i rozpakować je do katalogu \"roms\"." @@ -631,8 +631,8 @@ msgstr "86Box nie może znaleźć obrazów ROM nadających się do użytku.\n\nP msgid "(empty)" msgstr "(pusty)" -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "Obrazy ZIP (*.im? *.zdi);;Wszystkie pliki (*.*)" +msgid "All files" +msgstr "Wszystkie pliki" msgid "Turbo" msgstr "Turbo" @@ -643,8 +643,14 @@ msgstr "Włącz" msgid "Off" msgstr "Wyłącz" -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "Wszystkie obrazy (*.86f *.dsk *.flp *.im? *.*fd?);;Podstawowe obrazy sektorów(*.dsk *.flp *.im? *.img *.*fd?);;Obrazy powierzchniowe (*.86f)" +msgid "All images" +msgstr "Wszystkie obrazy" + +msgid "Basic sector images" +msgstr "Podstawowe obrazy sektorów" + +msgid "Surface images" +msgstr "Obrazy powierzchniowe" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "Maszyna \"%hs\" nie jest dostępna, ponieważ brakuje obrazów ROM w katalogu roms/machines. Przełączanie na dostępną maszynę." @@ -685,9 +691,6 @@ msgstr "Inne urządzenia wymienne" msgid "Other peripherals" msgstr "Inne urządzenia peryferyjne" -msgid "Surface images (*.86f)" -msgstr "Obrazy powierzchniowe (*.86f)" - msgid "Click to capture mouse" msgstr "Kliknij w celu przechwycenia myszy" @@ -778,8 +781,11 @@ msgstr "%u MB (CHS: %i, %i, %i)" msgid "Floppy %i (%s): %ls" msgstr "Dyskietka %i (%s): %ls" -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "Wszystkie obrazy (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Zaawansowane obrazy sektorów (*.imd *.json *.td0);;Podstawowe obrazy sektorów (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Obrazy powierzchniowe (*.86f *.mfm);;All files (*.*)" +msgid "Advanced sector images" +msgstr "Zaawansowane obrazy sektorów" + +msgid "Flux images" +msgstr "Flux images" msgid "Unable to initialize FreeType" msgstr "Nie można zainicjować FreeType" @@ -799,8 +805,8 @@ msgstr "Nie można zainicjować Ghostscript" msgid "MO %i (%ls): %ls" msgstr "MO %i (%ls): %ls" -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "Obrazy MO (*.im? *.mdi);;All files (*.*)" +msgid "MO images" +msgstr "Obrazy MO" msgid "Welcome to 86Box!" msgstr "Witamy w 86Box!" @@ -889,8 +895,8 @@ msgstr "Przywróć" msgid "Don't reset" msgstr "Nie przywracaj" -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "Obrazy CD-ROM (*.iso *.cue);;All files (*.*)" +msgid "CD-ROM images" +msgstr "Obrazy CD-ROM" msgid "%hs Device Configuration" msgstr "Konfiguracja urządzenia %hs" @@ -898,8 +904,8 @@ msgstr "Konfiguracja urządzenia %hs" msgid "Monitor in sleep mode" msgstr "Monitor w trybie czuwania" -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "Shadery OpenGL (*.glsl);;Wszystkie pliki (*.*)" +msgid "OpenGL Shaders" +msgstr "Shadery OpenGL" msgid "OpenGL options" msgstr "Opcje OpenGL" @@ -916,14 +922,14 @@ msgstr "Kontynuuj" msgid "Cassette: %s" msgstr "Kaseta: %s" -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Obrazy kaset (*.pcm *.raw *.wav *.cas);;Wszystkie pliki (*.*)" +msgid "Cassette images" +msgstr "Obrazy kaset" msgid "Cartridge %i: %ls" msgstr "Kartrydż %i: %ls" -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "Obrazy kartrydżu (*.a *.b *.jrc);;Wszystkie pliki (*.*)" +msgid "Cartridge images" +msgstr "Obrazy kartrydżu" msgid "Error initializing renderer" msgstr "Błąd inicjalizacji renderera" @@ -979,8 +985,8 @@ msgstr "Obrazy dysków HDI nie mogą być większe niż 4 GB." msgid "Disk images cannot be larger than 127 GB." msgstr "Obrazy dysków nie mogą być większe niż 127 GB." -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Obrazy dysku twardego (*.hd? *.im? *.vhd);;Wszystkie pliki (*.*)" +msgid "Hard disk images" +msgstr "Obrazy dysku twardego" msgid "Unable to read file" msgstr "Nie można odczytać pliku" @@ -1051,8 +1057,8 @@ msgstr "Duże bloki (2 MB)" msgid "Small blocks (512 KB)" msgstr "Małe bloki (512 KB)" -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "Pliki VHD (*.vhd);;Wszystkie pliki (*.*)" +msgid "VHD files" +msgstr "Pliki VHD" msgid "Select the parent VHD" msgstr "Wybierz nadrzędny plik VHD" diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index 91fde8023..46b983bdd 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -622,8 +622,8 @@ msgstr "Velocidade" msgid "ZIP %03i %i (%s): %ls" msgstr "ZIP %03i %i (%s): %ls" -msgid "ZIP images (*.im? *.zdi)" -msgstr "Imagens ZIP (*.im? *.zdi)" +msgid "ZIP images" +msgstr "Imagens ZIP" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "O 86Box não conseguiu encontrar nenhuma imagem de ROM utilizável.\n\nPor favor, baixe um conjunto de ROM e extraia no diretório \"roms\"." @@ -631,8 +631,8 @@ msgstr "O 86Box não conseguiu encontrar nenhuma imagem de ROM utilizável.\n\nP msgid "(empty)" msgstr "(vazio)" -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "Imagens ZIP (*.im? *.zdi);;Todos os arquivos (*.*)" +msgid "All files" +msgstr "Todos os arquivos" msgid "Turbo" msgstr "Turbo" @@ -643,8 +643,14 @@ msgstr "Lig." msgid "Off" msgstr "Desl." -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "Todas as imagens (*.86f *.dsk *.flp *.im? *.*fd?);;Imagens de setor básico (*.dsk *.flp *.im? *.img *.*fd?);;Imagens de superfície (*.86f)" +msgid "All images" +msgstr "Todas as imagens" + +msgid "Basic sector images" +msgstr "Imagens de setor básico" + +msgid "Surface images" +msgstr "Imagens de superfície" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "A máquina \"%hs\" não está disponível devido à falta de ROMs no diretório roms/machines. Mudando para uma máquina disponível." @@ -685,9 +691,6 @@ msgstr "Dispos. removíveis" msgid "Other peripherals" msgstr "Outros periféricos" -msgid "Surface images (*.86f)" -msgstr "Imagens de superfície (*.86f)" - msgid "Click to capture mouse" msgstr "Clique para capturar o mouse" @@ -778,8 +781,11 @@ msgstr "%u MB (CHS: %i, %i, %i)" msgid "Floppy %i (%s): %ls" msgstr "Disquete %i (%s): %ls" -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "Todas as imagens (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Imagens de setor avançado (*.imd *.json *.td0);;Imagens de setor básico (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Imagens de fluxo (*.fdi);;Imagens de superfície (*.86f *.mfm);;Todos os arquivos (*.*)" +msgid "Advanced sector images" +msgstr "Imagens de setor avançado" + +msgid "Flux images" +msgstr "Imagens de fluxo" msgid "Unable to initialize FreeType" msgstr "Não foi possível inicializar o FreeType" @@ -799,8 +805,8 @@ msgstr "Não é possível inicializar o Ghostscript" msgid "MO %i (%ls): %ls" msgstr "Magneto-óptico %i (%ls): %ls" -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "Imagens magneto-ópticas (*.im? *.mdi);;Todos os arquivos (*.*)" +msgid "MO images" +msgstr "Imagens magneto-ópticas" msgid "Welcome to 86Box!" msgstr "Bem-vindo ao 86Box!" @@ -889,8 +895,8 @@ msgstr "Reiniciar" msgid "Don't reset" msgstr "Não reiniciar" -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "Imagens de CD-ROM (*.iso *.cue);;Todos os arquivos (*.*)" +msgid "CD-ROM images" +msgstr "Imagens de CD-ROM" msgid "%hs Device Configuration" msgstr "Configuração do dispositivo %hs" @@ -898,8 +904,8 @@ msgstr "Configuração do dispositivo %hs" msgid "Monitor in sleep mode" msgstr "Monitor em modo de suspensão" -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "Shaders OpenGL (*.glsl);;Todos os arquivos (*.*)" +msgid "OpenGL Shaders" +msgstr "Shaders OpenGL" msgid "OpenGL options" msgstr "Opções do OpenGL" @@ -916,14 +922,14 @@ msgstr "Continuar" msgid "Cassette: %s" msgstr "Cassete: %s" -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Imagens de cassete (*.pcm *.raw *.wav *.cas);;Todos os arquivos (*.*)" +msgid "Cassette images" +msgstr "Imagens de cassete" msgid "Cartridge %i: %ls" msgstr "Cartucho %i: %ls" -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "Imagens de cartucho (*.a *.b *.jrc);;Todos os arquivos (*.*)" +msgid "Cartridge images" +msgstr "Imagens de cartucho" msgid "Error initializing renderer" msgstr "Erro ao inicializar o renderizador" @@ -979,8 +985,8 @@ msgstr "As imagens de disco HDI não podem ser maiores do que 4GB." msgid "Disk images cannot be larger than 127 GB." msgstr "As imagens de disco não podem ser maiores do que 127GB." -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Imagens de disco rígido (*.hd? *.im? *.vhd);;Todos os arquivos (*.*)" +msgid "Hard disk images" +msgstr "Imagens de disco rígido" msgid "Unable to read file" msgstr "Não foi possível ler o arquivo" @@ -1051,8 +1057,8 @@ msgstr "Blocos grandes (2 MB)" msgid "Small blocks (512 KB)" msgstr "Blocos pequenos (512 KB)" -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "Arquivos VHD (*.vhd);;Todos os arquivos (*.*)" +msgid "VHD files" +msgstr "Arquivos VHD" msgid "Select the parent VHD" msgstr "Selecione o VHD pai" diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index b86eee86e..b787b7404 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -622,8 +622,8 @@ msgstr "Velocidade" msgid "ZIP %03i %i (%s): %ls" msgstr "ZIP %03i %i (%s): %ls" -msgid "ZIP images (*.im? *.zdi)" -msgstr "Imagens ZIP (*.im? *.zdi)" +msgid "ZIP images" +msgstr "Imagens ZIP" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "O 86Box não conseguiu encontrar nenhuma imagem ROM utilizável.\n\nPor favor, vá a href=\"https://github.com/86Box/roms/releases/latest\">descarregue um pacote ROM e instale-o na pasta \"roms\"." @@ -631,8 +631,8 @@ msgstr "O 86Box não conseguiu encontrar nenhuma imagem ROM utilizável.\n\nPor msgid "(empty)" msgstr "(empty)" -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "Imagens ZIP (*.im? *.zdi);;Todos os ficheiros (*.*)" +msgid "All files" +msgstr "Todos os ficheiros" msgid "Turbo" msgstr "Turbo" @@ -643,8 +643,14 @@ msgstr "Ativado" msgid "Off" msgstr "Desativado" -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "Todas as imagens (*.86f *.dsk *.flp *.im? *.*fd?);;Imagens básicas de sector (*.dsk *.flp *.im? *.img *.*fd?);;Imagens de superfície (*.86f)" +msgid "All images" +msgstr "Todas as imagens" + +msgid "Basic sector images" +msgstr "Imagens básicas de sector" + +msgid "Surface images" +msgstr "Imagens de superfície" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "A máquina \"%hs\" não está disponível devido à falta de ROMs na pasta roms/machines. A mudar para uma máquina disponível." @@ -685,9 +691,6 @@ msgstr "Outros dispostivos removíveis" msgid "Other peripherals" msgstr "Outros dispositivos" -msgid "Surface images (*.86f)" -msgstr "Imagens de superfície (*.86f)" - msgid "Click to capture mouse" msgstr "Clique para capturar o rato" @@ -778,8 +781,11 @@ msgstr "%u MB (CCS: %i, %i, %i)" msgid "Floppy %i (%s): %ls" msgstr "Disquete %i (%s): %ls" -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "Todas as imagens (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Imagens avançadas de sector (*.imd *.json *.td0);;Imagens básicas de sector (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Imagens de fluxo (*.fdi);;Imagens de superfície (*.86f *.mfm);;Todos os ficheiros (*.*)" +msgid "Advanced sector images" +msgstr "Imagens avançadas de sector" + +msgid "Flux images" +msgstr "Imagens de fluxo" msgid "Unable to initialize FreeType" msgstr "Não foi possível inicializar o FreeType" @@ -799,8 +805,8 @@ msgstr "Não foi possível inicializar o Ghostscript" msgid "MO %i (%ls): %ls" msgstr "Magneto-óptico %i (%ls): %ls" -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "Imagens magneto-ópticas (*.im? *.mdi);;Todas as imagens (*.*)" +msgid "MO images" +msgstr "Imagens magneto-ópticas" msgid "Welcome to 86Box!" msgstr "Bem-vindos ao 86Box!" @@ -889,8 +895,8 @@ msgstr "Reiniciar" msgid "Don't reset" msgstr "Não reiniciar" -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "Imagens CD-ROM (*.iso *.cue);;Todos os ficheiros (*.*)" +msgid "CD-ROM images" +msgstr "Imagens CD-ROM" msgid "%hs Device Configuration" msgstr "Configuração de dispositivo %hs" @@ -898,8 +904,8 @@ msgstr "Configuração de dispositivo %hs" msgid "Monitor in sleep mode" msgstr "Ecrã em modo de sono" -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "Shaders OpenGL (*.glsl);;Todos os ficheiros (*.*)" +msgid "OpenGL Shaders" +msgstr "Shaders OpenGL" msgid "OpenGL options" msgstr "Opções de OpenGL" @@ -916,14 +922,14 @@ msgstr "Continuar" msgid "Cassette: %s" msgstr "Cassete: %s" -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Imagens de cassete (*.pcm *.raw *.wav *.cas);;Todos os ficheiros (*.*)" +msgid "Cassette images" +msgstr "Imagens de cassete" msgid "Cartridge %i: %ls" msgstr "Cartucho %i: %ls" -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "Imagens de cartucho (*.a *.b *.jrc);;Todos os ficheiros (*.*)" +msgid "Cartridge images" +msgstr "Imagens de cartucho" msgid "Error initializing renderer" msgstr "Error initializing renderer" @@ -979,8 +985,8 @@ msgstr "As imagens de disco HDI não podem ter mais de 4 GB." msgid "Disk images cannot be larger than 127 GB." msgstr "As imagens de disco não podem ter mais de 127 GB." -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Imagens de disco rígido (*.hd? *.im? *.vhd);;Todos os ficheiros (*.*)" +msgid "Hard disk images" +msgstr "Imagens de disco rígido" msgid "Unable to read file" msgstr "Não foi possível ler o ficheiro" @@ -1051,8 +1057,8 @@ msgstr "Blocos grandes (2 MB)" msgid "Small blocks (512 KB)" msgstr "Blocos pequenos (512 KB)" -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "Ficheiros VHD (*.vhd);;Todos os ficheiros (*.*)" +msgid "VHD files" +msgstr "Ficheiros VHD" msgid "Select the parent VHD" msgstr "Seleccione o VHD pai" diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index e1acd068a..d7b0bbf2c 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -622,8 +622,8 @@ msgstr "Скорость" msgid "ZIP %03i %i (%s): %ls" msgstr "ZIP %03i %i (%s): %ls" -msgid "ZIP images (*.im? *.zdi)" -msgstr "Образы ZIP (*.im? *.zdi)" +msgid "ZIP images" +msgstr "Образы ZIP" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box не смог найти ни одного подходящего для использования файла с ПЗУ.\n\nПожалуйста скачайте набор ПЗУ и извлеките его в каталог \"roms\"." @@ -631,8 +631,8 @@ msgstr "86Box не смог найти ни одного подходящего msgid "(empty)" msgstr "(пусто)" -msgid "ZIP images (*.im? *.zdi);;All files (*.*)" -msgstr "Образы ZIP (*.im? *.zdi);;Все файлы (*.*)" +msgid "All files" +msgstr "Все файлы" msgid "Turbo" msgstr "Турбо" @@ -643,8 +643,14 @@ msgstr "Вкл" msgid "Off" msgstr "Выкл" -msgid "All images (*.86f *.dsk *.flp *.im? *.*fd?);;Basic sector images (*.dsk *.flp *.im? *.img *.*fd?);;Surface images (*.86f)" -msgstr "Все образы (*.86f *.dsk *.flp *.im? *.*fd?);;Простые посекторные образы (*.dsk *.flp *.im? *.img *.*fd?);;Surface образы (*.86f)" +msgid "All images" +msgstr "Все образы" + +msgid "Basic sector images" +msgstr "Простые посекторные образы" + +msgid "Surface images" +msgstr "Surface образы" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "Системная плата \"%hs\" недоступна из-за отсутствия файла её ПЗУ в каталоге roms/machines. Переключение на доступную системную плату." @@ -685,9 +691,6 @@ msgstr "Другие съёмные устр-ва" msgid "Other peripherals" msgstr "Другая периферия" -msgid "Surface images (*.86f)" -msgstr "Образы Surface (*.86f)" - msgid "Click to capture mouse" msgstr "Щёлкните мышью для захвата курсора" @@ -778,8 +781,11 @@ msgstr "%u МБ (CHS: %i, %i, %i)" msgid "Floppy %i (%s): %ls" msgstr "Дисковод %i (%s): %ls" -msgid "All images (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Advanced sector images (*.imd *.json *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Flux images (*.fdi);;Surface images (*.86f *.mfm);;All files (*.*)" -msgstr "Все образы (*.0?? *.1?? *.??0 *.86f *.bin *.cq? *.d?? *.flp *.hdm *.im? *.json *.td0 *.*fd? *.mfm *.xdf);;Расширенные образы секторов (*.imd *.json *.td0);;Основные образы секторов (*.0?? *.1?? *.??0 *.bin *.cq? *.d?? *.flp *.hdm *.im? *.xdf *.*fd?);;Образы Flux (*.fdi);;Образы Surface (*.86f *.mfm);;Все файлы (*.*)" +msgid "Advanced sector images" +msgstr "Расширенные образы секторов" + +msgid "Flux images" +msgstr "Образы Flux" msgid "Unable to initialize FreeType" msgstr "Невозможно инициализировать FreeType" @@ -799,8 +805,8 @@ msgstr "Невозможно инициализировать Ghostscript" msgid "MO %i (%ls): %ls" msgstr "Магнитооптический %i (%ls): %ls" -msgid "MO images (*.im? *.mdi);;All files (*.*)" -msgstr "Образы магнитооптических дисков (*.im? *.mdi);;Все файлы (*.*)" +msgid "MO images" +msgstr "Образы магнитооптических дисков" msgid "Welcome to 86Box!" msgstr "Добро пожаловать в 86Box!" @@ -889,8 +895,8 @@ msgstr "Перезагрузить" msgid "Don't reset" msgstr "Не перезагружать" -msgid "CD-ROM images (*.iso *.cue);;All files (*.*)" -msgstr "Образы CD-ROM (*.iso *.cue);;Все файлы (*.*)" +msgid "CD-ROM images" +msgstr "Образы CD-ROM" msgid "%hs Device Configuration" msgstr "Конфигурация устройства %hs" @@ -898,8 +904,8 @@ msgstr "Конфигурация устройства %hs" msgid "Monitor in sleep mode" msgstr "Монитор в спящем режиме" -msgid "OpenGL Shaders (*.glsl);;All files (*.*)" -msgstr "Шейдеры OpenGL (*.glsl);;Все файлы (*.*)" +msgid "OpenGL Shaders" +msgstr "Шейдеры OpenGL" msgid "OpenGL options" msgstr "Параметры OpenGL" @@ -916,14 +922,14 @@ msgstr "Продолжить" msgid "Cassette: %s" msgstr "Кассета: %s" -msgid "Cassette images (*.pcm *.raw *.wav *.cas);;All files (*.*)" -msgstr "Образы кассет (*.pcm *.raw *.wav *.cas);;Все файлы (*.*)" +msgid "Cassette images" +msgstr "Образы кассет" msgid "Cartridge %i: %ls" msgstr "Картридж %i: %ls" -msgid "Cartridge images (*.a *.b *.jrc);;All files (*.*)" -msgstr "Образы картриджей (*.a *.b *.jrc);;Все файлы (*.*)" +msgid "Cartridge images" +msgstr "Образы картриджей" msgid "Error initializing renderer" msgstr "Error initializing renderer" @@ -979,8 +985,8 @@ msgstr "Размер образов дисков HDI не может превы msgid "Disk images cannot be larger than 127 GB." msgstr "Размер образов дисков не может превышать 127 ГБ." -msgid "Hard disk images (*.hd? *.im? *.vhd);;All files (*.*)" -msgstr "Образы жёстких дисков (*.hd? *.im? *.vhd);;Все файлы (*.*)" +msgid "Hard disk images" +msgstr "Образы жёстких дисков" msgid "Unable to read file" msgstr "Невозможно прочитать файл" @@ -1051,8 +1057,8 @@ msgstr "Большие блоки (2 МБ)" msgid "Small blocks (512 KB)" msgstr "Маленькие блоки (512 КБ)" -msgid "VHD files (*.vhd);;All files (*.*)" -msgstr "Файлы VHD (*.vhd);;Все файлы (*.*)" +msgid "VHD files" +msgstr "Файлы VHD" msgid "Select the parent VHD" msgstr "Выберите родительский VHD" diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index a9f821a9b..705b36781 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -622,8 +622,8 @@ msgstr "Hitrost" msgid "ZIP %03i %i (%s): %ls" msgstr "ZIP %03i %i (%s): %ls" -msgid "ZIP images (*.im? *.zdi)" -msgstr "ZIP slike (*.im? *.zdi)" +msgid "ZIP images" +msgstr "ZIP slike" msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." msgstr "86Box ni našel nobenih uporabnih ROM slik.\n\nProsim prenesite set ROM-ov in ga razširite v mapo \"roms\"." @@ -631,8 +631,8 @@ msgstr "86Box ni našel nobenih uporabnih ROM slik.\n\nProsim download a ROM set and extract it into the \"roms\" directory." msgstr "86Box hiç bir kullanılabilir ROM imajı bulamadı.\n\nLütfen ROM setini indirin ve onu \"Roms\" klasörüne çıkarın." @@ -631,8 +631,8 @@ msgstr "86Box hiç bir kullanılabilir ROM imajı bulamadı.\n\nLütfen download a ROM set and extract it into the \"roms\" directory." msgstr "86Box 找不到任何可用的 ROM 镜像。\n\n请下载ROM 包并将其解压到 \"roms\" 文件夹。" @@ -631,8 +631,8 @@ msgstr "86Box 找不到任何可用的 ROM 镜像。\n\n请 #include #include +#include #include "qt_harddrive_common.hpp" #include "qt_models_common.hpp" +#include "qt_util.hpp" HarddiskDialog::HarddiskDialog(bool existing, QWidget *parent) : QDialog(parent), @@ -29,7 +31,7 @@ HarddiskDialog::HarddiskDialog(bool existing, QWidget *parent) : { ui->setupUi(this); - ui->fileField->setFilter(tr("Hard disk images (*.HD? *.hd? *.IM? *.im? *.VHD *.vhd);;All files (*)")); + ui->fileField->setFilter(tr("Hard disk images") % util::DlgFilter({ "hd?","im?","vhd" }) % tr("All files") % util::DlgFilter({ "*" }, true)); if (existing) { setWindowTitle(tr("Add Existing Hard Disk")); ui->lineEditCylinders->setEnabled(false); @@ -339,7 +341,15 @@ void HarddiskDialog::onCreateNewFile() { _86box_geometry = create_drive_vhd_dynamic(fileName, cylinders_, heads_, sectors_, block_size); break; case 5: - QString vhdParent = QFileDialog::getOpenFileName(this, tr("Select the parent VHD"), QString(), tr("VHD files (*.VHD *.vhd);;All files (*)")); + QString vhdParent = QFileDialog::getOpenFileName( + this, + tr("Select the parent VHD"), + QString(), + tr("VHD files") % + util::DlgFilter({ "vhd" }) % + tr("All files") % + util::DlgFilter({ "*" }, true)); + if (vhdParent.isEmpty()) { return; } diff --git a/src/qt/qt_mediamenu.cpp b/src/qt/qt_mediamenu.cpp index dad010e5e..ff1f1398c 100644 --- a/src/qt/qt_mediamenu.cpp +++ b/src/qt/qt_mediamenu.cpp @@ -5,6 +5,7 @@ #include #include #include +#include extern "C" { #include <86box/config.h> @@ -24,6 +25,7 @@ extern "C" { }; #include "qt_newfloppydialog.hpp" +#include "qt_util.hpp" std::shared_ptr MediaMenu::ptr; @@ -145,7 +147,14 @@ void MediaMenu::cassetteNewImage() { } void MediaMenu::cassetteSelectImage(bool wp) { - auto filename = QFileDialog::getOpenFileName(parentWidget, QString(), QString(), tr("Cassette images (*.pcm *.PCM *.raw *.RAW *.wav *.WAV *.cas *.CAS);;All files (*)")); + auto filename = QFileDialog::getOpenFileName(parentWidget, + QString(), + QString(), + tr("Cassette images") % + util::DlgFilter({ "pcm","raw","wav","cas" }) % + tr("All files") % + util::DlgFilter({ "*" }, true)); + cassetteMount(filename, wp); } @@ -199,7 +208,15 @@ void MediaMenu::cassetteUpdateMenu() { } void MediaMenu::cartridgeSelectImage(int i) { - auto filename = QFileDialog::getOpenFileName(parentWidget, QString(), QString(), tr("Cartridge images (*.A *.a *.B *.b *.JRC *.jrc);;All files (*)")); + auto filename = QFileDialog::getOpenFileName( + parentWidget, + QString(), + QString(), + tr("Cartridge images") % + util::DlgFilter({ "a","b","jrc" }) % + tr("All files") % + util::DlgFilter({ "*" }, true)); + if (filename.isEmpty()) { return; } @@ -242,7 +259,23 @@ void MediaMenu::floppyNewImage(int i) { } void MediaMenu::floppySelectImage(int i, bool wp) { - auto filename = QFileDialog::getOpenFileName(parentWidget, QString(), QString(), tr("All images (*.0?? *.1?? *.??0 *.86F *.86f *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.JSON *.json *.TD0 *.td0 *.*FD? *.*fd? *.MFM *.mfm *.XDF *.xdf);;Advanced sector images (*.IMD *.imd *.JSON *.json *.TD0 *.td0);;Basic sector images (*.0?? *.1?? *.??0 *.BIN *.bin *.CQ? *.cq? *.D?? *.d?? *.FLP *.flp *.HDM *.hdm *.IM? *.im? *.XDF *.xdf *.*FD? *.*fd?);;Flux images (*.FDI *.fdi);;Surface images (*.86F *.86f *.MFM *.mfm);;All files (*)")); + auto filename = QFileDialog::getOpenFileName( + parentWidget, + QString(), + QString(), + tr("All images") % + util::DlgFilter({ "0??","1??","??0","86f","bin","cq?","d??","flp","hdm","im?","json","td0","*fd?","mfm","xdf" }) % + tr("Advanced sector images") % + util::DlgFilter({ "imd","json","td0" }) % + tr("Basic sector images") % + util::DlgFilter({ "0??","1??","??0","bin","cq?","d??","flp","hdm","im?","xdf","*fd?" }) % + tr("Flux images") % + util::DlgFilter({ "fdi" }) % + tr("Surface images") % + util::DlgFilter({ "86f","mfm" }) % + tr("All files") % + util::DlgFilter({ "*" }, true)); + floppyMount(i, filename, wp); } @@ -268,7 +301,7 @@ void MediaMenu::floppyEject(int i) { } void MediaMenu::floppyExportTo86f(int i) { - auto filename = QFileDialog::getSaveFileName(parentWidget, QString(), QString(), tr("Surface images (*.86F *.86f)")); + auto filename = QFileDialog::getSaveFileName(parentWidget, QString(), QString(), tr("Surface images") % util::DlgFilter({ "86f" }, true)); if (! filename.isEmpty()) { QByteArray filenameBytes = filename.toUtf8(); plat_pause(1); @@ -306,7 +339,15 @@ void MediaMenu::cdromMount(int i) { QString dir; QFileInfo fi(cdrom[i].image_path); - auto filename = QFileDialog::getOpenFileName(parentWidget, QString(), QString(), tr("CD-ROM images (*.ISO *.iso *.CUE *.cue);;All files (*)")); + auto filename = QFileDialog::getOpenFileName( + parentWidget, + QString(), + QString(), + tr("CD-ROM images") % + util::DlgFilter({ "iso","cue" }) % + tr("All files") % + util::DlgFilter({ "*" }, true)); + if (filename.isEmpty()) { auto* imageMenu = dynamic_cast(cdromMenus[i]->children()[cdromImagePos]); imageMenu->setChecked(false); @@ -389,7 +430,15 @@ void MediaMenu::zipNewImage(int i) { } void MediaMenu::zipSelectImage(int i, bool wp) { - auto filename = QFileDialog::getOpenFileName(parentWidget, QString(), QString(), tr("ZIP images (*.IM? *.im? *.ZDI *.zdi);;All files (*)")); + auto filename = QFileDialog::getOpenFileName( + parentWidget, + QString(), + QString(), + tr("ZIP images") % + util::DlgFilter({ "im?","zdi" }) % + tr("All files") % + util::DlgFilter({ "*" }, true)); + zipMount(i, filename, wp); } @@ -478,7 +527,15 @@ void MediaMenu::moNewImage(int i) { } void MediaMenu::moSelectImage(int i, bool wp) { - auto filename = QFileDialog::getOpenFileName(parentWidget, QString(), QString(), tr("MO images (*.im? *.mdi *.IM? *.MDI);;All files (*)")); + auto filename = QFileDialog::getOpenFileName( + parentWidget, + QString(), + QString(), + tr("MO images") % + util::DlgFilter({ "im?", "mdi" }) % + tr("All files") % + util::DlgFilter({ "*", }, true)); + moMount(i, filename, wp); } diff --git a/src/qt/qt_newfloppydialog.cpp b/src/qt/qt_newfloppydialog.cpp index a274503ba..9450dfe1c 100644 --- a/src/qt/qt_newfloppydialog.cpp +++ b/src/qt/qt_newfloppydialog.cpp @@ -2,6 +2,7 @@ #include "ui_qt_newfloppydialog.h" #include "qt_models_common.hpp" +#include "qt_util.hpp" extern "C" { #include <86box/random.h> @@ -15,6 +16,7 @@ extern "C" { #include #include #include +#include struct disk_size_t { int hole; @@ -101,19 +103,26 @@ NewFloppyDialog::NewFloppyDialog(MediaType type, QWidget *parent) : for (int i = 0; i < floppyTypes.size(); ++i) { Models::AddEntry(model, tr(floppyTypes[i].toUtf8().data()), i); } - ui->fileField->setFilter(tr("All images (*.86F *.86f *.DSK *.dsk *.FLP *.flp *.IM? *.im? *.*FD? *.*fd?);;Basic sector images (*.DSK *.dsk *.FLP *.flp *.IM? *.im? *.IMG *.img *.*FD? *.*fd?);;Surface images (*.86F *.86f)")); + ui->fileField->setFilter( + tr("All images") % + util::DlgFilter({ "86f","dsk","flp","im?","*fd?" }) % + tr("Basic sector images") % + util::DlgFilter({ "dsk","flp","im?","img","*fd?" }) % + tr("Surface images") % + util::DlgFilter({ "86f" }, true)); + break; case MediaType::Zip: for (int i = 0; i < zipTypes.size(); ++i) { Models::AddEntry(model, tr(zipTypes[i].toUtf8().data()), i); } - ui->fileField->setFilter(tr("ZIP images (*.IM? *.im? *.ZDI *.zdi)")); + ui->fileField->setFilter(tr("ZIP images") % util::DlgFilter({ "im?","zdi" }, true)); break; case MediaType::Mo: for (int i = 0; i < moTypes.size(); ++i) { Models::AddEntry(model, tr(moTypes[i].toUtf8().data()), i); } - ui->fileField->setFilter(tr("MO images (*.IM? *.im? *.MDI *.mdi);;All files (*)")); + ui->fileField->setFilter(tr("MO images") % util::DlgFilter({ "im?","mdi" }) % tr("All files") % util::DlgFilter({ "*" }, true)); break; } diff --git a/src/qt/qt_util.cpp b/src/qt/qt_util.cpp new file mode 100644 index 000000000..3c41d6745 --- /dev/null +++ b/src/qt/qt_util.cpp @@ -0,0 +1,31 @@ +#include +#include +#include "qt_util.hpp" + +namespace util +{ + + QString DlgFilter(std::initializer_list extensions, bool last) + { + QStringList temp; + + for (auto ext : extensions) + { +#ifdef Q_OS_UNIX + if (ext == "*") + { + temp.append("*"); + continue; + } + temp.append("*." % ext.toUpper()); +#endif + temp.append("*." % ext); + } + +#ifdef Q_OS_UNIX + temp.removeDuplicates(); +#endif + return " (" % temp.join(' ') % ")" % (!last ? ";;" : ""); + } + +} \ No newline at end of file diff --git a/src/qt/qt_util.hpp b/src/qt/qt_util.hpp new file mode 100644 index 000000000..ab2284e4b --- /dev/null +++ b/src/qt/qt_util.hpp @@ -0,0 +1,14 @@ +#ifndef QT_UTIL_HPP +#define QT_UTIL_HPP + +#include + +#include + +namespace util +{ + /* Creates extension list for qt filedialog */ + QString DlgFilter(std::initializer_list extensions, bool last = false); +}; + +#endif \ No newline at end of file From 4b65a9fc470deef69cbfd623930f7ee9498d1f41 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Thu, 27 Jan 2022 21:17:10 +0200 Subject: [PATCH 231/278] qt: mac bundling improvements from dob205 --- src/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9bed3bccc..37eb815f7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -217,6 +217,7 @@ if(APPLE) install_qt5_plugin("Qt6::QCocoaIntegrationPlugin" QT_PLUGINS ${prefix}) else() install_qt5_plugin("Qt5::QCocoaIntegrationPlugin" QT_PLUGINS ${prefix}) + install_qt5_plugin("Qt5::QMacStylePlugin" QT_PLUGINS ${prefix}) endif() file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/qt.conf" From 39e5f2fb380d963829bd6316c723c7646b864c03 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Thu, 27 Jan 2022 21:26:30 +0200 Subject: [PATCH 232/278] qt: Change font only on windows --- src/qt/qt_mainwindow.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 209ed27b8..cb88608ce 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -60,9 +60,11 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { +#ifdef Q_OS_WINDOWS auto font_name = tr("FONT_NAME"); auto font_size = tr("FONT_SIZE"); setFont(QFont(font_name, font_size.toInt())); +#endif mm = std::make_shared(this); MediaMenu::ptr = mm; @@ -1514,12 +1516,13 @@ void MainWindow::togglePause() void MainWindow::changeEvent(QEvent* event) { +#ifdef Q_OS_WINDOWS if (event->type() == QEvent::LanguageChange) { auto font_name = tr("FONT_NAME"); auto font_size = tr("FONT_SIZE"); setFont(QFont(font_name, font_size.toInt())); } - +#endif QWidget::changeEvent(event); } \ No newline at end of file From eec7339b8eec92d51653227c414610cb45088f57 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sun, 30 Jan 2022 22:10:13 +0200 Subject: [PATCH 233/278] qt: Fix typo on filenames for RendererCommon --- src/qt/{qt_renderercomon.cpp => qt_renderercommon.cpp} | 0 src/qt/{qt_renderercomon.hpp => qt_renderercommon.hpp} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/qt/{qt_renderercomon.cpp => qt_renderercommon.cpp} (100%) rename src/qt/{qt_renderercomon.hpp => qt_renderercommon.hpp} (100%) diff --git a/src/qt/qt_renderercomon.cpp b/src/qt/qt_renderercommon.cpp similarity index 100% rename from src/qt/qt_renderercomon.cpp rename to src/qt/qt_renderercommon.cpp diff --git a/src/qt/qt_renderercomon.hpp b/src/qt/qt_renderercommon.hpp similarity index 100% rename from src/qt/qt_renderercomon.hpp rename to src/qt/qt_renderercommon.hpp From 279cbdbf9750a25c8b27ee22bf59c52dd5a3373e Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sun, 30 Jan 2022 22:13:41 +0200 Subject: [PATCH 234/278] qt: also fix typos in the file references to RendererCommon --- src/qt/CMakeLists.txt | 4 ++-- src/qt/qt_hardwarerenderer.hpp | 2 +- src/qt/qt_mainwindow.cpp | 2 +- src/qt/qt_renderercommon.cpp | 2 +- src/qt/qt_softwarerenderer.hpp | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index db497a1bc..a1425b2f0 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -27,8 +27,8 @@ add_library(ui STATIC qt_rendererstack.cpp qt_rendererstack.hpp qt_rendererstack.ui - qt_renderercomon.cpp - qt_renderercomon.hpp + qt_renderercommon.cpp + qt_renderercommon.hpp qt_softwarerenderer.cpp qt_softwarerenderer.hpp qt_hardwarerenderer.cpp diff --git a/src/qt/qt_hardwarerenderer.hpp b/src/qt/qt_hardwarerenderer.hpp index b87399e8e..af4f05464 100644 --- a/src/qt/qt_hardwarerenderer.hpp +++ b/src/qt/qt_hardwarerenderer.hpp @@ -20,7 +20,7 @@ #include #include -#include "qt_renderercomon.hpp" +#include "qt_renderercommon.hpp" #ifdef WAYLAND #include "wl_mouse.hpp" diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index cb88608ce..1607c030f 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -6,7 +6,7 @@ #include "qt_progsettings.hpp" #include "qt_rendererstack.hpp" -#include "qt_renderercomon.hpp" +#include "qt_renderercommon.hpp" extern "C" { #include <86box/86box.h> diff --git a/src/qt/qt_renderercommon.cpp b/src/qt/qt_renderercommon.cpp index f094f7cbd..10cd72d8c 100644 --- a/src/qt/qt_renderercommon.cpp +++ b/src/qt/qt_renderercommon.cpp @@ -1,4 +1,4 @@ -#include "qt_renderercomon.hpp" +#include "qt_renderercommon.hpp" #include "qt_mainwindow.hpp" #include diff --git a/src/qt/qt_softwarerenderer.hpp b/src/qt/qt_softwarerenderer.hpp index 6daf18337..8e646c14d 100644 --- a/src/qt/qt_softwarerenderer.hpp +++ b/src/qt/qt_softwarerenderer.hpp @@ -6,7 +6,7 @@ #include #include #include -#include "qt_renderercomon.hpp" +#include "qt_renderercommon.hpp" class SoftwareRenderer : public QRasterWindow, public RendererCommon { From f15f00e260ab07873df94563f34d7eca4327a1c3 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 1 Feb 2022 01:46:31 +0600 Subject: [PATCH 235/278] qt_settingsnetwork: Disable Configure button when network card has no configurable parameters --- src/qt/qt_settingsnetwork.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_settingsnetwork.cpp b/src/qt/qt_settingsnetwork.cpp index 64b60b55e..a8a6dd2fc 100644 --- a/src/qt/qt_settingsnetwork.cpp +++ b/src/qt/qt_settingsnetwork.cpp @@ -18,7 +18,7 @@ static void enableElements(Ui::SettingsNetwork *ui) { bool adaptersEnabled = netType == NET_TYPE_SLIRP || (netType == NET_TYPE_PCAP && ui->comboBoxPcap->currentData().toInt() > 0); ui->comboBoxAdapter->setEnabled(adaptersEnabled); - ui->pushButtonConfigure->setEnabled(adaptersEnabled && ui->comboBoxAdapter->currentIndex() > 0); + ui->pushButtonConfigure->setEnabled(adaptersEnabled && ui->comboBoxAdapter->currentIndex() > 0 && network_card_has_config(ui->comboBoxAdapter->currentData().toInt())); } SettingsNetwork::SettingsNetwork(QWidget *parent) : From 25f5b814c3c474463cbba5eeefece768a9132898 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Tue, 1 Feb 2022 19:39:13 +0200 Subject: [PATCH 236/278] qt: update translations --- src/qt/languages/cs-CZ.po | 24 ++++++++++++++-- src/qt/languages/de-DE.po | 24 ++++++++++++++-- src/qt/languages/en-GB.po | 18 ++++++++++++ src/qt/languages/en-US.po | 18 ++++++++++++ src/qt/languages/es-ES.po | 18 ++++++++++++ src/qt/languages/fi-FI.po | 18 ++++++++++++ src/qt/languages/fr-FR.po | 18 ++++++++++++ src/qt/languages/hr-HR.po | 18 ++++++++++++ src/qt/languages/hu-HU.po | 18 ++++++++++++ src/qt/languages/it-IT.po | 18 ++++++++++++ src/qt/languages/ja-JP.po | 18 ++++++++++++ src/qt/languages/ko-KR.po | 18 ++++++++++++ src/qt/languages/pl-PL.po | 18 ++++++++++++ src/qt/languages/pt-BR.po | 18 ++++++++++++ src/qt/languages/pt-PT.po | 18 ++++++++++++ src/qt/languages/ru-RU.po | 60 +++++++++++++++++++++++++-------------- src/qt/languages/sl-SI.po | 18 ++++++++++++ src/qt/languages/tr-TR.po | 18 ++++++++++++ src/qt/languages/zh-CN.po | 18 ++++++++++++ 19 files changed, 369 insertions(+), 27 deletions(-) diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index 133aa8a0b..4e2135271 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -445,14 +445,29 @@ msgstr "PCap zařízení:" msgid "Network adapter:" msgstr "Síťový adaptér:" +msgid "COM1 Device:" +msgstr "Zařízení na COM1:" + +msgid "COM2 Device:" +msgstr "Zařízení na COM2:" + +msgid "COM3 Device:" +msgstr "Zařízení na COM3:" + +msgid "COM4 Device:" +msgstr "Zařízení na COM4:" + msgid "LPT1 Device:" -msgstr "Zařízení na LPT1" +msgstr "Zařízení na LPT1:" msgid "LPT2 Device:" -msgstr "Zařízení na LPT2" +msgstr "Zařízení na LPT2:" msgid "LPT3 Device:" -msgstr "Zařízení na LPT3" +msgstr "Zařízení na LPT3:" + +msgid "LPT4 Device:" +msgstr "Zařízení na LPT4:" msgid "Serial port 1" msgstr "Povolit port COM1" @@ -475,6 +490,9 @@ msgstr "Povolit port LPT2" msgid "Parallel port 3" msgstr "Povolit port LPT3" +msgid "Parallel port 4" +msgstr "Povolit port LPT4" + msgid "HD Controller:" msgstr "Řadič disku:" diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po index 8651fcf89..3f2133deb 100644 --- a/src/qt/languages/de-DE.po +++ b/src/qt/languages/de-DE.po @@ -445,14 +445,29 @@ msgstr "PCap-Gerät:" msgid "Network adapter:" msgstr "Netzwerkadapter:" +msgid "COM1 Device:" +msgstr "COM1-Gerät:" + +msgid "COM2 Device:" +msgstr "COM2-Gerät:" + +msgid "COM3 Device:" +msgstr "COM3-Gerät:" + +msgid "COM4 Device:" +msgstr "COM4-Gerät:" + msgid "LPT1 Device:" -msgstr "LPT1-Gerät" +msgstr "LPT1-Gerät:" msgid "LPT2 Device:" -msgstr "LPT2-Gerät" +msgstr "LPT2-Gerät:" msgid "LPT3 Device:" -msgstr "LPT3-Gerät" +msgstr "LPT3-Gerät:" + +msgid "LPT4 Device:" +msgstr "LPT4-Gerät:" msgid "Serial port 1" msgstr "Serielle Schnittstelle 1" @@ -475,6 +490,9 @@ msgstr "Parallelport 2" msgid "Parallel port 3" msgstr "Parallelport 3" +msgid "Parallel port 4" +msgstr "Parallelport 4" + msgid "HD Controller:" msgstr "HDD-Controller:" diff --git a/src/qt/languages/en-GB.po b/src/qt/languages/en-GB.po index a8e30a550..d20e08705 100644 --- a/src/qt/languages/en-GB.po +++ b/src/qt/languages/en-GB.po @@ -445,6 +445,18 @@ msgstr "PCap device:" msgid "Network adapter:" msgstr "Network adapter:" +msgid "COM1 Device:" +msgstr "COM1 Device:" + +msgid "COM2 Device:" +msgstr "COM2 Device:" + +msgid "COM3 Device:" +msgstr "COM3 Device:" + +msgid "COM4 Device:" +msgstr "COM4 Device:" + msgid "LPT1 Device:" msgstr "LPT1 Device:" @@ -454,6 +466,9 @@ msgstr "LPT2 Device:" msgid "LPT3 Device:" msgstr "LPT3 Device:" +msgid "LPT4 Device:" +msgstr "LPT4 Device:" + msgid "Serial port 1" msgstr "Serial port 1" @@ -475,6 +490,9 @@ msgstr "Parallel port 2" msgid "Parallel port 3" msgstr "Parallel port 3" +msgid "Parallel port 4" +msgstr "Parallel port 4" + msgid "HD Controller:" msgstr "HD Controller:" diff --git a/src/qt/languages/en-US.po b/src/qt/languages/en-US.po index 83c7ef3b4..973ba63e9 100644 --- a/src/qt/languages/en-US.po +++ b/src/qt/languages/en-US.po @@ -445,6 +445,18 @@ msgstr "PCap device:" msgid "Network adapter:" msgstr "Network adapter:" +msgid "COM1 Device:" +msgstr "COM1 Device:" + +msgid "COM2 Device:" +msgstr "COM2 Device:" + +msgid "COM3 Device:" +msgstr "COM3 Device:" + +msgid "COM4 Device:" +msgstr "COM4 Device:" + msgid "LPT1 Device:" msgstr "LPT1 Device:" @@ -454,6 +466,9 @@ msgstr "LPT2 Device:" msgid "LPT3 Device:" msgstr "LPT3 Device:" +msgid "LPT4 Device:" +msgstr "LPT4 Device:" + msgid "Serial port 1" msgstr "Serial port 1" @@ -475,6 +490,9 @@ msgstr "Parallel port 2" msgid "Parallel port 3" msgstr "Parallel port 3" +msgid "Parallel port 4" +msgstr "Parallel port 4" + msgid "HD Controller:" msgstr "HD Controller:" diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po index 373390481..a0c0b9d2d 100644 --- a/src/qt/languages/es-ES.po +++ b/src/qt/languages/es-ES.po @@ -445,6 +445,18 @@ msgstr "Dispositivo PCap:" msgid "Network adapter:" msgstr "Adaptador de red:" +msgid "COM1 Device:" +msgstr "Dispositivo COM1:" + +msgid "COM2 Device:" +msgstr "Dispositivo COM2:" + +msgid "COM3 Device:" +msgstr "Dispositivo COM3:" + +msgid "COM4 Device:" +msgstr "Dispositivo COM4:" + msgid "LPT1 Device:" msgstr "Dispositivo LPT1:" @@ -454,6 +466,9 @@ msgstr "Dispositivo LPT2:" msgid "LPT3 Device:" msgstr "Dispositivo LPT3:" +msgid "LPT4 Device:" +msgstr "Dispositivo LPT4:" + msgid "Serial port 1" msgstr "Puerto serie 1" @@ -475,6 +490,9 @@ msgstr "Puerto paralelo 2" msgid "Parallel port 3" msgstr "Puerto paralelo 3" +msgid "Parallel port 4" +msgstr "Puerto paralelo 4" + msgid "HD Controller:" msgstr "Controladora HD:" diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index 5540a761c..3812b49db 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -445,6 +445,18 @@ msgstr "PCap-laite:" msgid "Network adapter:" msgstr "Verkkokortti:" +msgid "COM1 Device:" +msgstr "COM1-laite:" + +msgid "COM2 Device:" +msgstr "COM2-laite:" + +msgid "COM3 Device:" +msgstr "COM3-laite:" + +msgid "COM4 Device:" +msgstr "COM4-laite:" + msgid "LPT1 Device:" msgstr "LPT1-laite:" @@ -454,6 +466,9 @@ msgstr "LPT2-laite:" msgid "LPT3 Device:" msgstr "LPT3-laite:" +msgid "LPT4 Device:" +msgstr "LPT4-laite:" + msgid "Serial port 1" msgstr "Sarjaportti 1" @@ -475,6 +490,9 @@ msgstr "Rinnakkaisportti 2" msgid "Parallel port 3" msgstr "Rinnakkaisportti 3" +msgid "Parallel port 4" +msgstr "Rinnakkaisportti 4" + msgid "HD Controller:" msgstr "Kiintolevyohjain:" diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po index 6891e2ef6..d13c00585 100644 --- a/src/qt/languages/fr-FR.po +++ b/src/qt/languages/fr-FR.po @@ -445,6 +445,18 @@ msgstr "Dispositif PCap:" msgid "Network adapter:" msgstr "Adaptateur de réseau:" +msgid "COM1 Device:" +msgstr "Dispositif COM1:" + +msgid "COM2 Device:" +msgstr "Dispositif COM2:" + +msgid "COM3 Device:" +msgstr "Dispositif COM3:" + +msgid "COM4 Device:" +msgstr "Dispositif COM4:" + msgid "LPT1 Device:" msgstr "Dispositif LPT1:" @@ -454,6 +466,9 @@ msgstr "Dispositif LPT2:" msgid "LPT3 Device:" msgstr "Dispositif LPT3:" +msgid "LPT4 Device:" +msgstr "Dispositif LPT4:" + msgid "Serial port 1" msgstr "Port série 1" @@ -475,6 +490,9 @@ msgstr "Port parallèle 2" msgid "Parallel port 3" msgstr "Port parallèle 3" +msgid "Parallel port 4" +msgstr "Port parallèle 4" + msgid "HD Controller:" msgstr "Contrôleur HD:" diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index cca23d075..e6dd3d190 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -445,6 +445,18 @@ msgstr "Uređaj PCap:" msgid "Network adapter:" msgstr "Mrežna kartica:" +msgid "COM1 Device:" +msgstr "Uređaj COM1:" + +msgid "COM2 Device:" +msgstr "Uređaj COM2:" + +msgid "COM3 Device:" +msgstr "Uređaj COM3:" + +msgid "COM4 Device:" +msgstr "Uređaj COM4:" + msgid "LPT1 Device:" msgstr "Uređaj LPT1:" @@ -454,6 +466,9 @@ msgstr "Uređaj LPT2:" msgid "LPT3 Device:" msgstr "Uređaj LPT3:" +msgid "LPT4 Device:" +msgstr "Uređaj LPT4:" + msgid "Serial port 1" msgstr "Serijska vrata 1" @@ -475,6 +490,9 @@ msgstr "Paralelna vrata 2" msgid "Parallel port 3" msgstr "Paralelna vrata 3" +msgid "Parallel port 4" +msgstr "Paralelna vrata 4" + msgid "HD Controller:" msgstr "Kontroler tvrdog diska:" diff --git a/src/qt/languages/hu-HU.po b/src/qt/languages/hu-HU.po index 0b86b9332..d6426a9a3 100644 --- a/src/qt/languages/hu-HU.po +++ b/src/qt/languages/hu-HU.po @@ -445,6 +445,18 @@ msgstr "PCap eszköz:" msgid "Network adapter:" msgstr "Hálózati kártya:" +msgid "COM1 Device:" +msgstr "COM1 eszköz:" + +msgid "COM2 Device:" +msgstr "COM2 eszköz:" + +msgid "COM3 Device:" +msgstr "COM3 eszköz:" + +msgid "COM4 Device:" +msgstr "COM4 eszköz:" + msgid "LPT1 Device:" msgstr "LPT1 eszköz:" @@ -454,6 +466,9 @@ msgstr "LPT2 eszköz:" msgid "LPT3 Device:" msgstr "LPT3 eszköz:" +msgid "LPT4 Device:" +msgstr "LPT4 eszköz:" + msgid "Serial port 1" msgstr "Soros port 1" @@ -475,6 +490,9 @@ msgstr "Párhuzamos port 2" msgid "Parallel port 3" msgstr "Párhuzamos port 3" +msgid "Parallel port 4" +msgstr "Párhuzamos port 4" + msgid "HD Controller:" msgstr "Merevl.-vezérlő:" diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po index f9064e732..c60a0635a 100644 --- a/src/qt/languages/it-IT.po +++ b/src/qt/languages/it-IT.po @@ -445,6 +445,18 @@ msgstr "Dispositivo PCap:" msgid "Network adapter:" msgstr "Scheda di rete:" +msgid "COM1 Device:" +msgstr "Dispositivo COM1:" + +msgid "COM2 Device:" +msgstr "Dispositivo COM2:" + +msgid "COM3 Device:" +msgstr "Dispositivo COM3:" + +msgid "COM4 Device:" +msgstr "Dispositivo COM4:" + msgid "LPT1 Device:" msgstr "Dispositivo LPT1:" @@ -454,6 +466,9 @@ msgstr "Dispositivo LPT2:" msgid "LPT3 Device:" msgstr "Dispositivo LPT3:" +msgid "LPT4 Device:" +msgstr "Dispositivo LPT4:" + msgid "Serial port 1" msgstr "Porta seriale 1" @@ -475,6 +490,9 @@ msgstr "Porta parallela 2" msgid "Parallel port 3" msgstr "Porta parallela 3" +msgid "Parallel port 4" +msgstr "Porta parallela 4" + msgid "HD Controller:" msgstr "Controller HD:" diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po index a9551f7d4..758ddec6e 100644 --- a/src/qt/languages/ja-JP.po +++ b/src/qt/languages/ja-JP.po @@ -445,6 +445,18 @@ msgstr "PCapデバイス:" msgid "Network adapter:" msgstr "ネットワークアダプター:" +msgid "COM1 Device:" +msgstr "COM1デバイス:" + +msgid "COM2 Device:" +msgstr "COM2デバイス:" + +msgid "COM3 Device:" +msgstr "COM3デバイス:" + +msgid "COM4 Device:" +msgstr "COM4デバイス:" + msgid "LPT1 Device:" msgstr "LPT1デバイス:" @@ -454,6 +466,9 @@ msgstr "LPT2デバイス:" msgid "LPT3 Device:" msgstr "LPT3デバイス:" +msgid "LPT4 Device:" +msgstr "LPT4デバイス:" + msgid "Serial port 1" msgstr "シリアルポート1" @@ -475,6 +490,9 @@ msgstr "パラレルポート2" msgid "Parallel port 3" msgstr "パラレルポート3" +msgid "Parallel port 4" +msgstr "パラレルポート4" + msgid "HD Controller:" msgstr "HDコントローラー:" diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index 2dd8c27d7..4664e5cc6 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -445,6 +445,18 @@ msgstr "PCap 장치:" msgid "Network adapter:" msgstr "네트워크 어댑터:" +msgid "COM1 Device:" +msgstr "COM1 장치:" + +msgid "COM2 Device:" +msgstr "COM2 장치:" + +msgid "COM3 Device:" +msgstr "COM3 장치:" + +msgid "COM4 Device:" +msgstr "COM4 장치:" + msgid "LPT1 Device:" msgstr "LPT1 장치:" @@ -454,6 +466,9 @@ msgstr "LPT2 장치:" msgid "LPT3 Device:" msgstr "LPT3 장치:" +msgid "LPT4 Device:" +msgstr "LPT4 장치:" + msgid "Serial port 1" msgstr "직렬 포트 1" @@ -475,6 +490,9 @@ msgstr "병렬 포트 2" msgid "Parallel port 3" msgstr "병렬 포트 3" +msgid "Parallel port 4" +msgstr "병렬 포트 4" + msgid "HD Controller:" msgstr "HD 컨트롤러:" diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po index b57cc5f62..c576cf883 100644 --- a/src/qt/languages/pl-PL.po +++ b/src/qt/languages/pl-PL.po @@ -445,6 +445,18 @@ msgstr "Urządzenie PCap:" msgid "Network adapter:" msgstr "Karta sieciowa:" +msgid "COM1 Device:" +msgstr "Urządzenie COM1:" + +msgid "COM2 Device:" +msgstr "Urządzenie COM2:" + +msgid "COM3 Device:" +msgstr "Urządzenie COM3:" + +msgid "COM4 Device:" +msgstr "Urządzenie COM4:" + msgid "LPT1 Device:" msgstr "Urządzenie LPT1:" @@ -454,6 +466,9 @@ msgstr "Urządzenie LPT2:" msgid "LPT3 Device:" msgstr "Urządzenie LPT3:" +msgid "LPT4 Device:" +msgstr "Urządzenie LPT4:" + msgid "Serial port 1" msgstr "Port szeregowy 1" @@ -475,6 +490,9 @@ msgstr "Port równoległy 2" msgid "Parallel port 3" msgstr "Port równoległy 3" +msgid "Parallel port 4" +msgstr "Port równoległy 4" + msgid "HD Controller:" msgstr "Kontroler dysku twardego:" diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index 46b983bdd..7a1f33529 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -445,6 +445,18 @@ msgstr "Dispositivo PCap:" msgid "Network adapter:" msgstr "Adaptador de rede:" +msgid "COM1 Device:" +msgstr "Dispositivo COM1:" + +msgid "COM2 Device:" +msgstr "Dispositivo COM2:" + +msgid "COM3 Device:" +msgstr "Dispositivo COM3:" + +msgid "COM4 Device:" +msgstr "Dispositivo COM4:" + msgid "LPT1 Device:" msgstr "Dispositivo LPT1:" @@ -454,6 +466,9 @@ msgstr "Dispositivo LPT2:" msgid "LPT3 Device:" msgstr "Dispositivo LPT3:" +msgid "LPT4 Device:" +msgstr "Dispositivo LPT4:" + msgid "Serial port 1" msgstr "Porta serial 1" @@ -475,6 +490,9 @@ msgstr "Porta paralela 2" msgid "Parallel port 3" msgstr "Porta paralela 3" +msgid "Parallel port 4" +msgstr "Porta paralela 4" + msgid "HD Controller:" msgstr "Controlador HD:" diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index b787b7404..bc2ced0c2 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -445,6 +445,18 @@ msgstr "Dispositivo PCap:" msgid "Network adapter:" msgstr "Placa de rede:" +msgid "COM1 Device:" +msgstr "Dispositivo COM1:" + +msgid "COM2 Device:" +msgstr "Dispositivo COM2:" + +msgid "COM3 Device:" +msgstr "Dispositivo COM3:" + +msgid "COM4 Device:" +msgstr "Dispositivo COM4:" + msgid "LPT1 Device:" msgstr "Dispositivo LPT1:" @@ -454,6 +466,9 @@ msgstr "Dispositivo LPT2:" msgid "LPT3 Device:" msgstr "Dispositivo LPT3:" +msgid "LPT4 Device:" +msgstr "Dispositivo LPT4:" + msgid "Serial port 1" msgstr "Porta de série 1" @@ -475,6 +490,9 @@ msgstr "Porta paralela 2" msgid "Parallel port 3" msgstr "Porta paralela 3" +msgid "Parallel port 4" +msgstr "Porta paralela 4" + msgid "HD Controller:" msgstr "Controlador HD:" diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index d7b0bbf2c..443c6f28c 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -26,10 +26,10 @@ msgid "&View" msgstr "&Вид" msgid "&Hide status bar" -msgstr "&Скрыть строку статуса" +msgstr "&Скрыть строку состояния" msgid "Hide &toolbar" -msgstr "Hide &toolbar" +msgstr "С&крыть панель инструментов" msgid "&Resizeable window" msgstr "&Изменяемый размер окна" @@ -38,7 +38,7 @@ msgid "R&emember size && position" msgstr "&Запомнить размер и положение" msgid "Re&nderer" -msgstr "&Рендерер" +msgstr "&Рендеринг" msgid "&SDL (Software)" msgstr "&SDL (Software)" @@ -158,7 +158,7 @@ msgid "&Settings..." msgstr "&Настройки машины..." msgid "&Update status bar icons" -msgstr "&Обновление значков строки статуса" +msgstr "&Обновление значков строки состояния" msgid "Take s&creenshot\tCtrl+F11" msgstr "Сделать с&криншот\tCtrl+F11" @@ -206,7 +206,7 @@ msgid "&Log breakpoint\tCtrl+F10" msgstr "&Точка останова журнала\tCtrl+F10" msgid "Dump &video RAM\tCtrl+F1" -msgstr "&Выгрузка дампа видео-ОЗУ\tCtrl+F1" +msgstr "&Выгрузка дампа видеопамяти\tCtrl+F1" msgid "&Help" msgstr "&Помощь" @@ -248,7 +248,7 @@ msgid "E&xport to 86F..." msgstr "Э&кспорт в 86F..." msgid "&Mute" -msgstr "&Mute" +msgstr "О&тключить звук" msgid "E&mpty" msgstr "П&устой" @@ -356,10 +356,10 @@ msgid "Configure" msgstr "Настройка" msgid "CPU type:" -msgstr "Тип ЦПУ:" +msgstr "Тип ЦП:" msgid "Speed:" -msgstr "Speed:" +msgstr "Скорость:" msgid "FPU:" msgstr "FPU:" @@ -445,6 +445,18 @@ msgstr "Устройство PCap:" msgid "Network adapter:" msgstr "Сетевая карта:" +msgid "COM1 Device:" +msgstr "Устройство COM1:" + +msgid "COM2 Device:" +msgstr "Устройство COM2:" + +msgid "COM3 Device:" +msgstr "Устройство COM3:" + +msgid "COM4 Device:" +msgstr "Устройство COM4:" + msgid "LPT1 Device:" msgstr "Устройство LPT1:" @@ -454,6 +466,9 @@ msgstr "Устройство LPT2:" msgid "LPT3 Device:" msgstr "Устройство LPT3:" +msgid "LPT4 Device:" +msgstr "Устройство LPT4:" + msgid "Serial port 1" msgstr "Последов. порт COM1" @@ -475,6 +490,9 @@ msgstr "Параллельный порт LPT2" msgid "Parallel port 3" msgstr "Параллельный порт LPT3" +msgid "Parallel port 4" +msgstr "Параллельный порт LPT4" + msgid "HD Controller:" msgstr "Контроллер HD:" @@ -770,7 +788,7 @@ msgid "Unable to load keyboard accelerators." msgstr "Невозможно загрузить ускорители клавиатуры." msgid "Unable to register raw input." -msgstr "Невозможно зарегистрировать необработанный ввод." +msgstr "Невозможно зарегистрировать необработанный (RAW) ввод." msgid "%u" msgstr "%u" @@ -914,7 +932,7 @@ msgid "You are loading an unsupported configuration" msgstr "Вы загружаете неподдерживаемую конфигурацию" msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." -msgstr "Выбор типов CPU для этой системной платы на данной эмулируемой машине отключен.\n\nЭто позволяет выбрать процессор, который в противном случае несовместим с выбранной материнской платой. Однако, вы можете столкнуться с несовместимостью с BIOS материнской платы или другим ПО.\n\nВключение этого параметра официально не поддерживается, и все поданные отчеты об ошибках могут быть закрыты как недействительные." +msgstr "Выбор типов ЦП для этой системной платы на данной эмулируемой машине отключен.\n\nЭто позволяет выбрать процессор, который в противном случае несовместим с выбранной материнской платой. Однако, вы можете столкнуться с несовместимостью с BIOS материнской платы или другим ПО.\n\nВключение этого параметра официально не поддерживается, и все поданные отчеты об ошибках могут быть закрыты как недействительные." msgid "Continue" msgstr "Продолжить" @@ -932,28 +950,28 @@ msgid "Cartridge images" msgstr "Образы картриджей" msgid "Error initializing renderer" -msgstr "Error initializing renderer" +msgstr "Ошибка инициализации рендерера" msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." -msgstr "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "Невозможно инициализировать рендерер OpenGL (3.0). Пожалуйста, используйте другой рендерер." msgid "Resume execution" -msgstr "Resume execution" +msgstr "Возобновить выполнение" msgid "Pause execution" -msgstr "Pause execution" +msgstr "Приостановить выполнение" msgid "Press Ctrl+Alt+Del" -msgstr "Press Ctrl+Alt+Del" +msgstr "Нажать Ctrl+Alt+Del" msgid "Press Ctrl+Alt+Esc" -msgstr "Press Ctrl+Alt+Esc" +msgstr "Нажать Ctrl+Alt+Esc" msgid "Hard reset" -msgstr "Hard reset" +msgstr "Холодная перезагрузка" msgid "ACPI shutdown" -msgstr "ACPI shutdown" +msgstr "Сигнал завершения ACPI" msgid "Hard disk (%s)" msgstr "Жёсткий диск (%s)" @@ -968,16 +986,16 @@ msgid "MFM/RLL or ESDI CD-ROM drives never existed" msgstr "MFM/RLL или ESDI дисководов CD-ROM никогда не существовало" msgid "Custom..." -msgstr "Custom..." +msgstr "Задать вручную..." msgid "Custom (large)..." -msgstr "Custom (large)..." +msgstr "Задать вручную (large)..." msgid "Add New Hard Disk" msgstr "Создать новый жёсткий диск" msgid "Add Existing Hard Disk" -msgstr "Добавить существующий жёсткий диск" +msgstr "Выбрать существующий жёсткий диск" msgid "HDI disk images cannot be larger than 4 GB." msgstr "Размер образов дисков HDI не может превышать 4 ГБ." diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index 705b36781..6bb8a66d2 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -445,6 +445,18 @@ msgstr "Naprava PCap:" msgid "Network adapter:" msgstr "Omrežna kartica:" +msgid "COM1 Device:" +msgstr "Naprava COM1:" + +msgid "COM2 Device:" +msgstr "Naprava COM2:" + +msgid "COM3 Device:" +msgstr "Naprava COM3:" + +msgid "COM4 Device:" +msgstr "Naprava COM4:" + msgid "LPT1 Device:" msgstr "Naprava LPT1:" @@ -454,6 +466,9 @@ msgstr "Naprava LPT2:" msgid "LPT3 Device:" msgstr "Naprava LPT3:" +msgid "LPT4 Device:" +msgstr "Naprava LPT4:" + msgid "Serial port 1" msgstr "Serijska vrata 1" @@ -475,6 +490,9 @@ msgstr "Paralelna vrata 2" msgid "Parallel port 3" msgstr "Paralelna vrata 3" +msgid "Parallel port 4" +msgstr "Paralelna vrata 4" + msgid "HD Controller:" msgstr "Krmilnik trdega diska:" diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po index 669a78ff5..a6c36ac77 100644 --- a/src/qt/languages/tr-TR.po +++ b/src/qt/languages/tr-TR.po @@ -445,6 +445,18 @@ msgstr "PCap cihazı:" msgid "Network adapter:" msgstr "Ağ cihazı:" +msgid "COM1 Device:" +msgstr "COM1 Cihazı:" + +msgid "COM2 Device:" +msgstr "COM2 Cihazı:" + +msgid "COM3 Device:" +msgstr "COM3 Cihazı:" + +msgid "COM4 Device:" +msgstr "COM4 Cihazı:" + msgid "LPT1 Device:" msgstr "LPT1 Cihazı:" @@ -454,6 +466,9 @@ msgstr "LPT2 Cihazı:" msgid "LPT3 Device:" msgstr "LPT3 Cihazı:" +msgid "LPT4 Device:" +msgstr "LPT4 Cihazı:" + msgid "Serial port 1" msgstr "Seri port 1" @@ -475,6 +490,9 @@ msgstr "Paralel port 2" msgid "Parallel port 3" msgstr "Paralel port 3" +msgid "Parallel port 4" +msgstr "Paralel port 4" + msgid "HD Controller:" msgstr "HD Kontrolcüsü:" diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po index 95089e48f..1d5a94da7 100644 --- a/src/qt/languages/zh-CN.po +++ b/src/qt/languages/zh-CN.po @@ -445,6 +445,18 @@ msgstr "PCap 设备:" msgid "Network adapter:" msgstr "网络适配器:" +msgid "COM1 Device:" +msgstr "COM1 设备:" + +msgid "COM2 Device:" +msgstr "COM2 设备:" + +msgid "COM3 Device:" +msgstr "COM3 设备:" + +msgid "COM4 Device:" +msgstr "COM4 设备:" + msgid "LPT1 Device:" msgstr "LPT1 设备:" @@ -454,6 +466,9 @@ msgstr "LPT2 设备:" msgid "LPT3 Device:" msgstr "LPT3 设备:" +msgid "LPT4 Device:" +msgstr "LPT4 设备:" + msgid "Serial port 1" msgstr "串口 1" @@ -475,6 +490,9 @@ msgstr "并口 2" msgid "Parallel port 3" msgstr "并口 3" +msgid "Parallel port 4" +msgstr "并口 4" + msgid "HD Controller:" msgstr "硬盘控制器:" From 8649294f60a07c31da34525b35f354d08252551f Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Tue, 1 Feb 2022 21:15:53 +0200 Subject: [PATCH 237/278] qt: Add uk-UA. Make program settings dynamic size to fit buttons with different translations. --- src/qt/languages/uk-UA.po | 1215 ++++++++++++++++++++++++++++++++++++ src/qt/qt_platform.cpp | 1 + src/qt/qt_progsettings.ui | 197 +++--- src/qt/qt_translations.qrc | 1 + 4 files changed, 1315 insertions(+), 99 deletions(-) create mode 100644 src/qt/languages/uk-UA.po diff --git a/src/qt/languages/uk-UA.po b/src/qt/languages/uk-UA.po new file mode 100644 index 000000000..8ebf41bbe --- /dev/null +++ b/src/qt/languages/uk-UA.po @@ -0,0 +1,1215 @@ +msgid "&Action" +msgstr "&Действие" + +msgid "&Keyboard requires capture" +msgstr "&Клавіатура потребує захвату" + +msgid "&Right CTRL is left ALT" +msgstr "&Правий CTRL - це лівий ALT" + +msgid "&Hard Reset..." +msgstr "&Холодне перезавантаження..." + +msgid "&Ctrl+Alt+Del\tCtrl+F12" +msgstr "&Ctrl+Alt+Del\tCtrl+F12" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Пауза" + +msgid "E&xit..." +msgstr "&Вихід..." + +msgid "&View" +msgstr "&Вид" + +msgid "&Hide status bar" +msgstr "&Приховати рядок стану" + +msgid "Hide &toolbar" +msgstr "&Приховати панель інструментів" + +msgid "&Resizeable window" +msgstr "&Змінний розмір вікна" + +msgid "R&emember size && position" +msgstr "&Запам'ятати розмір і становище" + +msgid "Re&nderer" +msgstr "&Рендеринг" + +msgid "&SDL (Software)" +msgstr "&SDL (Software)" + +msgid "SDL (&Hardware)" +msgstr "SDL (&Hardware)" + +msgid "SDL (&OpenGL)" +msgstr "SDL (&OpenGL)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify dimensions..." +msgstr "&Вказати розміри..." + +msgid "F&orce 4:3 display ratio" +msgstr "&Встановити відношення сторін 4:3" + +msgid "&Window scale factor" +msgstr "&Масштаб вікна" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "Filter method" +msgstr "Метод фільтрації" + +msgid "&Nearest" +msgstr "&Найближчий" + +msgid "&Linear" +msgstr "&Лінійний" + +msgid "Hi&DPI scaling" +msgstr "Масштабування Hi&DPI" + +msgid "&Fullscreen\tCtrl+Alt+PageUP" +msgstr "&Повноекранний режим\tCtrl+Alt+PageUP" + +msgid "Fullscreen &stretch mode" +msgstr "&Розстягування у повноекранному режимі" + +msgid "&Full screen stretch" +msgstr "&На весь екран" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Квадратні пікселі (зберегти відношення)" + +msgid "&Integer scale" +msgstr "&Цілісночисленне масштабування" + +msgid "E&GA/(S)VGA settings" +msgstr "Налаштування E&GA/(S)VGA" + +msgid "&Inverted VGA monitor" +msgstr "&Інвертувати кольори VGA" + +msgid "VGA screen &type" +msgstr "&Тип екрана VGA" + +msgid "RGB &Color" +msgstr "RGB &кольоровий" + +msgid "&RGB Grayscale" +msgstr "&RGB монохромний" + +msgid "&Amber monitor" +msgstr "&Бурштиновий відтінок" + +msgid "&Green monitor" +msgstr "&Зелений відтінок" + +msgid "&White monitor" +msgstr "&Білий відтінок" + +msgid "Grayscale &conversion type" +msgstr "Тип монохромного &конвертування" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Усереднений" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "Вильоти розгортки CGA/PCjr/Tandy/E&GA/(S)VGA" + +msgid "Change contrast for &monochrome display" +msgstr "Змінити контрастність &монохромного дисплея" + +msgid "&Media" +msgstr "&Носії" + +msgid "&Tools" +msgstr "&Інструменти" + +msgid "&Settings..." +msgstr "&Налаштування машини..." + +msgid "&Update status bar icons" +msgstr "&Обновлення значків рядка стану" + +msgid "Take s&creenshot\tCtrl+F11" +msgstr "Зробити &знімок\tCtrl+F11" + +msgid "&Preferences..." +msgstr "&Параметри..." + +msgid "Enable &Discord integration" +msgstr "Увімкнути інтеграцію &Discord" + +msgid "Sound &gain..." +msgstr "&Посилення звуку..." + +msgid "Begin trace\tCtrl+T" +msgstr "Почати трасування\tCtrl+T" + +msgid "End trace\tCtrl+T" +msgstr "Завершити трасування\tCtrl+T" + +msgid "&Logging" +msgstr "&Ведення журнала" + +msgid "Enable BusLogic logs\tCtrl+F4" +msgstr "Увімкнути журнали BusLogic\tCtrl+F4" + +msgid "Enable CD-ROM logs\tCtrl+F5" +msgstr "Увімкнути журнали CD-ROM\tCtrl+F5" + +msgid "Enable floppy (86F) logs\tCtrl+F6" +msgstr "Увімкнути журнали дискет (86F)\tCtrl+F6" + +msgid "Enable floppy controller logs\tCtrl+F7" +msgstr "Увімкнути журнали контролера дискет\tCtrl+F7" + +msgid "Enable IDE logs\tCtrl+F8" +msgstr "Увімкнути журнали IDE\tCtrl+F8" + +msgid "Enable Serial Port logs\tCtrl+F3" +msgstr "Увімкнути журнали COM порту\tCtrl+F3" + +msgid "Enable Network logs\tCtrl+F9" +msgstr "Увімкнути журнали мережі\tCtrl+F9" + +msgid "&Log breakpoint\tCtrl+F10" +msgstr "&Точка зупинка журналу\tCtrl+F10" + +msgid "Dump &video RAM\tCtrl+F1" +msgstr "&Вивантаження дампа відеопам'яті\tCtrl+F1" + +msgid "&Help" +msgstr "&Допомога" + +msgid "&Documentation..." +msgstr "&Документація..." + +msgid "&About 86Box..." +msgstr "&Про програму 86Box..." + +msgid "&New image..." +msgstr "&Новий образ..." + +msgid "&Existing image..." +msgstr "&Вибрати образ..." + +msgid "Existing image (&Write-protected)..." +msgstr "Вибрати образ (&Захист від запису)..." + +msgid "&Record" +msgstr "&Запис" + +msgid "&Play" +msgstr "&Відтворення" + +msgid "&Rewind to the beginning" +msgstr "&Перемотування на початок" + +msgid "&Fast forward to the end" +msgstr "&Перемотування у кінець" + +msgid "E&ject" +msgstr "&Вилучити" + +msgid "&Image..." +msgstr "&Образ..." + +msgid "E&xport to 86F..." +msgstr "&Експорт в 86F..." + +msgid "&Mute" +msgstr "&Відключити звук" + +msgid "E&mpty" +msgstr "&Пустий" + +msgid "&Reload previous image" +msgstr "&Знову завантажити попередній образ" + +msgid "&Image" +msgstr "&Образ..." + +msgid "Target &framerate" +msgstr "Цільова &частота кадрів" + +msgid "&Sync with video" +msgstr "&Синхронізація з відео" + +msgid "&25 fps" +msgstr "&25 кадрів в секунду" + +msgid "&30 fps" +msgstr "&30 кадрів в секунду" + +msgid "&50 fps" +msgstr "&50 кадрів в секунду" + +msgid "&60 fps" +msgstr "&60 кадрів в секунду" + +msgid "&75 fps" +msgstr "&75 кадрів в секунду" + +msgid "&VSync" +msgstr "&VSync" + +msgid "&Select shader..." +msgstr "&Вибрати шейдер..." + +msgid "&Remove shader" +msgstr "&Видалити шейдер" + +msgid "Preferences" +msgstr "Параметри" + +msgid "Sound Gain" +msgstr "Посилення звуку" + +msgid "New Image" +msgstr "Новий образ" + +msgid "Settings" +msgstr "Налаштування" + +msgid "Specify Main Window Dimensions" +msgstr "Вказати розміри головного вікна" + +msgid "OK" +msgstr "OK" + +msgid "Cancel" +msgstr "Відміна" + +msgid "Save these settings as &global defaults" +msgstr "Зберегти ці параметри як &глобальні за замовчуванням" + +msgid "&Default" +msgstr "&За замовчуванням" + +msgid "Language:" +msgstr "Язык:" + +msgid "Icon set:" +msgstr "Набір іконок:" + +msgid "Gain" +msgstr "Посилення" + +msgid "File name:" +msgstr "Ім'я файлу:" + +msgid "Disk size:" +msgstr "Розмір диска:" + +msgid "RPM mode:" +msgstr "RPM режим:" + +msgid "Progress:" +msgstr "Прогрес:" + +msgid "Width:" +msgstr "Ширина:" + +msgid "Height:" +msgstr "Висота:" + +msgid "Lock to this size" +msgstr "Зафіксувати розмір" + +msgid "Machine type:" +msgstr "Тип машини:" + +msgid "Machine:" +msgstr "Системна плата:" + +msgid "Configure" +msgstr "Налаштування" + +msgid "CPU type:" +msgstr "Тип ЦП:" + +msgid "Speed:" +msgstr "Швидкість:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "Цикли очікування:" + +msgid "MB" +msgstr "МБ" + +msgid "Memory:" +msgstr "Пам'ять:" + +msgid "Time synchronization" +msgstr "Синхронізація часу" + +msgid "Disabled" +msgstr "Відключити" + +msgid "Enabled (local time)" +msgstr "Увімкнути (місцеве)" + +msgid "Enabled (UTC)" +msgstr "Увімкнути (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Динамічний рекомпілятор" + +msgid "Video:" +msgstr "Відеокарта:" + +msgid "Voodoo Graphics" +msgstr "Прискорювач Voodoo" + +msgid "Mouse:" +msgstr "Миша:" + +msgid "Joystick:" +msgstr "Джойстик:" + +msgid "Joystick 1..." +msgstr "Джойстик 1..." + +msgid "Joystick 2..." +msgstr "Джойстик 2..." + +msgid "Joystick 3..." +msgstr "Джойстик 3..." + +msgid "Joystick 4..." +msgstr "Джойстик 4..." + +msgid "Sound card:" +msgstr "Звукова карта:" + +msgid "MIDI Out Device:" +msgstr "MIDI Out при-ій:" + +msgid "MIDI In Device:" +msgstr "MIDI In при-ій:" + +msgid "Standalone MPU-401" +msgstr "Окремий MPU-401" + +msgid "Innovation SSI-2001" +msgstr "Innovation SSI-2001" + +msgid "CMS / Game Blaster" +msgstr "CMS / Game Blaster" + +msgid "Gravis Ultrasound" +msgstr "Gravis Ultrasound" + +msgid "Use FLOAT32 sound" +msgstr "FLOAT32 звук" + +msgid "Network type:" +msgstr "Тип мережі:" + +msgid "PCap device:" +msgstr "Пристрій PCap:" + +msgid "Network adapter:" +msgstr "Мережева карта:" + +msgid "COM1 Device:" +msgstr "Пристрій COM1:" + +msgid "COM2 Device:" +msgstr "Пристрій COM2:" + +msgid "COM3 Device:" +msgstr "Пристрій COM3:" + +msgid "COM4 Device:" +msgstr "Пристрій COM4:" + +msgid "LPT1 Device:" +msgstr "Пристрій LPT1:" + +msgid "LPT2 Device:" +msgstr "Пристрій LPT2:" + +msgid "LPT3 Device:" +msgstr "Пристрій LPT3:" + +msgid "LPT4 Device:" +msgstr "Пристрій LPT4:" + +msgid "Serial port 1" +msgstr "Послідов. порт COM1" + +msgid "Serial port 2" +msgstr "Послідов. порт COM2" + +msgid "Serial port 3" +msgstr "Послідов. порт COM3" + +msgid "Serial port 4" +msgstr "Послідов. порт COM4" + +msgid "Parallel port 1" +msgstr "Паралельний порт LPT1" + +msgid "Parallel port 2" +msgstr "Паралельний порт LPT2" + +msgid "Parallel port 3" +msgstr "Паралельний порт LPT3" + +msgid "Parallel port 4" +msgstr "Паралельний порт LPT4" + +msgid "HD Controller:" +msgstr "Контролер HD:" + +msgid "FD Controller:" +msgstr "Контролер FD:" + +msgid "Tertiary IDE Controller" +msgstr "Третинний IDE контролер" + +msgid "Quaternary IDE Controller" +msgstr "Четвертинний IDE контролер" + +msgid "SCSI" +msgstr "SCSI" + +msgid "Controller 1:" +msgstr "Контролер 1:" + +msgid "Controller 2:" +msgstr "Контролер 2:" + +msgid "Controller 3:" +msgstr "Контролер 3:" + +msgid "Controller 4:" +msgstr "Контролер 4:" + +msgid "Cassette" +msgstr "Касета" + +msgid "Hard disks:" +msgstr "Жорсткі диски:" + +msgid "&New..." +msgstr "&Створити..." + +msgid "&Existing..." +msgstr "&Вибрати..." + +msgid "&Remove" +msgstr "&Прибрати" + +msgid "Bus:" +msgstr "Шина:" + +msgid "Channel:" +msgstr "Канал:" + +msgid "ID:" +msgstr "ID:" + +msgid "&Specify..." +msgstr "&Вказати..." + +msgid "Sectors:" +msgstr "Сектора:" + +msgid "Heads:" +msgstr "Головки:" + +msgid "Cylinders:" +msgstr "Циліндри:" + +msgid "Size (MB):" +msgstr "Розмір (МБ):" + +msgid "Type:" +msgstr "Тип:" + +msgid "Image Format:" +msgstr "Тип образу:" + +msgid "Block Size:" +msgstr "Розмір блоку:" + +msgid "Floppy drives:" +msgstr "Гнучкі диски:" + +msgid "Turbo timings" +msgstr "Турбо таймінги" + +msgid "Check BPB" +msgstr "Перевіряти BPB" + +msgid "CD-ROM drives:" +msgstr "Дисководи CD-ROM:" + +msgid "MO drives:" +msgstr "Магнітооптичні дисководи:" + +msgid "ZIP drives:" +msgstr "ZIP дисководи:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA RTC:" + +msgid "ISA Memory Expansion" +msgstr "Карта розширення памя'ті (ISA)" + +msgid "Card 1:" +msgstr "Карта 1:" + +msgid "Card 2:" +msgstr "Карта 2:" + +msgid "Card 3:" +msgstr "Карта 3:" + +msgid "Card 4:" +msgstr "Карта 4:" + +msgid "ISABugger device" +msgstr "Пристрій ISABugger" + +msgid "POST card" +msgstr "Карта POST" + +msgid "FONT_SIZE" +msgstr "9" + +msgid "FONT_NAME" +msgstr "Segoe UI" + +msgid "86Box" +msgstr "86Box" + +msgid "Error" +msgstr "Помилка" + +msgid "Fatal error" +msgstr "Непереробна помилка" + +msgid "" +msgstr "<зарезервовано>" + +msgid "Press CTRL+ALT+PAGE DOWN to return to windowed mode." +msgstr "Натисніть CTRL + ALT + PAGE DOWN для повернення у віконний режим." + +msgid "Speed" +msgstr "Швидкість" + +msgid "ZIP %03i %i (%s): %ls" +msgstr "ZIP %03i %i (%s): %ls" + +msgid "ZIP images" +msgstr "Образи ZIP" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "86Box не зміг знайти жодного відповідного для використання файлу з ПЗУ.\n\nБудь ласка завантажте набір ПЗУ і витягніть його в каталог \"roms\"." + +msgid "(empty)" +msgstr "(пусто)" + +msgid "All files" +msgstr "Всі файли" + +msgid "Turbo" +msgstr "Турбо" + +msgid "On" +msgstr "Увімк" + +msgid "Off" +msgstr "Вимк" + +msgid "All images" +msgstr "Всі образи" + +msgid "Basic sector images" +msgstr "Прості посекторні образи" + +msgid "Surface images" +msgstr "Surface образы" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "Системна плата \"%hs\" недоступна через відсутність файлу її ПЗУ в каталозі roms/machines. Переключення на доступну системну плату." + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "Відеокарта \"%hs\" недоступна через відсутність файлу її ПЗУ в каталозі roms/video. Переключення на доступну відеокарту." + +msgid "Machine" +msgstr "Комп'ютер" + +msgid "Display" +msgstr "Дисплей" + +msgid "Input devices" +msgstr "Пристрій введення" + +msgid "Sound" +msgstr "Звук" + +msgid "Network" +msgstr "Мережа" + +msgid "Ports (COM & LPT)" +msgstr "Порти (COM и LPT)" + +msgid "Storage controllers" +msgstr "Контролери дисків" + +msgid "Hard disks" +msgstr "Жорсткі диски" + +msgid "Floppy & CD-ROM drives" +msgstr "Гнучкі диски і CD-ROM" + +msgid "Other removable devices" +msgstr "Інші знімні при-ої" + +msgid "Other peripherals" +msgstr "Інша периферія" + +msgid "Click to capture mouse" +msgstr "Клацніть мишею для захвату курсора" + +msgid "Press F8+F12 to release mouse" +msgstr "Натисніть F8+F12 щоб звільнити курсор" + +msgid "Press F8+F12 or middle button to release mouse" +msgstr "Натисніть F8+F12 або середню кнопку миши щоб звільнити курсор" + +msgid "Unable to initialize FluidSynth" +msgstr "Неможливо ініціалізувати FluidSynth" + +msgid "Bus" +msgstr "Шина" + +msgid "File" +msgstr "Файл" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "КБ" + +msgid "Could not initialize the video renderer." +msgstr "Не вдалося ініціалізувати рендер відео." + +msgid "Default" +msgstr "За замовчуванням" + +msgid "%i Wait state(s)" +msgstr "%i WS" + +msgid "Type" +msgstr "Тип" + +msgid "Failed to set up PCap" +msgstr "Не вдалося налаштувати PCap" + +msgid "No PCap devices found" +msgstr "Пристрої PCap не знайдені" + +msgid "Invalid PCap device" +msgstr "Невірний пристрій PCap" + +msgid "Standard 2-button joystick(s)" +msgstr "Стандартний 2-кнопковий джойстик" + +msgid "Standard 4-button joystick" +msgstr "Стандартний 4-кнопковий джойстик" + +msgid "Standard 6-button joystick" +msgstr "Стандартний 6-кнопковий джойстик" + +msgid "Standard 8-button joystick" +msgstr "Стандартний 8-кнопковий джойстик" + +msgid "CH Flightstick Pro" +msgstr "CH Flightstick Pro" + +msgid "Microsoft SideWinder Pad" +msgstr "Microsoft SideWinder Pad" + +msgid "Thrustmaster Flight Control System" +msgstr "Система управління польотом Thrustmaster" + +msgid "None" +msgstr "Ні" + +msgid "Unable to load keyboard accelerators." +msgstr "Неможливо завантажити прискорювачі клавіатури." + +msgid "Unable to register raw input." +msgstr "Неможливо зарреєструвати необроблене (RAW) введ." + +msgid "%u" +msgstr "%u" + +msgid "%u MB (CHS: %i, %i, %i)" +msgstr "%u МБ (CHS: %i, %i, %i)" + +msgid "Floppy %i (%s): %ls" +msgstr "Дисковод %i (%s): %ls" + +msgid "Advanced sector images" +msgstr "Розширені образи секторів" + +msgid "Flux images" +msgstr "Образи Flux" + +msgid "Unable to initialize FreeType" +msgstr "Неможливо ініціалізувати FreeType" + +msgid "Unable to initialize SDL, SDL2.dll is required" +msgstr "Неможливо ініціалізувати SDL, потрібно SDL2.dll" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Ви впевнені, що хочете виконати холодне перезавантаження емульованої машини?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Ви впевнені, що хочете вийти з 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "Неможливо ініціалізувати Ghostscript" + +msgid "MO %i (%ls): %ls" +msgstr "Магнітооптичний %i (%ls): %ls" + +msgid "MO images" +msgstr "Образи магнітооптичних дисків" + +msgid "Welcome to 86Box!" +msgstr "Ласкаво просимо в 86Box!" + +msgid "Internal controller" +msgstr "Вбудований контролер" + +msgid "Exit" +msgstr "Вихід" + +msgid "No ROMs found" +msgstr "ПЗУ не знайдені" + +msgid "Do you want to save the settings?" +msgstr "Чи бажаєте ви зберегти налаштування?" + +msgid "This will hard reset the emulated machine." +msgstr "Це призведе до холодної перезагрузки эмулируемой машины." + +msgid "Save" +msgstr "Зберегти" + +msgid "About 86Box" +msgstr "О 86Box" + +msgid "86Box v" +msgstr "86Box v." + +msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Емулятор старих комп'ютерів\n\nАвтори: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nВипускаєтся під ліцензією GNU General Public License версії 2 або більше пізніше. Додадкову інформацію см. у файлі LICENSE." + +msgid "Hardware not available" +msgstr "Обладнання недоступне" + +msgid "WinPcap" +msgstr "WinPcap" + +msgid "libpcap" +msgstr "libpcap" + +msgid "Make sure libpcap is installed and that you are on a libpcap-compatible network connection." +msgstr "Переконайтесь, що libpcap встановлений і ваше мережеве з'єднання, сумісне з libpcap." + +msgid "Invalid configuration" +msgstr "Недопустимая конфигурация" + +msgid "freetype.dll" +msgstr "freetype.dll" + +msgid "libfreetype" +msgstr "libfreetype" + +msgid " is required for ESC/P printer emulation." +msgstr "Для емуляції принтера ESC/P потрібно libfreetype." + +msgid "gsdll32.dll" +msgstr "gsdll32.dll" + +msgid "libgs" +msgstr "libgs" + +msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr " потрібно для автоматичного перетворення файлів PostScript в PDF.\n\nВсі документи, відправлені на загальний принтер PostScript, будуть збережені у вигляді файлів PostScript (.ps)." + +msgid "libfluidsynth.dll" +msgstr "libfluidsynth.dll" + +msgid "libfluidsynth" +msgstr "libfluidsynth" + +msgid " is required for FluidSynth MIDI output." +msgstr "Для FluidSynth MIDI-висновку потрібно libfluidsynth." + +msgid "Entering fullscreen mode" +msgstr "Вхід у повноекранний режим" + +msgid "Don't show this message again" +msgstr "Більше не показувати це повідомлення" + +msgid "Don't exit" +msgstr "Не виходити" + +msgid "Reset" +msgstr "Перезавантажити" + +msgid "Don't reset" +msgstr "Не перезавантажувати" + +msgid "CD-ROM images" +msgstr "Образи CD-ROM" + +msgid "%hs Device Configuration" +msgstr "Конфігурація пристрою %hs" + +msgid "Monitor in sleep mode" +msgstr "Монітор у сплячому режимі" + +msgid "OpenGL Shaders" +msgstr "Шейдери OpenGL" + +msgid "OpenGL options" +msgstr "Параметри OpenGL" + +msgid "You are loading an unsupported configuration" +msgstr "Ви завантажуєте непідтримувану конфігурацію" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "Вибір типів ЦП для цієї системної плати на даній емульованій машині відключено.\n\nЦе дозволяє вибрати процесор, який в іншому випадку не сумісний з вибраною материнською платою. Однак, ви можете зіткнутися з несумісністю з BIOS материнської плати або іншим ПО.\n\nВключення цього параметра офіційно не підтримується, і всі подані звіти про помилки можуть бути закриті як недійсні." + +msgid "Continue" +msgstr "Продовжити" + +msgid "Cassette: %s" +msgstr "Касета: %s" + +msgid "Cassette images" +msgstr "Образи касет" + +msgid "Cartridge %i: %ls" +msgstr "Картидж %i: %ls" + +msgid "Cartridge images" +msgstr "Образи картриджів" + +msgid "Error initializing renderer" +msgstr "Помилка ініціалізації рендерера" + +msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." +msgstr "Неможливо ініціалізувати рендерер OpenGL (3.0). Будь ласка, використовуйте інший рендерер." + +msgid "Resume execution" +msgstr "Відновити виконання" + +msgid "Pause execution" +msgstr "Призупинити виконання" + +msgid "Press Ctrl+Alt+Del" +msgstr "Натиснути Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Натиснути Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Холодне перезавантаження" + +msgid "ACPI shutdown" +msgstr "Сигнал завершення ACPI" + +msgid "Hard disk (%s)" +msgstr "Жорсткий диск (%s)" + +msgid "%01i:%01i" +msgstr "%01i:%01i" + +msgid "%01i" +msgstr "%01i" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "MFM/RLL або ESDI дисководів CD-ROM ніколи не існувало" + +msgid "Custom..." +msgstr "Задати вручну..." + +msgid "Custom (large)..." +msgstr "Задати вручну (large)..." + +msgid "Add New Hard Disk" +msgstr "Створити новий жорсткий диск" + +msgid "Add Existing Hard Disk" +msgstr "Вибрати існуючий жорсткий диск" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "Розмір образів дисків HDI не може перевищувати 4 ГБ." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Розмір образів дисків не може перевищувати 127 ГБ." + +msgid "Hard disk images" +msgstr "Образи жорстких дисків" + +msgid "Unable to read file" +msgstr "Неможливо прочитати файл" + +msgid "Unable to write file" +msgstr "Неможливо записати файл" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "Образи HDI або HDX з розміром сектора, відмінним від 512, не підтримуються." + +msgid "USB is not yet supported" +msgstr "USB поки не підтримується" + +msgid "Disk image file already exists" +msgstr "Файл образу диска вже існує" + +msgid "Please specify a valid file name." +msgstr "Вкажіть правильне ім'я файлу." + +msgid "Disk image created" +msgstr "Образ диску створено" + +msgid "Make sure the file exists and is readable." +msgstr "Переконайтеся, що файл є доступним для читання." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Переконайтеся, що файл зберігається в каталогі, доступному для запису." + +msgid "Disk image too large" +msgstr "Занадто великий образ диска" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Не забудьте розмітити та відформатувати новостворений диск." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "Вибраний файл буде перезаписано. Ви впевнені, що хочете використовувати його?" + +msgid "Unsupported disk image" +msgstr "Образ диска, що не підтримується" + +msgid "Overwrite" +msgstr "Перезаписати" + +msgid "Don't overwrite" +msgstr "Не перезаписувати" + +msgid "Raw image (.img)" +msgstr "RAW образ (.img)" + +msgid "HDI image (.hdi)" +msgstr "Образ HDI (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "Образ HDX (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD фіксованого розміру (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD динамічного розміру (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "Диференційований образ VHD (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Великі блоки (2 МБ)" + +msgid "Small blocks (512 KB)" +msgstr "Маленькі блоки (512 КБ)" + +msgid "VHD files" +msgstr "Файли VHD" + +msgid "Select the parent VHD" +msgstr "Виберіть батьківський VHD" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Це може означати, що батьківський образ був змінений після того, як було створено диференційований образ.\n\nЦе також може статися, якщо файли зображення були переміщені або скопійовані, або через помилку в програмі, що створила цей диск.\n \nВи хочете виправити тимчасові позначки?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Тимчасові мітки батьківського та дочірнього дисків не співпадають" + +msgid "Could not fix VHD timestamp." +msgstr "Не вдалося виправити тимчасову позначку VHD." + +msgid "%01i:%02i" +msgstr "%01i:%02i" + +msgid "MFM/RLL" +msgstr "MFM/RLL" + +msgid "XTA" +msgstr "XTA" + +msgid "ESDI" +msgstr "ESDI" + +msgid "IDE" +msgstr "IDE" + +msgid "ATAPI" +msgstr "ATAPI" + +msgid "MFM/RLL (%01i:%01i)" +msgstr "MFM/RLL (%01i:%01i)" + +msgid "XTA (%01i:%01i)" +msgstr "XTA (%01i:%01i)" + +msgid "ESDI (%01i:%01i)" +msgstr "ESDI (%01i:%01i)" + +msgid "IDE (%01i:%01i)" +msgstr "IDE (%01i:%01i)" + +msgid "ATAPI (%01i:%01i)" +msgstr "ATAPI (%01i:%01i)" + +msgid "SCSI (%01i:%02i)" +msgstr "SCSI (%01i:%02i)" + +msgid "CD-ROM %i (%s): %s" +msgstr "CD-ROM %i (%s): %s" + +msgid "160 kB" +msgstr "160 кБ" + +msgid "180 kB" +msgstr "180 кБ" + +msgid "320 kB" +msgstr "320 кБ" + +msgid "360 kB" +msgstr "360 кБ" + +msgid "640 kB" +msgstr "640 кБ" + +msgid "720 kB" +msgstr "720 кБ" + +msgid "1.2 MB" +msgstr "1.2 МБ" + +msgid "1.25 MB" +msgstr "1.25 МБ" + +msgid "1.44 MB" +msgstr "1.44 МБ" + +msgid "DMF (cluster 1024)" +msgstr "DMF (кластер 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (кластер 2048)" + +msgid "2.88 MB" +msgstr "2.88 МБ" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128Mb M.O. (ISO 10090)" +msgstr "3.5\" 128Мб M.O. (ISO 10090)" + +msgid "3.5\" 230Mb M.O. (ISO 13963)" +msgstr "3.5\" 230Мб M.O. (ISO 13963)" + +msgid "3.5\" 540Mb M.O. (ISO 15498)" +msgstr "3.5\" 540Мб M.O. (ISO 15498)" + +msgid "3.5\" 640Mb M.O. (ISO 15498)" +msgstr "3.5\" 640Мб M.O. (ISO 15498)" + +msgid "3.5\" 1.3Gb M.O. (GigaMO)" +msgstr "3.5\" 1.3Гб M.O. (GigaMO)" + +msgid "3.5\" 2.3Gb M.O. (GigaMO 2)" +msgstr "3.5\" 2.3Гб M.O. (GigaMO 2)" + +msgid "5.25\" 600Mb M.O." +msgstr "5.25\" 600Мб M.O." + +msgid "5.25\" 650Mb M.O." +msgstr "5.25\" 650Мб M.O." + +msgid "5.25\" 1Gb M.O." +msgstr "5.25\" 1Гб M.O." + +msgid "5.25\" 1.3Gb M.O." +msgstr "5.25\" 1.3Гб M.O." + +msgid "Perfect RPM" +msgstr "Точний RPM" + +msgid "1%% below perfect RPM" +msgstr "На 1% повільніше точного RPM" + +msgid "1.5%% below perfect RPM" +msgstr "На 1.5% повільніше точного RPM" + +msgid "2%% below perfect RPM" +msgstr "На 2% повільніше точного RPM" + +msgid "(System Default)" +msgstr "(Системний)" + diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index b210ab69d..49edb6fe8 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -341,6 +341,7 @@ extern "C++" {0x0419, {"ru-RU", "Russian (Russia)"} }, {0x0424, {"sl-SI", "Slovenian (Slovenia)"} }, {0x041F, {"tr-TR", "Turkish (Turkey)"} }, + {0x0422, {"uk-UA", "Ukrainian (Ukraine)"} }, {0x0804, {"zh-CN", "Chinese (China)"} }, {0xFFFF, {"system", "(System Default)"} }, }; diff --git a/src/qt/qt_progsettings.ui b/src/qt/qt_progsettings.ui index 9944cd6c3..883a869ab 100644 --- a/src/qt/qt_progsettings.ui +++ b/src/qt/qt_progsettings.ui @@ -13,107 +13,106 @@ Preferences - - - - 20 - 190 - 341 - 32 - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - 10 - 30 - 351 - 25 - - - - false - - - - (Default) - + + + + + Qt::Vertical + + + + 20 + 40 + + + - - - - - 10 - 10 - 351 - 17 - - - - Icon set: - - - - - - 280 - 60 - 80 - 25 - - - - Default - - - - - - 10 - 90 - 351 - 16 - - - - Language: - - - - - - 280 - 140 - 80 - 23 - - - - Default - - - - - - 10 - 110 - 351 - 23 - - - - - (System Default) - + + + + + (System Default) + + + - + + + + Default + + + + + + + Language: + + + + + + + false + + + + (Default) + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Icon set: + + + + + + + Default + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + diff --git a/src/qt/qt_translations.qrc b/src/qt/qt_translations.qrc index a011726f5..1de212273 100644 --- a/src/qt/qt_translations.qrc +++ b/src/qt/qt_translations.qrc @@ -18,6 +18,7 @@ 86box_ru-RU.qm 86box_sl-SI.qm 86box_tr-TR.qm + 86box_uk-UA.qm 86box_zh-CN.qm From a1c0605cbe90e16fd5bd2477f50664002475cac2 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Wed, 2 Feb 2022 22:08:19 +0600 Subject: [PATCH 238/278] qt: Fix error strings --- src/qt/qt_platform.cpp | 3 ++- src/qt/qt_ui.cpp | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index b210ab69d..d6f3c0c6d 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -105,7 +105,8 @@ int strnicmp(const char *s1, const char *s2, size_t n) void do_stop(void) { - QCoreApplication::quit(); + cpu_thread_run = 0; + //main_window->close(); } void plat_get_exe_name(char *s, int size) diff --git a/src/qt/qt_ui.cpp b/src/qt/qt_ui.cpp index 00d0c53f0..d45fb889b 100644 --- a/src/qt/qt_ui.cpp +++ b/src/qt/qt_ui.cpp @@ -13,6 +13,7 @@ MainWindow* main_window = nullptr; extern "C" { #include <86box/plat.h> +#include <86box/ui.h> void plat_delay_ms(uint32_t count) @@ -58,8 +59,8 @@ int ui_msgbox_header(int flags, void *header, void* message) { if (header <= (void*)7168) header = plat_get_string((uintptr_t)header); if (message <= (void*)7168) message = plat_get_string((uintptr_t)message); - auto hdr = QString::fromWCharArray(reinterpret_cast(header)); - auto msg = QString::fromWCharArray(reinterpret_cast(message)); + auto hdr = (flags & MBX_ANSI) ? QString((char*)header) : QString::fromWCharArray(reinterpret_cast(header)); + auto msg = (flags & MBX_ANSI) ? QString((char*)message) : QString::fromWCharArray(reinterpret_cast(message)); // any error in early init if (main_window == nullptr) { From 97b2feaa271e625c272592be7f1385a349482c30 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 3 Feb 2022 16:55:32 +0600 Subject: [PATCH 239/278] Fix mouse input loss on heavy renderer frameskipping --- src/qt/qt_mainwindow.cpp | 4 ++-- src/qt/qt_softwarerenderer.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 1607c030f..8e6a5c371 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -122,7 +122,7 @@ MainWindow::MainWindow(QWidget *parent) : emit updateMenuResizeOptions(); - connect(this, &MainWindow::pollMouse, ui->stackedWidget, &RendererStack::mousePoll); + connect(this, &MainWindow::pollMouse, ui->stackedWidget, &RendererStack::mousePoll, Qt::DirectConnection); connect(this, &MainWindow::setMouseCapture, this, [this](bool state) { mouse_capture = state ? 1 : 0; @@ -1525,4 +1525,4 @@ void MainWindow::changeEvent(QEvent* event) } #endif QWidget::changeEvent(event); -} \ No newline at end of file +} diff --git a/src/qt/qt_softwarerenderer.cpp b/src/qt/qt_softwarerenderer.cpp index 3b7ccb2d6..6a935a7a5 100644 --- a/src/qt/qt_softwarerenderer.cpp +++ b/src/qt/qt_softwarerenderer.cpp @@ -69,4 +69,4 @@ std::vector> SoftwareRenderer::getBuffer buffers.push_back(std::make_tuple(images[1]->bits(), &buf_usage[1])); return buffers; -} \ No newline at end of file +} From c4256254095a7984d9a9791292748e8afe70e339 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 3 Feb 2022 23:00:39 +0600 Subject: [PATCH 240/278] qt: File field is now an actual text field --- src/qt/qt_filefield.cpp | 2 ++ src/qt/qt_filefield.ui | 10 +++------- src/qt/qt_harddiskdialog.cpp | 4 +++- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/qt/qt_filefield.cpp b/src/qt/qt_filefield.cpp index c99fc4cff..fbeed6066 100644 --- a/src/qt/qt_filefield.cpp +++ b/src/qt/qt_filefield.cpp @@ -8,6 +8,8 @@ FileField::FileField(QWidget *parent) : ui(new Ui::FileField) { ui->setupUi(this); + + connect(ui->label, &QLineEdit::editingFinished, this, [this] () { emit fileSelected(ui->label->text()); }); } FileField::~FileField() diff --git a/src/qt/qt_filefield.ui b/src/qt/qt_filefield.ui index 462de5970..14c58349b 100644 --- a/src/qt/qt_filefield.ui +++ b/src/qt/qt_filefield.ui @@ -6,8 +6,8 @@ 0 0 - 400 - 300 + 354 + 43 @@ -27,11 +27,7 @@ 0 - - - - - + diff --git a/src/qt/qt_harddiskdialog.cpp b/src/qt/qt_harddiskdialog.cpp index 8c7e8ae27..6a3ba6207 100644 --- a/src/qt/qt_harddiskdialog.cpp +++ b/src/qt/qt_harddiskdialog.cpp @@ -83,7 +83,7 @@ HarddiskDialog::HarddiskDialog(bool existing, QWidget *parent) : ui->lineEditSize->setValidator(new QIntValidator()); ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); - connect(ui->fileField, &FileField::fileSelected, this, [this] { + if (!existing) connect(ui->fileField, &FileField::fileSelected, this, [this] { ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); }); } @@ -459,6 +459,7 @@ void HarddiskDialog::onExistingFileSelected(const QString &fileName) { uint32_t cylinders = 0; int vhd_error = 0; + ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); QFile file(fileName); if (! file.open(QIODevice::ReadOnly)) { QMessageBox::critical(this, tr("Unable to read file"), tr("Make sure the file exists and is readable.")); @@ -553,6 +554,7 @@ void HarddiskDialog::onExistingFileSelected(const QString &fileName) { ui->lineEditSectors->setEnabled(true); ui->lineEditSize->setEnabled(true); ui->comboBoxType->setEnabled(true); + ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); } void HarddiskDialog::recalcSize() { From 186e461c83e4867dcc2173f573ca5aa919e6fbd1 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 3 Feb 2022 23:02:25 +0600 Subject: [PATCH 241/278] Remove bus tracking logging --- src/qt/qt_settings_bus_tracking.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/qt/qt_settings_bus_tracking.cpp b/src/qt/qt_settings_bus_tracking.cpp index e7e3c7a36..3744c10c7 100644 --- a/src/qt/qt_settings_bus_tracking.cpp +++ b/src/qt/qt_settings_bus_tracking.cpp @@ -203,7 +203,6 @@ SettingsBusTracking::device_track(int set, uint8_t dev_type, int bus, int channe int i, element; uint64_t mask; uint8_t count = 0; - fprintf(stderr, "set: %d, dev_type: %hd, bus: %d, channel: %d\n", set, dev_type, bus, channel); switch (bus) { case HDD_BUS_MFM: From 038082e2dcf599b492a701b14aa35589f6efe2dc Mon Sep 17 00:00:00 2001 From: dob205 <> Date: Thu, 3 Feb 2022 22:30:42 +0200 Subject: [PATCH 242/278] qt: macos bundling improvements --- src/CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5cb90b61c..a502b602f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -220,6 +220,8 @@ if(APPLE) else() install_qt5_plugin("Qt5::QCocoaIntegrationPlugin" QT_PLUGINS ${prefix}) install_qt5_plugin("Qt5::QMacStylePlugin" QT_PLUGINS ${prefix}) + install_qt5_plugin("Qt5::QICOPlugin" QT_PLUGINS ${prefix}) + install_qt5_plugin("Qt5::QICNSPlugin" QT_PLUGINS ${prefix}) endif() file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/qt.conf" @@ -251,9 +253,10 @@ if(APPLE) install(CODE "include(BundleUtilities) fixup_bundle(\"${APPS}\" \"${QT_PLUGINS}\" \"${DIRS}\")") - endif() + endif() endif() + # Install our dependencies if using vcpkg if(VCPKG_TOOLCHAIN) x_vcpkg_install_local_dependencies(TARGETS 86Box DESTINATION ".") From ff437835bb2c762ac9219604bb2f76cade7f9a0f Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 4 Feb 2022 15:19:18 +0600 Subject: [PATCH 243/278] Enable minitrace support --- src/minitrace/minitrace.c | 38 ++++++++++++++++---- src/qt/qt_mainwindow.cpp | 67 ++++++++++++++++++++++++++++++++++++ src/qt/qt_newfloppydialog.ui | 62 ++++++++++++++++----------------- src/qt/qt_progsettings.hpp | 3 ++ 4 files changed, 132 insertions(+), 38 deletions(-) diff --git a/src/minitrace/minitrace.c b/src/minitrace/minitrace.c index 11cae6b9a..32d2ebcae 100644 --- a/src/minitrace/minitrace.c +++ b/src/minitrace/minitrace.c @@ -30,6 +30,7 @@ #include #include #include +#include #endif #include @@ -66,8 +67,8 @@ typedef struct raw_event { static raw_event_t *event_buffer; static raw_event_t *flush_buffer; static volatile int event_count; -static __attribute__ ((aligned (32))) volatile long is_tracing = FALSE; -static __attribute__ ((aligned (32))) volatile long stop_flushing_requested = FALSE; +static __attribute__ ((aligned (32))) atomic_long is_tracing = FALSE; +static __attribute__ ((aligned (32))) atomic_long stop_flushing_requested = FALSE; static int is_flushing = FALSE; static int events_in_progress = 0; static int64_t time_offset; @@ -93,8 +94,6 @@ void mtr_flush_with_state(int); // mtr_time_s() // pthread basics #ifdef _WIN32 -#define atomic_load(a) InterlockedOr((a), 0) -#define atomic_store(a, b) InterlockedExchange((a), b) static int get_cur_thread_id() { return (int)GetCurrentThreadId(); @@ -162,6 +161,31 @@ static inline int get_cur_process_id() { return (int)getpid(); } +static pthread_t thread_handle = 0; +static void* thread_flush_proc(void* param) { + while(1) { + mtr_flush_with_state(0); + if(atomic_load(&stop_flushing_requested)) { + break; + } + } + return 0; +} +static void init_flushing_thread(void) { + pthread_mutex_lock(&mutex); + is_flushing = FALSE; + pthread_mutex_unlock(&mutex); + if (pthread_create(&thread_handle, NULL, thread_flush_proc, NULL) != 0) + { + thread_handle = 0; + } +} + +static void join_flushing_thread(void) { + if (thread_handle) pthread_join(thread_handle, NULL); + thread_handle = 0; +} + #if defined(BLACKBERRY) double mtr_time_s() { struct timespec time; @@ -269,9 +293,9 @@ void mtr_start() { #ifndef MTR_ENABLED return; #endif - pthread_cond_init(&buffer_not_full_cond); - pthread_cond_init(&buffer_full_cond); - atomic_store(&is_tracing, TRUE); + pthread_cond_init(&buffer_not_full_cond, NULL); + pthread_cond_init(&buffer_full_cond, NULL); + atomic_store(&is_tracing, TRUE); init_flushing_thread(); } diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 8e6a5c371..6d017dc7a 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -17,6 +17,10 @@ extern "C" { #include <86box/video.h> #include <86box/vid_ega.h> #include <86box/version.h> + +#ifdef MTR_ENABLED +#include +#endif }; #include @@ -338,6 +342,63 @@ MainWindow::MainWindow(QWidget *parent) : } }); } + +#ifdef MTR_ENABLED + { + ui->menuTools->addSeparator(); + static auto actionBegin_trace = ui->menuTools->addAction(tr("Begin trace")); + static auto actionEnd_trace = ui->menuTools->addAction(tr("End trace")); + actionBegin_trace->setShortcut(QKeySequence(Qt::Key_Control + Qt::Key_T)); + actionEnd_trace->setShortcut(QKeySequence(Qt::Key_Control + Qt::Key_T)); + actionEnd_trace->setDisabled(true); + static auto init_trace = [&] + { + mtr_init("trace.json"); + mtr_start(); + }; + static auto shutdown_trace = [&] + { + mtr_stop(); + mtr_shutdown(); + }; +#ifdef Q_OS_MACOS + actionBegin_trace->setShortcutVisibleInContextMenu(true); + actionEnd_trace->setShortcutVisibleInContextMenu(true); +#endif + static bool trace = false; + connect(actionBegin_trace, &QAction::triggered, this, [this] + { + if (trace) return; + actionBegin_trace->setDisabled(true); + actionEnd_trace->setDisabled(false); + init_trace(); + trace = true; + }); + connect(actionEnd_trace, &QAction::triggered, this, [this] + { + if (!trace) return; + actionBegin_trace->setDisabled(false); + actionEnd_trace->setDisabled(true); + shutdown_trace(); + trace = false; + }); + } +#endif + +#ifdef ENABLE_VRAM_DUMP + { +#ifndef MTR_ENABLED + ui->menuTools->addSeparator(); +#endif + auto actionDump_video_RAM = ui->menuTools->addAction(tr("Dump &video RAM")); + actionDump_video_RAM->setShortcut(QKeySequence(Qt::Key_Control + Qt::Key_F1)); +#ifdef Q_OS_MACOS + actionDump_video_RAM->setShortcutVisibleInContextMenu(true); +#endif + connect(actionDump_video_RAM, &QAction::triggered, this, [this] + { svga_dump_vram(); }); + } +#endif } void MainWindow::closeEvent(QCloseEvent *event) { @@ -1068,6 +1129,12 @@ bool MainWindow::eventFilter(QObject* receiver, QEvent* event) } } + if (receiver == this) + { + static auto curdopause = dopause; + if (event->type() == QEvent::WindowBlocked) { curdopause = dopause; plat_pause(1); } + else if (event->type() == QEvent::WindowUnblocked) { plat_pause(curdopause); } + } return QMainWindow::eventFilter(receiver, event); } diff --git a/src/qt/qt_newfloppydialog.ui b/src/qt/qt_newfloppydialog.ui index e016f3a9b..c9e744845 100644 --- a/src/qt/qt_newfloppydialog.ui +++ b/src/qt/qt_newfloppydialog.ui @@ -13,11 +13,38 @@ New Image - - + + + + + File name: + + + + + + + + + + Disk size: + + + + - + + + + RPM mode: + + + + + + + Qt::Vertical @@ -30,7 +57,7 @@ - + Qt::Horizontal @@ -40,33 +67,6 @@ - - - - File name: - - - - - - - Disk size: - - - - - - - - - - RPM mode: - - - - - - diff --git a/src/qt/qt_progsettings.hpp b/src/qt/qt_progsettings.hpp index a21fe9203..39b3e6819 100644 --- a/src/qt/qt_progsettings.hpp +++ b/src/qt/qt_progsettings.hpp @@ -30,6 +30,9 @@ public: if (strcmp(sourceText, "&Fullscreen") == 0) sourceText = "&Fullscreen\tCtrl+Alt+PageUP"; if (strcmp(sourceText, "&Ctrl+Alt+Del") == 0) sourceText = "&Ctrl+Alt+Del\tCtrl+F12"; if (strcmp(sourceText, "Take s&creenshot") == 0) sourceText = "Take s&creenshot\tCtrl+F11"; + if (strcmp(sourceText, "Begin trace") == 0) sourceText = "Begin trace\tCtrl+T"; + if (strcmp(sourceText, "End trace") == 0) sourceText = "End trace\tCtrl+T"; + if (strcmp(sourceText, "Dump &video RAM") == 0) sourceText = "Dump &video RAM\tCtrl+F1"; if (strcmp(sourceText, "&Qt (Software)") == 0) { QString finalstr = QTranslator::translate("", "&SDL (Software)", disambiguation, n); From 62a9b9c2b1f063313e61b861620304dc0c5d6e27 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 4 Feb 2022 15:27:53 +0600 Subject: [PATCH 244/278] Load Qt's translations from application directory --- src/qt/qt_progsettings.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_progsettings.cpp b/src/qt/qt_progsettings.cpp index 47414a2a5..1716c4cda 100644 --- a/src/qt/qt_progsettings.cpp +++ b/src/qt/qt_progsettings.cpp @@ -149,7 +149,8 @@ void ProgSettings::loadTranslators(QObject *parent) { qDebug() << "Translations loaded.\n"; QCoreApplication::installTranslator(translator); - qtTranslator->load(QLatin1String("qtbase_") + localetofilename.replace('-', '_'), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + if (!qtTranslator->load(QLatin1String("qtbase_") + localetofilename.replace('-', '_'), QLibraryInfo::location(QLibraryInfo::TranslationsPath))) + qtTranslator->load(QLatin1String("qtbase_") + localetofilename.replace('-', '_'), QApplication::applicationDirPath() + "/./translations/"); if (QApplication::installTranslator(qtTranslator)) { qDebug() << "Qt translations loaded." << "\n"; @@ -162,7 +163,8 @@ void ProgSettings::loadTranslators(QObject *parent) { translator->load(QLatin1String("86box_") + lcid_langcode[lang_id].first, QLatin1String(":/")); QCoreApplication::installTranslator(translator); - qtTranslator->load(QLatin1String("qtbase_") + QString(lcid_langcode[lang_id].first).replace('-', '_'), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); + if (!qtTranslator->load(QLatin1String("qtbase_") + QString(lcid_langcode[lang_id].first).replace('-', '_'), QLibraryInfo::location(QLibraryInfo::TranslationsPath))) + qtTranslator->load(QLatin1String("qtbase_") + QString(lcid_langcode[lang_id].first).replace('-', '_'), QApplication::applicationDirPath() + "/./translations/"); QCoreApplication::installTranslator(qtTranslator); } } From afe83cc568d14684e5e40542f422035eb1406dbf Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Fri, 4 Feb 2022 17:07:44 +0500 Subject: [PATCH 245/278] Add a Windows resource file to use with Qt --- src/qt/CMakeLists.txt | 16 ++++++ src/win/86Box-qt.rc | 123 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 139 insertions(+) create mode 100644 src/win/86Box-qt.rc diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index a1425b2f0..87011f1e2 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -114,6 +114,22 @@ add_library(ui STATIC ../qt_resources.qrc ) + +if(WIN32) + enable_language(RC) + target_sources(86Box PUBLIC ../win/86Box-qt.rc) + + # CMake 3.22 messed this up for clang/clang++ + # See https://gitlab.kitware.com/cmake/cmake/-/issues/22611 + if(MSVC OR (NOT MINGW AND CMAKE_VERSION VERSION_GREATER_EQUAL 3.22)) + # MSVC linker adds its own manifest to the executable, which fails if + # we include ours in 86Box.rc. We therefore need to pass the manifest + # directly as as a source file, so the linker can use that instead. + set_property(SOURCE ../win/86Box-qt.rc PROPERTY COMPILE_DEFINITIONS NO_INCLUDE_MANIFEST) + target_sources(86Box PRIVATE ../win/86Box.manifest) + endif() +endif() + if(WIN32 AND NOT MINGW) target_sources(plat PRIVATE ../win/win_opendir.c) endif() diff --git a/src/win/86Box-qt.rc b/src/win/86Box-qt.rc new file mode 100644 index 000000000..0d4d8158f --- /dev/null +++ b/src/win/86Box-qt.rc @@ -0,0 +1,123 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Application resource script for Windows. + * + * Authors: Miran Grca, + * Fred N. van Kempen, + * David Hrdlička, + * + * Copyright 2016-2019 Miran Grca. + * Copyright 2018,2019 David Hrdlička. + * Copyright 2021 Laci bá' + */ +#define IN_RESOURCE_H +#include <86box/version.h> +#undef IN_RESOURCE_H + +#define APSTUDIO_READONLY_SYMBOLS +#define APSTUDIO_HIDDEN_SYMBOLS +#include +#undef APSTUDIO_HIDDEN_SYMBOLS +#undef APSTUDIO_READONLY_SYMBOLS + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) + +#ifndef NO_INCLUDE_MANIFEST +///////////////////////////////////////////////////////////////////////////// +// +// 24 +// + +1 24 MOVEABLE PURE "86Box.manifest" +#endif + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +#ifdef CMAKE +#define ICON_PATH +#else +#define ICON_PATH "win/" +#endif + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +// defining the icons depending on the build status +#ifdef RELEASE_BUILD +/* Icon by OBattler and laciba96 (green for release builds)*/ + 10 ICON DISCARDABLE ICON_PATH "icons/86Box-green.ico" +#elif BETA_BUILD +/* Icon by OBattler and laciba96 (yellow for beta builds done by Jenkins)*/ + 10 ICON DISCARDABLE ICON_PATH "icons/86Box-yellow.ico" +#elif ALPHA_BUILD +/* Icon by OBattler and laciba96 (red for alpha builds done by Jenkins)*/ + 10 ICON DISCARDABLE ICON_PATH "icons/86Box-red.ico" +#else +/* Icon by OBattler and laciba96 (gray for builds of branches and from the git master)*/ + 10 ICON DISCARDABLE ICON_PATH "icons/86Box-gray.ico" +#endif + + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION EMU_VERSION_MAJ,EMU_VERSION_MIN,EMU_VERSION_PATCH,EMU_BUILD_NUM + PRODUCTVERSION EMU_VERSION_MAJ,EMU_VERSION_MIN,EMU_VERSION_PATCH,EMU_BUILD_NUM + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", EMU_NAME "\0" + VALUE "FileDescription", EMU_NAME "\0" + VALUE "FileVersion", EMU_VERSION "\0" + VALUE "InternalName", EMU_NAME "\0" + VALUE "LegalCopyright", "Copyright \xa9 2007-" COPYRIGHT_YEAR " " EMU_NAME " contributors\0" + VALUE "OriginalFilename", EMU_NAME ".exe\0" + VALUE "ProductName", EMU_NAME "\0" + VALUE "ProductVersion", EMU_VERSION "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // !_MAC + +#endif + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED From 67cce8d196339101ea70de8bca0e1275b6907866 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 5 Feb 2022 01:35:26 +0600 Subject: [PATCH 246/278] * Remove unused VRAM dump option * Only emit fileSelected signal if the user didn't cancel file selection * Don't unmount emulator images if the user cancelled file selection --- src/qt/qt_filefield.cpp | 8 +++++--- src/qt/qt_mainwindow.cpp | 15 --------------- src/qt/qt_mediamenu.cpp | 15 ++++++++------- 3 files changed, 13 insertions(+), 25 deletions(-) diff --git a/src/qt/qt_filefield.cpp b/src/qt/qt_filefield.cpp index fbeed6066..2d7268d97 100644 --- a/src/qt/qt_filefield.cpp +++ b/src/qt/qt_filefield.cpp @@ -30,7 +30,9 @@ void FileField::on_pushButton_clicked() { fileName = QFileDialog::getOpenFileName(this, QString(), QString(), filter_, &selectedFilter_); } - fileName_ = fileName; - ui->label->setText(fileName); - emit fileSelected(fileName); + if (!fileName.isNull()) { + fileName_ = fileName; + ui->label->setText(fileName); + emit fileSelected(fileName); + } } diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 6d017dc7a..4ac507f03 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -384,21 +384,6 @@ MainWindow::MainWindow(QWidget *parent) : }); } #endif - -#ifdef ENABLE_VRAM_DUMP - { -#ifndef MTR_ENABLED - ui->menuTools->addSeparator(); -#endif - auto actionDump_video_RAM = ui->menuTools->addAction(tr("Dump &video RAM")); - actionDump_video_RAM->setShortcut(QKeySequence(Qt::Key_Control + Qt::Key_F1)); -#ifdef Q_OS_MACOS - actionDump_video_RAM->setShortcutVisibleInContextMenu(true); -#endif - connect(actionDump_video_RAM, &QAction::triggered, this, [this] - { svga_dump_vram(); }); - } -#endif } void MainWindow::closeEvent(QCloseEvent *event) { diff --git a/src/qt/qt_mediamenu.cpp b/src/qt/qt_mediamenu.cpp index ff1f1398c..2aabe04a8 100644 --- a/src/qt/qt_mediamenu.cpp +++ b/src/qt/qt_mediamenu.cpp @@ -143,7 +143,10 @@ void MediaMenu::cassetteNewImage() { if (fileinfo.suffix().isEmpty()) { filename.append(".cas"); } - cassetteMount(filename, false); + if (!filename.isNull()) { + if (filename.isEmpty()) cassetteEject(); + else cassetteMount(filename, false); + } } void MediaMenu::cassetteSelectImage(bool wp) { @@ -155,7 +158,7 @@ void MediaMenu::cassetteSelectImage(bool wp) { tr("All files") % util::DlgFilter({ "*" }, true)); - cassetteMount(filename, wp); + if (!filename.isEmpty()) cassetteMount(filename, wp); } void MediaMenu::cassetteMount(const QString& filename, bool wp) { @@ -276,7 +279,7 @@ void MediaMenu::floppySelectImage(int i, bool wp) { tr("All files") % util::DlgFilter({ "*" }, true)); - floppyMount(i, filename, wp); + if (!filename.isEmpty()) floppyMount(i, filename, wp); } void MediaMenu::floppyMount(int i, const QString &filename, bool wp) { @@ -349,8 +352,6 @@ void MediaMenu::cdromMount(int i) { util::DlgFilter({ "*" }, true)); if (filename.isEmpty()) { - auto* imageMenu = dynamic_cast(cdromMenus[i]->children()[cdromImagePos]); - imageMenu->setChecked(false); return; } QByteArray fn = filename.toUtf8().data(); @@ -439,7 +440,7 @@ void MediaMenu::zipSelectImage(int i, bool wp) { tr("All files") % util::DlgFilter({ "*" }, true)); - zipMount(i, filename, wp); + if (!filename.isEmpty()) zipMount(i, filename, wp); } void MediaMenu::zipMount(int i, const QString &filename, bool wp) { @@ -536,7 +537,7 @@ void MediaMenu::moSelectImage(int i, bool wp) { tr("All files") % util::DlgFilter({ "*", }, true)); - moMount(i, filename, wp); + if (!filename.isEmpty()) moMount(i, filename, wp); } void MediaMenu::moMount(int i, const QString &filename, bool wp) { From 54853c2d624993a3f41934364d19c5c9fb628529 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 5 Feb 2022 01:43:12 +0600 Subject: [PATCH 247/278] Fix for capture on closing/double-clicking at selection on file dialogs By lemondrops --- src/qt/qt_rendererstack.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index d11b4a0b5..db19e6a7d 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -86,29 +86,33 @@ void RendererStack::mousePoll() #endif } -int ignoreNextMouseEvent = 1; +static int ignoreNextMouseEvent = 1, isButtonDown = 0; void RendererStack::mouseReleaseEvent(QMouseEvent *event) { - if (this->geometry().contains(event->pos()) && event->button() == Qt::LeftButton && !mouse_capture) + if (this->geometry().contains(event->pos()) && event->button() == Qt::LeftButton && !mouse_capture && (isButtonDown & 1)) { plat_mouse_capture(1); this->setCursor(Qt::BlankCursor); if (!ignoreNextMouseEvent) ignoreNextMouseEvent++; // Avoid jumping cursor when moved. + isButtonDown &= ~1; return; } if (mouse_capture && event->button() == Qt::MiddleButton && mouse_get_buttons() < 3) { plat_mouse_capture(0); this->setCursor(Qt::ArrowCursor); + isButtonDown &= ~1; return; } if (mouse_capture) { mousedata.mousebuttons &= ~event->button(); } + isButtonDown &= ~1; } void RendererStack::mousePressEvent(QMouseEvent *event) { + isButtonDown |= 1; if (mouse_capture) { mousedata.mousebuttons |= event->button(); From 633ad83bb2c6cf5d6d6004d94ccc391e8c64e42c Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 5 Feb 2022 01:46:55 +0600 Subject: [PATCH 248/278] qt: Fix type displays in hard disk dialog --- src/qt/qt_harddiskdialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_harddiskdialog.cpp b/src/qt/qt_harddiskdialog.cpp index 6a3ba6207..5fc8dc9ba 100644 --- a/src/qt/qt_harddiskdialog.cpp +++ b/src/qt/qt_harddiskdialog.cpp @@ -75,7 +75,7 @@ HarddiskDialog::HarddiskDialog(bool existing, QWidget *parent) : uint64_t size = ((uint64_t) hdd_table[i][0]) * hdd_table[i][1] * hdd_table[i][2]; uint64_t size_mb = size >> 11LL; //QString text = QString("%1 MiB (CHS: %2, %3, %4)").arg(size_mb).arg(hdd_table[i][0]).arg(hdd_table[i][1]).arg(hdd_table[i][2]); - QString text = QString::asprintf(tr("%u MB (CHS: %i, %i, %i)").toUtf8().constData(), (size_mb), (hdd_table[i][0]), (hdd_table[i][1]), (hdd_table[i][2])); + QString text = QString::asprintf(tr("%llu MB (CHS: %i, %i, %i)").toUtf8().constData(), (size_mb), (hdd_table[i][0]), (hdd_table[i][1]), (hdd_table[i][2])); Models::AddEntry(model, text, i); } Models::AddEntry(model, tr("Custom..."), 127); From ecc11f09d4162df10c2b1daf27d9421581fdbfc1 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sat, 5 Feb 2022 00:59:46 +0500 Subject: [PATCH 249/278] Fix incorrect CHS values displayed in the new hard disk dialog dropdown --- src/qt/qt_harddiskdialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_harddiskdialog.cpp b/src/qt/qt_harddiskdialog.cpp index 6a3ba6207..288c4b0d8 100644 --- a/src/qt/qt_harddiskdialog.cpp +++ b/src/qt/qt_harddiskdialog.cpp @@ -73,7 +73,7 @@ HarddiskDialog::HarddiskDialog(bool existing, QWidget *parent) : model = ui->comboBoxType->model(); for (int i = 0; i < 127; i++) { uint64_t size = ((uint64_t) hdd_table[i][0]) * hdd_table[i][1] * hdd_table[i][2]; - uint64_t size_mb = size >> 11LL; + uint32_t size_mb = size >> 11LL; //QString text = QString("%1 MiB (CHS: %2, %3, %4)").arg(size_mb).arg(hdd_table[i][0]).arg(hdd_table[i][1]).arg(hdd_table[i][2]); QString text = QString::asprintf(tr("%u MB (CHS: %i, %i, %i)").toUtf8().constData(), (size_mb), (hdd_table[i][0]), (hdd_table[i][1]), (hdd_table[i][2])); Models::AddEntry(model, text, i); From 45520768ba2230fe054cb3eb069c143f5e8b9459 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sat, 5 Feb 2022 01:01:06 +0500 Subject: [PATCH 250/278] Fix unsolicited mouse captures after a double-click in an file selection dialog --- src/qt/qt_rendererstack.cpp | 6 +++++- src/qt/qt_rendererstack.hpp | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index d11b4a0b5..689721310 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -89,26 +89,30 @@ void RendererStack::mousePoll() int ignoreNextMouseEvent = 1; void RendererStack::mouseReleaseEvent(QMouseEvent *event) { - if (this->geometry().contains(event->pos()) && event->button() == Qt::LeftButton && !mouse_capture) + if (this->geometry().contains(event->pos()) && event->button() == Qt::LeftButton && !mouse_capture && (isMouseDown & 1)) { plat_mouse_capture(1); this->setCursor(Qt::BlankCursor); if (!ignoreNextMouseEvent) ignoreNextMouseEvent++; // Avoid jumping cursor when moved. + isMouseDown &= ~1; return; } if (mouse_capture && event->button() == Qt::MiddleButton && mouse_get_buttons() < 3) { plat_mouse_capture(0); this->setCursor(Qt::ArrowCursor); + isMouseDown &= ~1; return; } if (mouse_capture) { mousedata.mousebuttons &= ~event->button(); } + isMouseDown &= ~1; } void RendererStack::mousePressEvent(QMouseEvent *event) { + isMouseDown |= 1; if (mouse_capture) { mousedata.mousebuttons |= event->button(); diff --git a/src/qt/qt_rendererstack.hpp b/src/qt/qt_rendererstack.hpp index 46c004c0f..9bff340f0 100644 --- a/src/qt/qt_rendererstack.hpp +++ b/src/qt/qt_rendererstack.hpp @@ -64,6 +64,7 @@ private: int x, y, w, h, sx, sy, sw, sh; int currentBuf = 0; + int isMouseDown = 0; std::vector> imagebufs; std::unique_ptr current; From eb451aaaf4bf62ad315c3be47ddd62128624b3d4 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Sat, 5 Feb 2022 01:02:55 +0500 Subject: [PATCH 251/278] Get rid of 0x CD-ROM speed option --- src/qt/qt_settingsfloppycdrom.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/qt/qt_settingsfloppycdrom.cpp b/src/qt/qt_settingsfloppycdrom.cpp index 6253cb739..0f4ede800 100644 --- a/src/qt/qt_settingsfloppycdrom.cpp +++ b/src/qt/qt_settingsfloppycdrom.cpp @@ -97,8 +97,8 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent) : Harddrives::populateRemovableBuses(ui->comboBoxBus->model()); model = ui->comboBoxSpeed->model(); - for (int i = 0; i <= 72; i++) { - Models::AddEntry(model, QString("%1x").arg(i), i); + for (int i = 0; i < 72; i++) { + Models::AddEntry(model, QString("%1x").arg(i + 1), i + 1); } model = new QStandardItemModel(0, 2, this); @@ -174,7 +174,7 @@ void SettingsFloppyCDROM::onCDROMRowChanged(const QModelIndex ¤t) { ui->comboBoxChannel->setCurrentIndex(match.first().row()); } else ui->comboBoxChannel->setCurrentIndex(8); - ui->comboBoxSpeed->setCurrentIndex(speed); + ui->comboBoxSpeed->setCurrentIndex(speed - 1); } void SettingsFloppyCDROM::on_checkBoxTurboTimings_stateChanged(int arg1) { @@ -205,7 +205,7 @@ void SettingsFloppyCDROM::on_comboBoxBus_currentIndexChanged(int index) { void SettingsFloppyCDROM::on_comboBoxSpeed_activated(int index) { auto idx = ui->tableViewCDROM->selectionModel()->currentIndex(); - setCDROMSpeed(ui->tableViewCDROM->model(), idx.siblingAtColumn(1), index); + setCDROMSpeed(ui->tableViewCDROM->model(), idx.siblingAtColumn(1), index + 1); } From 85a11813d66210c03b972c89e868bdca2bae1c3c Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 5 Feb 2022 02:04:32 +0600 Subject: [PATCH 252/278] Fix crashes on language settings changes --- src/qt/qt_mainwindow.cpp | 36 +++++++++++++++++++----------------- src/qt/qt_mainwindow.ui | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 18 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 4ac507f03..844edec63 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -104,10 +104,12 @@ MainWindow::MainWindow(QWidget *parent) : { /* get the percentage and mouse message, TODO: refactor ui_window_title() */ auto parts = title.split(" - "); - if (parts.size() < 5) - toolbar_label->setText(parts[1]); - else - toolbar_label->setText(QString("%1 - %2").arg(parts[1], parts.last())); + if (parts.size() >= 2) { + if (parts.size() < 5) + toolbar_label->setText(parts[1]); + else + toolbar_label->setText(QString("%1 - %2").arg(parts[1], parts.last())); + } } #endif ui->actionPause->setChecked(dopause); @@ -346,11 +348,11 @@ MainWindow::MainWindow(QWidget *parent) : #ifdef MTR_ENABLED { ui->menuTools->addSeparator(); - static auto actionBegin_trace = ui->menuTools->addAction(tr("Begin trace")); - static auto actionEnd_trace = ui->menuTools->addAction(tr("End trace")); - actionBegin_trace->setShortcut(QKeySequence(Qt::Key_Control + Qt::Key_T)); - actionEnd_trace->setShortcut(QKeySequence(Qt::Key_Control + Qt::Key_T)); - actionEnd_trace->setDisabled(true); + ui->actionBegin_trace->setVisible(true); + ui->actionEnd_trace->setVisible(true); + ui->actionBegin_trace->setShortcut(QKeySequence(Qt::Key_Control + Qt::Key_T)); + ui->actionEnd_trace->setShortcut(QKeySequence(Qt::Key_Control + Qt::Key_T)); + ui->actionEnd_trace->setDisabled(true); static auto init_trace = [&] { mtr_init("trace.json"); @@ -362,23 +364,23 @@ MainWindow::MainWindow(QWidget *parent) : mtr_shutdown(); }; #ifdef Q_OS_MACOS - actionBegin_trace->setShortcutVisibleInContextMenu(true); - actionEnd_trace->setShortcutVisibleInContextMenu(true); + ui->actionBegin_trace->setShortcutVisibleInContextMenu(true); + ui->actionEnd_trace->setShortcutVisibleInContextMenu(true); #endif static bool trace = false; - connect(actionBegin_trace, &QAction::triggered, this, [this] + connect(ui->actionBegin_trace, &QAction::triggered, this, [this] { if (trace) return; - actionBegin_trace->setDisabled(true); - actionEnd_trace->setDisabled(false); + ui->actionBegin_trace->setDisabled(true); + ui->actionEnd_trace->setDisabled(false); init_trace(); trace = true; }); - connect(actionEnd_trace, &QAction::triggered, this, [this] + connect(ui->actionEnd_trace, &QAction::triggered, this, [this] { if (!trace) return; - actionBegin_trace->setDisabled(false); - actionEnd_trace->setDisabled(true); + ui->actionBegin_trace->setDisabled(false); + ui->actionEnd_trace->setDisabled(true); shutdown_trace(); trace = false; }); diff --git a/src/qt/qt_mainwindow.ui b/src/qt/qt_mainwindow.ui index d7ffb8589..787112399 100644 --- a/src/qt/qt_mainwindow.ui +++ b/src/qt/qt_mainwindow.ui @@ -47,7 +47,7 @@ 0 0 724 - 21 + 22 @@ -79,6 +79,9 @@ + + + @@ -666,6 +669,34 @@ ACPI Shutdown + + + Begin trace + + + Ctrl+T + + + false + + + false + + + + + End trace + + + Ctrl+T + + + false + + + false + + From 2986bfa4a8afdd4549b0f25ce119cfaba44059ca Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 5 Feb 2022 02:21:54 +0600 Subject: [PATCH 253/278] Revert "qt: Fix type displays in hard disk dialog" This reverts commit 633ad83bb2c6cf5d6d6004d94ccc391e8c64e42c. --- src/qt/qt_harddiskdialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_harddiskdialog.cpp b/src/qt/qt_harddiskdialog.cpp index 5fc8dc9ba..6a3ba6207 100644 --- a/src/qt/qt_harddiskdialog.cpp +++ b/src/qt/qt_harddiskdialog.cpp @@ -75,7 +75,7 @@ HarddiskDialog::HarddiskDialog(bool existing, QWidget *parent) : uint64_t size = ((uint64_t) hdd_table[i][0]) * hdd_table[i][1] * hdd_table[i][2]; uint64_t size_mb = size >> 11LL; //QString text = QString("%1 MiB (CHS: %2, %3, %4)").arg(size_mb).arg(hdd_table[i][0]).arg(hdd_table[i][1]).arg(hdd_table[i][2]); - QString text = QString::asprintf(tr("%llu MB (CHS: %i, %i, %i)").toUtf8().constData(), (size_mb), (hdd_table[i][0]), (hdd_table[i][1]), (hdd_table[i][2])); + QString text = QString::asprintf(tr("%u MB (CHS: %i, %i, %i)").toUtf8().constData(), (size_mb), (hdd_table[i][0]), (hdd_table[i][1]), (hdd_table[i][2])); Models::AddEntry(model, text, i); } Models::AddEntry(model, tr("Custom..."), 127); From dd2fb22e413f4a6f992341c1b6235bbfd83ccae1 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 5 Feb 2022 02:23:55 +0600 Subject: [PATCH 254/278] Revert "Fix for capture on closing/double-clicking at selection on file dialogs" This reverts commit 54853c2d624993a3f41934364d19c5c9fb628529. --- src/qt/qt_rendererstack.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index db19e6a7d..d11b4a0b5 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -86,33 +86,29 @@ void RendererStack::mousePoll() #endif } -static int ignoreNextMouseEvent = 1, isButtonDown = 0; +int ignoreNextMouseEvent = 1; void RendererStack::mouseReleaseEvent(QMouseEvent *event) { - if (this->geometry().contains(event->pos()) && event->button() == Qt::LeftButton && !mouse_capture && (isButtonDown & 1)) + if (this->geometry().contains(event->pos()) && event->button() == Qt::LeftButton && !mouse_capture) { plat_mouse_capture(1); this->setCursor(Qt::BlankCursor); if (!ignoreNextMouseEvent) ignoreNextMouseEvent++; // Avoid jumping cursor when moved. - isButtonDown &= ~1; return; } if (mouse_capture && event->button() == Qt::MiddleButton && mouse_get_buttons() < 3) { plat_mouse_capture(0); this->setCursor(Qt::ArrowCursor); - isButtonDown &= ~1; return; } if (mouse_capture) { mousedata.mousebuttons &= ~event->button(); } - isButtonDown &= ~1; } void RendererStack::mousePressEvent(QMouseEvent *event) { - isButtonDown |= 1; if (mouse_capture) { mousedata.mousebuttons |= event->button(); From 11e805de7820c768e93c4eaf1bf81b6af6c958cb Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Fri, 4 Feb 2022 23:01:53 +0200 Subject: [PATCH 255/278] qt: Fix font only applying to main window --- src/qt/qt_mainwindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 844edec63..8ca284a61 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -67,7 +67,7 @@ MainWindow::MainWindow(QWidget *parent) : #ifdef Q_OS_WINDOWS auto font_name = tr("FONT_NAME"); auto font_size = tr("FONT_SIZE"); - setFont(QFont(font_name, font_size.toInt())); + QApplication::setFont(QFont(font_name, font_size.toInt())); #endif mm = std::make_shared(this); @@ -1575,7 +1575,7 @@ void MainWindow::changeEvent(QEvent* event) { auto font_name = tr("FONT_NAME"); auto font_size = tr("FONT_SIZE"); - setFont(QFont(font_name, font_size.toInt())); + QApplication::setFont(QFont(font_name, font_size.toInt())); } #endif QWidget::changeEvent(event); From 90d262d230def699cd4919d6d5c0613d81ef1024 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Fri, 4 Feb 2022 23:31:10 +0200 Subject: [PATCH 256/278] qt: fix settings title to match win32 --- src/qt/qt_settings.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_settings.ui b/src/qt/qt_settings.ui index 5bfca9748..da82b87e6 100644 --- a/src/qt/qt_settings.ui +++ b/src/qt/qt_settings.ui @@ -11,7 +11,7 @@ - 86Box Settings + Settings From 9cd757c21344157357d5cb1c4aad54708a1ee74f Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 5 Feb 2022 13:28:18 +0600 Subject: [PATCH 257/278] * Cursor on Windows should not break free anymore when captured * Use RAWINPUT for joystick on Windows * Load qt_*.qm instead of qtbase_*.qm --- src/qt/CMakeLists.txt | 5 +- src/qt/qt_progsettings.cpp | 4 +- src/qt/qt_winrawinputfilter.cpp | 18 +- src/qt/win_joystick_rawinput.c | 471 ++++++++++++++++++++++++++++++++ 4 files changed, 494 insertions(+), 4 deletions(-) create mode 100644 src/qt/win_joystick_rawinput.c diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 87011f1e2..020a60cbe 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -10,7 +10,6 @@ add_library(plat STATIC qt.c qt_main.cpp qt_platform.cpp - sdl_joystick.cpp ) add_library(ui STATIC @@ -118,6 +117,8 @@ add_library(ui STATIC if(WIN32) enable_language(RC) target_sources(86Box PUBLIC ../win/86Box-qt.rc) + target_sources(plat PRIVATE win_joystick_rawinput.c) + target_link_libraries(86Box hid) # CMake 3.22 messed this up for clang/clang++ # See https://gitlab.kitware.com/cmake/cmake/-/issues/22611 @@ -128,6 +129,8 @@ if(WIN32) set_property(SOURCE ../win/86Box-qt.rc PROPERTY COMPILE_DEFINITIONS NO_INCLUDE_MANIFEST) target_sources(86Box PRIVATE ../win/86Box.manifest) endif() +else() + target_sources(plat PRIVATE sdl_joystick.cpp) endif() if(WIN32 AND NOT MINGW) diff --git a/src/qt/qt_progsettings.cpp b/src/qt/qt_progsettings.cpp index 1716c4cda..f7fbd2ea6 100644 --- a/src/qt/qt_progsettings.cpp +++ b/src/qt/qt_progsettings.cpp @@ -150,7 +150,7 @@ void ProgSettings::loadTranslators(QObject *parent) qDebug() << "Translations loaded.\n"; QCoreApplication::installTranslator(translator); if (!qtTranslator->load(QLatin1String("qtbase_") + localetofilename.replace('-', '_'), QLibraryInfo::location(QLibraryInfo::TranslationsPath))) - qtTranslator->load(QLatin1String("qtbase_") + localetofilename.replace('-', '_'), QApplication::applicationDirPath() + "/./translations/"); + qtTranslator->load(QLatin1String("qt_") + localetofilename.replace('-', '_'), QApplication::applicationDirPath() + "/./translations/"); if (QApplication::installTranslator(qtTranslator)) { qDebug() << "Qt translations loaded." << "\n"; @@ -164,7 +164,7 @@ void ProgSettings::loadTranslators(QObject *parent) translator->load(QLatin1String("86box_") + lcid_langcode[lang_id].first, QLatin1String(":/")); QCoreApplication::installTranslator(translator); if (!qtTranslator->load(QLatin1String("qtbase_") + QString(lcid_langcode[lang_id].first).replace('-', '_'), QLibraryInfo::location(QLibraryInfo::TranslationsPath))) - qtTranslator->load(QLatin1String("qtbase_") + QString(lcid_langcode[lang_id].first).replace('-', '_'), QApplication::applicationDirPath() + "/./translations/"); + qtTranslator->load(QLatin1String("qt_") + QString(lcid_langcode[lang_id].first).replace('-', '_'), QApplication::applicationDirPath() + "/./translations/"); QCoreApplication::installTranslator(qtTranslator); } } diff --git a/src/qt/qt_winrawinputfilter.cpp b/src/qt/qt_winrawinputfilter.cpp index b5653e7fb..59a808065 100644 --- a/src/qt/qt_winrawinputfilter.cpp +++ b/src/qt/qt_winrawinputfilter.cpp @@ -44,6 +44,7 @@ #include #include +extern "C" void win_joystick_handle(PRAWINPUT); std::unique_ptr WindowsRawInputFilter::Register(QMainWindow *window) { HWND wnd = (HWND)window->winId(); @@ -148,6 +149,11 @@ void WindowsRawInputFilter::handle_input(HRAWINPUT input) if (mouse_capture) mouse_handle(raw); break; + case RIM_TYPEHID: + { + win_joystick_handle(raw); + break; + } } } } @@ -379,6 +385,16 @@ void WindowsRawInputFilter::mouse_handle(PRAWINPUT raw) dx += state.lLastX; dy += state.lLastY; } + HWND wnd = (HWND)window->winId(); + + RECT rect; + + GetWindowRect(wnd, &rect); + + int left = rect.left + (rect.right - rect.left) / 2; + int top = rect.top + (rect.bottom - rect.top) / 2; + + SetCursorPos(left, top); } void WindowsRawInputFilter::mousePoll() @@ -404,4 +420,4 @@ void WindowsRawInputFilter::mousePoll() b = buttons; } } -} \ No newline at end of file +} diff --git a/src/qt/win_joystick_rawinput.c b/src/qt/win_joystick_rawinput.c new file mode 100644 index 000000000..be808fc47 --- /dev/null +++ b/src/qt/win_joystick_rawinput.c @@ -0,0 +1,471 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * RawInput joystick interface. + * + * Authors: Sarah Walker, + * Miran Grca, + * GH Cao, + * + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. + * Copyright 2020 GH Cao. + */ +#include +#include +#include +#include +#include +#define _USE_MATH_DEFINES +#include +#include +#include +#include +#define HAVE_STDARG_H +#include <86box/86box.h> +#include <86box/device.h> +#include <86box/plat.h> +#include <86box/gameport.h> +#include <86box/win.h> + +#ifdef ENABLE_JOYSTICK_LOG +int joystick_do_log = ENABLE_JOYSTICK_LOG; + + +static void +joystick_log(const char *fmt, ...) +{ + va_list ap; + + if (joystick_do_log) { + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); + } +} +#else +#define joystick_log(fmt, ...) +#endif + +typedef struct { + HANDLE hdevice; + PHIDP_PREPARSED_DATA data; + + USAGE usage_button[256]; + + struct raw_axis_t { + USAGE usage; + USHORT link; + USHORT bitsize; + LONG max; + LONG min; + } axis[8]; + + struct raw_pov_t { + USAGE usage; + USHORT link; + LONG max; + LONG min; + } pov[4]; +} raw_joystick_t; + +plat_joystick_t plat_joystick_state[MAX_PLAT_JOYSTICKS]; +joystick_t joystick_state[MAX_JOYSTICKS]; +int joysticks_present = 0; + +raw_joystick_t raw_joystick_state[MAX_PLAT_JOYSTICKS]; + +/* We only use the first 32 buttons reported, from Usage ID 1-128 */ +void joystick_add_button(raw_joystick_t* rawjoy, plat_joystick_t* joy, USAGE usage) { + if (joy->nr_buttons >= 32) return; + if (usage < 1 || usage > 128) return; + + rawjoy->usage_button[usage] = joy->nr_buttons; + sprintf(joy->button[joy->nr_buttons].name, "Button %d", usage); + joy->nr_buttons++; +} + +void joystick_add_axis(raw_joystick_t* rawjoy, plat_joystick_t* joy, PHIDP_VALUE_CAPS prop) { + if (joy->nr_axes >= 8) return; + + switch (prop->Range.UsageMin) { + case HID_USAGE_GENERIC_X: + sprintf(joy->axis[joy->nr_axes].name, "X"); + break; + case HID_USAGE_GENERIC_Y: + sprintf(joy->axis[joy->nr_axes].name, "Y"); + break; + case HID_USAGE_GENERIC_Z: + sprintf(joy->axis[joy->nr_axes].name, "Z"); + break; + case HID_USAGE_GENERIC_RX: + sprintf(joy->axis[joy->nr_axes].name, "RX"); + break; + case HID_USAGE_GENERIC_RY: + sprintf(joy->axis[joy->nr_axes].name, "RY"); + break; + case HID_USAGE_GENERIC_RZ: + sprintf(joy->axis[joy->nr_axes].name, "RZ"); + break; + default: + return; + } + + joy->axis[joy->nr_axes].id = joy->nr_axes; + rawjoy->axis[joy->nr_axes].usage = prop->Range.UsageMin; + rawjoy->axis[joy->nr_axes].link = prop->LinkCollection; + rawjoy->axis[joy->nr_axes].bitsize = prop->BitSize; + + /* Assume unsigned when min >= 0 */ + if (prop->LogicalMin < 0) { + rawjoy->axis[joy->nr_axes].max = prop->LogicalMax; + } else { + /* + * Some joysticks will send -1 in LogicalMax, like Xbox Controllers + * so we need to mask that to appropriate value (instead of 0xFFFFFFFF) + */ + rawjoy->axis[joy->nr_axes].max = prop->LogicalMax & ((1 << prop->BitSize) - 1); + } + rawjoy->axis[joy->nr_axes].min = prop->LogicalMin; + + joy->nr_axes++; +} + +void joystick_add_pov(raw_joystick_t* rawjoy, plat_joystick_t* joy, PHIDP_VALUE_CAPS prop) { + if (joy->nr_povs >= 4) return; + + sprintf(joy->pov[joy->nr_povs].name, "POV %d", joy->nr_povs+1); + rawjoy->pov[joy->nr_povs].usage = prop->Range.UsageMin; + rawjoy->pov[joy->nr_povs].link = prop->LinkCollection; + rawjoy->pov[joy->nr_povs].min = prop->LogicalMin; + rawjoy->pov[joy->nr_povs].max = prop->LogicalMax; + + joy->nr_povs++; +} + +void joystick_get_capabilities(raw_joystick_t* rawjoy, plat_joystick_t* joy) { + UINT size = 0; + PHIDP_BUTTON_CAPS btn_caps = NULL; + PHIDP_VALUE_CAPS val_caps = NULL; + + /* Get preparsed data (HID data format) */ + GetRawInputDeviceInfoW(rawjoy->hdevice, RIDI_PREPARSEDDATA, NULL, &size); + rawjoy->data = malloc(size); + if (GetRawInputDeviceInfoW(rawjoy->hdevice, RIDI_PREPARSEDDATA, rawjoy->data, &size) <= 0) + fatal("joystick_get_capabilities: Failed to get preparsed data.\n"); + + HIDP_CAPS caps; + HidP_GetCaps(rawjoy->data, &caps); + + /* Buttons */ + if (caps.NumberInputButtonCaps > 0) { + btn_caps = calloc(caps.NumberInputButtonCaps, sizeof(HIDP_BUTTON_CAPS)); + if (HidP_GetButtonCaps(HidP_Input, btn_caps, &caps.NumberInputButtonCaps, rawjoy->data) != HIDP_STATUS_SUCCESS) { + joystick_log("joystick_get_capabilities: Failed to query input buttons.\n"); + goto end; + } + /* We only detect generic stuff */ + for (int c=0; c 0) { + val_caps = calloc(caps.NumberInputValueCaps, sizeof(HIDP_VALUE_CAPS)); + if (HidP_GetValueCaps(HidP_Input, val_caps, &caps.NumberInputValueCaps, rawjoy->data) != HIDP_STATUS_SUCCESS) { + joystick_log("joystick_get_capabilities: Failed to query axes and povs.\n"); + goto end; + } + /* We only detect generic stuff */ + for (int c=0; chdevice, RIDI_DEVICENAME, device_name, &size); + device_name = calloc(size, sizeof(char)); + if (GetRawInputDeviceInfoA(rawjoy->hdevice, RIDI_DEVICENAME, device_name, &size) <= 0) + fatal("joystick_get_capabilities: Failed to get device name.\n"); + + HANDLE hDevObj = CreateFile(device_name, GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); + if (hDevObj) { + HidD_GetProductString(hDevObj, device_desc_wide, sizeof(WCHAR) * 200); + CloseHandle(hDevObj); + } + free(device_name); + + int result = WideCharToMultiByte(CP_ACP, 0, device_desc_wide, 200, joy->name, 260, NULL, NULL); + if (result == 0 || strlen(joy->name) == 0) + sprintf(joy->name, + "RawInput %s, VID:%04lX PID:%04lX", + info->hid.usUsage == HID_USAGE_GENERIC_JOYSTICK ? "Joystick" : "Gamepad", + info->hid.dwVendorId, + info->hid.dwProductId); +} + +void joystick_init() +{ + UINT size = 0; + atexit(joystick_close); + + joysticks_present = 0; + memset(raw_joystick_state, 0, sizeof(raw_joystick_t) * MAX_PLAT_JOYSTICKS); + + /* Get a list of raw input devices from Windows */ + UINT raw_devices = 0; + GetRawInputDeviceList(NULL, &raw_devices, sizeof(RAWINPUTDEVICELIST)); + PRAWINPUTDEVICELIST deviceList = calloc(raw_devices, sizeof(RAWINPUTDEVICELIST)); + GetRawInputDeviceList(deviceList, &raw_devices, sizeof(RAWINPUTDEVICELIST)); + + for (int i=0; i= MAX_PLAT_JOYSTICKS) break; + if (deviceList[i].dwType != RIM_TYPEHID) continue; + + /* Get device info: hardware IDs and usage IDs */ + GetRawInputDeviceInfoA(deviceList[i].hDevice, RIDI_DEVICEINFO, NULL, &size); + info = malloc(size); + info->cbSize = sizeof(RID_DEVICE_INFO); + if (GetRawInputDeviceInfoA(deviceList[i].hDevice, RIDI_DEVICEINFO, info, &size) <= 0) + goto end_loop; + + /* If this is not a joystick/gamepad, skip */ + if (info->hid.usUsagePage != HID_USAGE_PAGE_GENERIC) goto end_loop; + if (info->hid.usUsage != HID_USAGE_GENERIC_JOYSTICK && + info->hid.usUsage != HID_USAGE_GENERIC_GAMEPAD) goto end_loop; + + plat_joystick_t *joy = &plat_joystick_state[joysticks_present]; + raw_joystick_t *rawjoy = &raw_joystick_state[joysticks_present]; + rawjoy->hdevice = deviceList[i].hDevice; + + joystick_get_capabilities(rawjoy, joy); + joystick_get_device_name(rawjoy, joy, info); + + joystick_log("joystick_init: %s - %d buttons, %d axes, %d POVs\n", + joy->name, joy->nr_buttons, joy->nr_axes, joy->nr_povs); + + joysticks_present++; + + end_loop: + free(info); + } + + joystick_log("joystick_init: joysticks_present=%i\n", joysticks_present); + + /* Initialize the RawInput (joystick and gamepad) module. */ + RAWINPUTDEVICE ridev[2]; + ridev[0].dwFlags = 0; + ridev[0].hwndTarget = NULL; + ridev[0].usUsagePage = HID_USAGE_PAGE_GENERIC; + ridev[0].usUsage = HID_USAGE_GENERIC_JOYSTICK; + + ridev[1].dwFlags = 0; + ridev[1].hwndTarget = NULL; + ridev[1].usUsagePage = HID_USAGE_PAGE_GENERIC; + ridev[1].usUsage = HID_USAGE_GENERIC_GAMEPAD; + + if (!RegisterRawInputDevices(ridev, 2, sizeof(RAWINPUTDEVICE))) + fatal("plat_joystick_init: RegisterRawInputDevices failed\n"); +} + +void joystick_close() +{ + RAWINPUTDEVICE ridev[2]; + ridev[0].dwFlags = RIDEV_REMOVE; + ridev[0].hwndTarget = NULL; + ridev[0].usUsagePage = HID_USAGE_PAGE_GENERIC; + ridev[0].usUsage = HID_USAGE_GENERIC_JOYSTICK; + + ridev[1].dwFlags = RIDEV_REMOVE; + ridev[1].hwndTarget = NULL; + ridev[1].usUsagePage = HID_USAGE_PAGE_GENERIC; + ridev[1].usUsage = HID_USAGE_GENERIC_GAMEPAD; + + RegisterRawInputDevices(ridev, 2, sizeof(RAWINPUTDEVICE)); +} + + +void win_joystick_handle(PRAWINPUT raw) +{ + HRESULT r; + int j = -1; /* current joystick index, -1 when not found */ + + /* If the input is not from a known device, we ignore it */ + for (int i=0; iheader.hDevice) { + j = i; + break; + } + } + if (j == -1) return; + + /* Read buttons */ + USAGE usage_list[128] = {0}; + ULONG usage_length = plat_joystick_state[j].nr_buttons; + memset(plat_joystick_state[j].b, 0, 32 * sizeof(int)); + + r = HidP_GetUsages(HidP_Input, HID_USAGE_PAGE_BUTTON, 0, usage_list, &usage_length, + raw_joystick_state[j].data, (PCHAR)raw->data.hid.bRawData, raw->data.hid.dwSizeHid); + + if (r == HIDP_STATUS_SUCCESS) { + for (int i=0; imax - axis->min + 1) / 2; + + r = HidP_GetUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, axis->link, axis->usage, &uvalue, + raw_joystick_state[j].data, (PCHAR)raw->data.hid.bRawData, raw->data.hid.dwSizeHid); + + if (r == HIDP_STATUS_SUCCESS) { + if (axis->min < 0) { + /* extend signed uvalue to LONG */ + if (uvalue & (1 << (axis->bitsize-1))) { + ULONG mask = (1 << axis->bitsize) - 1; + value = -1U ^ mask; + value |= uvalue; + } else { + value = uvalue; + } + } else { + /* Assume unsigned when min >= 0, convert to a signed value */ + value = (LONG)uvalue - center; + } + if (abs(value) == 1) value = 0; + value = value * 32768 / center; + } + + plat_joystick_state[j].a[a] = value; + //joystick_log("%s %-06d ", plat_joystick_state[j].axis[a].name, plat_joystick_state[j].a[a]); + } + + /* read povs */ + for (int p=0; plink, pov->usage, &uvalue, + raw_joystick_state[j].data, (PCHAR)raw->data.hid.bRawData, raw->data.hid.dwSizeHid); + + if (r == HIDP_STATUS_SUCCESS && (uvalue >= pov->min && uvalue <= pov->max)) { + value = (uvalue - pov->min) * 36000; + value /= (pov->max - pov->min + 1); + value %= 36000; + } + + plat_joystick_state[j].p[p] = value; + + //joystick_log("%s %-3d ", plat_joystick_state[j].pov[p].name, plat_joystick_state[j].p[p]); + + } + //joystick_log("\n"); +} + + +static int joystick_get_axis(int joystick_nr, int mapping) +{ + if (mapping & POV_X) + { + int pov = plat_joystick_state[joystick_nr].p[mapping & 3]; + if (LOWORD(pov) == 0xFFFF) + return 0; + else + return sin((2*M_PI * (double)pov) / 36000.0) * 32767; + } + else if (mapping & POV_Y) + { + int pov = plat_joystick_state[joystick_nr].p[mapping & 3]; + + if (LOWORD(pov) == 0xFFFF) + return 0; + else + return -cos((2*M_PI * (double)pov) / 36000.0) * 32767; + } + else + return plat_joystick_state[joystick_nr].a[plat_joystick_state[joystick_nr].axis[mapping].id]; + +} + + +void joystick_process(void) +{ + int c, d; + + if (joystick_type == 7) return; + + for (c = 0; c < joystick_get_max_joysticks(joystick_type); c++) + { + if (joystick_state[c].plat_joystick_nr) + { + int joystick_nr = joystick_state[c].plat_joystick_nr - 1; + + for (d = 0; d < joystick_get_axis_count(joystick_type); d++) + joystick_state[c].axis[d] = joystick_get_axis(joystick_nr, joystick_state[c].axis_mapping[d]); + for (d = 0; d < joystick_get_button_count(joystick_type); d++) + joystick_state[c].button[d] = plat_joystick_state[joystick_nr].b[joystick_state[c].button_mapping[d]]; + + for (d = 0; d < joystick_get_pov_count(joystick_type); d++) + { + int x, y; + double angle, magnitude; + + x = joystick_get_axis(joystick_nr, joystick_state[c].pov_mapping[d][0]); + y = joystick_get_axis(joystick_nr, joystick_state[c].pov_mapping[d][1]); + + angle = (atan2((double)y, (double)x) * 360.0) / (2*M_PI); + magnitude = sqrt((double)x*(double)x + (double)y*(double)y); + + if (magnitude < 16384) + joystick_state[c].pov[d] = -1; + else + joystick_state[c].pov[d] = ((int)angle + 90 + 360) % 360; + } + } + else + { + for (d = 0; d < joystick_get_axis_count(joystick_type); d++) + joystick_state[c].axis[d] = 0; + for (d = 0; d < joystick_get_button_count(joystick_type); d++) + joystick_state[c].button[d] = 0; + for (d = 0; d < joystick_get_pov_count(joystick_type); d++) + joystick_state[c].pov[d] = -1; + } + } +} + From 03a6b2b50a7a63a2851c728f14b9955385b41069 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 5 Feb 2022 16:45:17 +0600 Subject: [PATCH 258/278] Fix bottom line being glitched --- src/qt/qt_rendererstack.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 689721310..b07ed34f7 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -239,7 +239,7 @@ void RendererStack::blit(int x, int y, int w, int h) sw = this->w = w; sh = this->h = h; uint8_t* imagebits = std::get(imagebufs[currentBuf]); - for (int y1 = y; y1 < (y + h - 1); y1++) + for (int y1 = y; y1 < (y + h); y1++) { auto scanline = imagebits + (y1 * (2048) * 4) + (x * 4); video_copy(scanline, &(buffer32->line[y1][x]), w * 4); From 6a967bb4a9aba6068abf57090669a05d6ffd659c Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 5 Feb 2022 16:45:37 +0600 Subject: [PATCH 259/278] Enforce max size for settings list --- src/qt/qt_settings.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/qt/qt_settings.cpp b/src/qt/qt_settings.cpp index 3c8a074db..3efa79f1e 100644 --- a/src/qt/qt_settings.cpp +++ b/src/qt/qt_settings.cpp @@ -112,6 +112,8 @@ Settings::Settings(QWidget *parent) : ui->stackedWidget->addWidget(otherRemovable); ui->stackedWidget->addWidget(otherPeripherals); + ui->listView->setMaximumWidth(ui->listView->sizeHintForColumn(0) + 5); + connect(machine, &SettingsMachine::currentMachineChanged, display, &SettingsDisplay::onCurrentMachineChanged); connect(machine, &SettingsMachine::currentMachineChanged, input, &SettingsInput::onCurrentMachineChanged); connect(machine, &SettingsMachine::currentMachineChanged, sound, &SettingsSound::onCurrentMachineChanged); From cf37a9c954dcb366eef2285f8d8beedd5d14d03c Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sat, 5 Feb 2022 17:01:27 +0200 Subject: [PATCH 260/278] qt: tweak hard disk dialog layout --- src/qt/qt_harddiskdialog.ui | 303 ++++++++++++++++++++---------------- 1 file changed, 167 insertions(+), 136 deletions(-) diff --git a/src/qt/qt_harddiskdialog.ui b/src/qt/qt_harddiskdialog.ui index 2017aca5a..7d31521f5 100644 --- a/src/qt/qt_harddiskdialog.ui +++ b/src/qt/qt_harddiskdialog.ui @@ -6,149 +6,70 @@ 0 0 - 400 - 300 + 393 + 223 Dialog - - - - - 0 + + + + + Heads: - - - - File name: - - - - - - - + - - - - - - Cylinders: - - - - - - - Sectors: - - - - - - - - - - - - - Size (MB): - - - - - - - Heads: - - - - - - - 32767 - - - - - - - Type: - - - - - - - 32767 - - - - - - - - - - - - - - Bus: - - - - - - - - - - Channel: - - - - - - - - - - - - - - Image Format: - - - - - - - - - - - - 5 + + + + + 0 + 0 + - - - - Block Size: - - - - - - - + + + 64 + 16777215 + + + + 32767 + + - + + + + + + + + + + File name: + + + + + + + + 0 + 0 + + + + + 64 + 16777215 + + + + + Qt::Vertical @@ -156,12 +77,15 @@ 20 - 40 + 20 - + + + + Qt::Horizontal @@ -171,6 +95,113 @@ + + + + Cylinders: + + + + + + + Channel: + + + + + + + Image Format: + + + + + + + + 0 + 0 + + + + + 64 + 16777215 + + + + + + + + Bus: + + + + + + + + + + Sectors: + + + + + + + Block Size: + + + + + + + + + + Type: + + + + + + + Size (MB): + + + + + + + + 0 + 0 + + + + + 64 + 16777215 + + + + 32767 + + + + + + + + 20 + 20 + + + + From 6e3023ceabdf64b4f43c4979d278590e2ec0df2e Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sat, 5 Feb 2022 17:25:20 +0200 Subject: [PATCH 261/278] qt: update translations --- src/qt/languages/uk-UA.po | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/qt/languages/uk-UA.po b/src/qt/languages/uk-UA.po index 8ebf41bbe..a8dc7bd0f 100644 --- a/src/qt/languages/uk-UA.po +++ b/src/qt/languages/uk-UA.po @@ -1,5 +1,5 @@ msgid "&Action" -msgstr "&Действие" +msgstr "&Дія" msgid "&Keyboard requires capture" msgstr "&Клавіатура потребує захвату" @@ -23,7 +23,7 @@ msgid "E&xit..." msgstr "&Вихід..." msgid "&View" -msgstr "&Вид" +msgstr "&Вигляд" msgid "&Hide status bar" msgstr "&Приховати рядок стану" @@ -593,7 +593,7 @@ msgid "ISA RTC:" msgstr "ISA RTC:" msgid "ISA Memory Expansion" -msgstr "Карта розширення памя'ті (ISA)" +msgstr "Карта розширення пам'яті (ISA)" msgid "Card 1:" msgstr "Карта 1:" @@ -647,7 +647,7 @@ msgid "86Box could not find any usable ROM images.\n\nPlease завантажте набір ПЗУ і витягніть його в каталог \"roms\"." msgid "(empty)" -msgstr "(пусто)" +msgstr "(порожньо)" msgid "All files" msgstr "Всі файли" @@ -668,7 +668,7 @@ msgid "Basic sector images" msgstr "Прості посекторні образи" msgid "Surface images" -msgstr "Surface образы" +msgstr "Образ поверхні" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "Системна плата \"%hs\" недоступна через відсутність файлу її ПЗУ в каталозі roms/machines. Переключення на доступну системну плату." @@ -713,10 +713,10 @@ msgid "Click to capture mouse" msgstr "Клацніть мишею для захвату курсора" msgid "Press F8+F12 to release mouse" -msgstr "Натисніть F8+F12 щоб звільнити курсор" +msgstr "Натисніть F8+F12, щоб звільнити курсор" msgid "Press F8+F12 or middle button to release mouse" -msgstr "Натисніть F8+F12 або середню кнопку миши щоб звільнити курсор" +msgstr "Натисніть F8+F12 або середню кнопку миші, щоб звільнити курсор" msgid "Unable to initialize FluidSynth" msgstr "Неможливо ініціалізувати FluidSynth" @@ -788,7 +788,7 @@ msgid "Unable to load keyboard accelerators." msgstr "Неможливо завантажити прискорювачі клавіатури." msgid "Unable to register raw input." -msgstr "Неможливо зарреєструвати необроблене (RAW) введ." +msgstr "Неможливо зарреєструвати необроблене (RAW) введення." msgid "%u" msgstr "%u" @@ -842,13 +842,13 @@ msgid "Do you want to save the settings?" msgstr "Чи бажаєте ви зберегти налаштування?" msgid "This will hard reset the emulated machine." -msgstr "Це призведе до холодної перезагрузки эмулируемой машины." +msgstr "Це призведе до холодної перезагрузки емульованої машини." msgid "Save" msgstr "Зберегти" msgid "About 86Box" -msgstr "О 86Box" +msgstr "Про 86Box" msgid "86Box v" msgstr "86Box v." @@ -869,7 +869,7 @@ msgid "Make sure libpcap is installed and that you are on a libpcap-compatible n msgstr "Переконайтесь, що libpcap встановлений і ваше мережеве з'єднання, сумісне з libpcap." msgid "Invalid configuration" -msgstr "Недопустимая конфигурация" +msgstr "Неприпустима конфігурація" msgid "freetype.dll" msgstr "freetype.dll" @@ -944,7 +944,7 @@ msgid "Cassette images" msgstr "Образи касет" msgid "Cartridge %i: %ls" -msgstr "Картидж %i: %ls" +msgstr "Картридж %i: %ls" msgid "Cartridge images" msgstr "Образи картриджів" @@ -1031,7 +1031,7 @@ msgid "Make sure the file exists and is readable." msgstr "Переконайтеся, що файл є доступним для читання." msgid "Make sure the file is being saved to a writable directory." -msgstr "Переконайтеся, що файл зберігається в каталогі, доступному для запису." +msgstr "Переконайтеся, що файл зберігається в каталог, який є доступним для запису." msgid "Disk image too large" msgstr "Занадто великий образ диска" From 6ffa0a96406be0548bdd3df62a5a5e082e4dedd3 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sat, 5 Feb 2022 17:47:42 +0200 Subject: [PATCH 262/278] qt: fix filefield size (was bad on macos) --- src/qt/qt_harddiskdialog.ui | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/qt/qt_harddiskdialog.ui b/src/qt/qt_harddiskdialog.ui index 7d31521f5..b3b1c0f60 100644 --- a/src/qt/qt_harddiskdialog.ui +++ b/src/qt/qt_harddiskdialog.ui @@ -193,14 +193,7 @@ - - - - 20 - 20 - - - + From a570f01d973466f8787fdc9855f5a4122644263f Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 6 Feb 2022 00:37:24 +0600 Subject: [PATCH 263/278] Hard disk dialog improvements * Fix file field widget * Hard disk dialog is now identical to Win32 --- src/qt/qt_filefield.cpp | 5 +- src/qt/qt_filefield.hpp | 1 + src/qt/qt_harddiskdialog.cpp | 49 ++++--- src/qt/qt_harddiskdialog.hpp | 4 +- src/qt/qt_harddiskdialog.ui | 255 ++++++++++++++++++----------------- 5 files changed, 176 insertions(+), 138 deletions(-) diff --git a/src/qt/qt_filefield.cpp b/src/qt/qt_filefield.cpp index 2d7268d97..770a244e0 100644 --- a/src/qt/qt_filefield.cpp +++ b/src/qt/qt_filefield.cpp @@ -9,7 +9,10 @@ FileField::FileField(QWidget *parent) : { ui->setupUi(this); - connect(ui->label, &QLineEdit::editingFinished, this, [this] () { emit fileSelected(ui->label->text()); }); + connect(ui->label, &QLineEdit::editingFinished, this, [this] () { + fileName_ = ui->label->text(); + emit fileSelected(ui->label->text()); + }); } FileField::~FileField() diff --git a/src/qt/qt_filefield.hpp b/src/qt/qt_filefield.hpp index df68c1e02..00c4a5e12 100644 --- a/src/qt/qt_filefield.hpp +++ b/src/qt/qt_filefield.hpp @@ -22,6 +22,7 @@ public: QString selectedFilter() const { return selectedFilter_; } void setCreateFile(bool createFile) { createFile_ = createFile; } + bool createFile() { return createFile_; } signals: void fileSelected(const QString& fileName); diff --git a/src/qt/qt_harddiskdialog.cpp b/src/qt/qt_harddiskdialog.cpp index 288c4b0d8..2ed784a42 100644 --- a/src/qt/qt_harddiskdialog.cpp +++ b/src/qt/qt_harddiskdialog.cpp @@ -47,7 +47,6 @@ HarddiskDialog::HarddiskDialog(bool existing, QWidget *parent) : } else { setWindowTitle(tr("Add New Hard Disk")); ui->fileField->setCreateFile(true); - connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &HarddiskDialog::onCreateNewFile); } auto* model = ui->comboBoxFormat->model(); @@ -248,6 +247,14 @@ static MVHDGeom create_drive_vhd_diff(const QString& fileName, const QString& pa } void HarddiskDialog::onCreateNewFile() { + + for (auto& curObject : children()) + { + if (qobject_cast(curObject)) qobject_cast(curObject)->setDisabled(true); + } + + ui->progressBar->setEnabled(true); + setResult(QDialog::Rejected); qint64 size = ui->lineEditSize->text().toUInt() << 20U; if (size > 0x1FFFFFFE00ll) { QMessageBox::critical(this, tr("Disk image too large"), tr("Disk images cannot be larger than 127 GB.")); @@ -323,18 +330,16 @@ void HarddiskDialog::onCreateNewFile() { } else if (img_format >= 3) { /* VHD file */ file.close(); - MVHDGeom _86box_geometry; + MVHDGeom _86box_geometry{}; int block_size = ui->comboBoxBlockSize->currentIndex() == 0 ? MVHD_BLOCK_LARGE : MVHD_BLOCK_SMALL; switch (img_format) { case 3: { - QProgressDialog progress(tr("86Box"), QString(), 0, 100, this); - connect(this, &HarddiskDialog::fileProgress, &progress, &QProgressDialog::setValue); - std::thread writer([&_86box_geometry, fileName, this] { + connect(this, &HarddiskDialog::fileProgress, this, [this] (int value) { ui->progressBar->setValue(value); QApplication::processEvents(); } ); + ui->progressBar->setVisible(true); + [&_86box_geometry, fileName, this] { _86box_geometry = create_drive_vhd_fixed(fileName, this, cylinders_, heads_, sectors_); - }); - progress.exec(); - writer.join(); + }(); } break; case 4: @@ -357,7 +362,14 @@ void HarddiskDialog::onCreateNewFile() { break; } - if (img_format != 5) { + if (_86box_geometry.cyl == 0 && + _86box_geometry.heads == 0 && + _86box_geometry.spt == 0) + { + QMessageBox::critical(this, tr("Unable to write file"), tr("Make sure the file is being saved to a writable directory.")); + return; + } + else if (img_format != 5) { QMessageBox::information(this, tr("Disk image created"), tr("Remember to partition and format the newly-created drive.")); } @@ -367,14 +379,15 @@ void HarddiskDialog::onCreateNewFile() { cylinders_ = _86box_geometry.cyl; heads_ = _86box_geometry.heads; sectors_ = _86box_geometry.spt; + setResult(QDialog::Accepted); return; } // formats 0, 1 and 2 - QProgressDialog progress(tr("86Box"), QString(), 0, 100, this); - connect(this, &HarddiskDialog::fileProgress, &progress, &QProgressDialog::setValue); - std::thread writer([size, &file, this] { + connect(this, &HarddiskDialog::fileProgress, this, [this] (int value) { ui->progressBar->setValue(value); QApplication::processEvents(); } ); + ui->progressBar->setVisible(true); + [size, &file, this] { QDataStream stream(&file); stream.setByteOrder(QDataStream::LittleEndian); @@ -393,11 +406,10 @@ void HarddiskDialog::onCreateNewFile() { } } emit fileProgress(100); - }); + }(); - progress.exec(); - writer.join(); QMessageBox::information(this, tr("Disk image created"), tr("Remember to partition and format the newly-created drive.")); + setResult(QDialog::Accepted); } static void adjust_vhd_geometry_for_86box(MVHDGeom *vhd_geometry) { @@ -718,3 +730,10 @@ void HarddiskDialog::on_comboBoxType_currentIndexChanged(int index) { checkAndAdjustHeads(); checkAndAdjustSectors(); } + +void HarddiskDialog::accept() +{ + if (ui->fileField->createFile()) onCreateNewFile(); + else setResult(QDialog::Accepted); + QDialog::done(result()); +} diff --git a/src/qt/qt_harddiskdialog.hpp b/src/qt/qt_harddiskdialog.hpp index e6ced50fb..321dc4708 100644 --- a/src/qt/qt_harddiskdialog.hpp +++ b/src/qt/qt_harddiskdialog.hpp @@ -25,6 +25,9 @@ public: signals: void fileProgress(int i); +public slots: + void accept() override; + private slots: void on_comboBoxType_currentIndexChanged(int index); void on_lineEditSectors_textEdited(const QString &arg1); @@ -35,7 +38,6 @@ private slots: void on_comboBoxFormat_currentIndexChanged(int index); void onCreateNewFile(); void onExistingFileSelected(const QString& fileName); - private: Ui::HarddiskDialog *ui; diff --git a/src/qt/qt_harddiskdialog.ui b/src/qt/qt_harddiskdialog.ui index b3b1c0f60..0d069ec17 100644 --- a/src/qt/qt_harddiskdialog.ui +++ b/src/qt/qt_harddiskdialog.ui @@ -6,18 +6,107 @@ 0 0 - 393 - 223 + 421 + 269 Dialog - - + + + + + - Heads: + Channel: + + + + + + + Sectors: + + + + + + + Type: + + + + + + + + 0 + 0 + + + + + 64 + 16777215 + + + + + + + + + 0 + 0 + + + + + 64 + 16777215 + + + + + + + + Size (MB): + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + Qt::Vertical + + + + 20 + 20 + + + + + + + + Cylinders: @@ -40,75 +129,6 @@ - - - - - - - - - - File name: - - - - - - - - 0 - 0 - - - - - 64 - 16777215 - - - - - - - - Qt::Vertical - - - - 20 - 20 - - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - Cylinders: - - - - - - - Channel: - - - @@ -116,22 +136,16 @@ - - - - - 0 - 0 - - - - - 64 - 16777215 - + + + + Heads: + + + @@ -139,39 +153,11 @@ - - + + - - - - Sectors: - - - - - - - Block Size: - - - - - - - - - - Type: - - - - - - - Size (MB): - - + + @@ -192,8 +178,35 @@ - - + + + + + + + Block Size: + + + + + + + File name: + + + + + + + 0 + + + true + + + false + + From 6818c03799eced2a4ae06d8c4d45f54bb0a45129 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 6 Feb 2022 01:50:30 +0600 Subject: [PATCH 264/278] qt: All dialogs are now fixed --- src/qt/qt_deviceconfig.cpp | 1 + src/qt/qt_harddiskdialog.ui | 24 ++++- src/qt/qt_joystickconfiguration.cpp | 3 + src/qt/qt_mainwindow.cpp | 1 + src/qt/qt_newfloppydialog.ui | 14 ++- src/qt/qt_progsettings.ui | 12 +++ src/qt/qt_settings.cpp | 2 +- src/qt/qt_settings.ui | 14 ++- src/qt/qt_soundgain.ui | 144 ++++++++++++++++------------ 9 files changed, 147 insertions(+), 68 deletions(-) diff --git a/src/qt/qt_deviceconfig.cpp b/src/qt/qt_deviceconfig.cpp index 48f8e59a9..32e202e76 100644 --- a/src/qt/qt_deviceconfig.cpp +++ b/src/qt/qt_deviceconfig.cpp @@ -147,6 +147,7 @@ void DeviceConfig::ConfigureDevice(const _device_* device, int instance) { ++config; } + dc.setFixedSize(dc.minimumSizeHint()); int res = dc.exec(); if (res == QDialog::Accepted) { config = device->config; diff --git a/src/qt/qt_harddiskdialog.ui b/src/qt/qt_harddiskdialog.ui index 0d069ec17..823652aa6 100644 --- a/src/qt/qt_harddiskdialog.ui +++ b/src/qt/qt_harddiskdialog.ui @@ -10,6 +10,24 @@ 269 + + + 0 + 0 + + + + + 421 + 269 + + + + + 421 + 269 + + Dialog @@ -197,15 +215,15 @@ + + false + 0 true - - false - diff --git a/src/qt/qt_joystickconfiguration.cpp b/src/qt/qt_joystickconfiguration.cpp index f87ea8b3c..83b2f50be 100644 --- a/src/qt/qt_joystickconfiguration.cpp +++ b/src/qt/qt_joystickconfiguration.cpp @@ -27,6 +27,7 @@ JoystickConfiguration::JoystickConfiguration(int type, int joystick_nr, QWidget } ui->comboBoxDevice->setCurrentIndex(joystick_state[joystick_nr].plat_joystick_nr); + setFixedSize(minimumSizeHint()); } JoystickConfiguration::~JoystickConfiguration() @@ -180,4 +181,6 @@ void JoystickConfiguration::on_comboBoxDevice_currentIndexChanged(int index) { ++row; } + + setFixedSize(minimumSizeHint()); } diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 8ca284a61..f7afab6e7 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -1414,6 +1414,7 @@ void MainWindow::on_actionAbout_86Box_triggered() QDesktopServices::openUrl(QUrl("https://86box.net/")); }); msgBox.setIconPixmap(QIcon(":/settings/win/icons/86Box-yellow.ico").pixmap(32, 32)); + msgBox.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint); msgBox.exec(); } diff --git a/src/qt/qt_newfloppydialog.ui b/src/qt/qt_newfloppydialog.ui index c9e744845..42d5e0a4f 100644 --- a/src/qt/qt_newfloppydialog.ui +++ b/src/qt/qt_newfloppydialog.ui @@ -6,10 +6,22 @@ 0 0 - 287 + 327 140 + + + 327 + 140 + + + + + 327 + 140 + + New Image diff --git a/src/qt/qt_progsettings.ui b/src/qt/qt_progsettings.ui index 883a869ab..b64272f8b 100644 --- a/src/qt/qt_progsettings.ui +++ b/src/qt/qt_progsettings.ui @@ -10,6 +10,18 @@ 228 + + + 370 + 228 + + + + + 370 + 228 + + Preferences diff --git a/src/qt/qt_settings.cpp b/src/qt/qt_settings.cpp index 3efa79f1e..fbd16254e 100644 --- a/src/qt/qt_settings.cpp +++ b/src/qt/qt_settings.cpp @@ -112,7 +112,7 @@ Settings::Settings(QWidget *parent) : ui->stackedWidget->addWidget(otherRemovable); ui->stackedWidget->addWidget(otherPeripherals); - ui->listView->setMaximumWidth(ui->listView->sizeHintForColumn(0) + 5); + ui->listView->setFixedWidth(ui->listView->sizeHintForColumn(0) + 5); connect(machine, &SettingsMachine::currentMachineChanged, display, &SettingsDisplay::onCurrentMachineChanged); connect(machine, &SettingsMachine::currentMachineChanged, input, &SettingsInput::onCurrentMachineChanged); diff --git a/src/qt/qt_settings.ui b/src/qt/qt_settings.ui index da82b87e6..66047cffd 100644 --- a/src/qt/qt_settings.ui +++ b/src/qt/qt_settings.ui @@ -6,10 +6,22 @@ 0 0 - 900 + 831 595 + + + 831 + 595 + + + + + 831 + 595 + + Settings diff --git a/src/qt/qt_soundgain.ui b/src/qt/qt_soundgain.ui index af85e03c5..8e4d6b3f8 100644 --- a/src/qt/qt_soundgain.ui +++ b/src/qt/qt_soundgain.ui @@ -6,73 +6,93 @@ 0 0 - 262 - 279 + 182 + 250 + + + 0 + 0 + + + + + 182 + 250 + + + + + 182 + 250 + + Sound Gain - - - - 140 - 20 - 101 - 241 - - - - Qt::Vertical - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - 30 - 30 - 31 - 231 - - - - 18 - - - 2 - - - 4 - - - Qt::Vertical - - - false - - - QSlider::TicksBothSides - - - - - - -20 - 10 - 131 - 20 - - - - Gain - - - Qt::AlignCenter - - + + + + + + 0 + 0 + + + + 18 + + + 2 + + + 4 + + + Qt::Vertical + + + false + + + QSlider::TicksBothSides + + + + + + + + 0 + 0 + + + + Qt::Vertical + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + 0 + 0 + + + + Gain + + + Qt::AlignCenter + + + + From 4a49c5b1694e1740d63e24c757f12c0a10ebdf53 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sat, 5 Feb 2022 22:56:43 +0200 Subject: [PATCH 265/278] qt: disable window context help buttons --- src/qt/qt_styleoverride.cpp | 7 +++++++ src/qt/qt_styleoverride.hpp | 3 +++ 2 files changed, 10 insertions(+) diff --git a/src/qt/qt_styleoverride.cpp b/src/qt/qt_styleoverride.cpp index 85727b9ac..449b167aa 100644 --- a/src/qt/qt_styleoverride.cpp +++ b/src/qt/qt_styleoverride.cpp @@ -11,4 +11,11 @@ int StyleOverride::styleHint( return 0; return QProxyStyle::styleHint(hint, option, widget, returnData); +} + +void StyleOverride::polish(QWidget* widget) +{ + /* Disable title bar context help buttons globally as they are unused. */ + if (widget->isWindow()) + widget->setWindowFlag(Qt::WindowContextHelpButtonHint, false); } \ No newline at end of file diff --git a/src/qt/qt_styleoverride.hpp b/src/qt/qt_styleoverride.hpp index 46a73fa4e..fa365d946 100644 --- a/src/qt/qt_styleoverride.hpp +++ b/src/qt/qt_styleoverride.hpp @@ -2,6 +2,7 @@ #define QT_STYLEOVERRIDE_HPP #include +#include class StyleOverride : public QProxyStyle { @@ -11,6 +12,8 @@ public: const QStyleOption *option = nullptr, const QWidget *widget = nullptr, QStyleHintReturn *returnData = nullptr) const override; + + void polish(QWidget* widget) override; }; #endif \ No newline at end of file From ee451ddf4f4230cd403c5fbc3eab3987fafb6650 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sat, 5 Feb 2022 22:59:15 +0200 Subject: [PATCH 266/278] qt: make sound gain dialog same size as win32 --- src/qt/qt_soundgain.ui | 40 +++++++++++++++++----------------------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/src/qt/qt_soundgain.ui b/src/qt/qt_soundgain.ui index 8e4d6b3f8..32819cb74 100644 --- a/src/qt/qt_soundgain.ui +++ b/src/qt/qt_soundgain.ui @@ -6,7 +6,7 @@ 0 0 - 182 + 200 250 @@ -18,13 +18,13 @@ - 182 + 200 250 - 182 + 200 250 @@ -32,14 +32,24 @@ Sound Gain - - + + - + 0 0 + + Gain + + + Qt::AlignCenter + + + + + 18 @@ -60,7 +70,7 @@ - + @@ -76,22 +86,6 @@ - - - - - 0 - 0 - - - - Gain - - - Qt::AlignCenter - - - From c3116583309d475caf4c8e545c0a03e23f080f73 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sat, 5 Feb 2022 23:13:39 +0200 Subject: [PATCH 267/278] qt: make sound gain dialog columns equal width --- src/qt/qt_soundgain.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_soundgain.ui b/src/qt/qt_soundgain.ui index 32819cb74..8d3f2c3f6 100644 --- a/src/qt/qt_soundgain.ui +++ b/src/qt/qt_soundgain.ui @@ -31,7 +31,7 @@ Sound Gain - + From 34b9c824e07da562b82a9a333b23ee4f2c224cd2 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 6 Feb 2022 12:45:55 +0600 Subject: [PATCH 268/278] Settings mode behaviour now identical to Win32 --- src/qt/qt_main.cpp | 16 +++++++++++++++- src/qt/qt_mainwindow.cpp | 6 ------ src/qt/qt_settings.cpp | 2 +- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 6df56c6e6..f9200f08b 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -24,11 +24,15 @@ Q_IMPORT_PLUGIN(QWindowsVistaStylePlugin) #include <86box/win.h> #endif +extern "C" +{ #include <86box/86box.h> +#include <86box/config.h> #include <86box/plat.h> #include <86box/ui.h> #include <86box/video.h> #include <86box/discord.h> +} #include #include @@ -36,6 +40,7 @@ Q_IMPORT_PLUGIN(QWindowsVistaStylePlugin) #include "qt_mainwindow.hpp" #include "qt_progsettings.hpp" +#include "qt_settings.hpp" #include "cocoa_mouse.hpp" #include "qt_styleoverride.hpp" @@ -131,6 +136,16 @@ int main(int argc, char* argv[]) { } discord_load(); + if (settings_only) + { + Settings settings; + if (settings.exec() == QDialog::Accepted) + { + settings.save(); + config_save(); + } + return 0; + } main_window = new MainWindow(); main_window->show(); app.installEventFilter(main_window); @@ -182,7 +197,6 @@ int main(int argc, char* argv[]) { /* Set the PAUSE mode depending on the renderer. */ // plat_pause(0); - if (settings_only) dopause = 1; QTimer onesec; QTimer discordupdate; QObject::connect(&onesec, &QTimer::timeout, &app, [] { diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index f7afab6e7..881053cdc 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -442,7 +442,6 @@ void MainWindow::showEvent(QShowEvent *event) { scrnsz_x = window_w; scrnsz_y = window_h; } - if (settings_only) QTimer::singleShot(0, this, [this] () { ui->actionSettings->trigger(); }); } void MainWindow::on_actionKeyboard_requires_capture_triggered() { @@ -518,11 +517,6 @@ void MainWindow::on_actionSettings_triggered() { break; } plat_pause(currentPause); - if (settings_only) { - cpu_thread_run = 0; - config_save(); - QApplication::quit(); - } } std::array x11_to_xt_base diff --git a/src/qt/qt_settings.cpp b/src/qt/qt_settings.cpp index fbd16254e..b7678bb8e 100644 --- a/src/qt/qt_settings.cpp +++ b/src/qt/qt_settings.cpp @@ -149,7 +149,7 @@ void Settings::save() { void Settings::accept() { - if (confirm_save) + if (confirm_save && !settings_only) { QMessageBox questionbox(QMessageBox::Icon::Question, "86Box", QStringLiteral("%1\n\n%2").arg(tr("Do you want to save the settings?"), tr("This will hard reset the emulated machine.")), QMessageBox::Save | QMessageBox::Cancel, this); QCheckBox *chkbox = new QCheckBox(tr("Don't show this message again")); From b33b036ba72a4a045a9ca46b2b2de8bc045bcec9 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 6 Feb 2022 12:46:15 +0600 Subject: [PATCH 269/278] Attempt floppy creation dialog fixing --- src/qt/qt_newfloppydialog.ui | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/qt/qt_newfloppydialog.ui b/src/qt/qt_newfloppydialog.ui index 42d5e0a4f..7daf1fb3c 100644 --- a/src/qt/qt_newfloppydialog.ui +++ b/src/qt/qt_newfloppydialog.ui @@ -34,7 +34,14 @@ - + + + + 1 + 1 + + + @@ -44,7 +51,14 @@ - + + + + 0 + 0 + + + @@ -54,7 +68,14 @@ - + + + + 0 + 0 + + + From 39b19fc5b184f3863cea491d4f5a6ddc94b7149e Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 6 Feb 2022 12:49:37 +0600 Subject: [PATCH 270/278] File fields are now expanding inside layouts --- src/qt/qt_filefield.ui | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_filefield.ui b/src/qt/qt_filefield.ui index 14c58349b..6e3eadea6 100644 --- a/src/qt/qt_filefield.ui +++ b/src/qt/qt_filefield.ui @@ -10,6 +10,12 @@ 43 + + + 0 + 0 + + Form @@ -27,10 +33,23 @@ 0 - + + + + 0 + 0 + + + + + + 0 + 0 + + &Specify... From 8efcd01f0bce6c67114f46f3b20ff24d14098d39 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 6 Feb 2022 13:10:00 +0600 Subject: [PATCH 271/278] Further file field fixes --- src/qt/qt_filefield.ui | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/qt/qt_filefield.ui b/src/qt/qt_filefield.ui index 6e3eadea6..6a8480049 100644 --- a/src/qt/qt_filefield.ui +++ b/src/qt/qt_filefield.ui @@ -12,8 +12,8 @@ - 0 - 0 + 1 + 1 @@ -36,8 +36,8 @@ - 0 - 0 + 1 + 1 @@ -45,9 +45,9 @@ - - 0 - 0 + + 1 + 1 From 89a7c2246c91de70a2559e99b1aa3e8dd863b124 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 6 Feb 2022 14:41:07 +0600 Subject: [PATCH 272/278] Fix file field in hard disk creation dialog --- src/qt/qt_filefield.ui | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/qt/qt_filefield.ui b/src/qt/qt_filefield.ui index 6a8480049..5234db03d 100644 --- a/src/qt/qt_filefield.ui +++ b/src/qt/qt_filefield.ui @@ -7,13 +7,13 @@ 0 0 354 - 43 + 25 - - 1 - 1 + + 0 + 0 @@ -35,8 +35,8 @@ - - 1 + + 0 1 @@ -45,8 +45,8 @@ - - 1 + + 0 1 From 01a7dd8845b5734ab50810d692902478c0523534 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 6 Feb 2022 14:41:25 +0600 Subject: [PATCH 273/278] Attempt to reduce fluctations in percentage display --- src/qt/qt_main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index f9200f08b..c35fd4fc9 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -202,6 +202,7 @@ int main(int argc, char* argv[]) { QObject::connect(&onesec, &QTimer::timeout, &app, [] { pc_onesec(); }); + onesec.setTimerType(Qt::PreciseTimer); onesec.start(1000); if (discord_loaded) { QTimer::singleShot(1000, &app, [] { From 28ea4d5edf0db043fc4bbe131d064a4663f1669f Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 6 Feb 2022 15:02:40 +0600 Subject: [PATCH 274/278] qt: Fix tall file field for real --- src/qt/qt_filefield.ui | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/qt/qt_filefield.ui b/src/qt/qt_filefield.ui index 5234db03d..457e3916a 100644 --- a/src/qt/qt_filefield.ui +++ b/src/qt/qt_filefield.ui @@ -35,9 +35,9 @@ - + 0 - 1 + 0 @@ -45,9 +45,9 @@ - + 0 - 1 + 0 From 7b3eaac6cf2cd268acab97be158f206974b63770 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sun, 6 Feb 2022 11:48:56 +0200 Subject: [PATCH 275/278] qt: don't load discord dll if only starting settings --- src/qt/qt_main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index c35fd4fc9..a6a999fa1 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -135,7 +135,6 @@ int main(int argc, char* argv[]) { return 6; } - discord_load(); if (settings_only) { Settings settings; @@ -146,6 +145,9 @@ int main(int argc, char* argv[]) { } return 0; } + + discord_load(); + main_window = new MainWindow(); main_window->show(); app.installEventFilter(main_window); From 577a72748f7229dba039309fc1da15b91654c95d Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sun, 6 Feb 2022 13:30:39 +0200 Subject: [PATCH 276/278] qt: make qt dependencies a feature in vcpkg so they are not included if building non-qt --- CMakeLists.txt | 4 ++++ vcpkg.json | 17 ++++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ecbb4ca6b..b8635cdc1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,6 +18,10 @@ cmake_minimum_required(VERSION 3.16) cmake_policy(SET CMP0091 NEW) cmake_policy(SET CMP0079 NEW) +if (QT) + list(APPEND VCPKG_MANIFEST_FEATURES "qt-ui") +endif() + project(86Box VERSION 3.2 DESCRIPTION "Emulator of x86-based systems" diff --git a/vcpkg.json b/vcpkg.json index bc7c7c524..f4e78d8e7 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -3,14 +3,21 @@ "version-string": "3.1", "homepage": "https://86box.net/", "documentation": "http://86box.readthedocs.io/", - "license": "GPL-2.0-only", + "license": "GPL-2.0-or-later", "dependencies": [ "freetype", "libpng", "openal-soft", "sdl2", - "rtmidi", - "qt5-base", - "qt5-translations" - ] + "rtmidi" + ], + "features": { + "qt-ui": { + "description": "Qt User Interface", + "dependencies": [ + "qt5-base", + "qt5-translations" + ] + } + } } From 10647b832fe757e83bfd0cf960bc9b7f2be854c6 Mon Sep 17 00:00:00 2001 From: ts-korhonen Date: Sun, 6 Feb 2022 13:41:34 +0200 Subject: [PATCH 277/278] qt: fix win_discord.o error in makefile build --- src/win/Makefile.mingw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/win/Makefile.mingw b/src/win/Makefile.mingw index cfcef28ab..4362273e7 100644 --- a/src/win/Makefile.mingw +++ b/src/win/Makefile.mingw @@ -717,7 +717,7 @@ PLATOBJ := win.o \ win_crashdump.o \ win_mouse.o -UIOBJ := win_ui.o win_icon.o win_stbar.o win_discord.o \ +UIOBJ := win_ui.o win_icon.o win_stbar.o discord.o \ win_sdl.o win_opengl.o win_opengl_glslp.o glad.o \ win_dialog.o win_about.o \ win_settings.o win_devconf.o win_snd_gain.o win_specify_dim.o win_preferences.o \ From 0ee2c6ca5613e9e22339a175df826f848ff5426c Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 6 Feb 2022 21:54:59 +0200 Subject: [PATCH 278/278] qt: fix floppy dialog on macos --- src/qt/qt_newfloppydialog.ui | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/qt/qt_newfloppydialog.ui b/src/qt/qt_newfloppydialog.ui index 7daf1fb3c..7fb044fcc 100644 --- a/src/qt/qt_newfloppydialog.ui +++ b/src/qt/qt_newfloppydialog.ui @@ -7,19 +7,19 @@ 0 0 327 - 140 + 200 327 - 140 + 200 327 - 140 + 200 @@ -36,9 +36,9 @@ - - 1 - 1 + + 0 + 0 @@ -53,7 +53,7 @@ - + 0 0 @@ -70,7 +70,7 @@ - + 0 0