|
@@ -21,21 +21,15 @@
|
|
#include <FL/Fl_Int_Input.H>
|
|
#include <FL/Fl_Int_Input.H>
|
|
#include <FL/Fl_Choice.H>
|
|
#include <FL/Fl_Choice.H>
|
|
|
|
|
|
-#ifdef PAL_HAS_NATIVEMIDI
|
|
|
|
- #define MUSIC_MIN MUSIC_MIDI
|
|
|
|
-#else
|
|
|
|
- #define MUSIC_MIN MUSIC_RIX
|
|
|
|
-#endif
|
|
|
|
-
|
|
|
|
struct {
|
|
struct {
|
|
Fl_Input* gamepath;
|
|
Fl_Input* gamepath;
|
|
- Fl_Radio_Round_Button* cht;
|
|
|
|
- Fl_Radio_Round_Button* chs;
|
|
|
|
|
|
+ Fl_Input* fontfile;
|
|
|
|
+ Fl_Input* logfile;
|
|
Fl_Input* msgfile;
|
|
Fl_Input* msgfile;
|
|
- Fl_Check_Button* font;
|
|
|
|
Fl_Check_Button* touch;
|
|
Fl_Check_Button* touch;
|
|
Fl_Check_Button* aspect;
|
|
Fl_Check_Button* aspect;
|
|
Fl_Check_Button* fullscreen;
|
|
Fl_Check_Button* fullscreen;
|
|
|
|
+ Fl_Choice* loglevel;
|
|
Fl_Choice* cd;
|
|
Fl_Choice* cd;
|
|
Fl_Choice* bgm;
|
|
Fl_Choice* bgm;
|
|
Fl_Choice* opl;
|
|
Fl_Choice* opl;
|
|
@@ -54,11 +48,12 @@ struct {
|
|
const char* language;
|
|
const char* language;
|
|
const char* display;
|
|
const char* display;
|
|
const char* audio;
|
|
const char* audio;
|
|
|
|
+ const char* logging;
|
|
const char* gamepath;
|
|
const char* gamepath;
|
|
- const char* cht;
|
|
|
|
- const char* chs;
|
|
|
|
const char* msgfile;
|
|
const char* msgfile;
|
|
- const char* font;
|
|
|
|
|
|
+ const char* fontfile;
|
|
|
|
+ const char* logfile;
|
|
|
|
+ const char* loglevel;
|
|
const char* touch;
|
|
const char* touch;
|
|
const char* aspect;
|
|
const char* aspect;
|
|
const char* fullscreen;
|
|
const char* fullscreen;
|
|
@@ -69,43 +64,45 @@ struct {
|
|
const char* stereo;
|
|
const char* stereo;
|
|
const char* oplrate;
|
|
const char* oplrate;
|
|
const char* surround;
|
|
const char* surround;
|
|
- const char* buffer;
|
|
|
|
- const char* quality;
|
|
|
|
const char* musvol;
|
|
const char* musvol;
|
|
const char* sndvol;
|
|
const char* sndvol;
|
|
|
|
+ const char* buffer;
|
|
|
|
+ const char* quality;
|
|
const char* exit;
|
|
const char* exit;
|
|
const char* launch;
|
|
const char* launch;
|
|
const char* def;
|
|
const char* def;
|
|
|
|
+ const char* levels;
|
|
} gLabels[3] = {
|
|
} gLabels[3] = {
|
|
- { "SDLPAL Launcher", "Game language", "Display", "Audio", "Game resource path:",
|
|
|
|
- "&Traditional Chinese", "&Simplified Chinese", "Message file:", "Use &embedded font",
|
|
|
|
- "Use touc&h overlay", "&Keep aspect ratio", "&Full screen", "&CD type:", "&BGM type:",
|
|
|
|
- "&OPL type:", "Sample rate:", "Ste&reo", "OPL rate:", "Surround O&PL", "Buffer:",
|
|
|
|
- "Quality:", "Music volume:", "Sound volume:", "E&xit", "&Launch game", "&Default" },
|
|
|
|
- { "SDLPAL 启动器", "游戏语言设置", "显示设置", "音频设置", "游戏资源目录:",
|
|
|
|
- "繁体中文(&T)", "简体中文(&S)", "语言文件:", "使用游戏资源内嵌字体(&E)",
|
|
|
|
- "启用触屏辅助(&H)", "保持纵横比(&K)", "全屏模式(&F)", "&CD 音源:", "&BGM 音源:",
|
|
|
|
- "&OPL 类型:", "采样率:", "立体声(&R)", "OPL 采样率:", "环绕声 O&PL", "缓冲区:",
|
|
|
|
- "质量:", "音乐音量:", "音效音量:", "退出(&X)", "启动游戏(&L)", "默认设置(&D)" },
|
|
|
|
- { "SDLPAL 啟動器", "遊戲語言設置", "顯示設定", "音訊設定", "遊戲資源目錄:",
|
|
|
|
- "繁體中文(&T)", "簡體中文(&S)", "語言檔:", "使用遊戲資源內嵌字體(&E)",
|
|
|
|
- "啟用觸屏輔助(&H)", "保持縱橫比(&K)", "全屏模式(&F)", "&CD 音源:", "&BGM 音源:",
|
|
|
|
- "&OPL 類型:", "取樣速率:", "立體聲(&R)", "OPL 取樣速率:", "環繞聲 O&PL", "緩衝區:",
|
|
|
|
- "品質:", "音樂音量:", "音效音量:", "退出(&X)", "啟動遊戲(&L)", "默認設定(&D)" },
|
|
|
|
|
|
+ { "SDLPAL Launcher", "Language & Font", "Display", "Audio", "Logging",
|
|
|
|
+ "Game resource path:", "Message file:", "Font file:", "Log file:", "Log level:",
|
|
|
|
+ "Use touc&h overlay", "&Keep aspect ratio", "&Full screen", "&CD type:", "&BGM type:",
|
|
|
|
+ "&OPL type:", "Sample rate:", "Ste&reo", "OPL rate:", "Surround O&PL",
|
|
|
|
+ "Music volume:", "Sound volume:", "Buffer:", "Quality:", "E&xit",
|
|
|
|
+ "&Launch game", "&Default", "Verbose|Debug|Informational|Warning|Error|Fatal" },
|
|
|
|
+ { "SDLPAL 启动器", "字体及语言设置", "显示设置", "音频设置", "日志记录设置",
|
|
|
|
+ "游戏资源目录:", "语言文件:", "字体文件", "日志文件", "日志记录级别:",
|
|
|
|
+ "启用触屏辅助(&H)", "保持纵横比(&K)", "全屏模式(&F)", "&CD 音源:", "&BGM 音源:",
|
|
|
|
+ "&OPL 类型:", "采样率:", "立体声(&R)", "OPL 采样率:", "环绕声 O&PL",
|
|
|
|
+ "音乐音量:", "音效音量:", "缓冲区:", "质量:", "退出(&X)",
|
|
|
|
+ "启动游戏(&L)", "默认设置(&D)", "详细|调试|信息|警告|错误|致命" },
|
|
|
|
+ { "SDLPAL 啟動器", "字體及語言設定", "顯示設定", "音訊設定", "日誌記錄設定",
|
|
|
|
+ "遊戲資源檔夾:", "語言檔:", "字體檔:", "日誌檔:", "日誌記錄級別:",
|
|
|
|
+ "啟用觸屏輔助(&H)", "保持縱橫比(&K)", "全屏模式(&F)", "&CD 音源:", "&BGM 音源:",
|
|
|
|
+ "&OPL 類型:", "取樣速率:", "立體聲(&R)", "OPL 取樣速率:", "環繞聲 O&PL",
|
|
|
|
+ "音樂音量:", "音效音量:", "緩衝區:", "品質:", "退出(&X)",
|
|
|
|
+ "啟動遊戲(&L)", "默認設定(&D)", "詳細|調試|信息|警告|錯誤|致命" },
|
|
};
|
|
};
|
|
|
|
|
|
void InitControls()
|
|
void InitControls()
|
|
{
|
|
{
|
|
char buffer[64];
|
|
char buffer[64];
|
|
gWidgets.gamepath->value(gConfig.pszGamePath);
|
|
gWidgets.gamepath->value(gConfig.pszGamePath);
|
|
- gWidgets.cht->value(gConfig.uCodePage == CP_BIG5 ? 1 : 0);
|
|
|
|
- gWidgets.chs->value(gConfig.uCodePage == CP_GBK ? 1 : 0);
|
|
|
|
gWidgets.msgfile->value(gConfig.pszMsgFile);
|
|
gWidgets.msgfile->value(gConfig.pszMsgFile);
|
|
- gWidgets.font->value(gConfig.fUseEmbeddedFonts ? 1 : 0);
|
|
|
|
|
|
+ gWidgets.fontfile->value(gConfig.pszFontFile);
|
|
|
|
+ gWidgets.logfile->value(gConfig.pszLogFile);
|
|
|
|
+ gWidgets.loglevel->value(gConfig.iLogLevel);
|
|
gWidgets.touch->value(gConfig.fUseTouchOverlay ? 1 : 0);
|
|
gWidgets.touch->value(gConfig.fUseTouchOverlay ? 1 : 0);
|
|
-#if SDL_VERSION_ATLEAST(2,0,0)
|
|
|
|
gWidgets.aspect->value(gConfig.fKeepAspectRatio ? 1 : 0);
|
|
gWidgets.aspect->value(gConfig.fKeepAspectRatio ? 1 : 0);
|
|
-#endif
|
|
|
|
gWidgets.fullscreen->value(gConfig.fFullScreen ? 1 : 0);
|
|
gWidgets.fullscreen->value(gConfig.fFullScreen ? 1 : 0);
|
|
gWidgets.cd->value(gConfig.eCDType - MUSIC_MP3);
|
|
gWidgets.cd->value(gConfig.eCDType - MUSIC_MP3);
|
|
gWidgets.bgm->value(gConfig.eMusicType - MUSIC_MIN);
|
|
gWidgets.bgm->value(gConfig.eMusicType - MUSIC_MIN);
|
|
@@ -123,18 +120,21 @@ void InitControls()
|
|
void SaveControls()
|
|
void SaveControls()
|
|
{
|
|
{
|
|
free(gConfig.pszGamePath);
|
|
free(gConfig.pszGamePath);
|
|
- gConfig.pszGamePath = strlen(gWidgets.gamepath->value()) ? strdup(gWidgets.gamepath->value()) : nullptr;
|
|
|
|
free(gConfig.pszMsgFile);
|
|
free(gConfig.pszMsgFile);
|
|
- gConfig.pszMsgFile = strlen(gWidgets.msgfile->value()) ? strdup(gWidgets.msgfile->value()) : nullptr;
|
|
|
|
- gConfig.uCodePage = (gWidgets.cht->value() ? CP_BIG5 : CP_GBK);
|
|
|
|
- gConfig.fUseEmbeddedFonts = gWidgets.font->value();
|
|
|
|
|
|
+ free(gConfig.pszFontFile);
|
|
|
|
+ free(gConfig.pszLogFile);
|
|
|
|
+
|
|
|
|
+ gConfig.pszGamePath = *gWidgets.gamepath->value() ? strdup(gWidgets.gamepath->value()) : nullptr;
|
|
|
|
+ gConfig.pszMsgFile = *gWidgets.msgfile->value() ? strdup(gWidgets.msgfile->value()) : nullptr;
|
|
|
|
+ gConfig.pszFontFile = *gWidgets.fontfile->value() ? strdup(gWidgets.fontfile->value()) : nullptr;
|
|
|
|
+ gConfig.pszLogFile = *gWidgets.logfile->value() ? strdup(gWidgets.logfile->value()) : nullptr;
|
|
|
|
+
|
|
|
|
+ gConfig.iLogLevel = (LOGLEVEL)gWidgets.loglevel->value();
|
|
gConfig.fUseTouchOverlay = gWidgets.touch->value();
|
|
gConfig.fUseTouchOverlay = gWidgets.touch->value();
|
|
-#if SDL_VERSION_ATLEAST(2,0,0)
|
|
|
|
gConfig.fKeepAspectRatio = gWidgets.aspect->value();
|
|
gConfig.fKeepAspectRatio = gWidgets.aspect->value();
|
|
-#endif
|
|
|
|
gConfig.fFullScreen = gWidgets.fullscreen->value();
|
|
gConfig.fFullScreen = gWidgets.fullscreen->value();
|
|
gConfig.eCDType = (MUSICTYPE)(gWidgets.cd->value() + MUSIC_MP3);
|
|
gConfig.eCDType = (MUSICTYPE)(gWidgets.cd->value() + MUSIC_MP3);
|
|
- gConfig.eMusicType = (MUSICTYPE)(gWidgets.bgm->value() + MUSIC_MIN);
|
|
|
|
|
|
+ gConfig.eMusicType = (MUSICTYPE)(gWidgets.bgm->value());
|
|
gConfig.iAudioChannels = gWidgets.stereo->value() ? 2 : 1;
|
|
gConfig.iAudioChannels = gWidgets.stereo->value() ? 2 : 1;
|
|
gConfig.iSampleRate = atoi(gWidgets.samplerate->value());
|
|
gConfig.iSampleRate = atoi(gWidgets.samplerate->value());
|
|
gConfig.eOPLType = (OPLTYPE)gWidgets.opl->value();
|
|
gConfig.eOPLType = (OPLTYPE)gWidgets.opl->value();
|
|
@@ -167,40 +167,42 @@ Fl_Window* InitWindow()
|
|
int lang = GetLanguage();
|
|
int lang = GetLanguage();
|
|
Fl_Window* window = new Fl_Window(640, 400, gLabels[lang].title);
|
|
Fl_Window* window = new Fl_Window(640, 400, gLabels[lang].title);
|
|
|
|
|
|
- (gWidgets.gamepath = new Fl_Input(160, 9, 475, 22, gLabels[lang].gamepath))->value(gConfig.pszGamePath);
|
|
|
|
-
|
|
|
|
- (new Fl_Box(FL_BORDER_BOX, 5, 70, 310, 100, gLabels[lang].language))->align(FL_ALIGN_TOP);
|
|
|
|
- gWidgets.cht = new Fl_Radio_Round_Button(10, 80, 160, 20, gLabels[lang].cht);
|
|
|
|
- gWidgets.chs = new Fl_Radio_Round_Button(10, 110, 160, 20, gLabels[lang].chs);
|
|
|
|
- (gWidgets.msgfile = new Fl_Input(109, 139, 196, 22, gLabels[lang].msgfile))->value(gConfig.pszMsgFile);
|
|
|
|
-
|
|
|
|
- (new Fl_Box(FL_BORDER_BOX, 325, 70, 310, 100, gLabels[lang].display))->align(FL_ALIGN_TOP);
|
|
|
|
- gWidgets.font = new Fl_Check_Button(330, 80, 160, 20, gLabels[lang].font);
|
|
|
|
- gWidgets.touch = new Fl_Check_Button(330, 110, 160, 20, gLabels[lang].touch);
|
|
|
|
- gWidgets.aspect = new Fl_Check_Button(330, 140, 160, 20, gLabels[lang].aspect);
|
|
|
|
- gWidgets.fullscreen = new Fl_Check_Button(520, 140, 120, 20, gLabels[lang].fullscreen);
|
|
|
|
-
|
|
|
|
- (new Fl_Box(FL_BORDER_BOX, 5, 210, 630, 130, gLabels[lang].audio))->align(FL_ALIGN_TOP);
|
|
|
|
- (gWidgets.cd = new Fl_Choice(84, 219, lang ? 100 : 120, 22, gLabels[lang].cd))->add("MP3|OGG");
|
|
|
|
- (gWidgets.bgm = new Fl_Choice(285, 219, 60, 22, gLabels[lang].bgm))->add( va("%s%s",(PAL_HAS_NATIVEMIDI ? "MIDI|" : ""), "RIX|MP3|OGG") );
|
|
|
|
- gWidgets.stereo = new Fl_Check_Button(365, 220, 60, 20, gLabels[lang].stereo);
|
|
|
|
- gWidgets.samplerate = new Fl_Int_Input(570, 219, 60, 22, gLabels[lang].samplerate);
|
|
|
|
- (gWidgets.opl = new Fl_Choice(84, 249, lang ? 100 : 120, 22, gLabels[lang].opl))->add("DOSBOX|MAME|DOSBOXNEW");
|
|
|
|
- gWidgets.oplrate = new Fl_Int_Input(285, 249, 60, 22, gLabels[lang].oplrate);
|
|
|
|
- gWidgets.surround = new Fl_Check_Button(365, 250, 60, 20, gLabels[lang].surround);
|
|
|
|
- gWidgets.buffer = new Fl_Int_Input(570, 249, 60, 22, gLabels[lang].buffer);
|
|
|
|
-
|
|
|
|
- gWidgets.quality = new Fl_Hor_Value_Slider(72, 279, 180, 22, gLabels[lang].quality);
|
|
|
|
|
|
+ gWidgets.gamepath = new Fl_Input(160, 9, 475, 22, gLabels[lang].gamepath);
|
|
|
|
+
|
|
|
|
+ (new Fl_Box(FL_BORDER_BOX, 5, 50, 630, 55, gLabels[lang].language))->align(FL_ALIGN_TOP);
|
|
|
|
+ gWidgets.msgfile = new Fl_Input(109, 54, 516, 22, gLabels[lang].msgfile);
|
|
|
|
+ gWidgets.fontfile = new Fl_Input(109, 79, 516, 22, gLabels[lang].fontfile);
|
|
|
|
+
|
|
|
|
+ (new Fl_Box(FL_BORDER_BOX, 5, 127, 630, 30, gLabels[lang].logging))->align(FL_ALIGN_TOP);
|
|
|
|
+ (gWidgets.loglevel = new Fl_Choice(85, 132, 120, 20, gLabels[lang].loglevel))->add(gLabels[lang].levels);
|
|
|
|
+ gWidgets.logfile = new Fl_Input(284, 131, 341, 22, gLabels[lang].logfile);
|
|
|
|
+
|
|
|
|
+ (new Fl_Box(FL_BORDER_BOX, 5, 180, 630, 30, gLabels[lang].display))->align(FL_ALIGN_TOP);
|
|
|
|
+ gWidgets.touch = new Fl_Check_Button(30, 185, 160, 20, gLabels[lang].touch);
|
|
|
|
+ gWidgets.aspect = new Fl_Check_Button(260, 185, 160, 20, gLabels[lang].aspect);
|
|
|
|
+ gWidgets.fullscreen = new Fl_Check_Button(510, 185, 120, 20, gLabels[lang].fullscreen);
|
|
|
|
+
|
|
|
|
+ (new Fl_Box(FL_BORDER_BOX, 5, 230, 630, 130, gLabels[lang].audio))->align(FL_ALIGN_TOP);
|
|
|
|
+ (gWidgets.cd = new Fl_Choice(84, 239, lang ? 100 : 120, 22, gLabels[lang].cd))->add("MP3|OGG");
|
|
|
|
+ (gWidgets.bgm = new Fl_Choice(285, 239, 60, 22, gLabels[lang].bgm))->add("MIDI|RIX|MP3|OGG");
|
|
|
|
+ gWidgets.stereo = new Fl_Check_Button(365, 240, 60, 20, gLabels[lang].stereo);
|
|
|
|
+ gWidgets.samplerate = new Fl_Int_Input(570, 239, 60, 22, gLabels[lang].samplerate);
|
|
|
|
+ (gWidgets.opl = new Fl_Choice(84, 269, lang ? 100 : 120, 22, gLabels[lang].opl))->add("DOSBOX|MAME|DOSBOXNEW");
|
|
|
|
+ gWidgets.oplrate = new Fl_Int_Input(285, 269, 60, 22, gLabels[lang].oplrate);
|
|
|
|
+ gWidgets.surround = new Fl_Check_Button(365, 270, 60, 20, gLabels[lang].surround);
|
|
|
|
+ gWidgets.buffer = new Fl_Int_Input(570, 269, 60, 22, gLabels[lang].buffer);
|
|
|
|
+
|
|
|
|
+ gWidgets.quality = new Fl_Hor_Value_Slider(72, 299, 180, 22, gLabels[lang].quality);
|
|
gWidgets.quality->align(FL_ALIGN_LEFT);
|
|
gWidgets.quality->align(FL_ALIGN_LEFT);
|
|
gWidgets.quality->bounds(0, 4);
|
|
gWidgets.quality->bounds(0, 4);
|
|
gWidgets.quality->precision(0);
|
|
gWidgets.quality->precision(0);
|
|
|
|
|
|
- gWidgets.music = new Fl_Hor_Value_Slider(380, 279, 250, 22, gLabels[lang].musvol);
|
|
|
|
|
|
+ gWidgets.music = new Fl_Hor_Value_Slider(380, 299, 250, 22, gLabels[lang].musvol);
|
|
gWidgets.music->align(FL_ALIGN_LEFT);
|
|
gWidgets.music->align(FL_ALIGN_LEFT);
|
|
gWidgets.music->bounds(0, 100);
|
|
gWidgets.music->bounds(0, 100);
|
|
gWidgets.music->precision(0);
|
|
gWidgets.music->precision(0);
|
|
|
|
|
|
- gWidgets.sound = new Fl_Hor_Value_Slider(380, 309, 250, 22, gLabels[lang].sndvol);
|
|
|
|
|
|
+ gWidgets.sound = new Fl_Hor_Value_Slider(380, 329, 250, 22, gLabels[lang].sndvol);
|
|
gWidgets.sound->align(FL_ALIGN_LEFT);
|
|
gWidgets.sound->align(FL_ALIGN_LEFT);
|
|
gWidgets.sound->bounds(0, 100);
|
|
gWidgets.sound->bounds(0, 100);
|
|
gWidgets.sound->precision(0);
|
|
gWidgets.sound->precision(0);
|