Browse Source

Configuration: Unix GUI update & warning elimination

LouYihua 7 years ago
parent
commit
5655ac65b7
2 changed files with 72 additions and 70 deletions
  1. 3 3
      palcfg.c
  2. 69 67
      unix/unix.cpp

+ 3 - 3
palcfg.c

@@ -683,7 +683,7 @@ PAL_SetConfigBoolean(
 {
 {
 	if (gConfigItems[item].Type == PALCFG_BOOLEAN)
 	if (gConfigItems[item].Type == PALCFG_BOOLEAN)
 	{
 	{
-		ConfigValue val = { (const char *)value };
+		ConfigValue val = { (const char *)(intptr_t)value };
 		PAL_SetConfigItem(item, val);
 		PAL_SetConfigItem(item, val);
 		return TRUE;
 		return TRUE;
 	}
 	}
@@ -701,7 +701,7 @@ PAL_SetConfigInteger(
 {
 {
 	if (gConfigItems[item].Type == PALCFG_INTEGER)
 	if (gConfigItems[item].Type == PALCFG_INTEGER)
 	{
 	{
-		ConfigValue val = { (const char *)value };
+		ConfigValue val = { (const char *)(intptr_t)value };
 		PAL_SetConfigItem(item, val);
 		PAL_SetConfigItem(item, val);
 		return TRUE;
 		return TRUE;
 	}
 	}
@@ -719,7 +719,7 @@ PAL_SetConfigUnsigned(
 {
 {
 	if (gConfigItems[item].Type == PALCFG_UNSIGNED)
 	if (gConfigItems[item].Type == PALCFG_UNSIGNED)
 	{
 	{
-		ConfigValue val = { (const char *)value };
+		ConfigValue val = { (const char *)(intptr_t)value };
 		PAL_SetConfigItem(item, val);
 		PAL_SetConfigItem(item, val);
 		return TRUE;
 		return TRUE;
 	}
 	}

+ 69 - 67
unix/unix.cpp

@@ -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);