Implement separate engine list for WinBoard
[xboard.git] / winboard / wsettings.c
index ba9488b..04957e7 100644 (file)
@@ -1,7 +1,8 @@
 /*\r
  * woptions.h -- Options dialog box routines for WinBoard\r
  *\r
- * Copyright 2003, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Free Software Foundation, Inc.\r
+ * Copyright 2003, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Free\r
+ * Software Foundation, Inc.\r
  *\r
  * ------------------------------------------------------------------------\r
  *\r
@@ -455,6 +456,7 @@ GetOptionValues(HWND hDlg, ChessProgramState *cps, Option *optionList)
 }\r
 \r
 char *defaultExt[] = { NULL, "pgn", "fen", "exe", "trn", "bin", "log", "ini" };\r
+HWND settingsDlg;\r
 \r
 LRESULT CALLBACK SettingsProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
 {\r
@@ -467,7 +469,7 @@ LRESULT CALLBACK SettingsProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPa
 \r
 //        CenterWindow(hDlg, GetWindow(hDlg, GW_OWNER));\r
        SetOptionValues(hDlg, activeCps, activeList);\r
-\r
+       settingsDlg = hDlg;\r
         SetFocus(GetDlgItem(hDlg, IDCANCEL));\r
 \r
         break;\r
@@ -477,12 +479,12 @@ LRESULT CALLBACK SettingsProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPa
         case IDOK:\r
            if(!GetOptionValues(hDlg, activeCps, activeList)) return FALSE;\r
             EndDialog( hDlg, 0 );\r
-           comboCallback = NULL; activeCps = NULL;\r
+           comboCallback = NULL; activeCps = NULL; settingsDlg = NULL;\r
             return TRUE;\r
 \r
         case IDCANCEL:\r
             EndDialog( hDlg, 1 );\r
-           comboCallback = NULL; activeCps = NULL;\r
+           comboCallback = NULL; activeCps = NULL; settingsDlg = NULL;\r
             return TRUE;\r
 \r
        default:\r
@@ -539,6 +541,12 @@ LRESULT CALLBACK SettingsProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPa
                     GetOptionValues(hDlg, activeCps, activeList);\r
                else if( activeList[j].type  != Button) break;\r
                else if( !activeCps ) { (*(ButtonCallback*) activeList[j].target)(hDlg); break; }\r
+               if(j == 0) { // WinBoard save button\r
+                   SaveEngineSettings(activeCps == &second);\r
+                   EndDialog( hDlg, 0 );\r
+                   comboCallback = NULL; activeCps = NULL; settingsDlg = NULL;\r
+                   return TRUE;\r
+               }\r
                snprintf(buf, MSG_SIZ, "option %s\n", activeList[j].name);\r
                SendToProgram(buf, activeCps);\r
            }\r
@@ -691,6 +699,19 @@ EngineOptionsPopup(HWND hwnd, ChessProgramState *cps)
     return;\r
 }\r
 \r
+void\r
+RefreshSettingsDialog (ChessProgramState *cps, int val)\r
+{\r
+    int isUp = (settingsDlg != NULL);\r
+    if(val == 1) {\r
+       if(activeCps == cps && isUp) SetOptionValues(settingsDlg, cps, activeList);\r
+       return;\r
+    }\r
+    if(settingsDlg) EndDialog(settingsDlg, 1);\r
+    comboCallback = NULL; activeCps = NULL; settingsDlg = NULL;\r
+    if(val == 3 || isUp) EngineOptionsPopup(hwndMain, cps);\r
+}\r
+\r
 int EnterGroup P((HWND hDlg));\r
 \r
 static int engineNr, selected;\r
@@ -720,7 +741,7 @@ Option installOptions[] = {
   {   0,  0,    0, NULL, (void*) &storeVariant, NULL, NULL, CheckBox, N_("Force current variant with this engine") },\r
   {   0,  0,    0, NULL, (void*) &isUCI, NULL, NULL, CheckBox, N_("UCI") },\r
   {   0,  0,    0, NULL, (void*) &v1, NULL, NULL, CheckBox, N_("WB protocol v1 (skip waiting for features)") },\r
-  {   0,  0,    0, NULL, (void*) &isUCCI, NULL, NULL, CheckBox, N_("UCCI / USI (uses specified /uxiAdapter)") },\r
+  {   0,  0,    0, NULL, (void*) &isUCCI, NULL, NULL, CheckBox, N_("UCCI/USI/Arena960 (through /uxiAdapter)") },\r
   {   0,  1,    0, NULL, (void*) &InstallOK, "", NULL, EndMark , "" }\r
 };\r
 \r
@@ -769,6 +790,7 @@ EnterGroup(HWND hDlg)
 \r
 void LoadEnginePopUp(HWND hwnd, int nr)\r
 {\r
+    if(*engineListFile) ParseSettingsFile(engineListFile, &engineListFile); // contains engine list\r
     isUCI = isUCCI = storeVariant = v1 = useNick = FALSE; addToList = hasBook = TRUE; // defaults\r
     engineNr = nr;\r
     if(engineDir)    free(engineDir);    engineDir = strdup("");\r
@@ -886,6 +908,7 @@ int MatchOK()
 \r
 void PseudoOK(HWND hDlg)\r
 {\r
+    if(matchMode) return;\r
     okFunc = 0;\r
     GetOptionValues(hDlg, activeCps, activeList);\r
     EndDialog( hDlg, 0 );\r
@@ -898,6 +921,7 @@ void PseudoOK(HWND hDlg)
        if(appData.loadPositionIndex < 0) appData.loadPositionIndex = 0;\r
     }\r
     if(swiss) { appData.defaultMatchGames = 1; appData.tourneyType = -1; }\r
+    ASSIGN(appData.tourneyFile, tfName);\r
 }\r
 \r
 char *GetParticipants(HWND hDlg)\r