Virtual ISO: Add Qt and Win32 user interfaces

This commit is contained in:
RichardG867
2022-03-26 23:38:38 -03:00
parent eeeb7b258d
commit e11b211af8
50 changed files with 151 additions and 25 deletions

View File

@@ -290,10 +290,11 @@ cdrom_image_open(cdrom_t *dev, const char *fn)
return image_open_abort(dev); return image_open_abort(dev);
/* All good, reset state. */ /* All good, reset state. */
if (i == 2) if (i >= 2)
dev->cd_status = CD_STATUS_DATA_ONLY; dev->cd_status = CD_STATUS_DATA_ONLY;
else else
dev->cd_status = CD_STATUS_STOPPED; dev->cd_status = CD_STATUS_STOPPED;
dev->is_dir = (i == 3);
dev->seek_pos = 0; dev->seek_pos = 0;
dev->cd_buflen = 0; dev->cd_buflen = 0;
dev->cdrom_capacity = image_get_capacity(dev); dev->cdrom_capacity = image_get_capacity(dev);

View File

@@ -222,11 +222,13 @@ cdi_close(cd_img_t *cdi)
int int
cdi_set_device(cd_img_t *cdi, const char *path) cdi_set_device(cd_img_t *cdi, const char *path)
{ {
if (cdi_load_cue(cdi, path)) int ret;
return 1;
if (cdi_load_iso(cdi, path)) if ((ret = cdi_load_cue(cdi, path)))
return 2; return ret;
if ((ret = cdi_load_iso(cdi, path)))
return ret;
return 0; return 0;
} }
@@ -528,7 +530,7 @@ cdi_track_push_back(cd_img_t *cdi, track_t *trk)
int int
cdi_load_iso(cd_img_t *cdi, const char *filename) cdi_load_iso(cd_img_t *cdi, const char *filename)
{ {
int error; int error, ret = 2;
track_t trk; track_t trk;
cdi->tracks = NULL; cdi->tracks = NULL;
@@ -541,6 +543,7 @@ cdi_load_iso(cd_img_t *cdi, const char *filename)
if (error) { if (error) {
if ((trk.file != NULL) && (trk.file->close != NULL)) if ((trk.file != NULL) && (trk.file->close != NULL))
trk.file->close(trk.file); trk.file->close(trk.file);
ret = 3;
trk.file = viso_init(filename, &error); trk.file = viso_init(filename, &error);
if (error) { if (error) {
if ((trk.file != NULL) && (trk.file->close != NULL)) if ((trk.file != NULL) && (trk.file->close != NULL))
@@ -586,7 +589,7 @@ cdi_load_iso(cd_img_t *cdi, const char *filename)
trk.file = NULL; trk.file = NULL;
cdi_track_push_back(cdi, &trk); cdi_track_push_back(cdi, &trk);
return 1; return ret;
} }
static int static int

View File

@@ -104,7 +104,7 @@ typedef struct cdrom {
media status. */ media status. */
speed, cur_speed; speed, cur_speed;
FILE* img_fp; int is_dir;
void *priv; void *priv;
char image_path[1024], char image_path[1024],

View File

@@ -438,7 +438,8 @@
#define IDM_CDROM_EMPTY 0x4300 #define IDM_CDROM_EMPTY 0x4300
#define IDM_CDROM_RELOAD 0x4400 #define IDM_CDROM_RELOAD 0x4400
#define IDM_CDROM_IMAGE 0x4500 #define IDM_CDROM_IMAGE 0x4500
#define IDM_CDROM_HOST_DRIVE 0x4600 #define IDM_CDROM_DIR 0x4600
#define IDM_CDROM_HOST_DRIVE 0x4700
#define IDM_ZIP_IMAGE_NEW 0x5200 #define IDM_ZIP_IMAGE_NEW 0x5200
#define IDM_ZIP_IMAGE_EXISTING 0x5300 #define IDM_ZIP_IMAGE_EXISTING 0x5300

View File

@@ -229,6 +229,9 @@ msgstr "&Načíst znova předchozí obraz"
msgid "&Image" msgid "&Image"
msgstr "&Obraz..." msgstr "&Obraz..."
msgid "&Folder"
msgstr "&Folder"
msgid "Target &framerate" msgid "Target &framerate"
msgstr "&Cílová snímková frekvence" msgstr "&Cílová snímková frekvence"

View File

@@ -229,6 +229,9 @@ msgstr "&Voriges Image neu laden"
msgid "&Image" msgid "&Image"
msgstr "&Image" msgstr "&Image"
msgid "&Folder"
msgstr "&Folder"
msgid "Target &framerate" msgid "Target &framerate"
msgstr "Ziel&framerate" msgstr "Ziel&framerate"

View File

@@ -229,6 +229,9 @@ msgstr "&Reload previous image"
msgid "&Image" msgid "&Image"
msgstr "&Image" msgstr "&Image"
msgid "&Folder"
msgstr "&Folder"
msgid "Target &framerate" msgid "Target &framerate"
msgstr "Target &framerate" msgstr "Target &framerate"

View File

@@ -229,6 +229,9 @@ msgstr "&Reload previous image"
msgid "&Image" msgid "&Image"
msgstr "&Image" msgstr "&Image"
msgid "&Folder"
msgstr "&Folder"
msgid "Target &framerate" msgid "Target &framerate"
msgstr "Target &framerate" msgstr "Target &framerate"

View File

@@ -229,6 +229,9 @@ msgstr "&Recargar imagen previa"
msgid "&Image" msgid "&Image"
msgstr "&Imagen..." msgstr "&Imagen..."
msgid "&Folder"
msgstr "&Folder"
msgid "Target &framerate" msgid "Target &framerate"
msgstr "&Tasa de refresco objetivo" msgstr "&Tasa de refresco objetivo"

View File

@@ -229,6 +229,9 @@ msgstr "&Lataa edellinen levykuva uudelleen"
msgid "&Image" msgid "&Image"
msgstr "L&evykuva" msgstr "L&evykuva"
msgid "&Folder"
msgstr "&Folder"
msgid "Target &framerate" msgid "Target &framerate"
msgstr "&Kuvataajuustavoite" msgstr "&Kuvataajuustavoite"

View File

@@ -229,6 +229,9 @@ msgstr "&Recharger image précedente"
msgid "&Image" msgid "&Image"
msgstr "&Image" msgstr "&Image"
msgid "&Folder"
msgstr "&Folder"
msgid "Target &framerate" msgid "Target &framerate"
msgstr "&Taux de rafraîchissement cible" msgstr "&Taux de rafraîchissement cible"

View File

@@ -229,6 +229,9 @@ msgstr "&Ponovo učitaj prethodnu sliku"
msgid "&Image" msgid "&Image"
msgstr "&Slika" msgstr "&Slika"
msgid "&Folder"
msgstr "&Folder"
msgid "Target &framerate" msgid "Target &framerate"
msgstr "&Ciljni broj okvira u sekundi" msgstr "&Ciljni broj okvira u sekundi"

View File

@@ -229,6 +229,9 @@ msgstr "Előző képfájl &újratöltése"
msgid "&Image" msgid "&Image"
msgstr "&Meglévő képfájl &megnyitása..." msgstr "&Meglévő képfájl &megnyitása..."
msgid "&Folder"
msgstr "&Folder"
msgid "Target &framerate" msgid "Target &framerate"
msgstr "Cél &képkockasebesség" msgstr "Cél &képkockasebesség"

View File

@@ -229,6 +229,9 @@ msgstr "&Ricarica l'immagine precedente"
msgid "&Image" msgid "&Image"
msgstr "&Immagine" msgstr "&Immagine"
msgid "&Folder"
msgstr "&Folder"
msgid "Target &framerate" msgid "Target &framerate"
msgstr "Imposta obiettivo &fotogrammi" msgstr "Imposta obiettivo &fotogrammi"

View File

@@ -229,6 +229,9 @@ msgstr "前のイメージを再読み込み(&R)"
msgid "&Image" msgid "&Image"
msgstr "イメージ(&I)" msgstr "イメージ(&I)"
msgid "&Folder"
msgstr "&Folder"
msgid "Target &framerate" msgid "Target &framerate"
msgstr "目標フレームレート(&F)" msgstr "目標フレームレート(&F)"

View File

@@ -229,6 +229,9 @@ msgstr "이전 이미지 다시 불러오기(&R)"
msgid "&Image" msgid "&Image"
msgstr "이미지(&I)" msgstr "이미지(&I)"
msgid "&Folder"
msgstr "&Folder"
msgid "Target &framerate" msgid "Target &framerate"
msgstr "목표 프레임 레이트(&F)" msgstr "목표 프레임 레이트(&F)"

View File

@@ -229,6 +229,9 @@ msgstr "&Przeładuj poprzedni obraz"
msgid "&Image" msgid "&Image"
msgstr "&Obraz" msgstr "&Obraz"
msgid "&Folder"
msgstr "&Folder"
msgid "Target &framerate" msgid "Target &framerate"
msgstr "Docelowa &liczba klatek na sekundę" msgstr "Docelowa &liczba klatek na sekundę"

View File

@@ -229,6 +229,9 @@ msgstr "&Recarregar imagem anterior"
msgid "&Image" msgid "&Image"
msgstr "&Imagem" msgstr "&Imagem"
msgid "&Folder"
msgstr "&Pasta"
msgid "Target &framerate" msgid "Target &framerate"
msgstr "&Taxa de quadro pretendida" msgstr "&Taxa de quadro pretendida"

View File

@@ -229,6 +229,9 @@ msgstr "&Recarregar imagem anterior"
msgid "&Image" msgid "&Image"
msgstr "&Imagem" msgstr "&Imagem"
msgid "&Folder"
msgstr "&Folder"
msgid "Target &framerate" msgid "Target &framerate"
msgstr "&Taxa de quadros de destino" msgstr "&Taxa de quadros de destino"

View File

@@ -229,6 +229,9 @@ msgstr "&Снова загрузить предыдущий образ"
msgid "&Image" msgid "&Image"
msgstr "&Образ..." msgstr "&Образ..."
msgid "&Folder"
msgstr "&Folder"
msgid "Target &framerate" msgid "Target &framerate"
msgstr "Целевая &частота кадров" msgstr "Целевая &частота кадров"

View File

@@ -229,6 +229,9 @@ msgstr "&Naloži zadnjo sliko"
msgid "&Image" msgid "&Image"
msgstr "&Slika" msgstr "&Slika"
msgid "&Folder"
msgstr "&Folder"
msgid "Target &framerate" msgid "Target &framerate"
msgstr "&Ciljno št. sličic na sekundo" msgstr "&Ciljno št. sličic na sekundo"

View File

@@ -229,6 +229,9 @@ msgstr "&Önceki imajı seç"
msgid "&Image" msgid "&Image"
msgstr "&İmaj seç" msgstr "&İmaj seç"
msgid "&Folder"
msgstr "&Folder"
msgid "Target &framerate" msgid "Target &framerate"
msgstr "Hedef &kare oranı" msgstr "Hedef &kare oranı"

View File

@@ -229,6 +229,9 @@ msgstr "&Знову завантажити попередній образ"
msgid "&Image" msgid "&Image"
msgstr "&Образ..." msgstr "&Образ..."
msgid "&Folder"
msgstr "&Folder"
msgid "Target &framerate" msgid "Target &framerate"
msgstr "Цільова &частота кадрів" msgstr "Цільова &частота кадрів"

View File

@@ -229,6 +229,9 @@ msgstr "载入上一个镜像(&R)"
msgid "&Image" msgid "&Image"
msgstr "镜像(&I)" msgstr "镜像(&I)"
msgid "&Folder"
msgstr "&Folder"
msgid "Target &framerate" msgid "Target &framerate"
msgstr "目标帧率(&F)" msgstr "目标帧率(&F)"

View File

@@ -119,7 +119,9 @@ void MediaMenu::refresh(QMenu *parentMenu) {
menu->addAction(tr("&Reload previous image"), [this, i]() { cdromReload(i); }); menu->addAction(tr("&Reload previous image"), [this, i]() { cdromReload(i); });
menu->addSeparator(); menu->addSeparator();
cdromImagePos = menu->children().count(); cdromImagePos = menu->children().count();
menu->addAction(tr("&Image"), [this, i]() { cdromMount(i); })->setCheckable(true); menu->addAction(tr("&Image"), [this, i]() { cdromMount(i, 0); })->setCheckable(true);
cdromDirPos = menu->children().count();
menu->addAction(tr("&Folder"), [this, i]() { cdromMount(i, 1); })->setCheckable(true);
cdromMenus[i] = menu; cdromMenus[i] = menu;
cdromUpdateMenu(i); cdromUpdateMenu(i);
}); });
@@ -358,18 +360,23 @@ void MediaMenu::cdromMute(int i) {
sound_cd_thread_reset(); sound_cd_thread_reset();
} }
void MediaMenu::cdromMount(int i) { void MediaMenu::cdromMount(int i, int dir) {
QString dir; QString filename;
QFileInfo fi(cdrom[i].image_path); QFileInfo fi(cdrom[i].image_path);
auto filename = QFileDialog::getOpenFileName( if (dir) {
parentWidget, filename = QFileDialog::getExistingDirectory(
QString(), parentWidget);
QString(), } else {
tr("CD-ROM images") % filename = QFileDialog::getOpenFileName(
util::DlgFilter({ "iso","cue" }) % parentWidget,
tr("All files") % QString(),
util::DlgFilter({ "*" }, true)); QString(),
tr("CD-ROM images") %
util::DlgFilter({ "iso","cue" }) %
tr("All files") %
util::DlgFilter({ "*" }, true));
}
if (filename.isEmpty()) { if (filename.isEmpty()) {
return; return;
@@ -419,8 +426,10 @@ void MediaMenu::cdromUpdateMenu(int i) {
muteMenu->setChecked(cdrom[i].sound_on == 0); muteMenu->setChecked(cdrom[i].sound_on == 0);
auto* imageMenu = dynamic_cast<QAction*>(childs[cdromImagePos]); auto* imageMenu = dynamic_cast<QAction*>(childs[cdromImagePos]);
auto* dirMenu = dynamic_cast<QAction*>(childs[cdromDirPos]);
auto* emptyMenu = dynamic_cast<QAction*>(childs[cdromEmptyPos]); auto* emptyMenu = dynamic_cast<QAction*>(childs[cdromEmptyPos]);
imageMenu->setChecked(cdrom[i].host_drive == 200); imageMenu->setChecked((cdrom[i].host_drive == 200) && !cdrom[i].is_dir);
dirMenu->setChecked((cdrom[i].host_drive == 200) && cdrom[i].is_dir);
emptyMenu->setChecked(cdrom[i].host_drive != 200); emptyMenu->setChecked(cdrom[i].host_drive != 200);
auto* prevMenu = dynamic_cast<QAction*>(childs[cdromReloadPos]); auto* prevMenu = dynamic_cast<QAction*>(childs[cdromReloadPos]);

View File

@@ -36,7 +36,7 @@ public:
void floppyUpdateMenu(int i); void floppyUpdateMenu(int i);
void cdromMute(int i); void cdromMute(int i);
void cdromMount(int i); void cdromMount(int i, int dir);
void cdromEject(int i); void cdromEject(int i);
void cdromReload(int i); void cdromReload(int i);
void cdromUpdateMenu(int i); void cdromUpdateMenu(int i);
@@ -79,6 +79,7 @@ private:
int cdromEmptyPos; int cdromEmptyPos;
int cdromReloadPos; int cdromReloadPos;
int cdromImagePos; int cdromImagePos;
int cdromDirPos;
int zipEjectPos; int zipEjectPos;
int zipReloadPos; int zipReloadPos;

View File

@@ -184,6 +184,13 @@ plat_getcwd(char *bufp, int max)
return 0; return 0;
} }
char *
plat_get_basename(const char *path)
{
QFileInfo fi(path);
return fi.fileName().toUtf8().data();
}
void void
plat_get_dirname(char *dest, const char *path) plat_get_dirname(char *dest, const char *path)
{ {

View File

@@ -154,7 +154,7 @@ void SettingsFloppyCDROM::save() {
/* Removable devices category */ /* Removable devices category */
model = ui->tableViewCDROM->model(); model = ui->tableViewCDROM->model();
for (int i = 0; i < CDROM_NUM; i++) { for (int i = 0; i < CDROM_NUM; i++) {
cdrom[i].img_fp = NULL; cdrom[i].is_dir = 0;
cdrom[i].priv = NULL; cdrom[i].priv = NULL;
cdrom[i].ops = NULL; cdrom[i].ops = NULL;
cdrom[i].image = NULL; cdrom[i].image = NULL;

View File

@@ -177,6 +177,7 @@ BEGIN
MENUITEM "&Načíst znova předchozí obraz", IDM_CDROM_RELOAD MENUITEM "&Načíst znova předchozí obraz", IDM_CDROM_RELOAD
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Obraz...", IDM_CDROM_IMAGE MENUITEM "&Obraz...", IDM_CDROM_IMAGE
MENUITEM "&Folder", IDM_CDROM_DIR
END END
END END

View File

@@ -177,6 +177,7 @@ BEGIN
MENUITEM "&Voriges Image neu laden", IDM_CDROM_RELOAD MENUITEM "&Voriges Image neu laden", IDM_CDROM_RELOAD
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Image", IDM_CDROM_IMAGE MENUITEM "&Image", IDM_CDROM_IMAGE
MENUITEM "&Folder", IDM_CDROM_DIR
END END
END END

View File

@@ -177,6 +177,7 @@ BEGIN
MENUITEM "&Reload previous image", IDM_CDROM_RELOAD MENUITEM "&Reload previous image", IDM_CDROM_RELOAD
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Image", IDM_CDROM_IMAGE MENUITEM "&Image", IDM_CDROM_IMAGE
MENUITEM "&Folder", IDM_CDROM_DIR
END END
END END

View File

@@ -177,6 +177,7 @@ BEGIN
MENUITEM "&Reload previous image", IDM_CDROM_RELOAD MENUITEM "&Reload previous image", IDM_CDROM_RELOAD
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Image", IDM_CDROM_IMAGE MENUITEM "&Image", IDM_CDROM_IMAGE
MENUITEM "&Folder", IDM_CDROM_DIR
END END
END END

View File

@@ -177,6 +177,7 @@ BEGIN
MENUITEM "&Recargar imagen previa", IDM_CDROM_RELOAD MENUITEM "&Recargar imagen previa", IDM_CDROM_RELOAD
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Imagen...", IDM_CDROM_IMAGE MENUITEM "&Imagen...", IDM_CDROM_IMAGE
MENUITEM "&Folder", IDM_CDROM_DIR
END END
END END

View File

@@ -177,6 +177,7 @@ BEGIN
MENUITEM "&Lataa edellinen levykuva uudelleen", IDM_CDROM_RELOAD MENUITEM "&Lataa edellinen levykuva uudelleen", IDM_CDROM_RELOAD
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "L&evykuva", IDM_CDROM_IMAGE MENUITEM "L&evykuva", IDM_CDROM_IMAGE
MENUITEM "&Folder", IDM_CDROM_DIR
END END
END END

View File

@@ -177,6 +177,7 @@ BEGIN
MENUITEM "&Recharger image précedente", IDM_CDROM_RELOAD MENUITEM "&Recharger image précedente", IDM_CDROM_RELOAD
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Image", IDM_CDROM_IMAGE MENUITEM "&Image", IDM_CDROM_IMAGE
MENUITEM "&Folder", IDM_CDROM_DIR
END END
END END

View File

@@ -177,6 +177,7 @@ BEGIN
MENUITEM "&Ponovo učitaj prethodnu sliku", IDM_CDROM_RELOAD MENUITEM "&Ponovo učitaj prethodnu sliku", IDM_CDROM_RELOAD
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Slika", IDM_CDROM_IMAGE MENUITEM "&Slika", IDM_CDROM_IMAGE
MENUITEM "&Folder", IDM_CDROM_DIR
END END
END END

View File

@@ -182,6 +182,7 @@ BEGIN
MENUITEM "Előző képfájl &újratöltése", IDM_CDROM_RELOAD MENUITEM "Előző képfájl &újratöltése", IDM_CDROM_RELOAD
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Meglévő képfájl &megnyitása...", IDM_CDROM_IMAGE MENUITEM "&Meglévő képfájl &megnyitása...", IDM_CDROM_IMAGE
MENUITEM "&Folder", IDM_CDROM_DIR
END END
END END

View File

@@ -178,6 +178,7 @@ BEGIN
MENUITEM "&Ricarica l'immagine precedente", IDM_CDROM_RELOAD MENUITEM "&Ricarica l'immagine precedente", IDM_CDROM_RELOAD
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Immagine", IDM_CDROM_IMAGE MENUITEM "&Immagine", IDM_CDROM_IMAGE
MENUITEM "&Folder", IDM_CDROM_DIR
END END
END END

View File

@@ -177,6 +177,7 @@ BEGIN
MENUITEM "前のイメージを再読み込み(&R)", IDM_CDROM_RELOAD MENUITEM "前のイメージを再読み込み(&R)", IDM_CDROM_RELOAD
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "イメージ(&I)", IDM_CDROM_IMAGE MENUITEM "イメージ(&I)", IDM_CDROM_IMAGE
MENUITEM "&Folder", IDM_CDROM_DIR
END END
END END

View File

@@ -177,6 +177,7 @@ BEGIN
MENUITEM "이전 이미지 다시 불러오기(&R)", IDM_CDROM_RELOAD MENUITEM "이전 이미지 다시 불러오기(&R)", IDM_CDROM_RELOAD
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "이미지(&I)", IDM_CDROM_IMAGE MENUITEM "이미지(&I)", IDM_CDROM_IMAGE
MENUITEM "&Folder", IDM_CDROM_DIR
END END
END END

View File

@@ -177,6 +177,7 @@ BEGIN
MENUITEM "&Przeładuj poprzedni obraz", IDM_CDROM_RELOAD MENUITEM "&Przeładuj poprzedni obraz", IDM_CDROM_RELOAD
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Obraz", IDM_CDROM_IMAGE MENUITEM "&Obraz", IDM_CDROM_IMAGE
MENUITEM "&Folder", IDM_CDROM_DIR
END END
END END

View File

@@ -180,6 +180,7 @@ BEGIN
MENUITEM "&Recarregar imagem anterior", IDM_CDROM_RELOAD MENUITEM "&Recarregar imagem anterior", IDM_CDROM_RELOAD
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Imagem", IDM_CDROM_IMAGE MENUITEM "&Imagem", IDM_CDROM_IMAGE
MENUITEM "&Pasta", IDM_CDROM_DIR
END END
END END

View File

@@ -177,6 +177,7 @@ BEGIN
MENUITEM "&Recarregar imagem anterior", IDM_CDROM_RELOAD MENUITEM "&Recarregar imagem anterior", IDM_CDROM_RELOAD
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Imagem", IDM_CDROM_IMAGE MENUITEM "&Imagem", IDM_CDROM_IMAGE
MENUITEM "&Folder", IDM_CDROM_DIR
END END
END END

View File

@@ -177,6 +177,7 @@ BEGIN
MENUITEM "&Снова загрузить предыдущий образ", IDM_CDROM_RELOAD MENUITEM "&Снова загрузить предыдущий образ", IDM_CDROM_RELOAD
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Образ...", IDM_CDROM_IMAGE MENUITEM "&Образ...", IDM_CDROM_IMAGE
MENUITEM "&Folder", IDM_CDROM_DIR
END END
END END

View File

@@ -177,6 +177,7 @@ BEGIN
MENUITEM "&Naloži zadnjo sliko", IDM_CDROM_RELOAD MENUITEM "&Naloži zadnjo sliko", IDM_CDROM_RELOAD
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Slika", IDM_CDROM_IMAGE MENUITEM "&Slika", IDM_CDROM_IMAGE
MENUITEM "&Folder", IDM_CDROM_DIR
END END
END END

View File

@@ -177,6 +177,7 @@ BEGIN
MENUITEM "&Önceki imajı seç", IDM_CDROM_RELOAD MENUITEM "&Önceki imajı seç", IDM_CDROM_RELOAD
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&İmaj seç", IDM_CDROM_IMAGE MENUITEM "&İmaj seç", IDM_CDROM_IMAGE
MENUITEM "&Folder", IDM_CDROM_DIR
END END
END END

View File

@@ -177,6 +177,7 @@ BEGIN
MENUITEM "&Знову завантажити попередній образ", IDM_CDROM_RELOAD MENUITEM "&Знову завантажити попередній образ", IDM_CDROM_RELOAD
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Образ...", IDM_CDROM_IMAGE MENUITEM "&Образ...", IDM_CDROM_IMAGE
MENUITEM "&Folder", IDM_CDROM_DIR
END END
END END

View File

@@ -177,6 +177,7 @@ BEGIN
MENUITEM "载入上一个镜像(&R)", IDM_CDROM_RELOAD MENUITEM "载入上一个镜像(&R)", IDM_CDROM_RELOAD
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "镜像(&I)", IDM_CDROM_IMAGE MENUITEM "镜像(&I)", IDM_CDROM_IMAGE
MENUITEM "&Folder", IDM_CDROM_DIR
END END
END END

View File

@@ -3,6 +3,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <windows.h> #include <windows.h>
#include <shlobj.h>
#include <86box/86box.h> #include <86box/86box.h>
#include <86box/cdrom.h> #include <86box/cdrom.h>
#include <86box/config.h> #include <86box/config.h>
@@ -308,11 +309,13 @@ media_menu_update_cdrom(int id)
CheckMenuItem(menus[i], IDM_CDROM_MUTE | id, MF_BYCOMMAND | MF_UNCHECKED); CheckMenuItem(menus[i], IDM_CDROM_MUTE | id, MF_BYCOMMAND | MF_UNCHECKED);
if (cdrom[id].host_drive == 200) { if (cdrom[id].host_drive == 200) {
CheckMenuItem(menus[i], IDM_CDROM_IMAGE | id, MF_BYCOMMAND | MF_CHECKED); CheckMenuItem(menus[i], IDM_CDROM_IMAGE | id, MF_BYCOMMAND | (cdrom[id].is_dir ? MF_UNCHECKED : MF_CHECKED));
CheckMenuItem(menus[i], IDM_CDROM_DIR | id, MF_BYCOMMAND | (cdrom[id].is_dir ? MF_CHECKED : MF_UNCHECKED));
CheckMenuItem(menus[i], IDM_CDROM_EMPTY | id, MF_BYCOMMAND | MF_UNCHECKED); CheckMenuItem(menus[i], IDM_CDROM_EMPTY | id, MF_BYCOMMAND | MF_UNCHECKED);
} else { } else {
cdrom[id].host_drive = 0; cdrom[id].host_drive = 0;
CheckMenuItem(menus[i], IDM_CDROM_IMAGE | id, MF_BYCOMMAND | MF_UNCHECKED); CheckMenuItem(menus[i], IDM_CDROM_IMAGE | id, MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(menus[i], IDM_CDROM_DIR | id, MF_BYCOMMAND | MF_UNCHECKED);
CheckMenuItem(menus[i], IDM_CDROM_EMPTY | id, MF_BYCOMMAND | MF_CHECKED); CheckMenuItem(menus[i], IDM_CDROM_EMPTY | id, MF_BYCOMMAND | MF_CHECKED);
} }
@@ -672,6 +675,27 @@ media_menu_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
} }
break; break;
case IDM_CDROM_DIR:
BROWSEINFO bi = {
.hwndOwner = hwnd,
.ulFlags = BIF_EDITBOX
};
OleInitialize(NULL);
int old_dopause = dopause;
plat_pause(1);
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
plat_pause(old_dopause);
plat_chdir(usr_path);
if (pidl) {
wchar_t wbuf[MAX_PATH + 1];
if (SHGetPathFromIDList(pidl, wbuf)) {
char buf[MAX_PATH + 1];
c16stombs(buf, wbuf, sizeof(buf) - 1);
cdrom_mount(id, buf);
}
}
break;
case IDM_ZIP_IMAGE_NEW: case IDM_ZIP_IMAGE_NEW:
NewFloppyDialogCreate(hwnd, id | 0x80, 0); /* NewZIPDialogCreate */ NewFloppyDialogCreate(hwnd, id | 0x80, 0); /* NewZIPDialogCreate */
break; break;

View File

@@ -599,7 +599,7 @@ win_settings_save(void)
/* Removable devices category */ /* Removable devices category */
memcpy(cdrom, temp_cdrom, CDROM_NUM * sizeof(cdrom_t)); memcpy(cdrom, temp_cdrom, CDROM_NUM * sizeof(cdrom_t));
for (i = 0; i < CDROM_NUM; i++) { for (i = 0; i < CDROM_NUM; i++) {
cdrom[i].img_fp = NULL; cdrom[i].is_dir = 0;
cdrom[i].priv = NULL; cdrom[i].priv = NULL;
cdrom[i].ops = NULL; cdrom[i].ops = NULL;
cdrom[i].image = NULL; cdrom[i].image = NULL;