Author: dchapyshev
Date: Mon Feb 18 20:25:40 2008
New Revision: 32412
URL:
http://svn.reactos.org/svn/reactos?rev=32412&view=rev
Log:
- Implement new appwiz
Added:
trunk/reactos/dll/cpl/appwiz-new/
trunk/reactos/dll/cpl/appwiz-new/appwiz.c (with props)
trunk/reactos/dll/cpl/appwiz-new/appwiz.def (with props)
trunk/reactos/dll/cpl/appwiz-new/appwiz.h (with props)
trunk/reactos/dll/cpl/appwiz-new/appwiz.rbuild (with props)
trunk/reactos/dll/cpl/appwiz-new/appwiz.rc (with props)
trunk/reactos/dll/cpl/appwiz-new/createlink.c (with props)
trunk/reactos/dll/cpl/appwiz-new/lang/
trunk/reactos/dll/cpl/appwiz-new/lang/en-US.rc (with props)
trunk/reactos/dll/cpl/appwiz-new/resource.h (with props)
trunk/reactos/dll/cpl/appwiz-new/resources/
trunk/reactos/dll/cpl/appwiz-new/resources/1501.ico (with props)
trunk/reactos/dll/cpl/appwiz-new/resources/1502.ico (with props)
trunk/reactos/dll/cpl/appwiz-new/resources/1503.ico (with props)
trunk/reactos/dll/cpl/appwiz-new/resources/applet.ico (with props)
trunk/reactos/dll/cpl/appwiz-new/resources/icon.bmp (with props)
trunk/reactos/dll/cpl/appwiz-new/resources/search.ico (with props)
trunk/reactos/dll/cpl/appwiz-new/resources/select.bmp (with props)
trunk/reactos/dll/cpl/appwiz-new/resources/underline.bmp (with props)
trunk/reactos/dll/cpl/appwiz-new/resources/watermark.bmp (with props)
trunk/reactos/dll/cpl/appwiz-new/rsrc.rc (with props)
Modified:
trunk/reactos/dll/cpl/cpl.rbuild
Added: trunk/reactos/dll/cpl/appwiz-new/appwiz.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/appwiz-new/appwiz.…
==============================================================================
--- trunk/reactos/dll/cpl/appwiz-new/appwiz.c (added)
+++ trunk/reactos/dll/cpl/appwiz-new/appwiz.c Mon Feb 18 20:25:40 2008
@@ -1,0 +1,1074 @@
+/*
+ *
+ * PROJECT: ReactOS Software Control Panel
+ * FILE: dll/cpl/appwiz/appwiz.c
+ * PURPOSE: ReactOS Software Control Panel
+ * PROGRAMMERS: Dmitry Chapyshev (dmitry(a)reactos.org)
+ * UPDATE HISTORY:
+ * 02-09-2008 Created
+ */
+
+#include "appwiz.h"
+
+WCHAR* DescriptionHeadline = L"";
+WCHAR* DescriptionText = L"";
+HBITMAP hUnderline;
+WCHAR Strings[2][256];
+HICON hSearchIcon;
+HTREEITEM hRootItem; // First item in actions list
+HFONT hMainFont;
+HIMAGELIST hImageAppList; // Image list for programs list
+BOOL bAscending = TRUE; // Sorting programs list
+
+VOID
+ShowMessage(WCHAR* title, WCHAR* message)
+{
+ DescriptionHeadline = title;
+ DescriptionText = message;
+ InvalidateRect(hMainWnd,NULL,TRUE);
+ UpdateWindow(hMainWnd);
+}
+
+static VOID
+DrawBitmap(HDC hdc, int x, int y, HBITMAP hBmp)
+{
+ BITMAP bm;
+ HDC hdcMem = CreateCompatibleDC(hdc);
+
+ SelectObject(hdcMem, hBmp);
+ GetObject(hBmp, sizeof(bm), &bm);
+ TransparentBlt(hdc, x, y, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, bm.bmWidth,
bm.bmHeight, 0xFFFFFF);
+
+ DeleteDC(hdcMem);
+}
+
+static VOID
+DrawDescription(HDC hdc, RECT DescriptionRect)
+{
+ int i;
+ HFONT Font;
+ RECT Rect = {DescriptionRect.left+5, DescriptionRect.top+5, DescriptionRect.right-2,
DescriptionRect.top+22};
+
+ // Backgroud
+ Rectangle(hdc, DescriptionRect.left, DescriptionRect.top, DescriptionRect.right,
DescriptionRect.bottom);
+
+ // Underline
+ for (i=DescriptionRect.left+1;i<DescriptionRect.right-1;i++)
+ DrawBitmap(hdc, i, DescriptionRect.top+22, hUnderline); // less code then
stretching ;)
+
+ // Headline
+ Font = CreateFont(-14, 0, 0, 0, FW_EXTRABOLD, FALSE, FALSE, FALSE, ANSI_CHARSET,
+ OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
FF_DONTCARE, L"Arial");
+ SelectObject(hdc, Font);
+ DrawText(hdc, DescriptionHeadline, lstrlen(DescriptionHeadline), &Rect,
DT_SINGLELINE|DT_NOPREFIX);
+ DeleteObject(Font);
+
+ // Description
+ Font = CreateFont(-11, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET,
+ OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
FF_DONTCARE, L"Arial");
+ SelectObject(hdc, Font);
+ Rect.top += 35;
+ Rect.bottom = DescriptionRect.bottom-2;
+ DrawText(hdc, DescriptionText, lstrlen(DescriptionText), &Rect,
DT_WORDBREAK|DT_NOPREFIX); // ToDo: Call TabbedTextOut to draw a nice table
+ DeleteObject(Font);
+}
+
+static VOID
+ResizeControl(HWND hwnd, int x1, int y1, int x2, int y2)
+{
+ MoveWindow(hwnd, x1, y1, x2-x1, y2-y1, TRUE);
+}
+
+/*
+ AddListColumn - adding column items to Application list
+*/
+static VOID
+AddListColumn(VOID)
+{
+ LV_COLUMN column;
+ RECT rect;
+ WCHAR szBuf[MAX_PATH];
+
+ GetClientRect(hMainWnd, &rect);
+ ZeroMemory(&column, sizeof(LV_COLUMN));
+ column.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
+ column.fmt = LVCFMT_LEFT;
+ column.iSubItem = 0;
+ LoadString(hApplet, IDS_LIST_TITLE, szBuf, sizeof(szBuf) / sizeof(WCHAR));
+ column.pszText = szBuf;
+ column.cx = 320;
+ (void)ListView_InsertColumn(hAppList, 0, &column);
+
+ column.cx = 75;
+ column.iSubItem = 1;
+ LoadString(hApplet, IDS_LAST_USED, szBuf, sizeof(szBuf) / sizeof(WCHAR));
+ column.pszText = szBuf;
+ (void)ListView_InsertColumn(hAppList,1,&column);
+
+ column.cx = 70;
+ column.iSubItem = 2;
+ column.fmt = LVCFMT_RIGHT;
+ LoadString(hApplet, IDS_SIZE_TITLE, szBuf, sizeof(szBuf) / sizeof(WCHAR));
+ column.pszText = szBuf;
+ (void)ListView_InsertColumn(hAppList,2,&column);
+}
+
+static VOID
+AddTreeViewItems(VOID)
+{
+ HIMAGELIST hImageList;
+ WCHAR szBuf[1024];
+ int Index[2];
+
+ hImageList = ImageList_Create(16, 16, ILC_COLORDDB, 1, 1);
+ SendMessageW(hActList, TVM_SETIMAGELIST, TVSIL_NORMAL,
(LPARAM)(HIMAGELIST)hImageList);
+
+ Index[0] = ImageList_Add(hImageList, LoadBitmap(hApplet,
MAKEINTRESOURCE(IDB_SELECT)), NULL);
+ Index[1] = ImageList_Add(hImageList, LoadBitmap(hApplet, MAKEINTRESOURCE(IDB_ICON)),
NULL);
+
+ // Insert items to Actions List
+ TV_INSERTSTRUCTW Insert;
+
+ ZeroMemory(&Insert, sizeof(TV_INSERTSTRUCT));
+ Insert.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
+ Insert.hInsertAfter = TVI_LAST;
+ Insert.hParent = TVI_ROOT;
+ Insert.item.iSelectedImage = Index[0];
+
+ Insert.item.lParam = 0;
+ LoadString(hApplet, IDS_PROGANDUPDATES, szBuf, sizeof(szBuf) / sizeof(WCHAR));
+ Insert.item.pszText = szBuf;
+ Insert.item.iImage = Index[1];
+ hRootItem = TreeView_InsertItem(hActList, &Insert);
+
+ Insert.item.lParam = 1;
+ LoadString(hApplet, IDS_PROGRAMS_ONLY, szBuf, sizeof(szBuf) / sizeof(WCHAR));
+ Insert.item.pszText = szBuf;
+ Insert.item.iImage = Index[1];
+ (VOID) TreeView_InsertItem(hActList, &Insert);
+
+ Insert.item.lParam = 2;
+ LoadString(hApplet, IDS_UPDATES_ONLY, szBuf, sizeof(szBuf) / sizeof(WCHAR));
+ Insert.item.pszText = szBuf;
+ Insert.item.iImage = Index[1];
+ (VOID) TreeView_InsertItem(hActList, &Insert);
+ // Select first item
+ (VOID) TreeView_SelectItem(hActList, hRootItem);
+}
+
+/*
+ InitControls - function for init all controls on main window
+*/
+static VOID
+InitControls(VOID)
+{
+ WCHAR szBuf[1024];
+
+ hMainFont = CreateFont(-11 , 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET,
+ OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
FF_DONTCARE, L"Arial");
+
+ hActList = CreateWindowEx(WS_EX_CLIENTEDGE, WC_TREEVIEWW, L"",
+
WS_CHILD|WS_VISIBLE|WS_BORDER|TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS|TVS_SHOWSELALWAYS,
+ 0, 0, 0, 0, hMainWnd, NULL, hApplet, NULL);
+
+ hAppList = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEWW, L"",
+
WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_SORTASCENDING|LVS_REPORT,
+ 0, 0, 0, 0, hMainWnd, NULL, hApplet, NULL);
+
+ (VOID) ListView_SetExtendedListViewStyle(hAppList, LVS_EX_FULLROWSELECT);
+
+ LoadString(hApplet, IDS_SEARCH_TEXT, szBuf, sizeof(szBuf) / sizeof(WCHAR));
+ hSearch = CreateWindowEx(WS_EX_CLIENTEDGE, L"EDIT", szBuf,
WS_CHILD|WS_VISIBLE|WS_BORDER|ES_LEFT,
+ 0, 0, 0, 0, hMainWnd, NULL, hApplet, NULL);
+ SendMessage(hSearch, WM_SETFONT, (WPARAM)hMainFont, 0);
+ // Remove button
+ LoadString(hApplet, IDS_REMOVE_BTN, szBuf, sizeof(szBuf) / sizeof(WCHAR));
+ hRemoveBtn = CreateWindowEx(0, L"BUTTON", szBuf,
WS_CHILD|WS_VISIBLE|WS_DISABLED|BS_TEXT,
+ 0, 0, 0, 0, hMainWnd, NULL, hApplet, NULL);
+ SendMessage(hRemoveBtn, WM_SETFONT, (WPARAM)hMainFont, 0);
+ // Modify button
+ LoadString(hApplet, IDS_MODIFY_BTN, szBuf, sizeof(szBuf) / sizeof(WCHAR));
+ hModifyBtn = CreateWindowEx(0, L"BUTTON", szBuf,
WS_CHILD|WS_VISIBLE|WS_DISABLED|BS_TEXT,
+ 0, 0, 0, 0, hMainWnd, NULL, hApplet, NULL);
+ SendMessage(hModifyBtn, WM_SETFONT, (WPARAM)hMainFont, 0);
+
+ hUnderline = LoadBitmap(hApplet, MAKEINTRESOURCE(IDB_UNDERLINE));
+ hSearchIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDI_SEARCH));
+
+ AddListColumn();
+ AddTreeViewItems();
+}
+
+/*
+ GetARPInfo - Getting information from ARP cache
+ Input: szName - Application Name
+ Output: szPath - Path to image file
+ szSize - Application size
+ szLastUsed - Last used time
+*/
+static VOID
+GetARPInfo(LPCWSTR szName, LPWSTR szPath, LPWSTR szSize, LPWSTR szLastUsed)
+{
+ APPARPINFO aai = {0};
+ DWORD dwSize = sizeof(aai), dwType = REG_BINARY;
+ SYSTEMTIME systime, localtime;
+ WCHAR szBuf[MAX_PATH];
+ HKEY hKey;
+
+ swprintf(szBuf, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App
Management\\ARPCache\\%s", szName);
+ if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, szBuf,
+ 0, KEY_READ, &hKey) == ERROR_SUCCESS)
+ {
+ ZeroMemory(&aai, sizeof(APPARPINFO));
+ if ((RegQueryValueEx(hKey, L"SlowInfoCache", NULL, &dwType,
(LPBYTE)&aai, &dwSize) == ERROR_SUCCESS) &&
+ (aai.Size == sizeof(APPARPINFO)))
+ {
+ // Getting path to image
+ wcscpy(szPath, aai.ImagePath);
+
+ // Getting application size
+ if (aai.AppSize < (ULONGLONG) 2000000000)
+ {
+ swprintf(szSize, L"%.2f", (float)aai.AppSize/(1024*1024));
+ }
+ else wcscpy(szSize,L"---");
+
+ // Getting last used
+ if (FileTimeToSystemTime(&aai.LastUsed, &systime))
+ {
+ if (SystemTimeToTzSpecificLocalTime(NULL, &systime, &localtime))
+ {
+ if (((int)localtime.wYear > 1900) && ((int)localtime.wYear
< 3000))
+ {
+ swprintf(szLastUsed, L"%02d.%02d.%02d",
localtime.wMonth, localtime.wDay, localtime.wYear);
+ }
+ else wcscpy(szLastUsed,L"---");
+ }
+ else wcscpy(szLastUsed,L"---");
+ }
+ else wcscpy(szLastUsed,L"---");
+ }
+ else
+ {
+ wcscpy(szPath,L"---");
+ wcscpy(szSize,L"---");
+ wcscpy(szLastUsed,L"---");
+ }
+ }
+ RegCloseKey(hKey);
+}
+
+/*
+ AddItemToList - create application list
+
+ hSubKey - handle to the sub key for adding to LPARAM
+ szDisplayName - display name
+ ItemIndex - item index
+ AppName - application name (for getting ARPCache info)
+*/
+static VOID
+AddItemToList(LPARAM hSubKey, LPWSTR szDisplayName, INT ItemIndex, LPWSTR AppName)
+{
+ int index;
+ HICON hIcon = NULL;
+ LV_ITEM listItem;
+ WCHAR IconPath[MAX_PATH], AppSize[256], LastUsed[256];
+
+ GetARPInfo(AppName, IconPath, AppSize, LastUsed);
+
+ if (GetFileAttributes(IconPath) != 0xFFFFFFFF)
+ {
+ // FIXME: This function not getting 32-bits icon
+ ExtractIconEx(IconPath, 0, NULL, &hIcon, 1);
+ }
+
+ if (hIcon == NULL)
+ {
+ hIcon = LoadImage(hApplet, MAKEINTRESOURCE(IDI_CPLSYSTEM), IMAGE_ICON, 16, 16,
LR_CREATEDIBSECTION);
+ }
+ index = ImageList_AddIcon(hImageAppList, hIcon);
+ DestroyIcon(hIcon);
+
+ ZeroMemory(&listItem, sizeof(LV_ITEM));
+ listItem.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE | LVIF_IMAGE;
+ listItem.pszText = (LPTSTR)szDisplayName;
+ listItem.lParam = (LPARAM)hSubKey;
+ listItem.iItem = (int)ItemIndex;
+ listItem.iImage = index;
+ int iIndex;
+ iIndex = ListView_InsertItem(hAppList, &listItem);
+ ListView_SetItemText(hAppList, iIndex, 1, LastUsed);
+ ListView_SetItemText(hAppList, iIndex, 2, AppSize);
+}
+
+/*
+ ShowMode:
+ if ShowMode = 0 - programs and updates
+ if ShowMode = 1 - show programs only
+ if ShowMode = 2 - show updates only
+*/
+static VOID
+FillSoftwareList(INT ShowMode)
+{
+ WCHAR pszName[MAX_PATH];
+ WCHAR pszDisplayName[MAX_PATH];
+ WCHAR pszParentKeyName[MAX_PATH];
+ FILETIME FileTime;
+ HKEY hKey;
+ HKEY hSubKey;
+ DWORD dwType;
+ DWORD dwSize = MAX_PATH;
+ DWORD dwValue = 0;
+ BOOL bIsUpdate = FALSE;
+ BOOL bIsSystemComponent = FALSE;
+ INT ItemIndex = 0;
+
+ (VOID) ImageList_Destroy(hImageAppList);
+ (VOID) ListView_DeleteAllItems(hAppList);
+
+ DEVMODE pDevMode;
+ int ColorDepth;
+
+ pDevMode.dmSize = sizeof(DEVMODE);
+ pDevMode.dmDriverExtra = 0;
+ EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &pDevMode);
+ switch (pDevMode.dmBitsPerPel)
+ {
+ case 32: ColorDepth = ILC_COLOR32; break;
+ case 24: ColorDepth = ILC_COLOR24; break;
+ case 16: ColorDepth = ILC_COLOR16; break;
+ case 8: ColorDepth = ILC_COLOR8; break;
+ case 4: ColorDepth = ILC_COLOR4; break;
+ default: ColorDepth = ILC_COLOR; break;
+ }
+
+ hImageAppList = ImageList_Create(16, 16, ColorDepth | ILC_MASK, 0, 1);
+ SendMessage(hAppList, WM_SETREDRAW, FALSE, 0);
+
+ if (RegOpenKey(HKEY_LOCAL_MACHINE,
+ L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall",
+ &hKey) != ERROR_SUCCESS)
+ {
+ WCHAR Buf[256];
+
+ LoadString(hApplet, IDS_UNABLEOPEN_UNINSTKEY, Buf, sizeof(Buf) / sizeof(WCHAR));
+ MessageBox(hMainWnd, Buf, NULL, MB_ICONWARNING);
+ return;
+ }
+
+ ItemIndex = 0;
+ dwSize = MAX_PATH;
+ while (RegEnumKeyEx(hKey, ItemIndex, pszName, &dwSize, NULL, NULL, NULL,
&FileTime) == ERROR_SUCCESS)
+ {
+ if (RegOpenKey(hKey,pszName,&hSubKey) == ERROR_SUCCESS)
+ {
+ dwType = REG_DWORD;
+ dwSize = sizeof(DWORD);
+ if (RegQueryValueEx(hSubKey, L"SystemComponent",
+ NULL, &dwType,
+ (LPBYTE)&dwValue, &dwSize) == ERROR_SUCCESS)
+ {
+ bIsSystemComponent = (dwValue == 0x1);
+ }
+ else
+ {
+ bIsSystemComponent = FALSE;
+ }
+
+ dwType = REG_SZ;
+ dwSize = MAX_PATH;
+ bIsUpdate = (RegQueryValueEx(hSubKey, L"ParentKeyName",
+ NULL, &dwType,
+ (LPBYTE)pszParentKeyName,
+ &dwSize) == ERROR_SUCCESS);
+ dwSize = MAX_PATH;
+ if (RegQueryValueEx(hSubKey, L"DisplayName",
+ NULL, &dwType,
+ (LPBYTE)pszDisplayName,
+ &dwSize) == ERROR_SUCCESS)
+ {
+ if ((ShowMode < 0)||(ShowMode > 2)) ShowMode = 0;
+ if (!bIsSystemComponent)
+ {
+ if (ShowMode == 0)
+ {
+ AddItemToList((LPARAM)hSubKey, (LPWSTR)pszDisplayName, ItemIndex,
pszName);
+ }
+ if ((ShowMode == 1)&&(!bIsUpdate))
+ {
+ AddItemToList((LPARAM)hSubKey, (LPWSTR)pszDisplayName, ItemIndex,
pszName);
+ }
+ if ((ShowMode == 2)&&(bIsUpdate))
+ {
+ AddItemToList((LPARAM)hSubKey, (LPWSTR)pszDisplayName, ItemIndex,
pszName);
+ }
+ }
+ }
+ }
+
+ dwSize = MAX_PATH;
+ ItemIndex++;
+ }
+
+ (VOID) ListView_SetImageList(hAppList, hImageAppList, LVSIL_SMALL);
+ SendMessage(hAppList, WM_SETREDRAW, TRUE, 0);
+ RegCloseKey(hSubKey);
+ RegCloseKey(hKey);
+}
+
+static BOOL
+GetAppString(LPCWSTR lpKeyName, LPWSTR lpString)
+{
+ HKEY hKey;
+ INT nIndex;
+
+ nIndex = (INT)SendMessage(hAppList,LVM_GETNEXTITEM,-1,LVNI_FOCUSED);
+ if (nIndex != -1)
+ {
+ LVITEM item;
+
+ ZeroMemory(&item, sizeof(LVITEM));
+ item.mask = LVIF_PARAM;
+ item.iItem = nIndex;
+ (VOID) ListView_GetItem(hAppList,&item);
+ hKey = (HKEY)item.lParam;
+
+ DWORD dwSize, dwType = REG_SZ;
+ if (RegQueryValueEx(hKey, lpKeyName, NULL, &dwType,
+ (LPBYTE)lpString, &dwSize) == ERROR_SUCCESS)
+ {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+static VOID
+CallUninstall(VOID)
+{
+ INT nIndex;
+ HKEY hKey;
+ DWORD dwType, dwRet;
+ WCHAR pszUninstallString[MAX_PATH];
+ DWORD dwSize;
+ MSG msg;
+
+ nIndex = (INT)SendMessage(hAppList,LVM_GETNEXTITEM,-1,LVNI_FOCUSED);
+ if (nIndex != -1)
+ {
+ LVITEM item;
+
+ ZeroMemory(&item, sizeof(LVITEM));
+ item.mask = LVIF_PARAM;
+ item.iItem = nIndex;
+ (VOID) ListView_GetItem(hAppList,&item);
+ hKey = (HKEY)item.lParam;
+
+ dwType = REG_SZ;
+ dwSize = MAX_PATH;
+ if (RegQueryValueEx(hKey, L"UninstallString", NULL, &dwType,
+ (LPBYTE)pszUninstallString, &dwSize) == ERROR_SUCCESS)
+ {
+ STARTUPINFO si;
+ PROCESS_INFORMATION pi;
+
+ ZeroMemory(&si, sizeof(si));
+ si.cb = sizeof(si);
+ si.wShowWindow = SW_SHOW;
+ if
(CreateProcess(NULL,pszUninstallString,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
+ {
+ CloseHandle(pi.hThread);
+ EnableWindow(hMainWnd, FALSE);
+
+ for (;;)
+ {
+ dwRet = MsgWaitForMultipleObjects(1, &pi.hProcess, FALSE,
INFINITE, QS_ALLEVENTS);
+ if (dwRet == WAIT_OBJECT_0 + 1)
+ {
+ while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+ {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+ }
+ else if (dwRet == WAIT_OBJECT_0 || dwRet == WAIT_FAILED)
+ break;
+ }
+ CloseHandle(pi.hProcess);
+
+ EnableWindow(hMainWnd, TRUE);
+ // Disable all buttons
+ EnableWindow(hRemoveBtn,FALSE);
+ EnableWindow(hModifyBtn,FALSE);
+ // Update software list
+ FillSoftwareList(0);
+ SetActiveWindow(hMainWnd);
+ }
+ }
+ else
+ {
+ WCHAR szBuf[256];
+
+ LoadString(hApplet, IDS_UNABLEREAD_UNINSTSTR, szBuf, sizeof(szBuf) /
sizeof(WCHAR));
+ MessageBox(hMainWnd, szBuf, NULL, MB_ICONWARNING);
+ }
+ }
+}
+
+static VOID
+ShowPopupMenu(HWND hwndDlg, INT xPos, INT yPos)
+{
+ INT nIndex;
+ nIndex = (INT)SendMessage(hAppList,LVM_GETNEXTITEM,-1,LVNI_FOCUSED);
+ if ( nIndex != -1)
+ {
+ POINT pt;
+ RECT lvRect;
+ HMENU hMenu;
+
+ GetCursorPos(&pt);
+
+ GetWindowRect(hAppList, &lvRect);
+ if (PtInRect(&lvRect, pt))
+ {
+ hMenu = GetSubMenu(LoadMenu(hApplet, MAKEINTRESOURCE(IDR_POPUP_APP)),0);
+ TrackPopupMenuEx(hMenu, TPM_RIGHTBUTTON, xPos, yPos, hwndDlg, NULL);
+ DestroyMenu(hMenu);
+ }
+ }
+}
+
+static VOID
+GetAppInfo(LPWSTR lpInfo)
+{
+ WCHAR szBuf[1024], szDesc[1024];
+ INT iIndex;
+ HKEY hKey;
+
+ iIndex = SendMessage(hAppList, LVM_GETNEXTITEM, -1, LVNI_FOCUSED);
+ if (iIndex != -1)
+ {
+ LVITEM item;
+ DWORD dwSize = 2048;
+
+ ZeroMemory(&item, sizeof(LVITEM));
+ item.mask = LVIF_PARAM;
+ item.iItem = iIndex;
+ (VOID) ListView_GetItem(hAppList,&item);
+ hKey = (HKEY)item.lParam;
+
+ wcscpy(lpInfo,L"\0");
+ if (RegQueryValueEx(hKey, L"Publisher", NULL, NULL, (LPBYTE)szBuf,
&dwSize) == ERROR_SUCCESS)
+ {
+ LoadString(hApplet, IDS_INF_PUBLISHER, szDesc, sizeof(szDesc) /
sizeof(WCHAR));
+ //wcscat(lpInfo, szDesc);
+ swprintf(lpInfo, L"%s%s\n", szDesc, szBuf);
+ }
+ if (RegQueryValueEx(hKey, L"RegOwner", NULL, NULL, (LPBYTE)szBuf,
&dwSize) == ERROR_SUCCESS)
+ {
+ LoadString(hApplet, IDS_INF_REG_OWNER, szDesc, sizeof(szDesc) /
sizeof(WCHAR));
+ wcscat(lpInfo, szDesc);
+ swprintf(lpInfo,L"%s%s\n", lpInfo, szBuf);
+ }
+ if (RegQueryValueEx(hKey, L"ProductID", NULL, NULL, (LPBYTE)szBuf,
&dwSize) == ERROR_SUCCESS)
+ {
+ LoadString(hApplet, IDS_INF_PRODUCT_ID, szDesc, sizeof(szDesc) /
sizeof(WCHAR));
+ wcscat(lpInfo, szDesc);
+ swprintf(lpInfo,L"%s%s\n", lpInfo, szBuf);
+ }
+ if (RegQueryValueEx(hKey, L"DisplayVersion", NULL, NULL, (LPBYTE)szBuf,
&dwSize) == ERROR_SUCCESS)
+ {
+ LoadString(hApplet, IDS_INF_VERSION, szDesc, sizeof(szDesc) /
sizeof(WCHAR));
+ wcscat(lpInfo, szDesc);
+ swprintf(lpInfo,L"%s%s\n", lpInfo, szBuf);
+ }
+ if (RegQueryValueEx(hKey, L"Contact", NULL, NULL, (LPBYTE)szBuf,
&dwSize) == ERROR_SUCCESS)
+ {
+ LoadString(hApplet, IDS_INF_CONTACT, szDesc, sizeof(szDesc) /
sizeof(WCHAR));
+ wcscat(lpInfo, szDesc);
+ swprintf(lpInfo,L"%s%s\n", lpInfo, szBuf);
+ }
+ if (RegQueryValueEx(hKey, L"HelpLink", NULL, NULL, (LPBYTE)szBuf,
&dwSize) == ERROR_SUCCESS)
+ {
+ LoadString(hApplet, IDS_INF_SUP_INFO, szDesc, sizeof(szDesc) /
sizeof(WCHAR));
+ wcscat(lpInfo, szDesc);
+ swprintf(lpInfo,L"%s%s\n", lpInfo, szBuf);
+ }
+ if (RegQueryValueEx(hKey, L"HelpTelephone", NULL, NULL, (LPBYTE)szBuf,
&dwSize) == ERROR_SUCCESS)
+ {
+ LoadString(hApplet, IDS_INF_SUP_PHONE, szDesc, sizeof(szDesc) /
sizeof(WCHAR));
+ wcscat(lpInfo, szDesc);
+ swprintf(lpInfo,L"%s%s\n", lpInfo, szBuf);
+ }
+ if (RegQueryValueEx(hKey, L"URLUpdateInfo", NULL, NULL, (LPBYTE)szBuf,
&dwSize) == ERROR_SUCCESS)
+ {
+ LoadString(hApplet, IDS_INF_PRODUCT_UPD, szDesc, sizeof(szDesc) /
sizeof(WCHAR));
+ wcscat(lpInfo, szDesc);
+ swprintf(lpInfo,L"%s%s\n", lpInfo, szBuf);
+ }
+ if (RegQueryValueEx(hKey, L"Readme", NULL, NULL, (LPBYTE)szBuf,
&dwSize) == ERROR_SUCCESS)
+ {
+ LoadString(hApplet, IDS_INF_README, szDesc, sizeof(szDesc) / sizeof(WCHAR));
+ wcscat(lpInfo, szDesc);
+ swprintf(lpInfo,L"%s%s\n", lpInfo, szBuf);
+ }
+ if (RegQueryValueEx(hKey, L"Comments", NULL, NULL, (LPBYTE)szBuf,
&dwSize) == ERROR_SUCCESS)
+ {
+ LoadString(hApplet, IDS_INF_COMMENTS, szDesc, sizeof(szDesc) /
sizeof(WCHAR));
+ wcscat(lpInfo, szDesc);
+ swprintf(lpInfo,L"%s%s\n", lpInfo, szBuf);
+ }
+ if (wcslen(lpInfo) < 10)
+ {
+ LoadString(hApplet, IDS_NO_INFORMATION, szDesc, sizeof(szDesc) /
sizeof(WCHAR));
+ wcscpy(lpInfo, szDesc);
+ }
+ }
+}
+
+static VOID
+ShowAppInfo(VOID)
+{
+ WCHAR Info[2048], szBuf[1024];
+
+ if (-1 != (INT) SendMessage(hAppList, LVM_GETNEXTITEM, -1, LVNI_FOCUSED))
+ {
+ GetAppInfo(Info);
+ ListView_GetItemText(hAppList, SendMessage(hAppList, LVM_GETNEXTITEM, -1,
LVNI_FOCUSED), 0, szBuf, sizeof(szBuf));
+ ShowMessage(szBuf, Info);
+ }
+}
+
+static VOID
+GetListItemText(LPARAM lParam1, LPARAM lParam2, INT iSubItem, LPWSTR Item1, LPWSTR
Item2)
+{
+ LVFINDINFO find;
+ INT iIndex;
+
+ find.flags = LVFI_PARAM;
+
+ find.lParam = lParam1;
+ iIndex = ListView_FindItem(hAppList, -1, &find);
+ ListView_GetItemText(hAppList, iIndex, iSubItem, Item1, sizeof(Item1));
+
+ find.lParam = lParam2;
+ iIndex = ListView_FindItem(hAppList, -1, &find);
+ ListView_GetItemText(hAppList, iIndex, iSubItem, Item2, sizeof(Item2));
+}
+
+static INT CALLBACK
+CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
+{
+ WCHAR szItem1[MAX_PATH], szItem2[MAX_PATH];
+
+ switch ((INT)lParamSort)
+ {
+ case 0: // Name
+ {
+ GetListItemText(lParam1, lParam2, 0, szItem1, szItem2);
+ if (bAscending == TRUE)
+ return wcscmp(szItem2, szItem1);
+ else
+ return wcscmp(szItem1, szItem2);
+ }
+ case 1: // Date
+ GetListItemText(lParam1, lParam2, 1, szItem1, szItem2);
+ if (bAscending == TRUE)
+ return wcscmp(szItem2, szItem1);
+ else
+ return wcscmp(szItem1, szItem2);
+ case 2: // Size
+ {
+ // FIXME: No correct sorting by application size
+ INT Size1, Size2;
+
+ GetListItemText(lParam1, lParam2, 2, szItem1, szItem2);
+ if (wcscmp(szItem1, L"---") == 0) wcscpy(szItem1, L"0");
+ if (wcscmp(szItem2, L"---") == 0) wcscpy(szItem2, L"0");
+ Size1 = _wtoi(szItem1);
+ Size2 = _wtoi(szItem2);
+ if (Size1 < Size2)
+ {
+ if(bAscending == TRUE)
+ return -1;
+ else
+ return 1;
+ }
+ else if (Size1 == Size2)
+ {
+ return 0;
+ }
+ else if (Size1 > Size2)
+ {
+ if(bAscending == TRUE)
+ return 1;
+ else
+ return -1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+static BOOL
+LoadSettings(VOID)
+{
+ HKEY hKey;
+ DWORD dwSize;
+ BOOL Ret;
+
+ if (RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\ReactOS\\AppWiz", 0,
KEY_READ, &hKey) == ERROR_SUCCESS)
+ {
+ dwSize = sizeof(APPWIZSETTINGS);
+ if (RegQueryValueEx(hKey, L"Settings", NULL, NULL,
(LPBYTE)&AppWizSettings, &dwSize) == ERROR_SUCCESS)
+ {
+ if (AppWizSettings.Size == sizeof(APPWIZSETTINGS))
+ Ret = TRUE;
+ else
+ Ret = FALSE;
+ }
+ else Ret = FALSE;
+ }
+ else Ret = FALSE;
+
+ RegCloseKey(hKey);
+ return Ret;
+}
+
+static BOOL
+SaveSettings(VOID)
+{
+ HKEY hKey;
+ BOOL Ret;
+
+ if (RegCreateKeyEx(HKEY_CURRENT_USER, L"Software\\ReactOS\\AppWiz", 0,
NULL,
+ REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL) == ERROR_SUCCESS)
+ {
+ AppWizSettings.Size = sizeof(APPWIZSETTINGS);
+ if (RegSetValueEx(hKey, L"Settings", 0, REG_BINARY,
(LPBYTE)&AppWizSettings, sizeof(APPWIZSETTINGS)) == ERROR_SUCCESS)
+ Ret = TRUE;
+ else
+ Ret = FALSE;
+ }
+ else Ret = FALSE;
+
+ RegCloseKey(hKey);
+ return Ret;
+}
+
+static LRESULT CALLBACK
+WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
+{
+ static RECT DescriptionRect;
+ WCHAR szBuf[1024];
+
+ switch (Message)
+ {
+ case WM_CREATE:
+ {
+ hMainWnd = hwnd;
+ MoveWindow(hMainWnd, AppWizSettings.Left, AppWizSettings.Top,
+ AppWizSettings.Right - AppWizSettings.Left,
+ AppWizSettings.Bottom - AppWizSettings.Top, TRUE);
+ if (AppWizSettings.Maximized) ShowWindow(hMainWnd, SW_MAXIMIZE);
+ ShowMessage(Strings[0],Strings[1]); // Welcome message
+ InitControls();
+ }
+ break;
+ case WM_COMMAND:
+ {
+ switch (LOWORD(wParam))
+ {
+ case ID_APP_REMOVE:
+ CallUninstall();
+ break;
+ }
+ if(HIWORD(wParam) == BN_CLICKED)
+ {
+ if (lParam == (LPARAM)hRemoveBtn)
+ {
+ CallUninstall();
+ }
+ }
+ if (lParam == (LPARAM)hSearch)
+ {
+ switch (HIWORD(wParam))
+ {
+ case EN_SETFOCUS:
+ {
+ WCHAR Tmp[1024];
+
+ LoadString(hApplet, IDS_SEARCH_TEXT, szBuf, sizeof(szBuf) /
sizeof(WCHAR));
+ GetWindowText(hSearch, Tmp, 1024);
+ if (wcscmp(szBuf, Tmp) == 0) SetWindowText(hSearch,
L"");
+ }
+ break;
+ case EN_KILLFOCUS:
+ {
+ GetWindowText(hSearch, szBuf, 1024);
+ if (wcslen(szBuf) < 1)
+ {
+ LoadString(hApplet, IDS_SEARCH_TEXT, szBuf, sizeof(szBuf) /
sizeof(WCHAR));
+ SetWindowText(hSearch, szBuf);
+ }
+ }
+ break;
+ case EN_CHANGE:
+ break;
+ }
+ }
+ }
+ break;
+ case WM_PAINT:
+ {
+ PAINTSTRUCT ps;
+ HDC hdc = BeginPaint(hwnd, &ps);
+ HDC BackbufferHdc = CreateCompatibleDC(hdc);
+ HBITMAP BackbufferBmp = CreateCompatibleBitmap(hdc, ps.rcPaint.right,
ps.rcPaint.bottom);
+
+ SelectObject(BackbufferHdc, BackbufferBmp);
+ FillRect(BackbufferHdc, &ps.rcPaint, (HBRUSH)COLOR_APPWORKSPACE);
+ DrawIconEx(BackbufferHdc, 153, 1, hSearchIcon, 24, 24, 0, NULL,
DI_NORMAL|DI_COMPAT);
+ DrawDescription(BackbufferHdc, DescriptionRect);
+ BitBlt(hdc, 0, 0, ps.rcPaint.right, ps.rcPaint.bottom, BackbufferHdc, 0, 0,
SRCCOPY);
+ DeleteObject(BackbufferBmp);
+ DeleteDC(BackbufferHdc);
+ EndPaint(hwnd, &ps);
+ }
+ break;
+ case WM_NOTIFY:
+ {
+ LPNMHDR data = (LPNMHDR)lParam;
+
+ switch (data->code)
+ {
+ case TVN_SELCHANGED:
+ if(data->hwndFrom == hActList)
+ {
+ // Add items to programs list
+ FillSoftwareList(((LPNMTREEVIEW)lParam)->itemNew.lParam);
+ // Set default titile and message
+ ShowMessage(Strings[0], Strings[1]);
+ // Disable all buttons
+ EnableWindow(hRemoveBtn, FALSE);
+ EnableWindow(hModifyBtn, FALSE);
+ }
+ break;
+ case NM_CLICK:
+ if(data->hwndFrom == hAppList)
+ {
+ if (-1 != (INT) SendMessage(hAppList, LVM_GETNEXTITEM, -1,
LVNI_FOCUSED))
+ {
+ EnableWindow(hRemoveBtn, TRUE);
+ if (GetAppString(L"ModifyPath", NULL))
+ EnableWindow(hModifyBtn, TRUE);
+ }
+ ShowAppInfo();
+ }
+ break;
+ case NM_DBLCLK:
+ if(data->hwndFrom == hAppList)
+ {
+ if (-1 != (INT) SendMessage(hAppList, LVM_GETNEXTITEM, -1,
LVNI_FOCUSED))
+ {
+ CallUninstall();
+ }
+ }
+ break;
+ case LVN_COLUMNCLICK:
+ {
+ LPNMLISTVIEW pnmv = (LPNMLISTVIEW) lParam;
+
+ (VOID) ListView_SortItems(hAppList, CompareFunc, pnmv->iSubItem);
+ if (bAscending == TRUE)
+ {
+ bAscending = FALSE;
+ }
+ else
+ {
+ bAscending = TRUE;
+ }
+ }
+ break;
+ }
+ }
+ break;
+ case WM_SIZING:
+ {
+ LPRECT pRect = (LPRECT)lParam;
+ if (pRect->right-pRect->left < 520)
+ pRect->right = pRect->left + 520;
+
+ if (pRect->bottom-pRect->top < 400)
+ pRect->bottom = pRect->top + 400;
+ }
+ break;
+ case WM_SIZE:
+ {
+ // Actions list
+ ResizeControl(hActList, 0, 1, 150, HIWORD(lParam)-180);
+
+ // Applications list
+ ResizeControl(hAppList, 152, 25, LOWORD(lParam), HIWORD(lParam)-180);
+
+ // Search Edit
+ ResizeControl(hSearch, 180, 1, LOWORD(lParam), 25);
+
+ RECT Rect = {1, HIWORD(lParam)-178, LOWORD(lParam)-1, HIWORD(lParam)-1};
+ DescriptionRect = Rect;
+
+ // Buttons
+ MoveWindow(hRemoveBtn, LOWORD(lParam)-105, HIWORD(lParam)-30, 100, 25, TRUE);
// Remove button
+ MoveWindow(hModifyBtn, LOWORD(lParam)-208, HIWORD(lParam)-30, 100, 25, TRUE);
// Modify button
+
+ (VOID) ListView_SetColumnWidth(hAppList, 0, LOWORD(lParam)-330);
+
+ // Update title and info
+ ShowAppInfo();
+ }
+ break;
+ case WM_ACTIVATEAPP:
+ ShowAppInfo();
+ break;
+ case WM_CONTEXTMENU:
+ {
+ // Show popup menu for programs list
+ ShowPopupMenu(hwnd, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
+ }
+ break;
+ case WM_DESTROY:
+ {
+ WINDOWPLACEMENT wp;
+
+ // Save settings
+ ShowWindow(hMainWnd, SW_HIDE);
+ wp.length = sizeof(WINDOWPLACEMENT);
+ GetWindowPlacement(hMainWnd, &wp);
+ AppWizSettings.Left = wp.rcNormalPosition.left;
+ AppWizSettings.Top = wp.rcNormalPosition.top;
+ AppWizSettings.Right = wp.rcNormalPosition.right;
+ AppWizSettings.Bottom = wp.rcNormalPosition.bottom;
+ if (IsZoomed(hMainWnd) || (wp.flags & WPF_RESTORETOMAXIMIZED))
+ AppWizSettings.Maximized = TRUE;
+ else
+ AppWizSettings.Maximized = FALSE;
+ SaveSettings();
+ // Destroy all and quit
+ DeleteObject(hMainFont);
+ DeleteObject(hSearchIcon);
+ PostQuitMessage(0);
+ }
+ break;
+ }
+ return DefWindowProc(hwnd, Message, wParam, lParam);
+}
+
+static VOID
+InitSettings(VOID)
+{
+ if (!LoadSettings())
+ {
+ AppWizSettings.Maximized = FALSE;
+ AppWizSettings.Left = 0;
+ AppWizSettings.Top = 0;
+ AppWizSettings.Right = 520;
+ AppWizSettings.Bottom = 400;
+ }
+}
+
+static INT
+MainWindowCreate(VOID)
+{
+ WNDCLASS WndClass = {0};
+ MSG msg;
+ WCHAR szBuf[256];
+
+ // Load welcome strings
+ LoadString(hApplet, IDS_WELCOME_TITLE, Strings[0], sizeof(szBuf) / sizeof(WCHAR));
+ LoadString(hApplet, IDS_WELCOME_MSG, Strings[1], sizeof(szBuf) / sizeof(WCHAR));
+
+ InitSettings();
+
+ // Create the window
+ WndClass.lpszClassName = L"rosappwiz";
+ WndClass.lpfnWndProc = (WNDPROC)WndProc;
+ WndClass.hInstance = hApplet;
+ WndClass.style = CS_HREDRAW | CS_VREDRAW;
+ WndClass.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDI_CPLSYSTEM));
+ WndClass.hCursor = LoadCursor(hApplet, IDC_ARROW);
+ WndClass.hbrBackground = (HBRUSH)COLOR_BTNFACE + 1;
+
+ if (!RegisterClass(&WndClass)) return 0;
+
+ LoadString(hApplet, IDS_CPLSYSTEMNAME, szBuf, 256);
+ hMainWnd = CreateWindow(L"rosappwiz", szBuf,
+ WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_VISIBLE |
WS_CAPTION,
+ CW_USEDEFAULT, CW_USEDEFAULT,
+ 0, 0, NULL, NULL, hApplet, NULL);
+
+ // Show it
+ ShowWindow(hMainWnd, SW_SHOW);
+ UpdateWindow(hMainWnd);
+
+ // Message Loop
+ while(GetMessage(&msg,NULL,0,0))
+ {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+
+ return 0;
+}
+
+/* Control Panel Callback */
+LONG CALLBACK
+CPlApplet(HWND hwndCPl, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
+{
+ CPLINFO *CPlInfo;
+ DWORD i;
+
+ UNREFERENCED_PARAMETER(hwndCPl);
+
+ i = (DWORD)lParam1;
+ switch (uMsg)
+ {
+ case CPL_INIT:
+ return TRUE;
+
+ case CPL_GETCOUNT:
+ return 1;
+
+ case CPL_INQUIRE:
+ CPlInfo = (CPLINFO*)lParam2;
+ CPlInfo->lData = 0;
+ CPlInfo->idIcon = IDI_CPLSYSTEM;
+ CPlInfo->idName = IDS_CPLSYSTEMNAME;
+ CPlInfo->idInfo = IDS_CPLSYSTEMDESCRIPTION;
+ break;
+
+ case CPL_DBLCLK:
+ MainWindowCreate();
+ break;
+ }
+
+ return FALSE;
+}
+
+
+BOOL WINAPI
+DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpvReserved)
+{
+ UNREFERENCED_PARAMETER(lpvReserved);
+
+ switch (dwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ case DLL_THREAD_ATTACH:
+ CoInitialize(NULL);
+ hApplet = hinstDLL;
+ break;
+ }
+
+ return TRUE;
+}
Propchange: trunk/reactos/dll/cpl/appwiz-new/appwiz.c
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/cpl/appwiz-new/appwiz.def
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/appwiz-new/appwiz.…
==============================================================================
--- trunk/reactos/dll/cpl/appwiz-new/appwiz.def (added)
+++ trunk/reactos/dll/cpl/appwiz-new/appwiz.def Mon Feb 18 20:25:40 2008
@@ -1,0 +1,9 @@
+LIBRARY appwiz.cpl
+
+EXPORTS
+CPlApplet@16
+;NewLinkHere@16
+;NewLinkHereA@16
+;NewLinkHereW@16
+
+; EOF
Propchange: trunk/reactos/dll/cpl/appwiz-new/appwiz.def
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/cpl/appwiz-new/appwiz.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/appwiz-new/appwiz.…
==============================================================================
--- trunk/reactos/dll/cpl/appwiz-new/appwiz.h (added)
+++ trunk/reactos/dll/cpl/appwiz-new/appwiz.h Mon Feb 18 20:25:40 2008
@@ -1,0 +1,78 @@
+#ifndef __CPL_APPWIZ_H
+#define __CPL_APPWIZ_H
+
+#define COBJMACROS
+#include <windows.h>
+#include <windowsx.h> /* GET_X/Y_LPARAM */
+#include <commctrl.h>
+#include <cpl.h>
+#include <prsht.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <wchar.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <process.h>
+#include <prsht.h>
+#include <shlobj.h>
+#include <objbase.h>
+#include <shobjidl.h>
+#include <shlguid.h>
+#include <richedit.h>
+
+#include "resource.h"
+
+typedef LONG (CALLBACK *CPLAPPLET_PROC)(VOID);
+
+typedef struct
+{
+ int idIcon;
+ int idName;
+ int idDescription;
+ CPLAPPLET_PROC AppletProc;
+} APPLET, *PAPPLET;
+
+typedef struct
+{
+ WCHAR szTarget[MAX_PATH];
+ WCHAR szWorkingDirectory[MAX_PATH];
+ WCHAR szDescription[MAX_PATH];
+ WCHAR szLinkName[MAX_PATH];
+} CREATE_LINK_CONTEXT, *PCREATE_LINK_CONTEXT;
+
+typedef struct
+{
+ DWORD Size;
+ DWORD Masks;
+ ULONGLONG AppSize;
+ FILETIME LastUsed;
+ int TimesUsed;
+ WCHAR ImagePath[MAX_PATH];
+} APPARPINFO;
+
+typedef struct
+{
+ DWORD Size;
+ BOOL Maximized;
+ INT Left;
+ INT Top;
+ INT Right;
+ INT Bottom;
+} APPWIZSETTINGS;
+
+/* appwiz.c */
+HINSTANCE hApplet; // Main applet instance
+HWND hMainWnd, // Main window
+ hActList, // Actions list
+ hAppList, // Programs list
+ hSearch, //Search line
+ hRemoveBtn, // Remove button
+ hModifyBtn; // Modify button
+
+APPWIZSETTINGS AppWizSettings;
+
+void ShowLastWin32Error(HWND hWndOwner);
+
+#endif /* __CPL_APPWIZ_H */
+
+/* EOF */
Propchange: trunk/reactos/dll/cpl/appwiz-new/appwiz.h
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/cpl/appwiz-new/appwiz.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/appwiz-new/appwiz.…
==============================================================================
--- trunk/reactos/dll/cpl/appwiz-new/appwiz.rbuild (added)
+++ trunk/reactos/dll/cpl/appwiz-new/appwiz.rbuild Mon Feb 18 20:25:40 2008
@@ -1,0 +1,23 @@
+<?xml version="1.0"?>
+<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
+<module name="appwiz-new" type="win32dll"
extension=".cpl" baseaddress="${BASEADDRESS_APPWIZ}"
installbase="system32" installname="appwiz-new.cpl"
unicode="yes" allowwarnings="true">
+ <importlibrary definition="appwiz.def" />
+ <include base="appwiz-new">.</include>
+ <define name="__USE_W32API" />
+ <define name="_WIN32_IE">0x600</define>
+ <define name="_WIN32_WINNT">0x501</define>
+ <define name="WINVER">0x0501</define>
+ <library>kernel32</library>
+ <library>advapi32</library>
+ <library>user32</library>
+ <library>comctl32</library>
+ <library>msvcrt</library>
+ <library>ole32</library>
+ <library>uuid</library>
+ <library>shell32</library>
+ <library>msimg32</library>
+ <library>gdi32</library>
+ <file>appwiz.c</file>
+ <file>createlink.c</file>
+ <file>appwiz.rc</file>
+</module>
Propchange: trunk/reactos/dll/cpl/appwiz-new/appwiz.rbuild
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/cpl/appwiz-new/appwiz.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/appwiz-new/appwiz.…
==============================================================================
--- trunk/reactos/dll/cpl/appwiz-new/appwiz.rc (added)
+++ trunk/reactos/dll/cpl/appwiz-new/appwiz.rc Mon Feb 18 20:25:40 2008
@@ -1,0 +1,27 @@
+#include "resource.h"
+#include <windows.h>
+
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+
+#define REACTOS_VERSION_DLL
+#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Software Control Panel\0"
+#define REACTOS_STR_INTERNAL_NAME "appwiz\0"
+#define REACTOS_STR_ORIGINAL_FILENAME "appwiz.cpl\0"
+#ifdef _MSC_VER
+#include <../../../reactos/version.rc>
+#else
+#include <reactos/version.rc>
+#endif
+
+IDI_CPLSYSTEM ICON "resources/applet.ico"
+IDI_APPICO ICON "resources/1501.ico"
+IDI_INSTICO ICON "resources/1502.ico"
+IDI_RECBINICO ICON "resources/1503.ico"
+IDI_SEARCH ICON "resources/search.ico"
+
+IDB_WATERMARK BITMAP "resources/watermark.bmp"
+IDB_UNDERLINE BITMAP "resources/underline.bmp"
+IDB_SELECT BITMAP "resources/select.bmp"
+IDB_ICON BITMAP "resources/icon.bmp"
+
+#include "rsrc.rc"
Propchange: trunk/reactos/dll/cpl/appwiz-new/appwiz.rc
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/cpl/appwiz-new/createlink.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/appwiz-new/createl…
==============================================================================
--- trunk/reactos/dll/cpl/appwiz-new/createlink.c (added)
+++ trunk/reactos/dll/cpl/appwiz-new/createlink.c Mon Feb 18 20:25:40 2008
@@ -1,0 +1,13 @@
+/*
+ *
+ * PROJECT: ReactOS Software Control Panel
+ * FILE: dll/cpl/appwiz/createlink.c
+ * PURPOSE: ReactOS Software Control Panel
+ * PROGRAMMER: Gero Kuehn (reactos.filter(a)gkware.com)
+ * Dmitry Chapyshev (lentind(a)yandex.ru)
+ * Johannes Anderwald
+ * UPDATE HISTORY:
+ * 06-17-2004 Created
+ */
+
+#include "appwiz.h"
Propchange: trunk/reactos/dll/cpl/appwiz-new/createlink.c
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/cpl/appwiz-new/lang/en-US.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/appwiz-new/lang/en…
==============================================================================
--- trunk/reactos/dll/cpl/appwiz-new/lang/en-US.rc (added)
+++ trunk/reactos/dll/cpl/appwiz-new/lang/en-US.rc Mon Feb 18 20:25:40 2008
@@ -1,0 +1,200 @@
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+IDR_POPUP_APP MENU
+BEGIN
+ POPUP "popup"
+ BEGIN
+ MENUITEM "&Remove", ID_APP_REMOVE
+ MENUITEM "&Modify", ID_APP_MODIFY, GRAYED
+ MENUITEM "R&epair", ID_APP_REPAIR, GRAYED
+ END
+END
+
+IDD_NETINSTALL DIALOGEX 0, 0, 242, 221
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUPWINDOW | WS_VISIBLE |
WS_CAPTION
+CAPTION "Network Install"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ PUSHBUTTON "&Install...", IDC_INSTALL, 150, 171, 85, 14
+ LTEXT "&The following software can be automatically installed by ReactOS. To
install a program, select it from the list and click Install.", IDC_NETTEXT, 40, 6,
195, 32
+ LISTBOX IDC_NETPROGLIST, 7, 42, 228, 125, LBS_STANDARD | WS_TABSTOP
+ ICON IDI_APPICO, IDC_NETICON, 9, 10, 20, 20
+END
+
+IDD_CREATESHORTCUT DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUPWINDOW | WS_VISIBLE |
WS_CAPTION
+CAPTION "Create Shortcut"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP |
SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT
+ LTEXT "This wizard helps you to create shortcuts to local or network programs,
files, folders, computers, or Internet addresses.", -1, 97, 7, 195, 28
+ LTEXT "&Type the location of the item:", IDC_LOCATIONITEM, 98, 46, 196,
8
+ EDITTEXT IDC_LOCITEMEDIT, 97, 58, 133, 14, ES_AUTOHSCROLL
+ PUSHBUTTON "B&rowse...", IDC_LOCBROWSE, 233, 58, 60, 14
+ LTEXT "Click Next to continue.", -1, 97, 95, 198, 8
+END
+
+IDD_SELPROGFOLDER DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUPWINDOW | WS_VISIBLE |
WS_CAPTION
+CAPTION "Select Program Folder"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "&Select a folder to place this shortcut in:", -1, 100, 7, 193,
10
+ CONTROL "", IDC_SELFOLDER, "SYSTREEVIEW32", WS_BORDER |
WS_TABSTOP | 0x00000028, 100, 19, 193, 90
+ PUSHBUTTON "New &Folder...", IDC_NEWFOLDERBTN, 218, 116, 75, 14
+ CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP |
SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT
+END
+
+IDD_SELPROGTITLE DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUPWINDOW | WS_VISIBLE |
WS_CAPTION
+CAPTION "Select a Title for the Program"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "&Type a name for this shortcut:", -1, 100, 10, 194, 10
+ EDITTEXT IDC_NAMESCEDIT, 100, 23, 194, 14, ES_AUTOHSCROLL
+ CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP |
SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT
+ LTEXT "Click Finish to create the shortcut.", -1, 100, 61, 194, 8
+END
+
+IDD_SELPROGICON DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUPWINDOW | WS_VISIBLE |
WS_CAPTION
+CAPTION "Select an Icon"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "&Select an icon for the shortcut:", -1, 100, 8, 195, 10
+ LISTBOX IDC_SELICONLIST, 100, 20, 192, 130, LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT
| LBS_MULTICOLUMN | LBS_DISABLENOSCROLL | WS_HSCROLL | WS_TABSTOP
+ CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP |
SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT
+END
+
+IDD_INSTFROMCD DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUPWINDOW | WS_VISIBLE |
WS_CAPTION
+CAPTION "Install Program From Floppy Disk or CD-ROM"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP |
SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT
+ LTEXT "", IDC_HEADTEXT, 101, 7, 193, 28
+ ICON 0, IDC_INSTFROMCDICON, 100, 60, 18, 20
+ LTEXT "", IDC_INSTFROMCDTEXT, 123, 66, 146, 8
+END
+
+IDD_RUNINSTPROG DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUPWINDOW | WS_VISIBLE |
WS_CAPTION
+CAPTION "Run Installation Program"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP |
SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT
+ LTEXT "", IDC_HEADTEXT, 101, 6, 195, 28
+ LTEXT "&Open:", IDC_LOCATIONITEM, 100, 53, 195, 8
+ EDITTEXT IDC_LOCITEMEDIT, 98, 64, 133, 14, ES_AUTOHSCROLL
+ PUSHBUTTON "B&rowse...", IDC_LOCBROWSE, 234, 64, 60, 14
+END
+
+IDD_CHANGEUSEROPT DIALOG 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION
+CAPTION "Change User Option"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP |
SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT
+ LTEXT "You have the option to make this new program available to
everyone.", 1012, 101, 5, 194, 40
+ AUTORADIOBUTTON "Install", IDC_INSTALLRB, 108, 51, 146, 14, BS_MULTILINE |
WS_GROUP
+ AUTORADIOBUTTON "Execute", IDC_LOCATIONITEM, 108, 74, 146, 14, BS_MULTILINE
| NOT WS_TABSTOP
+END
+
+IDD_FINISHADMINST DIALOG 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION
+CAPTION "Finish Admin Install"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP |
SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT
+ LTEXT "Change ini mapping back by clicking Finish.", IDC_HEADTEXT, 98, 7,
196, 40
+END
+
+IDD_AFTERINST DIALOG 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION
+CAPTION "After Installation"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP |
SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT
+ LTEXT "Please press Next.", IDC_HEADTEXT, 98, 7, 197, 40
+END
+
+IDD_RUNINSTPROG2 DIALOG 0, 0, 250, 120
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION
+CAPTION "Run Installation Program"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "Please specify the uninstall program location", IDC_UNINSTLOCTEXT,
9, 8, 235, 37
+ LTEXT "&Command line for the uninstall program:", IDC_LOCATIONITEM, 9,
57, 237, 8
+ EDITTEXT IDC_LOCITEMEDIT, 7, 69, 165, 14, ES_AUTOHSCROLL
+ PUSHBUTTON "B&rowse...", IDC_LOCBROWSE, 178, 69, 66, 14
+ DEFPUSHBUTTON "OK", IDOK, 118, 100, 60, 14
+ PUSHBUTTON "Cancel", IDCANCEL, 184, 100, 60, 14
+END
+
+IDD_WARNING DIALOG 20, 20, 255, 100
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION
+CAPTION "Warning"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ ICON "", IDC_WARNINGICON, 8, 10, 20, 20
+ LTEXT "There are other users logged on to this computer.", -1, 37, 8, 214,
10
+ LTEXT "If you uninstall this program while another user is running it, the
program might not uninstall completely.", -1, 37, 23, 212, 22
+ LTEXT "To properly change or remove this program, switch to and log off each
user before you continue.", IDC_WARNINGTEXT, 37, 46, 212, 26
+ PUSHBUTTON "&Switch User", IDC_SWITCHUSER, 61, 81, 60, 14
+ PUSHBUTTON "&Continue", IDOK, 125, 81, 60, 14
+ PUSHBUTTON "Cancel", IDCANCEL, 189, 81, 60, 14
+END
+
+IDD_REMSHORTCUTS DIALOGEX 20, 20, 220, 200
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CONTEXTHELP | WS_POPUPWINDOW |
WS_VISIBLE | WS_CAPTION
+CAPTION "Remove Shortcuts/Folders"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "&To remove an item from the Start menu, select the item and click
Remove.", IDC_UNINSTLOCTEXT, 10, 7, 204, 16
+ CONTROL "", IDC_SELFOLDER, "SYSTREEVIEW32", WS_BORDER |
WS_TABSTOP | 0x00000023, 10, 28, 200, 145
+ PUSHBUTTON "&Remove", IDC_REMOVEBTN, 84, 182, 60, 14
+ DEFPUSHBUTTON "Close", IDOK, 151, 182, 60, 14
+END
+
+IDD_ADDLATER DIALOGEX 0, 0, 220, 160
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTERMOUSE | WS_POPUPWINDOW |
WS_CAPTION
+CAPTION "Add Later"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "You may choose a date and time when you would like to add this program to
your computer. For example, you can schedule this to happen when you are away from your
computer.", IDC_UNINSTLOCTEXT, 7, 4, 208, 33
+ AUTORADIOBUTTON "&Add program later ", IDC_ADDPROGLATER, 7, 47, 207,
10, WS_GROUP
+ CONTROL "Picker", 12368, "SYSDATETIMEPICK32", WS_BORDER |
WS_TABSTOP | 0x0000000C, 29, 62, 107, 14
+ AUTORADIOBUTTON "&Do not add program", IDC_NOTADDPROG, 7, 87, 208, 10
+ DEFPUSHBUTTON "OK", IDOK, 89, 141, 60, 14, WS_GROUP
+ PUSHBUTTON "Cancel", IDCANCEL, 154, 141, 60, 14, NOT WS_TABSTOP
+END
+
+STRINGTABLE
+BEGIN
+ IDS_CPLSYSTEMNAME "Add or Remove Programs"
+ IDS_CPLSYSTEMDESCRIPTION "Install or remove programs and ReactOS
components."
+ IDS_UNABLEOPEN_UNINSTKEY "Unable to open Uninstall Key"
+ IDS_LIST_TITLE "List"
+ IDS_SIZE_TITLE "Size (MB)"
+ IDS_LAST_USED "Last Used"
+ IDS_PROGANDUPDATES "Programs & updates"
+ IDS_PROGRAMS_ONLY "Programs only"
+ IDS_UPDATES_ONLY "Updates only"
+ IDS_WELCOME_TITLE "Welcome to the Add or Remove Programs"
+ IDS_WELCOME_MSG "Please choose a category on the left or select
application on the list for removing or viewing information."
+ IDS_SEARCH_TEXT "Search in the list..."
+ IDS_REMOVE_BTN "&Remove"
+ IDS_MODIFY_BTN "&Modify"
+ IDS_UNABLEREAD_UNINSTSTR "Unable to read UninstallString. This entry is
invalid or has been created by an MSI installer."
+ IDS_INF_REG_OWNER "Registered Owner: "
+ IDS_INF_PRODUCT_ID "Product ID: "
+ IDS_INF_PUBLISHER "Publisher: "
+ IDS_INF_VERSION "Version: "
+ IDS_INF_CONTACT "Contact: "
+ IDS_INF_SUP_INFO "Support Information: "
+ IDS_INF_SUP_PHONE "Support Telephone: "
+ IDS_INF_PRODUCT_UPD "Product Updates: "
+ IDS_INF_README "Readme: "
+ IDS_INF_COMMENTS "Comments: "
+ IDS_NO_INFORMATION "No information about this program."
+END
Propchange: trunk/reactos/dll/cpl/appwiz-new/lang/en-US.rc
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/cpl/appwiz-new/resource.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/appwiz-new/resourc…
==============================================================================
--- trunk/reactos/dll/cpl/appwiz-new/resource.h (added)
+++ trunk/reactos/dll/cpl/appwiz-new/resource.h Mon Feb 18 20:25:40 2008
@@ -1,0 +1,100 @@
+#ifndef __CPL_RESOURCE_H
+#define __CPL_RESOURCE_H
+
+/* dialog sizes */
+#define SHORTCUTDLG_WIDTH 300
+#define SHORTCUTDLG_HEIGHT 160
+#define WATERMARK_WIDTH 90
+
+/* menus */
+#define IDR_POPUP_APP 14000
+
+/* menu items */
+#define ID_APP_REMOVE 14100
+#define ID_APP_MODIFY 14101
+#define ID_APP_REPAIR 14102
+
+/* icons */
+#define IDI_CPLSYSTEM 1500
+#define IDI_APPICO 1501
+#define IDI_INSTICO 1502
+#define IDI_RECBINICO 1503
+#define IDI_SEARCH 1504
+
+/* dialogs */
+#define IDD_NETINSTALL 100
+#define IDD_CREATESHORTCUT 200
+#define IDD_SELPROGFOLDER 201
+#define IDD_SELPROGTITLE 202
+#define IDD_SELPROGICON 203
+#define IDD_INSTFROMCD 300
+#define IDD_RUNINSTPROG 301
+#define IDD_CHANGEUSEROPT 302
+#define IDD_FINISHADMINST 304
+#define IDD_AFTERINST 305
+#define IDD_RUNINSTPROG2 306
+#define IDD_WARNING 307
+#define IDD_REMSHORTCUTS 400
+#define IDD_ADDLATER 12544
+
+/* bitmaps */
+#define IDB_WATERMARK 1019
+#define IDB_UNDERLINE 10000
+#define IDB_ICON 10001
+#define IDB_SELECT 10002
+
+/* strings */
+#define IDS_CPLSYSTEMNAME 2001
+#define IDS_CPLSYSTEMDESCRIPTION 2002
+#define IDS_UNABLEOPEN_UNINSTKEY 15000
+#define IDS_LIST_TITLE 15001
+#define IDS_SIZE_TITLE 15002
+#define IDS_LAST_USED 15003
+#define IDS_PROGANDUPDATES 15004
+#define IDS_PROGRAMS_ONLY 15005
+#define IDS_UPDATES_ONLY 15006
+#define IDS_WELCOME_TITLE 15007
+#define IDS_WELCOME_MSG 15008
+#define IDS_SEARCH_TEXT 15009
+#define IDS_REMOVE_BTN 15010
+#define IDS_MODIFY_BTN 15011
+#define IDS_UNABLEREAD_UNINSTSTR 15012
+#define IDS_INF_REG_OWNER 15013
+#define IDS_INF_PRODUCT_ID 15014
+#define IDS_INF_PUBLISHER 15015
+#define IDS_INF_VERSION 15016
+#define IDS_INF_CONTACT 15017
+#define IDS_INF_SUP_INFO 15018
+#define IDS_INF_SUP_PHONE 15019
+#define IDS_INF_PRODUCT_UPD 15020
+#define IDS_INF_README 15021
+#define IDS_INF_COMMENTS 15022
+#define IDS_NO_INFORMATION 15023
+
+/* controls */
+#define IDC_INSTALL 1000
+#define IDC_INSTALLRB 1001
+#define IDC_LOCATIONITEM 1002
+#define IDC_LOCITEMEDIT 1003
+#define IDC_LOCBROWSE 1004
+#define IDC_INSTFROMCDTEXT 1005
+#define IDC_INSTFROMCDICON 1006
+#define IDC_NETPROGLIST 1011
+#define IDC_HEADTEXT 1012
+#define IDC_WARNINGICON 1013
+#define IDC_SWITCHUSER 1014
+#define IDC_WARNINGTEXT 1017
+#define IDC_NAMESCEDIT 1020
+#define IDC_SELICONLIST 1021
+#define IDC_SELFOLDER 1022
+#define IDC_NEWFOLDERBTN 1027
+#define IDC_REMOVEBTN 1030
+#define IDC_UNINSTLOCTEXT 1031
+#define IDC_NETTEXT 1050
+#define IDC_NETICON 1051
+#define IDC_ADDPROGLATER 12369
+#define IDC_NOTADDPROG 12370
+
+#endif /* __CPL_RESOURCE_H */
+
+/* EOF */
Propchange: trunk/reactos/dll/cpl/appwiz-new/resource.h
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/cpl/appwiz-new/resources/1501.ico
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/appwiz-new/resourc…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/dll/cpl/appwiz-new/resources/1501.ico
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/dll/cpl/appwiz-new/resources/1502.ico
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/appwiz-new/resourc…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/dll/cpl/appwiz-new/resources/1502.ico
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/dll/cpl/appwiz-new/resources/1503.ico
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/appwiz-new/resourc…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/dll/cpl/appwiz-new/resources/1503.ico
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/dll/cpl/appwiz-new/resources/applet.ico
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/appwiz-new/resourc…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/dll/cpl/appwiz-new/resources/applet.ico
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/dll/cpl/appwiz-new/resources/icon.bmp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/appwiz-new/resourc…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/dll/cpl/appwiz-new/resources/icon.bmp
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/dll/cpl/appwiz-new/resources/search.ico
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/appwiz-new/resourc…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/dll/cpl/appwiz-new/resources/search.ico
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/dll/cpl/appwiz-new/resources/select.bmp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/appwiz-new/resourc…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/dll/cpl/appwiz-new/resources/select.bmp
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/dll/cpl/appwiz-new/resources/underline.bmp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/appwiz-new/resourc…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/dll/cpl/appwiz-new/resources/underline.bmp
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/dll/cpl/appwiz-new/resources/watermark.bmp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/appwiz-new/resourc…
==============================================================================
Binary file - no diff available.
Propchange: trunk/reactos/dll/cpl/appwiz-new/resources/watermark.bmp
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: trunk/reactos/dll/cpl/appwiz-new/rsrc.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/appwiz-new/rsrc.rc…
==============================================================================
--- trunk/reactos/dll/cpl/appwiz-new/rsrc.rc (added)
+++ trunk/reactos/dll/cpl/appwiz-new/rsrc.rc Mon Feb 18 20:25:40 2008
@@ -1,0 +1,4 @@
+#include "resource.h"
+#include <windows.h>
+
+#include "lang/en-US.rc"
Propchange: trunk/reactos/dll/cpl/appwiz-new/rsrc.rc
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/reactos/dll/cpl/cpl.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/cpl.rbuild?rev=324…
==============================================================================
--- trunk/reactos/dll/cpl/cpl.rbuild (original)
+++ trunk/reactos/dll/cpl/cpl.rbuild Mon Feb 18 20:25:40 2008
@@ -6,6 +6,9 @@
</directory>
<directory name="appwiz">
<xi:include href="appwiz/appwiz.rbuild" />
+</directory>
+<directory name="appwiz-new">
+ <xi:include href="appwiz-new/appwiz.rbuild" />
</directory>
<directory name="desk">
<xi:include href="desk/desk.rbuild" />