Activate -path and -file options
authorH.G. Muller <h.g.muller@hccnet.nl>
Sun, 3 Apr 2011 10:54:51 +0000 (12:54 +0200)
committerArun Persaud <apersaud@lbl.gov>
Thu, 7 Apr 2011 05:21:40 +0000 (22:21 -0700)
In XBoard the generic popup was prepared for this. In WinBoard, for
-path options the BrowseFolder routine is used, and had to be made
global (prototype in winboard.h).

backend.c
winboard/winboard.h
winboard/wsettings.c

index 54a7e70..4044175 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -13883,11 +13883,11 @@ ParseOption(Option *opt, ChessProgramState *cps)
        } else if((p = strstr(opt->name, " -file "))) {
            // for now -file is a synonym for -string, to already provide compatibility with future polyglots
            opt->textValue = p+7;
-           opt->type = TextBox; // FileName;
+           opt->type = FileName; // FileName;
        } else if((p = strstr(opt->name, " -path "))) {
            // for now -file is a synonym for -string, to already provide compatibility with future polyglots
            opt->textValue = p+7;
-           opt->type = TextBox; // PathName;
+           opt->type = PathName; // PathName;
        } else if(p = strstr(opt->name, " -check ")) {
            if(sscanf(p, " -check %d", &def) < 1) return FALSE;
            opt->value = (def != 0);
index 9d8e6ea..87367e4 100644 (file)
@@ -133,6 +133,7 @@ BOOLEAN MyLoadSound(MySound *ms);
 BOOLEAN MyPlaySound(MySound *ms);\r
 VOID ExitArgError(char *msg, char *badArg);\r
 void SaveSettings(char* name);\r
+BOOL BrowseForFolder( const char * title, char * path );\r
 \r
 /* Constants */\r
 \r
index ccfae75..6298309 100644 (file)
@@ -59,6 +59,7 @@ PrintOpt(int i, int right, ChessProgramState *cps)
            case ResetButton:\r
                fprintf(debugFP, "[ %26.26s ]", opt.name);\r
            case Message:\r
+           default:\r
                break;\r
        }\r
     }\r
@@ -99,6 +100,7 @@ LayoutOptions(int firstOption, int endOption, char *groupName, Option *optionLis
                case PathName:\r
                case Slider:\r
                case Spin: stop++;\r
+               default:\r
                case Message: ; // cannot happen\r
            }\r
            nextOption++;\r
@@ -107,7 +109,7 @@ LayoutOptions(int firstOption, int endOption, char *groupName, Option *optionLis
        if(!stop)\r
            nextType = Button; // kudge to flush remaining checks and combos undistorted\r
        // Take a new line if a spin follows combos or checks, or when we encounter a textbox\r
-       if((combos+checks || nextType == TextBox) && layout&1) {\r
+       if((combos+checks || nextType == TextBox || nextType == FileName || nextType == PathName) && layout&1) {\r
            layoutList[layout++] = -1;\r
        }\r
        // The last check or combo before a spin will be put on the same line as that spin (prefix)\r
@@ -119,7 +121,7 @@ LayoutOptions(int firstOption, int endOption, char *groupName, Option *optionLis
        }\r
        // if a combo is followed by a textbox, it must stay at the end of the combo/checks list to appear\r
        // immediately above the textbox, so treat it as check. (A check would automatically be and remain there.)\r
-       if(nextType == TextBox && lastType == ComboBox)\r
+       if((nextType == TextBox || nextType == FileName || nextType == PathName) && lastType == ComboBox)\r
            checkList[checks++] = comboList[--combos];\r
        // Now append the checks behind the (remaining) combos to treat them as one group\r
        for(i=0; i< checks; i++)\r
@@ -137,7 +139,7 @@ LayoutOptions(int firstOption, int endOption, char *groupName, Option *optionLis
            layoutList[layout++] = -1;\r
            layoutList[layout++] = comboList[2*right];\r
        }\r
-       if(nextType == TextBox) {\r
+       if(nextType == TextBox || nextType == FileName || nextType == PathName) {\r
            // A textBox is double width, so must be left-adjusted, and the right column remains empty\r
            breaks[layout/2] = lastType == Button ? 0 : 100;\r
            layoutList[layout++] = -1;\r
@@ -259,6 +261,8 @@ SetOptionValues(HWND hDlg, ChessProgramState *cps)
                SetDlgItemInt( hDlg, 2001+2*i, cps->option[j].value, TRUE );\r
                break;\r
            case TextBox:\r
+           case FileName:\r
+           case PathName:\r
                SetDlgItemText( hDlg, 2001+2*i, cps->option[j].textValue );\r
                break;\r
            case CheckBox:\r
@@ -409,13 +413,19 @@ LRESULT CALLBACK SettingsProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPa
                          ofn.lpstrFilter = filter;\r
                          ofn.lpstrFile = buf;\r
                          ofn.nMaxFile = sizeof(buf);\r
-                         ofn.lpstrTitle = _("Choose Book");\r
+                         ofn.lpstrTitle = _("Choose File");\r
                          ofn.Flags = OFN_FILEMUSTEXIST | OFN_LONGNAMES | OFN_HIDEREADONLY;\r
 \r
                          if( GetOpenFileName( &ofn ) ) {\r
                              SetDlgItemText( hDlg, i+3, buf );\r
                          }\r
+               } else\r
+               if(j == -3) {\r
+                   if( BrowseForFolder( _("Choose Folder:"), buf ) ) {\r
+                       SetDlgItemText( hDlg, i+3, buf );\r
+                   }\r
                }\r
+      return TRUE;\r
                if(j < 0) break;\r
                if( activeCps->option[j].type  == SaveButton)\r
                     GetOptionValues(hDlg, activeCps);\r
@@ -460,17 +470,16 @@ void AddOption(int x, int y, Control type, int i)
            AddControl(x, y+1, 95, 9, 0x0082, SS_ENDELLIPSIS | WS_VISIBLE | WS_CHILD, i);\r
            AddControl(x+95, y, 50, 11, 0x0081, ES_AUTOHSCROLL | ES_NUMBER | WS_BORDER | WS_VISIBLE | WS_CHILD | WS_TABSTOP, i+1);\r
            break;\r
-//     case TextBox:\r
+       case TextBox:\r
            AddControl(x, y+1, 95, 9, 0x0082, SS_ENDELLIPSIS | WS_VISIBLE | WS_CHILD, i);\r
            AddControl(x+95, y, 190, 11, 0x0081, ES_AUTOHSCROLL | WS_BORDER | WS_VISIBLE | WS_CHILD | WS_TABSTOP, i+1);\r
            break;\r
-       case TextBox:  // For now all text edits get a browse button, as long as -file and -path options are not yet implemented\r
        case FileName:\r
        case PathName:\r
            AddControl(x, y+1, 95, 9, 0x0082, SS_ENDELLIPSIS | WS_VISIBLE | WS_CHILD, i);\r
            AddControl(x+95, y, 180, 11, 0x0081, ES_AUTOHSCROLL | WS_BORDER | WS_VISIBLE | WS_CHILD | WS_TABSTOP, i+1);\r
            AddControl(x+275, y, 20, 12, 0x0080, BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, i-2);\r
-           layoutList[i/2-1] = -2;\r
+           layoutList[i/2-1] = -2 - (type == PathName);\r
            break;\r
        case CheckBox:\r
            AddControl(x, y, 145, 11, 0x0080, BS_AUTOCHECKBOX | WS_VISIBLE | WS_CHILD | WS_TABSTOP, i);\r
@@ -484,6 +493,7 @@ void AddOption(int x, int y, Control type, int i)
        case SaveButton:\r
            AddControl(x-2, y, 65, 13, 0x0080, BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD, i);\r
        case Message:\r
+       default:\r
            break;\r
     }\r
 \r