mirror of
https://github.com/86Box/86Box.git
synced 2026-02-22 01:25:33 -07:00
Merge branch '86Box:master' into dell-p60-fix
This commit is contained in:
@@ -236,6 +236,7 @@ char monitor_edid_path[1024] = { 0 }; /* (C) Path to
|
||||
|
||||
double video_gl_input_scale = 1.0; /* (C) OpenGL 3.x input scale */
|
||||
int video_gl_input_scale_mode = FULLSCR_SCALE_FULL; /* (C) OpenGL 3.x input stretch mode */
|
||||
int color_scheme = 0; /* (C) Color scheme of UI (Windows-only) */
|
||||
|
||||
// Accelerator key array
|
||||
struct accelKey acc_keys[NUM_ACCELS];
|
||||
|
||||
@@ -28,6 +28,9 @@ add_library(cdrom OBJECT
|
||||
if(NOT WIN32)
|
||||
target_include_directories(86Box PRIVATE PkgConfig::SNDFILE)
|
||||
endif()
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
|
||||
target_include_directories(cdrom PRIVATE /usr/local/include)
|
||||
endif()
|
||||
target_link_libraries(86Box PkgConfig::SNDFILE)
|
||||
|
||||
if(CDROM_MITSUMI)
|
||||
|
||||
@@ -344,7 +344,7 @@ cdrom_is_sector_good(cdrom_t *dev, const uint8_t *b, const uint8_t mode2, const
|
||||
{
|
||||
int ret = 1;
|
||||
|
||||
if (!mode2 || (form == 1)) {
|
||||
if ((dev->cd_status != CD_STATUS_DVD) && (!mode2 || (form == 1))) {
|
||||
if (mode2 && (form == 1)) {
|
||||
const uint32_t crc = cdrom_crc32(0xffffffff, &(b[16]), 2056) ^ 0xffffffff;
|
||||
|
||||
@@ -2976,9 +2976,12 @@ cdrom_update_status(cdrom_t *dev)
|
||||
dev->seek_pos = 0;
|
||||
dev->cd_buflen = 0;
|
||||
|
||||
if (dev->ops->is_dvd(dev->local))
|
||||
dev->cd_status = CD_STATUS_DVD;
|
||||
else
|
||||
if (dev->ops->is_dvd(dev->local)) {
|
||||
if (cdrom_is_dvd(dev->type))
|
||||
dev->cd_status = CD_STATUS_DVD;
|
||||
else
|
||||
dev->cd_status = CD_STATUS_DVD_REJECTED;
|
||||
} else
|
||||
dev->cd_status = dev->ops->has_audio(dev->local) ? CD_STATUS_STOPPED :
|
||||
CD_STATUS_DATA_ONLY;
|
||||
|
||||
|
||||
@@ -128,6 +128,7 @@ load_global(void)
|
||||
confirm_reset = ini_section_get_int(cat, "confirm_reset", 1);
|
||||
confirm_exit = ini_section_get_int(cat, "confirm_exit", 1);
|
||||
confirm_save = ini_section_get_int(cat, "confirm_save", 1);
|
||||
color_scheme = ini_section_get_int(cat, "color_scheme", 0);
|
||||
|
||||
inhibit_multimedia_keys = ini_section_get_int(cat, "inhibit_multimedia_keys", 0);
|
||||
|
||||
@@ -2222,6 +2223,11 @@ save_global(void)
|
||||
ini_section_set_string(cat, "language", buffer);
|
||||
}
|
||||
|
||||
if (color_scheme)
|
||||
ini_section_set_int(cat, "color_scheme", color_scheme);
|
||||
else
|
||||
ini_section_delete_var(cat, "color_scheme");
|
||||
|
||||
if (open_dir_usr_path)
|
||||
ini_section_set_int(cat, "open_dir_usr_path", open_dir_usr_path);
|
||||
else
|
||||
|
||||
@@ -341,7 +341,6 @@ const lpt_device_t lpt_hasp_savquest_device = {
|
||||
.close = hasp_close,
|
||||
.write_data = hasp_write_data,
|
||||
.write_ctrl = NULL,
|
||||
.autofeed = NULL,
|
||||
.strobe = NULL,
|
||||
.read_status = hasp_read_status,
|
||||
.read_ctrl = NULL,
|
||||
|
||||
@@ -2100,7 +2100,7 @@ static const device_config_t mplus2_config[] = {
|
||||
// clang-format off
|
||||
{
|
||||
.name = "size",
|
||||
.description = "Memory Size",
|
||||
.description = "Memory size",
|
||||
.type = CONFIG_SPINNER,
|
||||
.default_string = "",
|
||||
.default_int = 64,
|
||||
|
||||
@@ -222,15 +222,6 @@ lpt_ecp_update_irq(lpt_t *dev)
|
||||
picintclevel(1 << dev->irq, &dev->irq_state);
|
||||
}
|
||||
|
||||
static void
|
||||
lpt_autofeed(lpt_t *dev, const uint8_t val)
|
||||
{
|
||||
if (dev->dt && dev->dt->autofeed && dev->dt->priv)
|
||||
dev->dt->autofeed(val, dev->dt->priv);
|
||||
|
||||
dev->autofeed = val;
|
||||
}
|
||||
|
||||
static void
|
||||
lpt_strobe(lpt_t *dev, const uint8_t val)
|
||||
{
|
||||
@@ -258,8 +249,6 @@ lpt_fifo_out_callback(void *priv)
|
||||
else
|
||||
ret = dma_channel_read(dev->dma);
|
||||
|
||||
lpt_log("DMA %02X: %08X\n", dev->dma, ret);
|
||||
|
||||
if (ret != DMA_NODATA) {
|
||||
fifo_write_evt_tagged(0x01, (uint8_t) (ret & 0xff), dev->fifo);
|
||||
|
||||
@@ -299,7 +288,6 @@ lpt_fifo_out_callback(void *priv)
|
||||
dev->dma_stat = 0x04;
|
||||
dev->state = LPT_STATE_IDLE;
|
||||
lpt_ecp_update_irq(dev);
|
||||
lpt_autofeed(dev, 0);
|
||||
} else {
|
||||
dev->state = LPT_STATE_READ_DMA;
|
||||
|
||||
@@ -312,8 +300,6 @@ lpt_fifo_out_callback(void *priv)
|
||||
} else if (!fifo_get_empty(dev->fifo))
|
||||
timer_advance_u64(&dev->fifo_out_timer,
|
||||
(uint64_t) ((1000000.0 / 2500000.0) * (double) TIMER_USEC));
|
||||
else
|
||||
lpt_autofeed(dev, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -354,13 +340,11 @@ lpt_write(const uint16_t port, const uint8_t val, void *priv)
|
||||
break;
|
||||
|
||||
case 0x0002:
|
||||
if (dev->dt && dev->dt->write_ctrl && dev->dt->priv) {
|
||||
if (dev->ecp && ((dev->ecr & 0xe0) >= 0x20))
|
||||
dev->dt->write_ctrl((val & 0xfc) | dev->autofeed | dev->strobe, dev->dt->priv);
|
||||
else
|
||||
dev->dt->write_ctrl(val, dev->dt->priv);
|
||||
}
|
||||
if (dev->dt && dev->dt->write_ctrl && dev->dt->priv)
|
||||
dev->dt->write_ctrl(val, dev->dt->priv);
|
||||
dev->ctrl = val;
|
||||
dev->strobe = val & 0x01;
|
||||
dev->autofeed = val & 0x02;
|
||||
dev->enable_irq = val & 0x10;
|
||||
if (!(val & 0x10) && (dev->irq != 0xff))
|
||||
picintc(1 << dev->irq);
|
||||
@@ -430,11 +414,6 @@ lpt_write(const uint16_t port, const uint8_t val, void *priv)
|
||||
break;
|
||||
|
||||
case 0x0402: case 0x0406:
|
||||
if (!(val & 0x0c))
|
||||
lpt_autofeed(dev, 0x00);
|
||||
else
|
||||
lpt_autofeed(dev, 0x02);
|
||||
|
||||
if ((dev->ecr & 0x04) && !(val & 0x04)) {
|
||||
dev->dma_stat = 0x00;
|
||||
fifo_reset(dev->fifo);
|
||||
|
||||
@@ -208,6 +208,15 @@ rz1000_reset(void *priv)
|
||||
dev->regs[0x0a] = 0x01; /* IDE controller */
|
||||
dev->regs[0x0b] = 0x01; /* Mass storage controller */
|
||||
|
||||
dev->regs[0x10] = 0xf1;
|
||||
dev->regs[0x11] = 0x01;
|
||||
dev->regs[0x14] = 0xf5;
|
||||
dev->regs[0x15] = 0x03;
|
||||
dev->regs[0x18] = 0x71;
|
||||
dev->regs[0x19] = 0x01;
|
||||
dev->regs[0x1c] = 0x75;
|
||||
dev->regs[0x1d] = 0x03;
|
||||
|
||||
dev->irq_mode[0] = dev->irq_mode[1] = 0;
|
||||
dev->irq_pin = PCI_INTA;
|
||||
dev->irq_line = 14;
|
||||
|
||||
@@ -206,6 +206,8 @@ extern int portable_mode; /* we are running in portable mode
|
||||
extern int monitor_edid; /* (C) Which EDID to use. 0=default, 1=custom. */
|
||||
extern char monitor_edid_path[1024]; /* (C) Path to custom EDID */
|
||||
|
||||
extern int color_scheme; /* (C) Color scheme of UI (Windows-only) */
|
||||
|
||||
#ifndef USE_NEW_DYNAREC
|
||||
extern FILE *stdlog; /* file to log output to */
|
||||
#endif
|
||||
|
||||
@@ -25,7 +25,6 @@ typedef struct lpt_device_s {
|
||||
void (*close)(void *priv);
|
||||
void (*write_data)(uint8_t val, void *priv);
|
||||
void (*write_ctrl)(uint8_t val, void *priv);
|
||||
void (*autofeed)(uint8_t val,void *priv);
|
||||
void (*strobe)(uint8_t old, uint8_t val,void *priv);
|
||||
uint8_t (*read_status)(void *priv);
|
||||
uint8_t (*read_ctrl)(void *priv);
|
||||
|
||||
@@ -149,11 +149,11 @@ static const scancode scancode_tandy[512] = {
|
||||
{ .mk = { 0x51, 0 }, .brk = { 0xd1, 0 } }, /* 051 */
|
||||
{ .mk = { 0x52, 0 }, .brk = { 0xd2, 0 } }, /* 052 */
|
||||
{ .mk = { 0x56, 0 }, .brk = { 0xd6, 0 } }, /* 053 */
|
||||
{ .mk = { 0 }, .brk = { 0 } }, /* 054 */
|
||||
{ .mk = { 0x54, 0 }, .brk = { 0xd4, 0 } }, /* 054 */
|
||||
{ .mk = { 0 }, .brk = { 0 } }, /* 055 */
|
||||
{ .mk = { 0 }, .brk = { 0 } }, /* 056 */
|
||||
{ .mk = { 0 }, .brk = { 0 } }, /* 057 */
|
||||
{ .mk = { 0 }, .brk = { 0 } }, /* 058 */
|
||||
{ .mk = { 0x59, 0 }, .brk = { 0xd9, 0 } }, /* 057 */
|
||||
{ .mk = { 0x5a, 0 }, .brk = { 0xda, 0 } }, /* 058 */
|
||||
{ .mk = { 0 }, .brk = { 0 } }, /* 059 */
|
||||
{ .mk = { 0 }, .brk = { 0 } }, /* 05a */
|
||||
{ .mk = { 0 }, .brk = { 0 } }, /* 05b */
|
||||
@@ -392,7 +392,7 @@ static const scancode scancode_tandy[512] = {
|
||||
{ .mk = { 0 }, .brk = { 0 } }, /* 144 */
|
||||
{ .mk = { 0 }, .brk = { 0 } }, /* 145 */
|
||||
{ .mk = { 0x46, 0 }, .brk = { 0xc6, 0 } }, /* 146 */
|
||||
{ .mk = { 0x47, 0 }, .brk = { 0xc7, 0 } }, /* 147 */
|
||||
{ .mk = { 0x58, 0 }, .brk = { 0xd8, 0 } }, /* 147 */
|
||||
{ .mk = { 0x29, 0 }, .brk = { 0xa9, 0 } }, /* 148 */
|
||||
{ .mk = { 0x49, 0 }, .brk = { 0xc9, 0 } }, /* 149 */
|
||||
{ .mk = { 0 }, .brk = { 0 } }, /* 14a */
|
||||
@@ -403,7 +403,7 @@ static const scancode scancode_tandy[512] = {
|
||||
{ .mk = { 0x4f, 0 }, .brk = { 0xcf, 0 } }, /* 14f */
|
||||
{ .mk = { 0x4a, 0 }, .brk = { 0xca, 0 } }, /* 150 */
|
||||
{ .mk = { 0x51, 0 }, .brk = { 0xd1, 0 } }, /* 151 */
|
||||
{ .mk = { 0x52, 0 }, .brk = { 0xd2, 0 } }, /* 152 */
|
||||
{ .mk = { 0x55, 0 }, .brk = { 0xd5, 0 } }, /* 152 */
|
||||
{ .mk = { 0x53, 0 }, .brk = { 0xd3, 0 } }, /* 153 */
|
||||
{ .mk = { 0 }, .brk = { 0 } }, /* 154 */
|
||||
{ .mk = { 0 }, .brk = { 0 } }, /* 155 */
|
||||
|
||||
@@ -11390,7 +11390,7 @@ const machine_t machines[] = {
|
||||
.default_jumpered_ecp_dma = 3,
|
||||
.kbc_device = &kbc_at_device,
|
||||
.kbc_params = KBC_VEN_PHOENIX | 0x00012900,
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.kbc_p1 = 0x00001010,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = &batman_device,
|
||||
@@ -11976,7 +11976,7 @@ const machine_t machines[] = {
|
||||
.default_jumpered_ecp_dma = 3,
|
||||
.kbc_device = &kbc_at_device,
|
||||
.kbc_params = KBC_VEN_PHOENIX | 0x00012900,
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.kbc_p1 = 0x00001010,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = &plato_device,
|
||||
|
||||
@@ -71,6 +71,9 @@ if(NETSWITCH)
|
||||
endif()
|
||||
|
||||
if (UNIX)
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
|
||||
set_source_files_properties(net_slirp.c PROPERTIES COMPILE_FLAGS "-I/usr/local/include")
|
||||
endif()
|
||||
find_path(HAS_VDE "libvdeplug.h" PATHS ${VDE_INCLUDE_DIR} "/usr/include /usr/local/include" "/opt/homebrew/include" )
|
||||
if(HAS_VDE)
|
||||
find_library(VDE_LIB vdeplug)
|
||||
|
||||
@@ -494,7 +494,6 @@ const lpt_device_t lpt_plip_device = {
|
||||
.close = plip_close,
|
||||
.write_data = plip_write_data,
|
||||
.write_ctrl = plip_write_ctrl,
|
||||
.autofeed = NULL,
|
||||
.strobe = NULL,
|
||||
.read_status = plip_read_status,
|
||||
.read_ctrl = NULL,
|
||||
|
||||
@@ -37,6 +37,10 @@ endif()
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(FREETYPE REQUIRED IMPORTED_TARGET freetype2)
|
||||
target_link_libraries(86Box PkgConfig::FREETYPE)
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
|
||||
target_include_directories(print PRIVATE /usr/local/include)
|
||||
target_include_directories(print PRIVATE /usr/local/include/freetype2)
|
||||
endif()
|
||||
if(STATIC_BUILD)
|
||||
# if(QT)
|
||||
# Qt provides its own version of harfbuzz which leads to duplicated symbols.
|
||||
|
||||
@@ -520,7 +520,7 @@ update_font(escp_t *dev)
|
||||
} else
|
||||
switch (dev->lq_typeface) {
|
||||
case TYPEFACE_ROMAN:
|
||||
fn = FONT_FILE_ROMAN;
|
||||
fn = (dev->font_style & STYLE_PROP) ? FONT_FILE_ROMAN : FONT_FILE_COURIER;
|
||||
break;
|
||||
case TYPEFACE_SANSSERIF:
|
||||
fn = FONT_FILE_SANSSERIF;
|
||||
@@ -890,7 +890,7 @@ process_char(escp_t *dev, uint8_t ch)
|
||||
break;
|
||||
|
||||
case 0x21: /* master select (ESC !) */
|
||||
dev->cpi = dev->esc_parms[0] & 0x01 ? 12.0 : 10.0;
|
||||
dev->cpi = (dev->esc_parms[0]) & 0x01 ? 12.0 : 10.0;
|
||||
|
||||
/* Reset first seven bits. */
|
||||
dev->font_style &= 0xFF80;
|
||||
@@ -1045,7 +1045,7 @@ process_char(escp_t *dev, uint8_t ch)
|
||||
update_font(dev);
|
||||
break;
|
||||
|
||||
case 0x47: /* select dobule-strike printing (ESC G) */
|
||||
case 0x47: /* select double-strike printing (ESC G) */
|
||||
dev->font_style |= STYLE_DOUBLESTRIKE;
|
||||
break;
|
||||
|
||||
@@ -1098,7 +1098,7 @@ process_char(escp_t *dev, uint8_t ch)
|
||||
break;
|
||||
|
||||
case 0x52: /* select an intl character set (ESC R) */
|
||||
if (dev->esc_parms[0] <= 13 || dev->esc_parms[0] == 64) {
|
||||
if ((dev->esc_parms[0] <= 13) || (dev->esc_parms[0] == 64)) {
|
||||
if (dev->esc_parms[0] == 64)
|
||||
dev->esc_parms[0] = 14;
|
||||
|
||||
@@ -1118,9 +1118,9 @@ process_char(escp_t *dev, uint8_t ch)
|
||||
break;
|
||||
|
||||
case 0x53: /* select superscript/subscript printing (ESC S) */
|
||||
if (dev->esc_parms[0] == 0 || dev->esc_parms[0] == '0')
|
||||
if ((dev->esc_parms[0] == 0) || (dev->esc_parms[0] == '0'))
|
||||
dev->font_style |= STYLE_SUBSCRIPT;
|
||||
if (dev->esc_parms[0] == 1 || dev->esc_parms[1] == '1')
|
||||
if ((dev->esc_parms[0] == 1) || (dev->esc_parms[1] == '1'))
|
||||
dev->font_style |= STYLE_SUPERSCRIPT;
|
||||
update_font(dev);
|
||||
break;
|
||||
@@ -1137,9 +1137,9 @@ process_char(escp_t *dev, uint8_t ch)
|
||||
case 0x57: /* turn double-width printing on/off (ESC W) */
|
||||
if (!dev->multipoint_mode) {
|
||||
dev->hmi = -1;
|
||||
if (dev->esc_parms[0] == 0 || dev->esc_parms[0] == '0')
|
||||
if ((dev->esc_parms[0] == 0) || (dev->esc_parms[0] == '0'))
|
||||
dev->font_style &= ~STYLE_DOUBLEWIDTH;
|
||||
if (dev->esc_parms[0] == 1 || dev->esc_parms[0] == '1')
|
||||
if ((dev->esc_parms[0] == 1) || (dev->esc_parms[0] == '1'))
|
||||
dev->font_style |= STYLE_DOUBLEWIDTH;
|
||||
update_font(dev);
|
||||
}
|
||||
@@ -1216,9 +1216,9 @@ process_char(escp_t *dev, uint8_t ch)
|
||||
break;
|
||||
|
||||
case 0x6b: /* select typeface (ESC k) */
|
||||
if (dev->esc_parms[0] <= 11 || dev->esc_parms[0] == 30 || dev->esc_parms[0] == 31) {
|
||||
if ((dev->esc_parms[0] <= 11) || (dev->esc_parms[0] == 30) ||
|
||||
(dev->esc_parms[0] == 31))
|
||||
dev->lq_typeface = dev->esc_parms[0];
|
||||
}
|
||||
update_font(dev);
|
||||
break;
|
||||
|
||||
@@ -1229,9 +1229,9 @@ process_char(escp_t *dev, uint8_t ch)
|
||||
break;
|
||||
|
||||
case 0x70: /* Turn proportional mode on/off (ESC p) */
|
||||
if (dev->esc_parms[0] == 0 || dev->esc_parms[0] == '0')
|
||||
if ((dev->esc_parms[0] == 0) || (dev->esc_parms[0] == '0'))
|
||||
dev->font_style &= ~STYLE_PROP;
|
||||
if (dev->esc_parms[0] == 1 || dev->esc_parms[0] == '1') {
|
||||
if ((dev->esc_parms[0] == 1) || (dev->esc_parms[0] == '1')) {
|
||||
dev->font_style |= STYLE_PROP;
|
||||
dev->print_quality = QUALITY_LQ;
|
||||
}
|
||||
@@ -1264,20 +1264,20 @@ process_char(escp_t *dev, uint8_t ch)
|
||||
|
||||
case 0x77: /* turn double-height printing on/off (ESC w) */
|
||||
if (!dev->multipoint_mode) {
|
||||
if (dev->esc_parms[0] == 0 || dev->esc_parms[0] == '0')
|
||||
if ((dev->esc_parms[0] == 0) || (dev->esc_parms[0] == '0'))
|
||||
dev->font_style &= ~STYLE_DOUBLEHEIGHT;
|
||||
if (dev->esc_parms[0] == 1 || dev->esc_parms[0] == '1')
|
||||
if ((dev->esc_parms[0] == 1) || (dev->esc_parms[0] == '1'))
|
||||
dev->font_style |= STYLE_DOUBLEHEIGHT;
|
||||
update_font(dev);
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x78: /* select LQ or draft (ESC x) */
|
||||
if (dev->esc_parms[0] == 0 || dev->esc_parms[0] == '0') {
|
||||
if ((dev->esc_parms[0] == 0) || (dev->esc_parms[0] == '0')) {
|
||||
dev->print_quality = QUALITY_DRAFT;
|
||||
dev->font_style |= STYLE_CONDENSED;
|
||||
}
|
||||
if (dev->esc_parms[0] == 1 || dev->esc_parms[0] == '1') {
|
||||
if ((dev->esc_parms[0] == 1) || (dev->esc_parms[0] == '1')) {
|
||||
dev->print_quality = QUALITY_LQ;
|
||||
dev->font_style &= ~STYLE_CONDENSED;
|
||||
}
|
||||
@@ -1884,17 +1884,6 @@ write_data(uint8_t val, void *priv)
|
||||
dev->data = val;
|
||||
}
|
||||
|
||||
static void
|
||||
autofeed(uint8_t val, void *priv)
|
||||
{
|
||||
escp_t *dev = (escp_t *) priv;
|
||||
|
||||
if (dev == NULL)
|
||||
return;
|
||||
|
||||
dev->autofeed = ((val & 0x02) > 0);
|
||||
}
|
||||
|
||||
static void
|
||||
strobe(uint8_t old, uint8_t val, void *priv)
|
||||
{
|
||||
@@ -2147,7 +2136,6 @@ const lpt_device_t lpt_prt_escp_device = {
|
||||
.close = escp_close,
|
||||
.write_data = write_data,
|
||||
.write_ctrl = write_ctrl,
|
||||
.autofeed = autofeed,
|
||||
.strobe = strobe,
|
||||
.read_status = read_status,
|
||||
.read_ctrl = read_ctrl,
|
||||
|
||||
@@ -322,17 +322,6 @@ process_data(ps_t *dev)
|
||||
dev->buffer[dev->buffer_pos] = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
ps_autofeed(uint8_t val, void *priv)
|
||||
{
|
||||
ps_t *dev = (ps_t *) priv;
|
||||
|
||||
if (dev == NULL)
|
||||
return;
|
||||
|
||||
dev->autofeed = val & 0x02 ? true : false;
|
||||
}
|
||||
|
||||
static void
|
||||
ps_strobe(uint8_t old, uint8_t val, void *priv)
|
||||
{
|
||||
@@ -533,7 +522,6 @@ const lpt_device_t lpt_prt_ps_device = {
|
||||
.close = ps_close,
|
||||
.write_data = ps_write_data,
|
||||
.write_ctrl = ps_write_ctrl,
|
||||
.autofeed = ps_autofeed,
|
||||
.strobe = ps_strobe,
|
||||
.read_status = ps_read_status,
|
||||
.read_ctrl = NULL,
|
||||
@@ -551,7 +539,6 @@ const lpt_device_t lpt_prt_pcl_device = {
|
||||
.close = ps_close,
|
||||
.write_data = ps_write_data,
|
||||
.write_ctrl = ps_write_ctrl,
|
||||
.autofeed = ps_autofeed,
|
||||
.strobe = ps_strobe,
|
||||
.read_status = ps_read_status,
|
||||
.read_ctrl = NULL,
|
||||
|
||||
@@ -369,18 +369,6 @@ write_data(uint8_t val, void *priv)
|
||||
dev->data = val;
|
||||
}
|
||||
|
||||
static void
|
||||
autofeed(uint8_t val, void *priv)
|
||||
{
|
||||
prnt_t *dev = (prnt_t *) priv;
|
||||
|
||||
if (dev == NULL)
|
||||
return;
|
||||
|
||||
/* set autofeed value */
|
||||
dev->autofeed = val & 0x02 ? 1 : 0;
|
||||
}
|
||||
|
||||
static void
|
||||
strobe(uint8_t old, uint8_t val, void *priv)
|
||||
{
|
||||
@@ -418,7 +406,7 @@ write_ctrl(uint8_t val, void *priv)
|
||||
return;
|
||||
|
||||
/* set autofeed value */
|
||||
dev->autofeed = val & 0x02 ? 1 : 0;
|
||||
dev->autofeed = (val & 0x02) ? 1 : 0;
|
||||
|
||||
if (val & 0x08) { /* SELECT */
|
||||
/* select printer */
|
||||
@@ -562,7 +550,6 @@ const lpt_device_t lpt_prt_text_device = {
|
||||
.close = prnt_close,
|
||||
.write_data = write_data,
|
||||
.write_ctrl = write_ctrl,
|
||||
.autofeed = autofeed,
|
||||
.strobe = strobe,
|
||||
.read_status = read_status,
|
||||
.read_ctrl = NULL,
|
||||
|
||||
@@ -2972,3 +2972,15 @@ msgstr ""
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr ""
|
||||
|
||||
msgid "System"
|
||||
msgstr ""
|
||||
|
||||
msgid "Light"
|
||||
msgstr ""
|
||||
|
||||
msgid "Dark"
|
||||
msgstr ""
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "Vstupní měřítko OpenGL"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "režim roztažení vstupu OpenGL"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Barevné schéma"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Světlo"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Tmavá"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "Eingabeskala von OpenGL"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "Eingabestreckungsmodus von OpenGL"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Farbschema"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Licht"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Dunkel"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "Escala de entrada de OpenGL"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "Modo de estiramiento de entrada de OpenGL"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Esquema de colores"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Luz"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Oscuro"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "OpenGL:n syöttöasteikko"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "OpenGL:n syötteen venytystila"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Värimaailma"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Valo"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Tumma"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "Échelle d'entrée d'OpenGL"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "Mode d'étirement des données d'entrée d'OpenGL"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Palette de couleurs"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Lumière"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Sombre"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "Ulazna skala OpenGL-a"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "Način rastezanja ulaza u OpenGL-u"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Shema boja"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Svjetlo"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Tamno"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "Scala di input di OpenGL"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "Modalità di allungamento dell'input di OpenGL"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Combinazione di colori"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Luce"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Scuro"
|
||||
|
||||
@@ -2593,7 +2593,7 @@ msgid "Generic Text Printer"
|
||||
msgstr "汎用テキスト・プリンタ"
|
||||
|
||||
msgid "Generic ESC/P 2 Dot-Matrix Printer"
|
||||
msgstr "汎用ESC/Pドットマトリクスプリンタ"
|
||||
msgstr "汎用ESC/P 2ドットマトリクスプリンタ"
|
||||
|
||||
msgid "Generic PostScript Printer"
|
||||
msgstr "汎用ポストスクリプトプリンタ"
|
||||
@@ -2695,7 +2695,7 @@ msgid "Unable to find Dot-Matrix fonts"
|
||||
msgstr "ドットマトリクスフォントが見つかりません"
|
||||
|
||||
msgid "TrueType fonts in the \"roms/printer/fonts\" directory are required for the emulation of the Generic ESC/P 2 Dot-Matrix Printer."
|
||||
msgstr "汎用ESC/Pドットマトリクスプリンタのエミュレーションには、roms/printer/fontsディレクトリ内のTrueTypeフォントが必要です。"
|
||||
msgstr "汎用ESC/P 2ドットマトリクスプリンタのエミュレーションには、roms/printer/fontsディレクトリ内のTrueTypeフォントが必要です。"
|
||||
|
||||
msgid "Inhibit multimedia keys"
|
||||
msgstr "マルチメディアキーを無効にする"
|
||||
@@ -2972,3 +2972,12 @@ msgstr "OpenGLの入力スケール"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "OpenGLの入力ストレッチモード"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "配色"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "光"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "暗闇"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "OpenGL 입력 스케일"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "OpenGL 입력 스트레치 모드"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "색상 구성"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "빛"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "어둠"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "Inngangsskala for OpenGL"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "Inngangsstrekkmodus for OpenGL"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Fargevalg"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Lys"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Mørk"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "Invoerschaal van OpenGL"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "Input stretch-modus van OpenGL"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Kleurenschema"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Licht"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Donker"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "Skala wejściowa OpenGL"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "Tryb rozciągania wejściowego OpenGL"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Schemat kolorów"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Światło"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Ciemny"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "Escala de entrada do OpenGL"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "Modo de expansão de entrada do OpenGL"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Esquema de cores"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Claro"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Escuro"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "Escala de entrada do OpenGL"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "Modo de expansão de entrada do OpenGL"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Esquema de cores"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Claro"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Escuro"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "Масштаб ввода OpenGL"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "Режим растяжения ввода OpenGL"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Цветовая схема"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Светлая"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Тёмная"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "Vstupná stupnica OpenGL"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "Režim rozťahovania vstupu OpenGL"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Farebná schéma"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Svetlo"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Tmavá"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "Vhodna lestvica OpenGL"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "Način raztezanja vhoda OpenGL"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Barvna shema"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Svetloba"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Temno"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "Inmatningsskala för OpenGL"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "Inmatningssträckningsläge för OpenGL"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Färgschema"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Ljus"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Mörk"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "OpenGL'nin giriş ölçeği"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "OpenGL'nin giriş germe modu"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Renk şeması"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Işık"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Karanlık"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "Шкала введення OpenGL"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "Режим розтягування вхідних даних OpenGL"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Колірна гамма"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Світло"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Темний"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "Độ phân giải đầu vào của OpenGL"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "Chế độ kéo giãn đầu vào của OpenGL"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Bảng màu"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Ánh sáng"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Tối"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "OpenGL的输入比例"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "OpenGL的输入拉伸模式"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "配色方案"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "光"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "黑暗"
|
||||
|
||||
@@ -2972,3 +2972,12 @@ msgstr "OpenGL 的輸入比例"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "OpenGL 的輸入拉伸模式"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "配色方案"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "光"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "黑暗"
|
||||
|
||||
@@ -515,10 +515,15 @@ main_thread_fn()
|
||||
|
||||
static std::thread *main_thread;
|
||||
|
||||
#ifdef Q_OS_WINDOWS
|
||||
WindowsDarkModeFilter* vmm_dark_mode_filter = nullptr;
|
||||
#endif
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
#ifdef Q_OS_WINDOWS
|
||||
bool wasDarkTheme = false;
|
||||
/* Check if Windows supports UTF-8 */
|
||||
if (GetACP() == CP_UTF8)
|
||||
acp_utf8 = 1;
|
||||
@@ -554,6 +559,7 @@ main(int argc, char *argv[])
|
||||
f.open(QFile::ReadOnly | QFile::Text);
|
||||
QTextStream ts(&f);
|
||||
qApp->setStyleSheet(ts.readAll());
|
||||
wasDarkTheme = true;
|
||||
}
|
||||
QPalette palette(qApp->palette());
|
||||
palette.setColor(QPalette::Link, Qt::white);
|
||||
@@ -585,6 +591,16 @@ main(int argc, char *argv[])
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef Q_OS_WINDOWS
|
||||
if (util::isWindowsLightTheme() && wasDarkTheme) {
|
||||
qApp->setStyleSheet("");
|
||||
QPalette palette(qApp->palette());
|
||||
palette.setColor(QPalette::Link, Qt::blue);
|
||||
palette.setColor(QPalette::LinkVisited, Qt::magenta);
|
||||
qApp->setPalette(palette);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!start_vmm)
|
||||
#ifdef Q_OS_MACOS
|
||||
qt_set_sequence_auto_mnemonic(false);
|
||||
@@ -645,6 +661,8 @@ main(int argc, char *argv[])
|
||||
const auto vmm_main_window = new VMManagerMainWindow();
|
||||
#ifdef Q_OS_WINDOWS
|
||||
darkModeFilter.get()->setWindow(vmm_main_window);
|
||||
// HACK
|
||||
vmm_dark_mode_filter = darkModeFilter.get();
|
||||
#endif
|
||||
vmm_main_window->show();
|
||||
});
|
||||
@@ -831,6 +849,7 @@ main(int argc, char *argv[])
|
||||
});
|
||||
QObject::connect(main_window, &MainWindow::vmmRunningStateChanged, &manager_socket, &VMManagerClientSocket::clientRunningStateChanged);
|
||||
QObject::connect(main_window, &MainWindow::vmmConfigurationChanged, &manager_socket, &VMManagerClientSocket::configurationChanged);
|
||||
QObject::connect(main_window, &MainWindow::vmmGlobalConfigurationChanged, &manager_socket, &VMManagerClientSocket::globalConfigurationChanged);
|
||||
main_window->installEventFilter(&manager_socket);
|
||||
|
||||
manager_socket.sendWinIdMessage(main_window->winId());
|
||||
@@ -864,6 +883,10 @@ main(int argc, char *argv[])
|
||||
|
||||
/* Initialize the rendering window, or fullscreen. */
|
||||
QTimer::singleShot(0, &app, [] {
|
||||
#ifdef Q_OS_WINDOWS
|
||||
extern bool NewDarkMode;
|
||||
NewDarkMode = util::isWindowsLightTheme();
|
||||
#endif
|
||||
pc_reset_hard_init();
|
||||
|
||||
/* Set the PAUSE mode depending on the renderer. */
|
||||
|
||||
@@ -2140,6 +2140,9 @@ MainWindow::on_actionHiDPI_scaling_triggered()
|
||||
void
|
||||
MainWindow::on_actionHide_status_bar_triggered()
|
||||
{
|
||||
auto w = ui->stackedWidget->width() * (!dpi_scale ? util::screenOfWidget(this)->devicePixelRatio() : 1.);
|
||||
auto h = ui->stackedWidget->height() * (!dpi_scale ? util::screenOfWidget(this)->devicePixelRatio() : 1.);
|
||||
|
||||
hide_status_bar ^= 1;
|
||||
ui->actionHide_status_bar->setChecked(hide_status_bar);
|
||||
statusBar()->setVisible(!hide_status_bar);
|
||||
@@ -2151,7 +2154,7 @@ MainWindow::on_actionHide_status_bar_triggered()
|
||||
} else {
|
||||
int vid_resize_orig = vid_resize;
|
||||
vid_resize = 0;
|
||||
emit resizeContents(monitors[0].mon_scrnsz_x, monitors[0].mon_scrnsz_y);
|
||||
emit resizeContents(vid_resize_orig ? w : monitors[0].mon_scrnsz_x, vid_resize_orig ? h : monitors[0].mon_scrnsz_y);
|
||||
vid_resize = vid_resize_orig;
|
||||
if (vid_resize == 1)
|
||||
setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
|
||||
@@ -2161,6 +2164,9 @@ MainWindow::on_actionHide_status_bar_triggered()
|
||||
void
|
||||
MainWindow::on_actionHide_tool_bar_triggered()
|
||||
{
|
||||
auto w = ui->stackedWidget->width() * (!dpi_scale ? util::screenOfWidget(this)->devicePixelRatio() : 1.);
|
||||
auto h = ui->stackedWidget->height() * (!dpi_scale ? util::screenOfWidget(this)->devicePixelRatio() : 1.);
|
||||
|
||||
hide_tool_bar ^= 1;
|
||||
ui->actionHide_tool_bar->setChecked(hide_tool_bar);
|
||||
ui->toolBar->setVisible(!hide_tool_bar);
|
||||
@@ -2169,7 +2175,7 @@ MainWindow::on_actionHide_tool_bar_triggered()
|
||||
} else {
|
||||
int vid_resize_orig = vid_resize;
|
||||
vid_resize = 0;
|
||||
emit resizeContents(monitors[0].mon_scrnsz_x, monitors[0].mon_scrnsz_y);
|
||||
emit resizeContents(vid_resize_orig ? w : monitors[0].mon_scrnsz_x, vid_resize_orig ? h : monitors[0].mon_scrnsz_y);
|
||||
vid_resize = vid_resize_orig;
|
||||
if (vid_resize == 1)
|
||||
setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
|
||||
@@ -2244,7 +2250,9 @@ void
|
||||
MainWindow::on_actionPreferences_triggered()
|
||||
{
|
||||
ProgSettings progsettings(this);
|
||||
progsettings.exec();
|
||||
if (progsettings.exec() == QDialog::Accepted) {
|
||||
emit vmmGlobalConfigurationChanged();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -68,6 +68,7 @@ signals:
|
||||
|
||||
void vmmRunningStateChanged(VMManagerProtocol::RunningState state);
|
||||
void vmmConfigurationChanged();
|
||||
void vmmGlobalConfigurationChanged();
|
||||
public slots:
|
||||
void showSettings();
|
||||
void hardReset();
|
||||
|
||||
@@ -942,7 +942,7 @@
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Square pixels (keep ratio)</string>
|
||||
<string>&Square pixels (Keep ratio)</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_Integer_scale_gl">
|
||||
|
||||
@@ -96,8 +96,13 @@ ProgSettings::ProgSettings(QWidget *parent)
|
||||
ui->checkBoxConfirmSave->setChecked(confirm_save);
|
||||
ui->checkBoxConfirmHardReset->setChecked(confirm_reset);
|
||||
|
||||
ui->radioButtonSystem->setChecked(color_scheme == 0);
|
||||
ui->radioButtonLight->setChecked(color_scheme == 1);
|
||||
ui->radioButtonDark->setChecked(color_scheme == 2);
|
||||
|
||||
#ifndef Q_OS_WINDOWS
|
||||
ui->checkBoxMultimediaKeys->setHidden(true);
|
||||
ui->groupBox->setHidden(true);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -111,6 +116,13 @@ ProgSettings::accept()
|
||||
confirm_reset = ui->checkBoxConfirmHardReset->isChecked() ? 1 : 0;
|
||||
inhibit_multimedia_keys = ui->checkBoxMultimediaKeys->isChecked() ? 1 : 0;
|
||||
|
||||
color_scheme = (ui->radioButtonSystem->isChecked()) ? 0 : (ui->radioButtonLight->isChecked() ? 1 : 2);
|
||||
|
||||
#ifdef Q_OS_WINDOWS
|
||||
extern void selectDarkMode();
|
||||
selectDarkMode();
|
||||
#endif
|
||||
|
||||
loadTranslators(QCoreApplication::instance());
|
||||
reloadStrings();
|
||||
update_mouse_msg();
|
||||
@@ -126,6 +138,7 @@ ProgSettings::accept()
|
||||
connect(main_window, &MainWindow::updateStatusBarTip, main_window->status.get(), &MachineStatus::updateTip);
|
||||
connect(main_window, &MainWindow::statusBarMessage, main_window->status.get(), &MachineStatus::message, Qt::QueuedConnection);
|
||||
mouse_sensitivity = mouseSensitivity;
|
||||
config_save_global();
|
||||
QDialog::accept();
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>458</width>
|
||||
<height>391</height>
|
||||
<height>508</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
@@ -27,7 +27,7 @@
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SetFixedSize</enum>
|
||||
<enum>QLayout::SizeConstraint::SetFixedSize</enum>
|
||||
</property>
|
||||
<item row="0" column="0" colspan="2">
|
||||
<widget class="QLabel" name="label_2">
|
||||
@@ -36,6 +36,40 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<widget class="QCheckBox" name="checkBoxMultimediaKeys">
|
||||
<property name="text">
|
||||
<string>Inhibit multimedia keys</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Mouse sensitivity:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QPushButton" name="pushButton_2">
|
||||
<property name="text">
|
||||
<string>Default</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QComboBox" name="comboBoxLanguage">
|
||||
<property name="maxVisibleItems">
|
||||
@@ -48,30 +82,10 @@
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QPushButton" name="pushButtonLanguage">
|
||||
<item row="8" column="0">
|
||||
<widget class="QCheckBox" name="checkBoxConfirmSave">
|
||||
<property name="text">
|
||||
<string>Default</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Mouse sensitivity:</string>
|
||||
<string>Ask for confirmation before saving settings</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -93,27 +107,7 @@
|
||||
<number>100</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QPushButton" name="pushButton_2">
|
||||
<property name="text">
|
||||
<string>Default</string>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -127,19 +121,25 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<widget class="QCheckBox" name="checkBoxMultimediaKeys">
|
||||
<item row="2" column="1">
|
||||
<widget class="QPushButton" name="pushButtonLanguage">
|
||||
<property name="text">
|
||||
<string>Inhibit multimedia keys</string>
|
||||
<string>Default</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<widget class="QCheckBox" name="checkBoxConfirmSave">
|
||||
<property name="text">
|
||||
<string>Ask for confirmation before saving settings</string>
|
||||
<item row="5" column="0">
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="9" column="0">
|
||||
<widget class="QCheckBox" name="checkBoxConfirmExit">
|
||||
@@ -148,6 +148,16 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="14" column="0" colspan="2">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="0">
|
||||
<widget class="QCheckBox" name="checkBoxConfirmHardReset">
|
||||
<property name="text">
|
||||
@@ -155,14 +165,34 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="13" column="0" colspan="2">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
<item row="13" column="0">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Color scheme</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonSystem">
|
||||
<property name="text">
|
||||
<string>System</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonLight">
|
||||
<property name="text">
|
||||
<string>Light</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonDark">
|
||||
<property name="text">
|
||||
<string>Dark</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
|
||||
@@ -118,5 +118,7 @@ SpecifyDimensions::on_SpecifyDimensions_accepted()
|
||||
+ main_window->menuBar()->height()
|
||||
+ (main_window->statusBar()->height() * !hide_status_bar)
|
||||
+ (main_window->ui->toolBar->height() * !hide_tool_bar));
|
||||
window_w = ui->spinBoxWidth->value();
|
||||
window_h = ui->spinBoxHeight->value();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,6 +66,10 @@ screenOfWidget(QWidget *widget)
|
||||
|
||||
bool
|
||||
isWindowsLightTheme(void) {
|
||||
if (color_scheme != 0) {
|
||||
return (color_scheme == 1);
|
||||
}
|
||||
|
||||
// based on https://stackoverflow.com/questions/51334674/how-to-detect-windows-10-light-dark-mode-in-win32-application
|
||||
|
||||
// The value is expected to be a REG_DWORD, which is a signed 32-bit little-endian
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
extern "C" {
|
||||
#include "86box/plat.h"
|
||||
#include "86box/config.h"
|
||||
}
|
||||
|
||||
VMManagerClientSocket::VMManagerClientSocket(QObject* obj) : server_connected(false)
|
||||
@@ -183,6 +184,15 @@ VMManagerClientSocket::jsonReceived(const QJsonObject &json)
|
||||
case VMManagerProtocol::ManagerMessage::RequestStatus:
|
||||
qDebug("Status request command received from manager");
|
||||
break;
|
||||
case VMManagerProtocol::ManagerMessage::GlobalConfigurationChanged:
|
||||
{
|
||||
config_load_global();
|
||||
#ifdef Q_OS_WINDOWS
|
||||
void selectDarkMode();
|
||||
selectDarkMode();
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
default:
|
||||
qDebug("Unknown client message type received:");
|
||||
qDebug() << json;
|
||||
@@ -248,6 +258,12 @@ VMManagerClientSocket::clientRunningStateChanged(VMManagerProtocol::RunningState
|
||||
sendMessageWithObject(VMManagerProtocol::ClientMessage::RunningStateChanged, extra_object);
|
||||
}
|
||||
|
||||
void
|
||||
VMManagerClientSocket::globalConfigurationChanged() const
|
||||
{
|
||||
sendMessage(VMManagerProtocol::ClientMessage::GlobalConfigurationChanged);
|
||||
}
|
||||
|
||||
void
|
||||
VMManagerClientSocket::configurationChanged() const
|
||||
{
|
||||
|
||||
@@ -45,6 +45,7 @@ signals:
|
||||
public slots:
|
||||
void clientRunningStateChanged(VMManagerProtocol::RunningState state) const;
|
||||
void configurationChanged() const;
|
||||
void globalConfigurationChanged() const;
|
||||
|
||||
private:
|
||||
QString server_name;
|
||||
|
||||
@@ -248,52 +248,52 @@ VMManagerDetails::updateConfig(VMManagerSystem *passed_sysconfig) {
|
||||
|
||||
// System
|
||||
systemSection->clear();
|
||||
systemSection->addSection("Machine", passed_sysconfig->getDisplayValue(Display::Name::Machine));
|
||||
systemSection->addSection("CPU", passed_sysconfig->getDisplayValue(Display::Name::CPU));
|
||||
systemSection->addSection("Memory", passed_sysconfig->getDisplayValue(Display::Name::Memory));
|
||||
systemSection->addSection("Machine", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Machine));
|
||||
systemSection->addSection("CPU", passed_sysconfig->getDisplayValue(VMManager::Display::Name::CPU));
|
||||
systemSection->addSection("Memory", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Memory));
|
||||
|
||||
// Video
|
||||
videoSection->clear();
|
||||
videoSection->addSection("Video", passed_sysconfig->getDisplayValue(Display::Name::Video));
|
||||
if(!passed_sysconfig->getDisplayValue(Display::Name::Voodoo).isEmpty()) {
|
||||
videoSection->addSection("Voodoo", passed_sysconfig->getDisplayValue(Display::Name::Voodoo));
|
||||
videoSection->addSection("Video", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Video));
|
||||
if(!passed_sysconfig->getDisplayValue(VMManager::Display::Name::Voodoo).isEmpty()) {
|
||||
videoSection->addSection("Voodoo", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Voodoo));
|
||||
}
|
||||
|
||||
// Disks
|
||||
storageSection->clear();
|
||||
storageSection->addSection("Disks", passed_sysconfig->getDisplayValue(Display::Name::Disks));
|
||||
storageSection->addSection("Floppy", passed_sysconfig->getDisplayValue(Display::Name::Floppy));
|
||||
storageSection->addSection("CD-ROM", passed_sysconfig->getDisplayValue(Display::Name::CD));
|
||||
storageSection->addSection("Removable disks", passed_sysconfig->getDisplayValue(Display::Name::RDisk));
|
||||
storageSection->addSection("MO", passed_sysconfig->getDisplayValue(Display::Name::MO));
|
||||
storageSection->addSection("SCSI", passed_sysconfig->getDisplayValue(Display::Name::SCSIController));
|
||||
storageSection->addSection("Controllers", passed_sysconfig->getDisplayValue(Display::Name::StorageController));
|
||||
storageSection->addSection("Disks", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Disks));
|
||||
storageSection->addSection("Floppy", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Floppy));
|
||||
storageSection->addSection("CD-ROM", passed_sysconfig->getDisplayValue(VMManager::Display::Name::CD));
|
||||
storageSection->addSection("Removable disks", passed_sysconfig->getDisplayValue(VMManager::Display::Name::RDisk));
|
||||
storageSection->addSection("MO", passed_sysconfig->getDisplayValue(VMManager::Display::Name::MO));
|
||||
storageSection->addSection("SCSI", passed_sysconfig->getDisplayValue(VMManager::Display::Name::SCSIController));
|
||||
storageSection->addSection("Controllers", passed_sysconfig->getDisplayValue(VMManager::Display::Name::StorageController));
|
||||
|
||||
// Audio
|
||||
audioSection->clear();
|
||||
audioSection->addSection("Audio", passed_sysconfig->getDisplayValue(Display::Name::Audio));
|
||||
audioSection->addSection("MIDI Out", passed_sysconfig->getDisplayValue(Display::Name::MidiOut));
|
||||
audioSection->addSection("Audio", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Audio));
|
||||
audioSection->addSection("MIDI Out", passed_sysconfig->getDisplayValue(VMManager::Display::Name::MidiOut));
|
||||
|
||||
// Network
|
||||
networkSection->clear();
|
||||
networkSection->addSection("NIC", passed_sysconfig->getDisplayValue(Display::Name::NIC));
|
||||
networkSection->addSection("NIC", passed_sysconfig->getDisplayValue(VMManager::Display::Name::NIC));
|
||||
|
||||
// Input
|
||||
inputSection->clear();
|
||||
inputSection->addSection("Keyboard", passed_sysconfig->getDisplayValue(Display::Name::Keyboard));
|
||||
inputSection->addSection("Mouse", passed_sysconfig->getDisplayValue(Display::Name::Mouse));
|
||||
inputSection->addSection("Joystick", passed_sysconfig->getDisplayValue(Display::Name::Joystick));
|
||||
inputSection->addSection("Keyboard", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Keyboard));
|
||||
inputSection->addSection("Mouse", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Mouse));
|
||||
inputSection->addSection("Joystick", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Joystick));
|
||||
|
||||
// Ports
|
||||
portsSection->clear();
|
||||
portsSection->addSection("Serial ports", passed_sysconfig->getDisplayValue(Display::Name::Serial));
|
||||
portsSection->addSection("Parallel ports", passed_sysconfig->getDisplayValue(Display::Name::Parallel));
|
||||
portsSection->addSection("Serial ports", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Serial));
|
||||
portsSection->addSection("Parallel ports", passed_sysconfig->getDisplayValue(VMManager::Display::Name::Parallel));
|
||||
|
||||
// Other devices
|
||||
otherSection->clear();
|
||||
otherSection->addSection("ISA RTC", passed_sysconfig->getDisplayValue(Display::Name::IsaRtc));
|
||||
otherSection->addSection("ISA RAM", passed_sysconfig->getDisplayValue(Display::Name::IsaMem));
|
||||
otherSection->addSection("ISA ROM", passed_sysconfig->getDisplayValue(Display::Name::IsaRom));
|
||||
otherSection->addSection("ISA RTC", passed_sysconfig->getDisplayValue(VMManager::Display::Name::IsaRtc));
|
||||
otherSection->addSection("ISA RAM", passed_sysconfig->getDisplayValue(VMManager::Display::Name::IsaMem));
|
||||
otherSection->addSection("ISA ROM", passed_sysconfig->getDisplayValue(VMManager::Display::Name::IsaRom));
|
||||
|
||||
systemSection->setSections();
|
||||
videoSection->setSections();
|
||||
|
||||
@@ -145,7 +145,7 @@ VMManagerDetailSection::setSectionName(const QString &name)
|
||||
}
|
||||
|
||||
void
|
||||
VMManagerDetailSection::addSection(const QString &name, const QString &value, Display::Name displayField)
|
||||
VMManagerDetailSection::addSection(const QString &name, const QString &value, VMManager::Display::Name displayField)
|
||||
{
|
||||
const auto new_section = DetailSection { name, value};
|
||||
sections.push_back(new_section);
|
||||
|
||||
@@ -31,10 +31,13 @@
|
||||
#include <atomic>
|
||||
|
||||
#include "qt_vmmanager_main.hpp"
|
||||
#include "qt_vmmanager_mainwindow.hpp"
|
||||
#include "ui_qt_vmmanager_main.h"
|
||||
#include "qt_vmmanager_model.hpp"
|
||||
#include "qt_vmmanager_addmachine.hpp"
|
||||
|
||||
extern VMManagerMainWindow* vmm_main_window;
|
||||
|
||||
// https://stackoverflow.com/a/36460740
|
||||
bool copyPath(QString sourceDir, QString destinationDir, bool overWriteDirectory)
|
||||
{
|
||||
@@ -348,6 +351,10 @@ illegal_chars:
|
||||
}
|
||||
});
|
||||
|
||||
connect(vm_model, &VMManagerModel::globalConfigurationChanged, this, [this] () {
|
||||
vmm_main_window->updateSettings();
|
||||
});
|
||||
|
||||
// Initial default details view
|
||||
vm_details = new VMManagerDetails(ui->detailsArea);
|
||||
ui->detailsArea->layout()->addWidget(vm_details);
|
||||
@@ -400,6 +407,12 @@ VMManagerMain::~VMManagerMain() {
|
||||
delete vm_model;
|
||||
}
|
||||
|
||||
void
|
||||
VMManagerMain::updateGlobalSettings()
|
||||
{
|
||||
vmm_main_window->updateSettings();
|
||||
}
|
||||
|
||||
void
|
||||
VMManagerMain::currentSelectionChanged(const QModelIndex ¤t,
|
||||
const QModelIndex &previous)
|
||||
@@ -768,6 +781,10 @@ VMManagerMain::onPreferencesUpdated()
|
||||
if (oldRegexSearch != regexSearch) {
|
||||
ui->searchBar->clear();
|
||||
}
|
||||
|
||||
if (vm_model) {
|
||||
vm_model->sendGlobalConfigurationChanged();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -70,6 +70,7 @@ public slots:
|
||||
void shutdownForceButtonPressed() const;
|
||||
void searchSystems(const QString &text) const;
|
||||
void newMachineWizard();
|
||||
void updateGlobalSettings();
|
||||
void deleteSystem(VMManagerSystem *sysconfig);
|
||||
void addNewSystem(const QString &name, const QString &dir, const QString &displayName = QString(), const QString &configFile = {});
|
||||
#if __GNUC__ >= 11
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include "qt_vmmanager_mainwindow.hpp"
|
||||
#include "qt_vmmanager_main.hpp"
|
||||
#include "qt_vmmanager_preferences.hpp"
|
||||
#include "qt_vmmanager_windarkmodefilter.hpp"
|
||||
#include "ui_qt_vmmanager_mainwindow.h"
|
||||
#if EMU_BUILD_NUM != 0
|
||||
# include "qt_updatecheckdialog.hpp"
|
||||
@@ -30,7 +31,16 @@
|
||||
#include <QStringListModel>
|
||||
#include <QCompleter>
|
||||
#include <QCloseEvent>
|
||||
#include <QDesktopServices>
|
||||
#include <QDesktopServices>
|
||||
|
||||
extern "C"
|
||||
{
|
||||
extern void config_load_global();
|
||||
extern void config_save_global();
|
||||
}
|
||||
|
||||
VMManagerMainWindow* vmm_main_window = nullptr;
|
||||
extern WindowsDarkModeFilter* vmm_dark_mode_filter;
|
||||
|
||||
VMManagerMainWindow::
|
||||
VMManagerMainWindow(QWidget *parent)
|
||||
@@ -41,6 +51,8 @@ VMManagerMainWindow(QWidget *parent)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
vmm_main_window = this;
|
||||
|
||||
// Connect signals from the VMManagerMain widget
|
||||
connect(vmm, &VMManagerMain::selectionChanged, this, &VMManagerMainWindow::vmmSelectionChanged);
|
||||
|
||||
@@ -118,6 +130,7 @@ VMManagerMainWindow(QWidget *parent)
|
||||
connect(this, &VMManagerMainWindow::languageUpdated, vmm, &VMManagerMain::onLanguageUpdated);
|
||||
#ifdef Q_OS_WINDOWS
|
||||
connect(this, &VMManagerMainWindow::darkModeUpdated, vmm, &VMManagerMain::onDarkModeUpdated);
|
||||
connect(this, &VMManagerMainWindow::preferencesUpdated, [this] () { vmm_dark_mode_filter->reselectDarkMode(); });
|
||||
#endif
|
||||
|
||||
{
|
||||
@@ -187,6 +200,14 @@ VMManagerMainWindow::preferencesTriggered()
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
VMManagerMainWindow::updateSettings()
|
||||
{
|
||||
config_load_global();
|
||||
emit preferencesUpdated();
|
||||
updateLanguage();
|
||||
}
|
||||
|
||||
void
|
||||
VMManagerMainWindow::saveSettings() const
|
||||
{
|
||||
|
||||
@@ -34,6 +34,7 @@ class VMManagerMainWindow final : public QMainWindow
|
||||
public:
|
||||
explicit VMManagerMainWindow(QWidget *parent = nullptr);
|
||||
~VMManagerMainWindow() override;
|
||||
void updateSettings();
|
||||
signals:
|
||||
void preferencesUpdated();
|
||||
void languageUpdated();
|
||||
|
||||
@@ -23,6 +23,7 @@ VMManagerModel::VMManagerModel() {
|
||||
for ( const auto& each_config : machines_vec) {
|
||||
machines.append(each_config);
|
||||
connect(each_config, &VMManagerSystem::itemDataChanged, this, &VMManagerModel::modelDataChanged);
|
||||
connect(each_config, &VMManagerSystem::globalConfigurationChanged, this, &VMManagerModel::globalConfigurationChanged);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -138,6 +139,7 @@ VMManagerModel::addConfigToModel(VMManagerSystem *system_config)
|
||||
beginInsertRows(QModelIndex(), this->rowCount(QModelIndex()), this->rowCount(QModelIndex()));
|
||||
machines.append(system_config);
|
||||
connect(system_config, &VMManagerSystem::itemDataChanged, this, &VMManagerModel::modelDataChanged);
|
||||
connect(system_config, &VMManagerSystem::globalConfigurationChanged, this, &VMManagerModel::globalConfigurationChanged);
|
||||
endInsertRows();
|
||||
}
|
||||
|
||||
@@ -177,6 +179,16 @@ VMManagerModel::getProcessStats()
|
||||
return stats;
|
||||
}
|
||||
|
||||
void
|
||||
VMManagerModel::sendGlobalConfigurationChanged()
|
||||
{
|
||||
for (auto& system: machines) {
|
||||
if (system->getProcessStatus() != VMManagerSystem::ProcessStatus::Stopped) {
|
||||
system->sendGlobalConfigurationChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
VMManagerModel::getActiveMachineCount()
|
||||
{
|
||||
|
||||
@@ -60,8 +60,10 @@ public:
|
||||
QMap<VMManagerSystem::ProcessStatus, int> getProcessStats();
|
||||
int getActiveMachineCount();
|
||||
void refreshConfigs();
|
||||
void sendGlobalConfigurationChanged();
|
||||
signals:
|
||||
void systemDataChanged();
|
||||
void globalConfigurationChanged();
|
||||
|
||||
private:
|
||||
QVector<VMManagerSystem *> machines;
|
||||
|
||||
@@ -24,6 +24,11 @@
|
||||
#include "qt_vmmanager_config.hpp"
|
||||
#include "ui_qt_vmmanager_preferences.h"
|
||||
|
||||
#ifdef Q_OS_WINDOWS
|
||||
#include "qt_vmmanager_windarkmodefilter.hpp"
|
||||
extern WindowsDarkModeFilter* vmm_dark_mode_filter;
|
||||
#endif
|
||||
|
||||
extern "C" {
|
||||
#include <86box/86box.h>
|
||||
#include <86box/config.h>
|
||||
@@ -66,7 +71,13 @@ VMManagerPreferences(QWidget *parent) : ui(new Ui::VMManagerPreferences)
|
||||
const auto useRegexSearch = config->getStringValue("regex_search").toInt();
|
||||
ui->regexSearchCheckBox->setChecked(useRegexSearch);
|
||||
|
||||
ui->radioButtonSystem->setChecked(color_scheme == 0);
|
||||
ui->radioButtonLight->setChecked(color_scheme == 1);
|
||||
ui->radioButtonDark->setChecked(color_scheme == 2);
|
||||
|
||||
#ifndef Q_OS_WINDOWS
|
||||
ui->groupBoxColorScheme->setHidden(true);
|
||||
#endif
|
||||
}
|
||||
|
||||
VMManagerPreferences::~
|
||||
@@ -95,6 +106,7 @@ VMManagerPreferences::accept()
|
||||
|
||||
strncpy(vmm_path_cfg, QDir::cleanPath(ui->systemDirectory->text()).toUtf8().constData(), sizeof(vmm_path_cfg) - 1);
|
||||
lang_id = ui->comboBoxLanguage->currentData().toInt();
|
||||
color_scheme = (ui->radioButtonSystem->isChecked()) ? 0 : (ui->radioButtonLight->isChecked() ? 1 : 2);
|
||||
config_save_global();
|
||||
|
||||
#if EMU_BUILD_NUM != 0
|
||||
|
||||
@@ -7,13 +7,16 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>400</width>
|
||||
<height>300</height>
|
||||
<height>475</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Preferences</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SizeConstraint::SetFixedSize</enum>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
@@ -103,10 +106,40 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBoxColorScheme">
|
||||
<property name="title">
|
||||
<string>Color scheme</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonSystem">
|
||||
<property name="text">
|
||||
<string>System</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonLight">
|
||||
<property name="text">
|
||||
<string>Light</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonDark">
|
||||
<property name="text">
|
||||
<string>Dark</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -119,10 +152,10 @@
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
@@ -95,6 +95,8 @@ VMManagerProtocol::getClientMessageType(const QJsonObject &json_document)
|
||||
return VMManagerProtocol::ClientMessage::ConfigurationChanged;
|
||||
} else if (message_type == "WinIdMessage") {
|
||||
return VMManagerProtocol::ClientMessage::WinIdMessage;
|
||||
} else if (message_type == "GlobalConfigurationChanged") {
|
||||
return VMManagerProtocol::ClientMessage::GlobalConfigurationChanged;
|
||||
}
|
||||
return VMManagerProtocol::ClientMessage::UnknownMessage;
|
||||
}
|
||||
@@ -119,6 +121,8 @@ VMManagerProtocol::getManagerMessageType(const QJsonObject &json_document)
|
||||
return VMManagerProtocol::ManagerMessage::RequestShutdown;
|
||||
} if (message_type == "ForceShutdown") {
|
||||
return VMManagerProtocol::ManagerMessage::ForceShutdown;
|
||||
} if (message_type == "GlobalConfigurationChanged") {
|
||||
return VMManagerProtocol::ManagerMessage::GlobalConfigurationChanged;
|
||||
}
|
||||
return VMManagerProtocol::ManagerMessage::UnknownMessage;
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@ public:
|
||||
ResetVM,
|
||||
RequestShutdown,
|
||||
ForceShutdown,
|
||||
GlobalConfigurationChanged,
|
||||
UnknownMessage,
|
||||
};
|
||||
|
||||
@@ -56,6 +57,7 @@ public:
|
||||
RunningStateChanged,
|
||||
ConfigurationChanged,
|
||||
WinIdMessage,
|
||||
GlobalConfigurationChanged,
|
||||
UnknownMessage,
|
||||
};
|
||||
Q_ENUM(ClientMessage);
|
||||
|
||||
@@ -189,6 +189,10 @@ VMManagerServerSocket::jsonReceived(const QJsonObject &json)
|
||||
qDebug("Configuration change received from client");
|
||||
emit configurationChanged();
|
||||
break;
|
||||
case VMManagerProtocol::ClientMessage::GlobalConfigurationChanged:
|
||||
qDebug("Global configuration change received from client");
|
||||
emit globalConfigurationChanged();
|
||||
break;
|
||||
default:
|
||||
qDebug("Unknown client message type received:");
|
||||
qDebug() << json;
|
||||
|
||||
@@ -76,6 +76,7 @@ signals:
|
||||
void windowStatusChanged(int status);
|
||||
void runningStatusChanged(VMManagerProtocol::RunningState state);
|
||||
void configurationChanged();
|
||||
void globalConfigurationChanged();
|
||||
void winIdReceived(WId id);
|
||||
|
||||
|
||||
|
||||
@@ -557,7 +557,7 @@ VMManagerSystem::setupVars() {
|
||||
}
|
||||
}
|
||||
}
|
||||
display_table[Display::Name::Machine] = machine_name;
|
||||
display_table[VMManager::Display::Name::Machine] = machine_name;
|
||||
|
||||
// CPU: Combine name with speed and FPU
|
||||
QString cpu_name = "Unknown";
|
||||
@@ -592,34 +592,34 @@ VMManagerSystem::setupVars() {
|
||||
// int speed_display = machine_config["cpu_speed"].toInt() / 1000000;
|
||||
// cpu_name.append(QString::number(speed_display).prepend(" / "));
|
||||
// cpu_name.append(QCoreApplication::translate("", "MHz").prepend(' '));
|
||||
display_table[Display::Name::CPU] = cpu_name;
|
||||
display_table[VMManager::Display::Name::CPU] = cpu_name;
|
||||
|
||||
// Memory
|
||||
int divisor = (ram_granularity < 1024) ? 1 : 1024;
|
||||
QString display_unit = (divisor == 1) ? "KB" : "MB";
|
||||
auto mem_display = QString::number(machine_config["mem_size"].toInt() / divisor);
|
||||
mem_display.append(QCoreApplication::translate("", display_unit.toUtf8().constData()).prepend(' '));
|
||||
display_table[Display::Name::Memory] = mem_display;
|
||||
display_table[VMManager::Display::Name::Memory] = mem_display;
|
||||
|
||||
// Video card
|
||||
int video_int = video_get_video_from_internal_name(video_config["gfxcard"].toUtf8().data());
|
||||
const device_t* video_dev = video_card_getdevice(video_int);
|
||||
display_table[Display::Name::Video] = DeviceConfig::DeviceName(video_dev, video_get_internal_name(video_int), 1);
|
||||
display_table[VMManager::Display::Name::Video] = DeviceConfig::DeviceName(video_dev, video_get_internal_name(video_int), 1);
|
||||
|
||||
// Secondary video
|
||||
if (video_config.contains("gfxcard_2")) {
|
||||
int video2_int = video_get_video_from_internal_name(video_config["gfxcard_2"].toUtf8().data());
|
||||
const device_t* video2_dev = video_card_getdevice(video2_int);
|
||||
display_table[Display::Name::Video].append(DeviceConfig::DeviceName(video2_dev, video_get_internal_name(video2_int), 1).prepend(VMManagerDetailSection::sectionSeparator));
|
||||
display_table[VMManager::Display::Name::Video].append(DeviceConfig::DeviceName(video2_dev, video_get_internal_name(video2_int), 1).prepend(VMManagerDetailSection::sectionSeparator));
|
||||
}
|
||||
|
||||
// Add-on video that's not Voodoo
|
||||
if (video_config.contains("8514a") && (video_config["8514a"].toInt() != 0))
|
||||
display_table[Display::Name::Video].append(tr("IBM 8514/A Graphics").prepend(VMManagerDetailSection::sectionSeparator));
|
||||
display_table[VMManager::Display::Name::Video].append(tr("IBM 8514/A Graphics").prepend(VMManagerDetailSection::sectionSeparator));
|
||||
if (video_config.contains("xga") && (video_config["xga"].toInt() != 0))
|
||||
display_table[Display::Name::Video].append(tr("XGA Graphics").prepend(VMManagerDetailSection::sectionSeparator));
|
||||
display_table[VMManager::Display::Name::Video].append(tr("XGA Graphics").prepend(VMManagerDetailSection::sectionSeparator));
|
||||
if (video_config.contains("da2") && (video_config["da2"].toInt() != 0))
|
||||
display_table[Display::Name::Video].append(tr("IBM PS/55 Display Adapter Graphics").prepend(VMManagerDetailSection::sectionSeparator));
|
||||
display_table[VMManager::Display::Name::Video].append(tr("IBM PS/55 Display Adapter Graphics").prepend(VMManagerDetailSection::sectionSeparator));
|
||||
|
||||
// Voodoo
|
||||
QString voodoo_name = "";
|
||||
@@ -641,7 +641,7 @@ VMManagerSystem::setupVars() {
|
||||
break;
|
||||
}
|
||||
}
|
||||
display_table[Display::Name::Voodoo] = voodoo_name;
|
||||
display_table[VMManager::Display::Name::Voodoo] = voodoo_name;
|
||||
|
||||
// Drives
|
||||
// First the number of disks
|
||||
@@ -666,7 +666,7 @@ VMManagerSystem::setupVars() {
|
||||
if (disks.count()) {
|
||||
disks_display.append(" / ").append(bus_types.keys().join(", ").toUpper());
|
||||
}
|
||||
// display_table[Display::Name::Disks] = disks_display;
|
||||
// display_table[VMManager::Display::Name::Disks] = disks_display;
|
||||
|
||||
// Drives
|
||||
QString new_disk_display;
|
||||
@@ -699,7 +699,7 @@ VMManagerSystem::setupVars() {
|
||||
if(new_disk_display.isEmpty()) {
|
||||
new_disk_display = tr("No disks");
|
||||
}
|
||||
display_table[Display::Name::Disks] = new_disk_display;
|
||||
display_table[VMManager::Display::Name::Disks] = new_disk_display;
|
||||
|
||||
// Floppy & CD-ROM
|
||||
QStringList floppyDevices;
|
||||
@@ -748,8 +748,8 @@ VMManagerSystem::setupVars() {
|
||||
}
|
||||
}
|
||||
|
||||
display_table[Display::Name::Floppy] = floppyDevices.join(VMManagerDetailSection::sectionSeparator);
|
||||
display_table[Display::Name::CD] = cdromDevices.join(VMManagerDetailSection::sectionSeparator);
|
||||
display_table[VMManager::Display::Name::Floppy] = floppyDevices.join(VMManagerDetailSection::sectionSeparator);
|
||||
display_table[VMManager::Display::Name::CD] = cdromDevices.join(VMManagerDetailSection::sectionSeparator);
|
||||
|
||||
// Removable disks & MO
|
||||
QStringList rdiskDevices;
|
||||
@@ -786,8 +786,8 @@ VMManagerSystem::setupVars() {
|
||||
}
|
||||
}
|
||||
|
||||
display_table[Display::Name::RDisk] = rdiskDevices.join(VMManagerDetailSection::sectionSeparator);
|
||||
display_table[Display::Name::MO] = moDevices.join(VMManagerDetailSection::sectionSeparator);
|
||||
display_table[VMManager::Display::Name::RDisk] = rdiskDevices.join(VMManagerDetailSection::sectionSeparator);
|
||||
display_table[VMManager::Display::Name::MO] = moDevices.join(VMManagerDetailSection::sectionSeparator);
|
||||
|
||||
|
||||
// SCSI controllers
|
||||
@@ -805,7 +805,7 @@ VMManagerSystem::setupVars() {
|
||||
}
|
||||
}
|
||||
}
|
||||
display_table[Display::Name::SCSIController] = scsiControllers.join(VMManagerDetailSection::sectionSeparator);
|
||||
display_table[VMManager::Display::Name::SCSIController] = scsiControllers.join(VMManagerDetailSection::sectionSeparator);
|
||||
|
||||
// Hard and floppy disk controllers
|
||||
QStringList storageControllers;
|
||||
@@ -864,7 +864,7 @@ VMManagerSystem::setupVars() {
|
||||
if (storage_config.contains(ide_qua_internal_name) && (storage_config[ide_qua_internal_name].toInt() != 0))
|
||||
storageControllers.append(DeviceConfig::DeviceName(hdc_get_device(hdc_get_from_internal_name(ide_qua_internal_name.toUtf8().data())), ide_qua_internal_name.toUtf8().constData(), 1));
|
||||
|
||||
display_table[Display::Name::StorageController] = storageControllers.join(VMManagerDetailSection::sectionSeparator);
|
||||
display_table[VMManager::Display::Name::StorageController] = storageControllers.join(VMManagerDetailSection::sectionSeparator);
|
||||
|
||||
// Audio
|
||||
QStringList sndCards;
|
||||
@@ -889,7 +889,7 @@ VMManagerSystem::setupVars() {
|
||||
if(sndCards.isEmpty()) {
|
||||
sndCards.append(tr("None"));
|
||||
}
|
||||
display_table[Display::Name::Audio] = sndCards.join(VMManagerDetailSection::sectionSeparator);
|
||||
display_table[VMManager::Display::Name::Audio] = sndCards.join(VMManagerDetailSection::sectionSeparator);
|
||||
|
||||
// MIDI
|
||||
QString midiOutDev;
|
||||
@@ -901,7 +901,7 @@ VMManagerSystem::setupVars() {
|
||||
midiOutDev = midiDevName;
|
||||
}
|
||||
}
|
||||
display_table[Display::Name::MidiOut] = midiOutDev;
|
||||
display_table[VMManager::Display::Name::MidiOut] = midiOutDev;
|
||||
|
||||
// midi_device = mt32 (output)
|
||||
// mpu401_standalone = 1
|
||||
@@ -940,21 +940,21 @@ VMManagerSystem::setupVars() {
|
||||
if(nicList.isEmpty()) {
|
||||
nicList.append(tr("None"));
|
||||
}
|
||||
display_table[Display::Name::NIC] = nicList.join(VMManagerDetailSection::sectionSeparator);
|
||||
display_table[VMManager::Display::Name::NIC] = nicList.join(VMManagerDetailSection::sectionSeparator);
|
||||
|
||||
// Input (Keyboard)
|
||||
if (input_config.contains("keyboard_type")) {
|
||||
auto keyboard_internal_name = input_config["keyboard_type"];
|
||||
auto keyboard_dev = keyboard_get_from_internal_name(keyboard_internal_name.toUtf8().data());
|
||||
auto keyboard_dev_name = DeviceConfig::DeviceName(keyboard_get_device(keyboard_dev), keyboard_get_internal_name(keyboard_dev), 0);
|
||||
display_table[Display::Name::Keyboard] = keyboard_dev_name;
|
||||
display_table[VMManager::Display::Name::Keyboard] = keyboard_dev_name;
|
||||
}
|
||||
|
||||
// Input (Mouse)
|
||||
auto mouse_internal_name = input_config["mouse_type"];
|
||||
auto mouse_dev = mouse_get_from_internal_name(mouse_internal_name.toUtf8().data());
|
||||
auto mouse_dev_name = DeviceConfig::DeviceName(mouse_get_device(mouse_dev), mouse_get_internal_name(mouse_dev), 0);
|
||||
display_table[Display::Name::Mouse] = mouse_dev_name;
|
||||
display_table[VMManager::Display::Name::Mouse] = mouse_dev_name;
|
||||
|
||||
// Input (joystick)
|
||||
QString joystickDevice;
|
||||
@@ -965,7 +965,7 @@ VMManagerSystem::setupVars() {
|
||||
joystickDevice = joystickName;
|
||||
}
|
||||
}
|
||||
display_table[Display::Name::Joystick] = joystickDevice;
|
||||
display_table[VMManager::Display::Name::Joystick] = joystickDevice;
|
||||
|
||||
// # Ports
|
||||
// Serial
|
||||
@@ -1026,8 +1026,8 @@ VMManagerSystem::setupVars() {
|
||||
if (portIndex == PARALLEL_MAX)
|
||||
break;
|
||||
}
|
||||
display_table[Display::Name::Serial] = (serialFinal.empty() ? tr("None") : serialFinal.join(", "));
|
||||
display_table[Display::Name::Parallel] = (lptFinal.empty() ? tr("None") : lptFinal.join((hasLptDevices ? VMManagerDetailSection::sectionSeparator : ", ")));
|
||||
display_table[VMManager::Display::Name::Serial] = (serialFinal.empty() ? tr("None") : serialFinal.join(", "));
|
||||
display_table[VMManager::Display::Name::Parallel] = (lptFinal.empty() ? tr("None") : lptFinal.join((hasLptDevices ? VMManagerDetailSection::sectionSeparator : ", ")));
|
||||
|
||||
// ISA RTC
|
||||
QString isartc_dev_name = "";
|
||||
@@ -1036,7 +1036,7 @@ VMManagerSystem::setupVars() {
|
||||
auto isartc_dev = isartc_get_from_internal_name(isartc_internal_name.toUtf8().data());
|
||||
isartc_dev_name = DeviceConfig::DeviceName(isartc_get_device(isartc_dev), isartc_get_internal_name(isartc_dev), 0);
|
||||
}
|
||||
display_table[Display::Name::IsaRtc] = isartc_dev_name;
|
||||
display_table[VMManager::Display::Name::IsaRtc] = isartc_dev_name;
|
||||
|
||||
// ISA RAM
|
||||
QStringList IsaMemCards;
|
||||
@@ -1053,7 +1053,7 @@ VMManagerSystem::setupVars() {
|
||||
}
|
||||
}
|
||||
}
|
||||
display_table[Display::Name::IsaMem] = IsaMemCards.join(VMManagerDetailSection::sectionSeparator);
|
||||
display_table[VMManager::Display::Name::IsaMem] = IsaMemCards.join(VMManagerDetailSection::sectionSeparator);
|
||||
|
||||
// ISA ROM
|
||||
QStringList IsaRomCards;
|
||||
@@ -1070,7 +1070,7 @@ VMManagerSystem::setupVars() {
|
||||
}
|
||||
}
|
||||
}
|
||||
display_table[Display::Name::IsaRom] = IsaRomCards.join(VMManagerDetailSection::sectionSeparator);
|
||||
display_table[VMManager::Display::Name::IsaRom] = IsaRomCards.join(VMManagerDetailSection::sectionSeparator);
|
||||
}
|
||||
|
||||
bool
|
||||
@@ -1081,6 +1081,7 @@ VMManagerSystem::startServer() {
|
||||
connect(socket_server, &VMManagerServerSocket::windowStatusChanged, this, &VMManagerSystem::windowStatusChangeReceived);
|
||||
connect(socket_server, &VMManagerServerSocket::runningStatusChanged, this, &VMManagerSystem::runningStatusChangeReceived);
|
||||
connect(socket_server, &VMManagerServerSocket::configurationChanged, this, &VMManagerSystem::configurationChangeReceived);
|
||||
connect(socket_server, &VMManagerServerSocket::globalConfigurationChanged, this, &VMManagerSystem::globalConfigurationChanged);
|
||||
connect(socket_server, &VMManagerServerSocket::winIdReceived, this, [this] (WId id) { this->id = id; });
|
||||
return true;
|
||||
} else {
|
||||
@@ -1119,11 +1120,17 @@ VMManagerSystem::windowStatusChangeReceived(int status)
|
||||
processStatusChanged();
|
||||
}
|
||||
QString
|
||||
VMManagerSystem::getDisplayValue(Display::Name key)
|
||||
VMManagerSystem::getDisplayValue(VMManager::Display::Name key)
|
||||
{
|
||||
return (display_table.contains(key)) ? display_table[key] : "";
|
||||
}
|
||||
|
||||
void
|
||||
VMManagerSystem::sendGlobalConfigurationChanged()
|
||||
{
|
||||
socket_server->serverSendMessage(VMManagerProtocol::ManagerMessage::GlobalConfigurationChanged);
|
||||
}
|
||||
|
||||
void
|
||||
VMManagerSystem::shutdownRequestButtonPressed()
|
||||
{
|
||||
|
||||
@@ -129,6 +129,7 @@ public slots:
|
||||
void shutdownForceButtonPressed();
|
||||
void cadButtonPressed();
|
||||
void reloadConfig();
|
||||
void sendGlobalConfigurationChanged();
|
||||
public:
|
||||
QDateTime timestamp();
|
||||
void setIcon(const QString &newIcon);
|
||||
@@ -157,6 +158,7 @@ signals:
|
||||
void itemDataChanged();
|
||||
void clientProcessStatusChanged();
|
||||
void configurationChanged(const QString &uuid);
|
||||
void globalConfigurationChanged();
|
||||
|
||||
private:
|
||||
void loadSettings();
|
||||
|
||||
@@ -38,6 +38,48 @@
|
||||
|
||||
static bool NewDarkMode = FALSE;
|
||||
|
||||
void
|
||||
WindowsDarkModeFilter::reselectDarkMode()
|
||||
{
|
||||
bool OldDarkMode = NewDarkMode;
|
||||
|
||||
if (!util::isWindowsLightTheme()) {
|
||||
QFile f(":qdarkstyle/dark/darkstyle.qss");
|
||||
|
||||
if (!f.exists())
|
||||
printf("Unable to set stylesheet, file not found\n");
|
||||
else {
|
||||
f.open(QFile::ReadOnly | QFile::Text);
|
||||
QTextStream ts(&f);
|
||||
qApp->setStyleSheet(ts.readAll());
|
||||
}
|
||||
QPalette palette(qApp->palette());
|
||||
palette.setColor(QPalette::Link, Qt::white);
|
||||
palette.setColor(QPalette::LinkVisited, Qt::lightGray);
|
||||
qApp->setPalette(palette);
|
||||
window->resize(window->size());
|
||||
|
||||
NewDarkMode = TRUE;
|
||||
} else {
|
||||
qApp->setStyleSheet("");
|
||||
QPalette palette(qApp->palette());
|
||||
palette.setColor(QPalette::Link, Qt::blue);
|
||||
palette.setColor(QPalette::LinkVisited, Qt::magenta);
|
||||
qApp->setPalette(palette);
|
||||
window->resize(window->size());
|
||||
NewDarkMode = FALSE;
|
||||
}
|
||||
window->updateDarkMode();
|
||||
|
||||
if (NewDarkMode != OldDarkMode) QTimer::singleShot(1000, [this] () {
|
||||
BOOL DarkMode = NewDarkMode;
|
||||
DwmSetWindowAttribute((HWND) window->winId(),
|
||||
DWMWA_USE_IMMERSIVE_DARK_MODE,
|
||||
(LPCVOID) &DarkMode,
|
||||
sizeof(DarkMode));
|
||||
});
|
||||
}
|
||||
|
||||
void
|
||||
WindowsDarkModeFilter::setWindow(VMManagerMainWindow *window)
|
||||
{
|
||||
@@ -52,45 +94,9 @@ WindowsDarkModeFilter::nativeEventFilter(const QByteArray &eventType, void *mess
|
||||
|
||||
if ((msg != nullptr) && (msg->message == WM_SETTINGCHANGE)) {
|
||||
if ((((void *) msg->lParam) != nullptr) &&
|
||||
(wcscmp(L"ImmersiveColorSet", (wchar_t*)msg->lParam) == 0)) {
|
||||
|
||||
bool OldDarkMode = NewDarkMode;
|
||||
|
||||
if (!util::isWindowsLightTheme()) {
|
||||
QFile f(":qdarkstyle/dark/darkstyle.qss");
|
||||
|
||||
if (!f.exists())
|
||||
printf("Unable to set stylesheet, file not found\n");
|
||||
else {
|
||||
f.open(QFile::ReadOnly | QFile::Text);
|
||||
QTextStream ts(&f);
|
||||
qApp->setStyleSheet(ts.readAll());
|
||||
}
|
||||
QPalette palette(qApp->palette());
|
||||
palette.setColor(QPalette::Link, Qt::white);
|
||||
palette.setColor(QPalette::LinkVisited, Qt::lightGray);
|
||||
qApp->setPalette(palette);
|
||||
window->resize(window->size());
|
||||
|
||||
NewDarkMode = TRUE;
|
||||
} else {
|
||||
qApp->setStyleSheet("");
|
||||
QPalette palette(qApp->palette());
|
||||
palette.setColor(QPalette::Link, Qt::blue);
|
||||
palette.setColor(QPalette::LinkVisited, Qt::magenta);
|
||||
qApp->setPalette(palette);
|
||||
window->resize(window->size());
|
||||
NewDarkMode = FALSE;
|
||||
}
|
||||
window->updateDarkMode();
|
||||
|
||||
if (NewDarkMode != OldDarkMode) QTimer::singleShot(1000, [this] () {
|
||||
BOOL DarkMode = NewDarkMode;
|
||||
DwmSetWindowAttribute((HWND) window->winId(),
|
||||
DWMWA_USE_IMMERSIVE_DARK_MODE,
|
||||
(LPCVOID) &DarkMode,
|
||||
sizeof(DarkMode));
|
||||
});
|
||||
(wcscmp(L"ImmersiveColorSet", (wchar_t*)msg->lParam) == 0) &&
|
||||
color_scheme == 0) {
|
||||
reselectDarkMode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,6 +39,7 @@ public:
|
||||
WindowsDarkModeFilter() = default;
|
||||
void setWindow(VMManagerMainWindow *window);
|
||||
bool nativeEventFilter(const QByteArray &eventType, void *message, result_t *result) override;
|
||||
void reselectDarkMode();
|
||||
|
||||
private:
|
||||
VMManagerMainWindow *window;
|
||||
|
||||
@@ -74,7 +74,9 @@ extern void win_keyboard_handle(uint32_t scancode, int up, int e0, int e1);
|
||||
#include "qt_util.hpp"
|
||||
#include "ui_qt_mainwindow.h"
|
||||
|
||||
static bool NewDarkMode = FALSE;
|
||||
bool NewDarkMode = FALSE;
|
||||
|
||||
extern MainWindow* main_window;
|
||||
|
||||
struct
|
||||
{
|
||||
@@ -307,6 +309,56 @@ device_change(WPARAM wParam, LPARAM lParam)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
selectDarkMode()
|
||||
{
|
||||
bool OldDarkMode = NewDarkMode;
|
||||
|
||||
if (!util::isWindowsLightTheme()) {
|
||||
QFile f(":qdarkstyle/dark/darkstyle.qss");
|
||||
|
||||
if (!f.exists())
|
||||
printf("Unable to set stylesheet, file not found\n");
|
||||
else {
|
||||
f.open(QFile::ReadOnly | QFile::Text);
|
||||
QTextStream ts(&f);
|
||||
qApp->setStyleSheet(ts.readAll());
|
||||
}
|
||||
QPalette palette(qApp->palette());
|
||||
palette.setColor(QPalette::Link, Qt::white);
|
||||
palette.setColor(QPalette::LinkVisited, Qt::lightGray);
|
||||
qApp->setPalette(palette);
|
||||
NewDarkMode = TRUE;
|
||||
} else {
|
||||
qApp->setStyleSheet("");
|
||||
QPalette palette(qApp->palette());
|
||||
palette.setColor(QPalette::Link, Qt::blue);
|
||||
palette.setColor(QPalette::LinkVisited, Qt::magenta);
|
||||
qApp->setPalette(palette);
|
||||
NewDarkMode = FALSE;
|
||||
}
|
||||
|
||||
if (NewDarkMode != OldDarkMode)
|
||||
QTimer::singleShot(1000, []() {
|
||||
BOOL DarkMode = NewDarkMode;
|
||||
DwmSetWindowAttribute((HWND) main_window->winId(),
|
||||
DWMWA_USE_IMMERSIVE_DARK_MODE,
|
||||
(LPCVOID) &DarkMode,
|
||||
sizeof(DarkMode));
|
||||
|
||||
main_window->resizeContents(monitors[0].mon_scrnsz_x,
|
||||
monitors[0].mon_scrnsz_y);
|
||||
|
||||
for (int i = 1; i < MONITORS_NUM; i++) {
|
||||
auto mon = &(monitors[i]);
|
||||
|
||||
if ((main_window->renderers[i] != nullptr) && !main_window->renderers[i]->isHidden())
|
||||
main_window->resizeContentsMonitor(mon->mon_scrnsz_x,
|
||||
mon->mon_scrnsz_y, i);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
bool
|
||||
WindowsRawInputFilter::nativeEventFilter(const QByteArray &eventType, void *message, result_t *result)
|
||||
{
|
||||
@@ -328,7 +380,8 @@ WindowsRawInputFilter::nativeEventFilter(const QByteArray &eventType, void *mess
|
||||
return true;
|
||||
case WM_SETTINGCHANGE:
|
||||
if ((((void *) msg->lParam) != nullptr) &&
|
||||
(wcscmp(L"ImmersiveColorSet", (wchar_t*)msg->lParam) == 0)) {
|
||||
(wcscmp(L"ImmersiveColorSet", (wchar_t*)msg->lParam) == 0) &&
|
||||
color_scheme == 0) {
|
||||
|
||||
bool OldDarkMode = NewDarkMode;
|
||||
#if 0
|
||||
|
||||
@@ -209,6 +209,9 @@ um8669f_pnp_config_changed(uint8_t ld, isapnp_device_config_t *config, void *pri
|
||||
if (config->activate && (config->io[0].base != ISAPNP_IO_DISABLED)) {
|
||||
um8669f_log("UM8669F: LPT enabled at port %04X IRQ %d\n", config->io[0].base, config->irq[0].irq);
|
||||
lpt_port_setup(dev->lpt, config->io[0].base);
|
||||
|
||||
lpt_port_irq(dev->lpt, config->irq[0].irq);
|
||||
lpt_port_dma(dev->lpt, (config->dma[0].dma == ISAPNP_DMA_DISABLED) ? -1 : config->dma[0].dma);
|
||||
} else {
|
||||
um8669f_log("UM8669F: LPT disabled\n");
|
||||
}
|
||||
|
||||
@@ -124,7 +124,6 @@ const lpt_device_t lpt_dac_device = {
|
||||
.close = dac_close,
|
||||
.write_data = dac_write_data,
|
||||
.write_ctrl = dac_write_ctrl,
|
||||
.autofeed = NULL,
|
||||
.strobe = dac_strobe,
|
||||
.read_status = dac_read_status,
|
||||
.read_ctrl = NULL,
|
||||
@@ -141,7 +140,6 @@ const lpt_device_t lpt_dac_stereo_device = {
|
||||
.close = dac_close,
|
||||
.write_data = dac_write_data,
|
||||
.write_ctrl = dac_write_ctrl,
|
||||
.autofeed = NULL,
|
||||
.strobe = dac_strobe,
|
||||
.read_status = dac_read_status,
|
||||
.read_ctrl = NULL,
|
||||
|
||||
@@ -139,7 +139,6 @@ const lpt_device_t dss_device = {
|
||||
.init = dss_init,
|
||||
.close = dss_close,
|
||||
.write_data = dss_write_data,
|
||||
.autofeed = NULL,
|
||||
.strobe = NULL,
|
||||
.write_ctrl = dss_write_ctrl,
|
||||
.read_status = dss_read_status,
|
||||
|
||||
@@ -57,8 +57,13 @@ plat_serpt_read(void *priv, uint8_t *data)
|
||||
fd_set rdfds;
|
||||
|
||||
switch (dev->mode) {
|
||||
case SERPT_MODE_HOSTSER: {
|
||||
if (read(dev->master_fd, data, 1) > 0) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
case SERPT_MODE_VCON:
|
||||
case SERPT_MODE_HOSTSER:
|
||||
FD_ZERO(&rdfds);
|
||||
FD_SET(dev->master_fd, &rdfds);
|
||||
tv.tv_sec = 0;
|
||||
|
||||
@@ -143,6 +143,10 @@ add_library(vid OBJECT
|
||||
|
||||
)
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
|
||||
target_include_directories(vid PRIVATE /usr/local/include)
|
||||
endif()
|
||||
|
||||
if(G100)
|
||||
target_compile_definitions(vid PRIVATE USE_G100)
|
||||
endif()
|
||||
|
||||
Reference in New Issue
Block a user