Add Themes dialog (WB)
[xboard.git] / winboard / winboard.h
index c24d020..f3b1439 100644 (file)
-/*
- * WinBoard.h -- Definitions for Windows NT front end to XBoard
- *
- * Copyright 1991 by Digital Equipment Corporation, Maynard,
- * Massachusetts.  Enhancements Copyright
- * 1992-2001,2002,2003,2004,2005,2006,2007,2008,2009 Free Software
- * Foundation, Inc.
- *
- * The following terms apply to Digital Equipment Corporation's copyright
- * interest in XBoard:
- * ------------------------------------------------------------------------
- * All Rights Reserved
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Digital not be
- * used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.
- *
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- * ------------------------------------------------------------------------
- *
- * The following terms apply to the enhanced version of XBoard
- * distributed by the Free Software Foundation:
- * ------------------------------------------------------------------------
- *
- * GNU XBoard is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or (at
- * your option) any later version.
- *
- * GNU XBoard is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see http://www.gnu.org/licenses/.  *
- *
- *------------------------------------------------------------------------
- ** See the file ChangeLog for a revision history.  */
-
-#include "resource.h"
-#include <dlgs.h>
-
-/* Types */
-typedef struct {
-  char faceName[LF_FACESIZE];
-  float pointSize;
-  BYTE bold, italic, underline, strikeout;
-} MyFontParams;
-
-typedef struct {
-  char *def;
-  MyFontParams mfp;
-  LOGFONT lf;
-  HFONT hf;
-} MyFont;
-
-typedef enum { 
-  SizeTiny, SizeTeeny, SizeDinky, SizePetite, SizeSlim, SizeSmall,
-  SizeMediocre, SizeMiddling, SizeAverage, SizeModerate, SizeMedium,
-  SizeBulky, SizeLarge, SizeBig, SizeHuge, SizeGiant, SizeColossal,
-  SizeTitanic, NUM_SIZES 
-} BoardSize;
-
-typedef struct {
-    COLORREF color;
-    int effects;
-    char *name;
-} MyColorizeAttribs;
-
-typedef struct {
-  char* name;
-  void* data;
-} MySound;
-
-typedef struct {
-    COLORREF color;
-    int effects;
-    MySound sound;
-} MyTextAttribs;
-
-/* Functions */
-
-BOOL InitApplication(HINSTANCE);
-BOOL InitInstance(HINSTANCE, int, LPSTR);
-LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
-LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
-LRESULT CALLBACK BoardSizeDlg(HWND, UINT, WPARAM, LPARAM);
-LRESULT CALLBACK ButtonProc(HWND, UINT, WPARAM, LPARAM);
-VOID InitAppData(LPSTR);
-VOID InitDrawingColors(VOID);
-VOID InitDrawingSizes(BoardSize boardSize, int flags);
-VOID InitMenuChecks(VOID);
-VOID ICSInitScript(VOID);
-BOOL CenterWindow(HWND hwndChild, HWND hwndParent);
-VOID ResizeEditPlusButtons(HWND hDlg, HWND hText, int sizeX, int sizeY, int newSizeX, int newSizeY);
-VOID PromotionPopup(HWND hwnd);
-FILE *OpenFileDialog(HWND hWnd, char *write, char *defName, char *defExt, 
-                    char *nameFilt, char *dlgTitle, UINT *number,
-                    char fileTitle[MSG_SIZ], char fileName[MSG_SIZ]);
-VOID InputEvent(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
-DWORD InputThread(LPVOID arg);
-DWORD NonOvlInputThread(LPVOID arg);
-DWORD SocketInputThread(LPVOID arg);
-BOOL ChangeColor(HWND hwnd, COLORREF *which);
-VOID ChangeBoardSize(BoardSize newSize);
-BOOL APIENTRY MyCreateFont(HWND hwnd, MyFont *font);
-VOID ErrorPopDown(VOID);
-VOID EnsureOnScreen(int *x, int *y);
-typedef char GetFunc(void *getClosure);
-VOID ParseArgs(GetFunc get, void *cl);
-HBITMAP 
-DoLoadBitmap(HINSTANCE hinst, char *piece, int squareSize, char *suffix);
-COLORREF ParseColorName(char *name);
-void ParseAttribs(COLORREF *color, int *effects, char* argValue);
-VOID CreateFontInMF(MyFont *mf);
-VOID ChangedConsoleFont();
-VOID ParseFontName(char *name, MyFontParams *mfp);
-void InitComboStrings(HANDLE hwndCombo, char **cd);
-BOOLEAN MyLoadSound(MySound *ms);
-BOOLEAN MyPlaySound(MySound *ms);
-VOID ExitArgError(char *msg, char *badArg);
-
-/* Constants */
-
-#define CLOCK_FONT 0
-#define MESSAGE_FONT 1
-#define COORD_FONT 2
-#define CONSOLE_FONT 3
-#define COMMENT_FONT 4
-#define EDITTAGS_FONT 5
-#define MOVEHISTORY_FONT 6
-#define NUM_FONTS 7
-
-/* Positions of some menu items.  Origin is zero and separator lines count. */
-/* It's gross that these are needed. */
-#define ACTION_POS 2    /* Posn of "Action" on menu bar */
-#define OPTIONS_POS 4   /* Posn of "Options" on menu bar */
-#define ICS_POS 4       /* Posn of "ICS " on Options menu */
-#define SOUNDS_POS 6     /* Posn of "Sounds" on Options menu */
-/* end grossness */
-
-extern MyFont *font[NUM_SIZES][NUM_FONTS];
-
-#define WM_USER_Input                 (WM_USER + 4242)
-#define WM_USER_Mouseleave            (WM_USER + 4243)
-#define WM_USER_GetConsoleBackground  (WM_USER + 4244)
-
-#define CLOCK_TIMER_ID        51
-#define LOAD_GAME_TIMER_ID    52
-#define ANALYSIS_TIMER_ID     53
-#define MOUSE_TIMER_ID        54
-#define DELAYED_TIMER_ID      55
-
-#define SOLID_PIECE           0
-#define OUTLINE_PIECE         1
-#define WHITE_PIECE           2
-
-#define COPY_TMP "wbcopy.tmp"
-#define PASTE_TMP "wbpaste.tmp"
-
-/* [AS] Layout management */
-typedef struct {
-    Boolean visible;
-    int x;
-    int y;
-    int width;
-    int height;
-} WindowPlacement;
-
-VOID InitWindowPlacement( WindowPlacement * wp );
-
-VOID RestoreWindowPlacement( HWND hWnd, WindowPlacement * wp );
-
-VOID ReattachAfterMove( LPRECT lprcOldPos, int new_x, int new_y, HWND hWndChild, WindowPlacement * pwpChild );
+/*\r
+ * WinBoard.h -- Definitions for Windows NT front end to XBoard\r
+ *\r
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,\r
+ * Massachusetts. \r
+ *\r
+ * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,\r
+ * 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.\r
+ *\r
+ * Enhancements Copyright 2005 Alessandro Scotti\r
+ *\r
+ * The following terms apply to Digital Equipment Corporation's copyright\r
+ * interest in XBoard:\r
+ * ------------------------------------------------------------------------\r
+ * All Rights Reserved\r
+ *\r
+ * Permission to use, copy, modify, and distribute this software and its\r
+ * documentation for any purpose and without fee is hereby granted,\r
+ * provided that the above copyright notice appear in all copies and that\r
+ * both that copyright notice and this permission notice appear in\r
+ * supporting documentation, and that the name of Digital not be\r
+ * used in advertising or publicity pertaining to distribution of the\r
+ * software without specific, written prior permission.\r
+ *\r
+ * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING\r
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL\r
+ * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR\r
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS\r
+ * SOFTWARE.\r
+ * ------------------------------------------------------------------------\r
+ *\r
+ * The following terms apply to the enhanced version of XBoard\r
+ * distributed by the Free Software Foundation:\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
+#include "resource.h"\r
+#include <dlgs.h>\r
+\r
+/* Types */\r
+typedef struct {\r
+  char faceName[LF_FACESIZE];\r
+  float pointSize;\r
+  BYTE bold, italic, underline, strikeout;\r
+  BYTE charset;\r
+} MyFontParams;\r
+\r
+typedef struct {\r
+  char *def;\r
+  MyFontParams mfp;\r
+  LOGFONT lf;\r
+  HFONT hf;\r
+} MyFont;\r
+\r
+typedef enum { \r
+  SizeTiny, SizeTeeny, SizeDinky, SizePetite, SizeSlim, SizeSmall,\r
+  SizeMediocre, SizeMiddling, SizeAverage, SizeModerate, SizeMedium,\r
+  SizeBulky, SizeLarge, SizeBig, SizeHuge, SizeGiant, SizeColossal,\r
+  SizeTitanic, NUM_SIZES \r
+} BoardSize;\r
+\r
+typedef struct {\r
+    COLORREF color;\r
+    int effects;\r
+    char *name;\r
+} MyColorizeAttribs;\r
+\r
+typedef struct {\r
+  char* name;\r
+  void* data;\r
+  int flag; // [HGM] needed to indicate if data was malloc'ed or not\r
+} MySound;\r
+\r
+typedef struct {\r
+    COLORREF color;\r
+    int effects;\r
+    MySound sound;\r
+} MyTextAttribs;\r
+\r
+/* Functions */\r
+\r
+BOOL InitApplication(HINSTANCE);\r
+BOOL InitInstance(HINSTANCE, int, LPSTR);\r
+LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);\r
+LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);\r
+LRESULT CALLBACK BoardSizeDlg(HWND, UINT, WPARAM, LPARAM);\r
+LRESULT CALLBACK ButtonProc(HWND, UINT, WPARAM, LPARAM);\r
+VOID InitAppData(LPSTR);\r
+VOID InitDrawingColors(VOID);\r
+VOID InitDrawingSizes(BoardSize boardSize, int flags);\r
+VOID InitMenuChecks(VOID);\r
+VOID ICSInitScript(VOID);\r
+BOOL CenterWindow(HWND hwndChild, HWND hwndParent);\r
+VOID ResizeEditPlusButtons(HWND hDlg, HWND hText, int sizeX, int sizeY, int newSizeX, int newSizeY);\r
+VOID PromotionPopup(HWND hwnd);\r
+FILE *OpenFileDialog(HWND hWnd, char *write, char *defName, char *defExt, \r
+                    char *nameFilt, char *dlgTitle, UINT *number,\r
+                    char fileTitle[MSG_SIZ], char fileName[MSG_SIZ]);\r
+VOID InputEvent(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);\r
+DWORD InputThread(LPVOID arg);\r
+DWORD NonOvlInputThread(LPVOID arg);\r
+DWORD SocketInputThread(LPVOID arg);\r
+BOOL ChangeColor(HWND hwnd, COLORREF *which);\r
+VOID ChangeBoardSize(BoardSize newSize);\r
+BOOL APIENTRY MyCreateFont(HWND hwnd, MyFont *font);\r
+VOID ErrorPopDown(VOID);\r
+VOID EnsureOnScreen(int *x, int *y, int minX, int minY);\r
+HBITMAP \r
+DoLoadBitmap(HINSTANCE hinst, char *piece, int squareSize, char *suffix);\r
+COLORREF ParseColorName(char *name);\r
+void ParseAttribs(COLORREF *color, int *effects, char* argValue);\r
+VOID CreateFontInMF(MyFont *mf);\r
+VOID ChangedConsoleFont();\r
+VOID ParseFontName(char *name, MyFontParams *mfp);\r
+void InitComboStrings(HANDLE hwndCombo, char **cd);\r
+BOOLEAN MyLoadSound(MySound *ms);\r
+BOOLEAN MyPlaySound(MySound *ms);\r
+VOID ExitArgError(char *msg, char *badArg, Boolean quit);\r
+void SaveSettings(char* name);\r
+BOOL BrowseForFolder( const char * title, char * path );\r
+VOID TourneyPopup();\r
+VOID LoadEnginePopUp();\r
+VOID LoadOptionsPopup(HWND hDlg);\r
+VOID InitTextures();\r
+void ThemeOptionsPopup(HWND hwnd);\r
+\r
+/* Constants */\r
+\r
+#define CLOCK_FONT 0\r
+#define MESSAGE_FONT 1\r
+#define COORD_FONT 2\r
+#define CONSOLE_FONT 3\r
+#define COMMENT_FONT 4\r
+#define EDITTAGS_FONT 5\r
+#define MOVEHISTORY_FONT 6\r
+#define GAMELIST_FONT 7\r
+#define NUM_FONTS 8\r
+\r
+/* Positions of some menu items.  Origin is zero and separator lines count. */\r
+/* It's gross that these are needed. */\r
+#define ACTION_POS 4    /* Posn of "Action" on menu bar */\r
+#define OPTIONS_POS 6   /* Posn of "Options" on menu bar */\r
+/* end grossness */\r
+\r
+extern MyFont *font[NUM_SIZES][NUM_FONTS];\r
+\r
+#define WM_USER_Input                 (WM_USER + 4242)\r
+#define WM_USER_Mouseleave            (WM_USER + 4243)\r
+#define WM_USER_GetConsoleBackground  (WM_USER + 4244)\r
+\r
+#define CLOCK_TIMER_ID        51\r
+#define LOAD_GAME_TIMER_ID    52\r
+#define ANALYSIS_TIMER_ID     53\r
+#define MOUSE_TIMER_ID        54\r
+#define DELAYED_TIMER_ID      55\r
+\r
+#define SOLID_PIECE           0\r
+#define OUTLINE_PIECE         1\r
+#define WHITE_PIECE           2\r
+\r
+#define COPY_TMP "wbcopy.tmp"\r
+#define PASTE_TMP "wbpaste.tmp"\r
+\r
+/* variables */\r
+extern HINSTANCE hInst;\r
+extern HWND hwndMain;\r
+extern BoardSize boardSize;\r
+\r
+// [HGM] Some stuff to allo a platform-independent reference to windows\r
+// This should be moved to frontend.h in due time\r
+\r
+typedef enum {\r
+  W_Main, W_Console, W_Comment, W_Tags, W_GameList, \r
+  W_MoveHist, W_EngineOut, NUM_WINDOWS\r
+} WindowID;\r
+\r
+extern WindowPlacement placementTab[NUM_WINDOWS];\r
+extern HWND hwndTab[NUM_WINDOWS]; // this remains pure front-end.\r
+\r
+void Translate( HWND hDlg, int id);
+VOID InitWindowPlacement( WindowPlacement * wp );\r
+VOID RestoreWindowPlacement( HWND hWnd, WindowPlacement * wp );\r
+VOID ReattachAfterMove( LPRECT lprcOldPos, int new_x, int new_y, HWND hWndChild, WindowPlacement * pwpChild );\r
+VOID ReattachAfterSize( LPRECT lprcOldPos, int new_w, int new_h, HWND hWndChild, WindowPlacement * pwpChild );\r
+BOOL GetActualPlacement( HWND hWnd, WindowPlacement * wp );\r
+\r
+VOID MoveHistoryPopUp();\r
+VOID MoveHistoryPopDown();\r
+extern HWND moveHistoryDialog;\r
+\r
+VOID EvalGraphPopUp();\r
+VOID EvalGraphPopDown();\r
+extern HWND evalGraphDialog;\r
+\r
+extern HWND engineOutputDialog;\r
+\r
+VOID ShowGameListProc(void);\r
+extern HWND gameListDialog;\r
+\r
+VOID EditTagsProc(void);\r
+extern HWND editTagsDialog;\r
+extern int screenWidth, screenHeight;