Updated copyright notice to 2014
[xboard.git] / winboard / wsettings.c
index 269837b..f32fc94 100644 (file)
@@ -1,4 +1,27 @@
 /*\r
+ * woptions.h -- Options dialog box routines for WinBoard\r
+ *\r
+ * Copyright 2003, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.\r
+ *\r
+ * ------------------------------------------------------------------------\r
+ *\r
+ * GNU XBoard is free software: you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation, either version 3 of the License, or (at\r
+ * your option) any later version.\r
+ *\r
+ * GNU XBoard is distributed in the hope that it will be useful, but\r
+ * WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program. If not, see http://www.gnu.org/licenses/.  *\r
+ *\r
+ *------------------------------------------------------------------------\r
+ ** See the file ChangeLog for a revision history.  */\r
+\r
+/*\r
  * Engine-settings dialog. The complexity come from an attempt to present the engine-defined options\r
  * in a nicey formatted layout. To this end we first run a back-end pre-formatter, which will distribute\r
  * the controls over two columns (the minimum required, as some are double width). It also takes care of\r
@@ -477,7 +500,7 @@ LRESULT CALLBACK SettingsProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPa
                                "Image files\0*.bmp\0\0";\r
                          OPENFILENAME ofn;\r
 \r
-                         safeStrCpy( buf, "" , sizeof( buf)/sizeof( buf[0]) );\r
+                         GetDlgItemText( hDlg, i+3, buf, MSG_SIZ );\r
 \r
                          ZeroMemory( &ofn, sizeof(ofn) );\r
 \r
@@ -499,6 +522,7 @@ LRESULT CALLBACK SettingsProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lPa
                          }\r
                } else\r
                if(j == -3) {\r
+                   GetDlgItemText( hDlg, i+3, buf, MSG_SIZ );\r
                    if( BrowseForFolder( _("Choose Folder:"), buf ) ) {\r
                        SetDlgItemText( hDlg, i+3, buf );\r
                    }\r
@@ -550,13 +574,15 @@ void AddControl(int x, int y, int w, int h, int type, int style, int n)
 \r
 void AddOption(int x, int y, Control type, int i)\r
 {\r
-    int extra;\r
+    int extra, num = ES_NUMBER;\r
 \r
     switch(type) {\r
+       case Slider+100:\r
+           num = 0; // needs text control for accepting negative numbers\r
        case Slider:\r
        case Spin:\r
            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
+           AddControl(x+95, y, 50, 11, 0x0081, ES_AUTOHSCROLL | num | WS_BORDER | WS_VISIBLE | WS_CHILD | WS_TABSTOP, i+1);\r
            break;\r
        case TextBox:\r
            extra = 13*activeList[layoutList[i/2]].min; // when extra high, left-align and put description text above it\r
@@ -624,7 +650,8 @@ CreateDialogTemplate(int *layoutList, int nr, Option *optionList)
        }\r
        j = layoutList[i];\r
        if(j >= 0) {\r
-           AddOption(x+155-150*(i&1), y+13*(i>>1)+5, optionList[j].type, 2*i);\r
+           int neg = (optionList[j].type == Spin && optionList[j].min < 0 ? 100 : 0); // flags spin with negative range\r
+           AddOption(x+155-150*(i&1), y+13*(i>>1)+5, optionList[j].type + neg, 2*i);\r
            // listboxes have the special power to adjust the width of the column they are in\r
            if(optionList[j].type == ListBox) x -= optionList[j].value, template.header.cx -= optionList[j].value;\r
        }\r
@@ -781,7 +808,7 @@ Option themeOptions[] = {
   {   0,  0,    0, NULL, (void*) &appData.useBorder, NULL, NULL, CheckBox, N_("Draw border around board") },\r
   {   0,  0, 32+0, NULL, (void*) &appData.border, NULL, NULL, FileName, N_("Optional border bitmap:") },\r
   {   0,  0,    0, NULL, NULL, NULL, NULL, Label, N_("        Beware: a specified piece font will prevail over piece bitmaps") },\r
-  {   0,  0,    0, NULL, (void*) &appData.bitmapDirectory, NULL, NULL, PathName, N_("Directory with piece bitmaps:") },\r
+  {   0,  0,    0, NULL, (void*) &appData.pieceDirectory, NULL, NULL, PathName, N_("Directory with piece bitmaps:") },\r
   {   0,  0,    0, NULL, (void*) &appData.useFont, NULL, NULL, CheckBox, N_("Use piece font") },\r
   {   0, 50,  150, NULL, (void*) &appData.fontPieceSize, "", NULL, Spin, N_("Font size (%):") },\r
   {   0,  0,    0, NULL, (void*) &appData.renderPiecesWithFont, NULL, NULL, TextBox, N_("Font name:") },\r
@@ -976,7 +1003,7 @@ void TourneyPopup(HWND hwnd)
 {\r
     int n = NamesToList(firstChessProgramNames, engineList, engineMnemonic, "");\r
     autoinc = appData.loadGameIndex < 0 || appData.loadPositionIndex < 0;\r
-    twice = FALSE; swiss = appData.tourneyType < 0;\r
+    twice = appData.loadGameIndex == -2 || appData.loadPositionIndex == -2; swiss = appData.tourneyType < 0;\r
     tourneyOptions[0].max = n;\r
     snprintf(title, MSG_SIZ, _("Tournament and Match Options"));\r
     ASSIGN(tfName, appData.tourneyFile[0] ? appData.tourneyFile : MakeName(appData.defName));\r