[PROGMAN]
[reactos.git] / reactos / base / shell / progman / progman.h
index 3ab198a..fea60ab 100644 (file)
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+/*
+ * PROJECT:         ReactOS Program Manager
+ * COPYRIGHT:       GPL - See COPYING in the top level directory
+ * FILE:            base/shell/progman/progman.h
+ * PURPOSE:         ProgMan header
+ * PROGRAMMERS:     Ulrich Schmid
+ *                  Sylvain Petreolle
+ *                  Hermes Belusca-Maito (hermes.belusca@sfr.fr)
+ */
+
 #ifndef PROGMAN_H
 #define PROGMAN_H
 
 #include <stdio.h>
+#include <stdlib.h>
 
 #define WIN32_NO_STATUS
 #include <windef.h>
 #include <winbase.h>
+#include <winreg.h>
 #include <wingdi.h>
 #include <winuser.h>
 
+#include <shellapi.h>
+
+#include <commctrl.h>
+#include <richedit.h>
+
 #define MAX_STRING_LEN      255
 #define MAX_PATHNAME_LEN    1024
 #define MAX_LANGUAGE_NUMBER (PM_LAST_LANGUAGE - PM_FIRST_LANGUAGE)
 /* Fallback icon */
 #define DEFAULTICON OIC_WINLOGO
 
-/* Icon index in MS Windows' progman.exe  */
-#define PROGMAN_ICON_INDEX 0
-#define GROUP_ICON_INDEX   6
-#define DEFAULT_ICON_INDEX 7
-
 #define DEF_GROUP_WIN_XPOS   100
 #define DEF_GROUP_WIN_YPOS   100
 #define DEF_GROUP_WIN_WIDTH  300
 #define DEF_GROUP_WIN_HEIGHT 200
 
-typedef struct
+
+/*
+ * windowsx.h extensions
+ */
+#define EnableDlgItem(hDlg, nID, bEnable)   \
+    EnableWindow(GetDlgItem((hDlg), (nID)), (bEnable))
+
+
+
+
+
+typedef struct _PROGRAM PROGRAM, *PPROGRAM;
+typedef struct _PROGGROUP PROGGROUP, *PPROGGROUP;
+
+struct _PROGRAM
 {
-  HLOCAL   hGroup;
-  HLOCAL   hPrior;
-  HLOCAL   hNext;
-  HWND     hWnd;
-  /**/              /* Numbers are byte indexes in *.grp */
-
-  /**/                       /* Program entry */
-  INT      x, y;               /*  0 -  3 */
-  INT      nIconIndex;         /*  4 -  5 */
-  HICON    hIcon;
-  /* icon flags ??? */         /*  6 -  7 */
-  /* iconANDsize */            /*  8 -  9 */
-  /* iconXORsize */            /* 10 - 11 */
-  /* pointer to IconInfo    */ /* 12 - 13 */
-  /* pointer to iconXORbits */ /* 14 - 15 */ /* sometimes iconANDbits ?! */
-  /* pointer to iconANDbits */ /* 16 - 17 */ /* sometimes iconXORbits ?! */
-  HLOCAL   hName;              /* 18 - 19 */
-  HLOCAL   hCmdLine;           /* 20 - 21 */
-  HLOCAL   hIconFile;          /* 22 - 23 */
-  HLOCAL   hWorkDir;           /* Extension 0x8101 */
-  INT      nHotKey;            /* Extension 0x8102 */
-  /* Modifier: bit 8... */
-  INT      nCmdShow;           /* Extension 0x8103 */
-
-  /**/                         /* IconInfo */
-  /* HotSpot x   ??? */        /*  0 -  1 */
-  /* HotSpot y   ??? */        /*  2 -  3 */
-  /* Width           */        /*  4 -  5 */
-  /* Height          */        /*  6 -  7 */
-  /* WidthBytes  ??? */        /*  8 -  9 */
-  /* Planes          */        /* 10 - 10 */
-  /* BitsPerPixel    */        /* 11 - 11 */
-} PROGRAM;
-
-typedef struct
+    PROGGROUP* hGroup;
+    PROGRAM*   hPrior;
+    PROGRAM*   hNext;
+    HWND       hWnd;
+
+    INT        iItem;
+    INT        x;
+    INT        y;
+    INT        nIconIndex;
+    HICON      hIcon;
+    LPWSTR     hName;
+    LPWSTR     hCmdLine;
+    LPWSTR     hIconFile;
+    LPWSTR     hWorkDir;    /* Extension 0x8101 */
+    INT        nHotKey;     /* Extension 0x8102 */
+    INT        nCmdShow;    /* Extension 0x8103 */
+    BOOL       bNewVDM;     /* Extension 0x8104 */
+
+    SIZE_T     TagsSize;
+    PVOID      Tags;
+}; // PROGRAM, *PPROGRAM;
+
+typedef enum _GROUPFORMAT
+{
+    Win_311    = 0x0,
+    NT_Ansi    = 0x1, // 0x02
+    NT_Unicode = 0x2, // 0x03
+} GROUPFORMAT;
+
+struct _PROGGROUP
 {
-  HLOCAL   hPrior;
-  HLOCAL   hNext;
-  HWND     hWnd;
-  HLOCAL   hGrpFile;
-  HLOCAL   hActiveProgram;
-  BOOL     bFileNameModified;
-  BOOL     bOverwriteFileOk;
-  INT      seqnum;
-
-  /**/                         /* Absolute */
-  /* magic `PMCC'  */          /*  0 -  3 */
-  /* checksum      */          /*  4 -  5 */
-  /* Extension ptr */          /*  6 -  7 */
-  INT      nCmdShow;           /*  8 -  9 */
-  INT      x, y;               /* 10 - 13 */
-  INT      width, height;      /* 14 - 17 */
-  INT      iconx, icony;       /* 18 - 21 */
-  HLOCAL   hName;              /* 22 - 23 */
-  /* unknown */                /* 24 - 31 */
-  /* number of programs */     /* 32 - 33 */
-  HLOCAL   hPrograms;          /* 34 ...  */
-
-  /**/                        /* Extensions */
-  /* Extension type */         /*  0 -  1 */
-  /* Program number */         /*  2 -  3 */
-  /* Size of entry  */         /*  4 -  5 */
-  /* Data           */         /*  6 ...  */
-
-  /* magic `PMCC' */           /* Extension 0x8000 */
-  /* End of Extensions */      /* Extension 0xffff */
-} PROGGROUP;
-
-typedef struct
+    PROGGROUP* hPrior;
+    PROGGROUP* hNext;
+    HWND       hWnd;
+
+    HWND       hListView;
+    HIMAGELIST hListLarge;
+    HIMAGELIST hDragImageList;
+    HICON      hOldCursor;
+    POINT      ptStart;
+    BOOL       bDragging;
+
+    GROUPFORMAT format;
+    BOOL     bIsCommonGroup;
+    // BOOL     bFileNameModified;
+    BOOL     bOverwriteFileOk;
+    LPWSTR   hGrpFile;
+    INT      seqnum;
+    INT      nCmdShow;
+    INT      x;
+    INT      y;
+    INT      width;
+    INT      height;
+    INT      iconx;
+    INT      icony;
+    LPWSTR   hName;
+    PROGRAM* hPrograms;
+    PROGRAM* hActiveProgram;
+
+    SIZE_T   TagsSize;
+    PVOID    Tags;
+}; // PROGGROUP, *PPROGGROUP;
+
+
+typedef struct _GLOBALS
 {
-  HANDLE  hInstance;
-  HANDLE  hAccel;
-  HWND    hMainWnd;
-  HWND    hMDIWnd;
-  HICON   hMainIcon;
-  HICON   hGroupIcon;
-  HICON   hDefaultIcon;
-  HMENU   hMainMenu;
-  HMENU   hFileMenu;
-  HMENU   hOptionMenu;
-  HMENU   hWindowsMenu;
-  HMENU   hLanguageMenu;
-  LPCSTR  lpszIniFile;
-#ifndef __REACTOS__
-  LPCSTR  lpszIcoFile;
-#endif
-  BOOL    bAutoArrange;
-  BOOL    bSaveSettings;
-  BOOL    bMinOnRun;
-  HLOCAL  hGroups;
-  HLOCAL  hActiveGroup;
-} GLOBALS;
+    HINSTANCE hInstance;
+    HACCEL    hAccel;
+    HWND      hMainWnd;
+    HWND      hMDIWnd;
+    HICON     hDefaultIcon;
+    HICON     hMainIcon;
+    // HICON     hGroupIcon;
+    HICON     hPersonalGroupIcon;
+    HICON     hCommonGroupIcon;
+    HMENU     hMainMenu;
+    HMENU     hFileMenu;
+    HMENU     hOptionMenu;
+    HMENU     hWindowsMenu;
+    HMENU     hLanguageMenu;
+
+    HKEY      hKeyProgMan;
+    HKEY      hKeyPMSettings;
+    HKEY      hKeyPMCommonGroups;
+    HKEY      hKeyPMAnsiGroups;
+    HKEY      hKeyPMUnicodeGroups;
+    HKEY      hKeyAnsiGroups;
+    HKEY      hKeyUnicodeGroups;
+    HKEY      hKeyCommonGroups;
+
+    BOOL      bAutoArrange;
+    BOOL      bSaveSettings;
+    BOOL      bMinOnRun;
+    PROGGROUP* hGroups;
+    PROGGROUP* hActiveGroup;
+    // int field_74;
+    // int field_78;
+    // PROGGROUP* field_79;
+} GLOBALS, *PGLOBALS;
 
 extern GLOBALS Globals;
+extern WCHAR szTitle[256];
+
+
+/*
+ * Memory management functions
+ */
+PVOID
+Alloc(IN DWORD  dwFlags,
+      IN SIZE_T dwBytes);
+
+BOOL
+Free(IN PVOID lpMem);
+
+PVOID
+ReAlloc(IN DWORD  dwFlags,
+        IN PVOID  lpMem,
+        IN SIZE_T dwBytes);
+
+PVOID
+AppendToBuffer(IN PVOID   pBuffer,
+               IN PSIZE_T pdwBufferSize,
+               IN PVOID   pData,
+               IN SIZE_T  dwDataSize);
+
 
 INT  MAIN_MessageBoxIDS(UINT ids_text, UINT ids_title, WORD type);
-INT  MAIN_MessageBoxIDS_s(UINT ids_text_s, LPCSTR str, UINT ids_title, WORD type);
-VOID MAIN_ReplaceString(HLOCAL *handle, LPSTR replacestring);
-
-HLOCAL GRPFILE_ReadGroupFile(const char* path);
-BOOL   GRPFILE_WriteGroupFile(HLOCAL hGroup);
-
-ATOM   GROUP_RegisterGroupWinClass(void);
-HLOCAL GROUP_AddGroup(LPCSTR lpszName, LPCSTR lpszGrpFile, INT nCmdShow,
-                     INT x, INT y, INT width, INT height,
-                     INT iconx, INT icony,
-                     BOOL bFileNameModified, BOOL bOverwriteFileOk,
-                     /* FIXME shouldn't be necessary */
-                     BOOL bSuppressShowWindow);
-VOID   GROUP_NewGroup(void);
-VOID   GROUP_ModifyGroup(HLOCAL hGroup);
-VOID   GROUP_DeleteGroup(HLOCAL hGroup);
+INT  MAIN_MessageBoxIDS_s(UINT ids_text, LPCWSTR str, UINT ids_title, WORD type);
+VOID MAIN_ReplaceString(LPWSTR* string, LPWSTR replace);
+
+DWORD GRPFILE_ReadGroupFile(LPCWSTR lpszPath, BOOL bIsCommonGroup);
+BOOL GRPFILE_WriteGroupFile(PROGGROUP* hGroup);
+
+ATOM GROUP_RegisterGroupWinClass(VOID);
+PROGGROUP* GROUP_AddGroup(GROUPFORMAT format, BOOL bIsCommonGroup, LPCWSTR lpszName, LPCWSTR lpszGrpFile,
+                          INT left, INT top, INT right, INT bottom, INT xMin, INT yMin, INT nCmdShow,
+                          WORD cxIcon, WORD cyIcon, BOOL bOverwriteFileOk,
+                          /* FIXME shouldn't be necessary */
+                          BOOL bSuppressShowWindow);
+VOID GROUP_NewGroup(GROUPFORMAT format, BOOL bIsCommonGroup);
+VOID GROUP_ModifyGroup(PROGGROUP* hGroup);
+VOID GROUP_DeleteGroup(PROGGROUP* hGroup);
 /* FIXME shouldn't be necessary */
-VOID   GROUP_ShowGroupWindow(HLOCAL hGroup);
-HLOCAL GROUP_FirstGroup(void);
-HLOCAL GROUP_NextGroup(HLOCAL hGroup);
-HLOCAL GROUP_ActiveGroup(void);
-HWND   GROUP_GroupWnd(HLOCAL hGroup);
-LPCSTR GROUP_GroupName(HLOCAL hGroup);
-
-ATOM   PROGRAM_RegisterProgramWinClass(void);
-HLOCAL PROGRAM_AddProgram(HLOCAL hGroup, HICON hIcon, LPCSTR lpszName,
-                         INT x, INT y, LPCSTR lpszCmdLine,
-                         LPCSTR lpszIconFile, INT nIconIndex,
-                         LPCSTR lpszWorkDir, INT nHotKey, INT nCmdShow);
-VOID   PROGRAM_NewProgram(HLOCAL hGroup);
-VOID   PROGRAM_ModifyProgram(HLOCAL hProgram);
-VOID   PROGRAM_CopyMoveProgram(HLOCAL hProgram, BOOL bMove);
-VOID   PROGRAM_DeleteProgram(HLOCAL hProgram, BOOL BUpdateGrpFile);
-HLOCAL PROGRAM_FirstProgram(HLOCAL hGroup);
-HLOCAL PROGRAM_NextProgram(HLOCAL hProgram);
-HLOCAL PROGRAM_ActiveProgram(HLOCAL hGroup);
-LPCSTR PROGRAM_ProgramName(HLOCAL hProgram);
-VOID   PROGRAM_ExecuteProgram(HLOCAL hLocal);
-
-INT    DIALOG_New(INT nDefault);
-HLOCAL DIALOG_CopyMove(LPCSTR lpszProgramName, LPCSTR lpszGroupName, BOOL bMove);
-BOOL   DIALOG_Delete(UINT ids_format_s, LPCSTR lpszName);
-BOOL   DIALOG_GroupAttributes(LPSTR lpszTitle, LPSTR lpszPath, INT nSize);
-BOOL   DIALOG_ProgramAttributes(LPSTR lpszTitle, LPSTR lpszCmdLine,
-                               LPSTR lpszWorkDir, LPSTR lpszIconFile,
-                               HICON *lphIcon, INT *nIconIndex,
-                               INT *lpnHotKey, INT *lpnCmdShow, INT nSize);
-VOID   DIALOG_Execute(void);
-
-VOID   STRING_LoadMenus(VOID);
+VOID GROUP_ShowGroupWindow(PROGGROUP* hGroup);
+PROGGROUP* GROUP_ActiveGroup(VOID);
+
+PROGRAM* PROGRAM_AddProgram(PROGGROUP* hGroup, HICON hIcon, LPCWSTR lpszName,
+                            INT x, INT y, LPCWSTR lpszCmdLine, LPCWSTR lpszIconFile, INT nIconIndex,
+                            LPCWSTR lpszWorkDir, INT nHotKey, INT nCmdShow, BOOL bNewVDM);
+VOID PROGRAM_NewProgram(PROGGROUP* hGroup);
+VOID PROGRAM_ModifyProgram(PROGRAM* hProgram);
+VOID PROGRAM_CopyMoveProgram(PROGRAM* hProgram, BOOL bMove);
+VOID PROGRAM_DeleteProgram(PROGRAM* hProgram, BOOL bUpdateGrpFile);
+VOID PROGRAM_ExecuteProgram(PROGRAM* hProgram);
+PROGRAM* PROGRAM_ActiveProgram(PROGGROUP* hGroup);
+
+BOOL DIALOG_New(INT nDefault, PINT pnResult);
+PROGGROUP* DIALOG_CopyMove(PROGRAM* hProgram, BOOL bMove);
+BOOL DIALOG_Delete(UINT ids_text_s, LPCWSTR lpszName);
+BOOL DIALOG_GroupAttributes(GROUPFORMAT format, LPWSTR lpszTitle, LPWSTR lpszGrpFile, INT nSize);
+BOOL DIALOG_ProgramAttributes(LPWSTR lpszTitle, LPWSTR lpszCmdLine, LPWSTR lpszWorkDir, LPWSTR lpszIconFile,
+                              HICON* lphIcon, INT* lpnIconIndex, INT* lpnHotKey, INT* lpnCmdShow, BOOL* lpbNewVDM, INT nSize);
+VOID DIALOG_Execute(VOID);
+
+VOID STRING_LoadStrings(VOID);
+VOID STRING_LoadMenus(VOID);
 
 /* Class names */
-extern WCHAR STRING_MAIN_WIN_CLASS_NAME[];
-extern WCHAR STRING_MDI_WIN_CLASS_NAME[];
-extern WCHAR STRING_GROUP_WIN_CLASS_NAME[];
-extern WCHAR STRING_PROGRAM_WIN_CLASS_NAME[];
+#define STRING_MAIN_WIN_CLASS_NAME  L"PMMain"
+#define STRING_GROUP_WIN_CLASS_NAME L"PMGroup"
 
 #endif /* PROGMAN_H */
-
-/* Local Variables:    */
-/* c-file-style: "GNU" */
-/* End:                */