- Make the "Information" tab work.
- Improve overall applet's behavior (more correct and more "smart").
- Fixed a bug when switching between tabs.
- Small improvements in the UI, other small fixes.
- If no apps or no updates are installed, then the controls in the respective tabs will be grayed out, and a respective information message will be shown instead of the empty list.

svn path=/trunk/; revision=29532
This commit is contained in:
Aleksey Bragin
2007-10-12 10:12:52 +00:00
parent a3d5eb47e0
commit 306e3db1bb
5 changed files with 291 additions and 168 deletions
+13 -10
View File
@@ -44,32 +44,35 @@ extern HINSTANCE hApplet;
INT_PTR CALLBACK
RemovePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK
InfoPropDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
VOID
AddListColumn(HWND hList, LPTSTR Caption);
VOID
FillSoftwareList(HWND hwndDlg, BOOL bShowUpdates);
FillSoftwareList(HWND hwndDlg, BOOL bShowUpdates, UINT Control);
VOID
AddItemsToViewControl(HWND hwndDlg);
AddItemsToViewControl(HWND hwndDlg, UINT Control);
VOID
FindItems(HWND hwndDlg);
FindItems(HWND hwndDlg, UINT ListControl, UINT EditControl, UINT RemBtn, UINT InfoBtn);
VOID
CallUninstall(HWND hwndDlg, UINT Control, BOOL isUpdate);
CallUninstall(HWND hwndDlg, UINT Control, UINT RemBtn, UINT InfoBtn, BOOL isUpdate);
VOID
GetCurrentView(HWND hwndDlg);
GetCurrentView(HWND hwndDlg, UINT ViewControl, UINT ListControl);
VOID
CallInformation(HWND hwndDlg);
CallInformation(HWND hwndDlg, HWND infDlg, UINT Control);
VOID
ShowPopupMenu(HWND hwndDlg, UINT ResMenu, INT xPos, INT yPos);
ShowPopupMenu(HWND hwndDlg, UINT ResMenu, INT xPos, INT yPos, UINT Control);
BOOL
IsItemSelected(HWND hwndDlg, UINT Control);
VOID
ButtonStatus(HWND hwndDlg, BOOL Status, UINT RemBtn, UINT InfoBtn);
/* add.c */
INT_PTR CALLBACK
+39 -36
View File
@@ -24,10 +24,10 @@ CAPTION "Change or Remove Programs"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
ICON IDI_CPLSYSTEM,-1,PROPSHEETPADDING,6,16,16
LTEXT "The following Software can be automatically removed. To remove a program or to modify its installed components, select it from the list and click Modify/Remove.",-1,36,7,PROPSHEETWIDTH-48,32
LTEXT "Find:",-1,PROPSHEETPADDING,33,50,14
LTEXT "The following Software can be automatically removed. To remove a program or to modify its installed components, select it from the list and click Modify/Remove.",-1,36,7,PROPSHEETWIDTH-48,22
LTEXT "Find:",-1,PROPSHEETPADDING,33,30,8
EDITTEXT IDC_FIND_EDIT, PROPSHEETPADDING+30, 30, 180, 14, WS_VISIBLE | WS_TABSTOP
LTEXT "View:",-1,250,33,40,8
LTEXT "View:",-1,250,33,30,8
COMBOBOX IDC_VIEW_COMBO, 280, 30, 94, 80, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL
CONTROL "", IDC_SOFTWARELIST, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_AUTOARRANGE | LVS_SINGLESEL, PROPSHEETPADDING, 50, PROPSHEETWIDTH-12, 155, WS_EX_CLIENTEDGE
PUSHBUTTON "Modify/&Remove", IDC_ADDREMOVE, PROPSHEETPADDING, 210, 80, 14, WS_DISABLED
@@ -40,14 +40,14 @@ CAPTION "Remove Updates"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
ICON IDI_UPDATES,-1,PROPSHEETPADDING,6,16,16
LTEXT "The following Updates can be automatically removed. To remove a update, select it from the list and click Remove.",-1,36,7,PROPSHEETWIDTH-48,32
LTEXT "Find:",-1,PROPSHEETPADDING,33,50,14
EDITTEXT IDC_FIND_EDIT, PROPSHEETPADDING+30, 30, 180, 14, WS_VISIBLE | WS_TABSTOP
LTEXT "View:",-1,250,33,40,8
COMBOBOX IDC_VIEW_COMBO, 280, 30, 94, 80, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL
CONTROL "", IDC_SOFTWARELIST, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_AUTOARRANGE | LVS_SINGLESEL, PROPSHEETPADDING, 50, PROPSHEETWIDTH-12, 155, WS_EX_CLIENTEDGE
PUSHBUTTON "&Remove", IDC_ADDREMOVE, PROPSHEETPADDING, 210, 80, 14, WS_DISABLED
PUSHBUTTON "&Information", IDC_INFO_BUTTON, PROPSHEETPADDING+85, 210, 80, 14, WS_DISABLED
LTEXT "The following Updates can be automatically removed. To remove a update, select it from the list and click Remove.",-1,36,7,PROPSHEETWIDTH-48,22
LTEXT "Find:",-1,PROPSHEETPADDING,33,30,8
EDITTEXT IDC_UPD_FIND_EDIT, PROPSHEETPADDING+30, 30, 180, 14, WS_VISIBLE | WS_TABSTOP
LTEXT "View:",-1,250,33,30,8
COMBOBOX IDC_UPD_VIEW_COMBO, 280, 30, 94, 80, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL
CONTROL "", IDC_UPDATESLIST, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_AUTOARRANGE | LVS_SINGLESEL, PROPSHEETPADDING, 50, PROPSHEETWIDTH-12, 155, WS_EX_CLIENTEDGE
PUSHBUTTON "&Remove", IDC_UPD_REMOVE, PROPSHEETPADDING, 210, 80, 14, WS_DISABLED
PUSHBUTTON "&Information", IDC_UPD_INFO_BUTTON, PROPSHEETPADDING+85, 210, 80, 14, WS_DISABLED
END
IDD_PROPPAGEADD DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT
@@ -75,7 +75,7 @@ CAPTION "ReactOS Setup"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
ICON IDI_REACTOS,-1,PROPSHEETPADDING,6,16,16
LTEXT "",-1,36,7,PROPSHEETWIDTH-48,32
LTEXT "",-1,36,7,PROPSHEETWIDTH-48,22
END
IDD_FIRSTPAGE DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT
@@ -119,40 +119,39 @@ BEGIN
LTEXT "Click Finish to create the shortcut.", -1, 120, 50, 150, 10
END
IDD_INFORMATION DIALOG 5, 100, 269, 200
IDD_INFORMATION DIALOG 5, 100, 269, 218
STYLE DS_SETFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_3DLOOK | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION
CAPTION "Information"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "DisplayName", IDS_INFO_DISPNAME, PROPSHEETPADDING, 8, 160, 24
LTEXT "Registered Owner:", -1, PROPSHEETPADDING, 25, 160, 17
LTEXT "", IDS_INFO_REGOWNER, PROPSHEETPADDING+75, 25, 160, 17
LTEXT "Product ID:", -1, PROPSHEETPADDING, 40, 160, 17
LTEXT "", IDS_INFO_PRODUCTID, PROPSHEETPADDING+75, 40, 160, 17
LTEXT "Publisher:", -1, PROPSHEETPADDING, 55, 160, 17
LTEXT "", IDS_INFO_PUBLISHER, PROPSHEETPADDING+75, 55, 160, 17
LTEXT "Version:", -1, PROPSHEETPADDING, 70, 160, 17
LTEXT "", IDS_INFO_VERSION, PROPSHEETPADDING+75, 70, 160, 17
LTEXT "Contact:", -1, PROPSHEETPADDING, 85, 160, 17
LTEXT "", IDS_INFO_CONTACT, PROPSHEETPADDING+75, 85, 160, 17
LTEXT "Support Information:", -1, PROPSHEETPADDING, 100, 160, 17
LTEXT "", IDS_INFO_SUPPORTINFO, PROPSHEETPADDING+75, 100, 160, 17
LTEXT "Support Telephone:", -1, PROPSHEETPADDING, 115, 160, 17
LTEXT "", IDS_INFO_SUPPORTPHONE, PROPSHEETPADDING+75, 115, 160, 17
LTEXT "Product Updates:", -1, PROPSHEETPADDING, 130, 160, 17
LTEXT "", IDS_INFO_PRODUCT_UPDATES, PROPSHEETPADDING+75, 130, 160, 17
LTEXT "Readme:", -1, PROPSHEETPADDING, 145, 160, 17
LTEXT "", IDS_INFO_README, PROPSHEETPADDING+75, 145, 160, 17
LTEXT "Comments:", -1, PROPSHEETPADDING, 160, 160, 17
LTEXT "", IDS_INFO_COMMENTS, PROPSHEETPADDING+75, 160, 160, 17
PUSHBUTTON "&Close", IDCANCEL, 212, 180, 50, 14
EDITTEXT IDS_INFO_DISPNAME, PROPSHEETPADDING, 6, 258, 15, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP
LTEXT "Registered Owner:", -1, PROPSHEETPADDING, 27, 97, 8
EDITTEXT IDS_INFO_REGOWNER, PROPSHEETPADDING+97, 25, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP
LTEXT "Product ID:", -1, PROPSHEETPADDING, 44, 97, 8
EDITTEXT IDS_INFO_PRODUCTID, PROPSHEETPADDING+97, 42, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP
LTEXT "Publisher:", -1, PROPSHEETPADDING, 61, 97, 8
EDITTEXT IDS_INFO_PUBLISHER, PROPSHEETPADDING+97, 59, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP
LTEXT "Version:", -1, PROPSHEETPADDING, 78, 97, 8
EDITTEXT IDS_INFO_VERSION, PROPSHEETPADDING+97, 76, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP
LTEXT "Contact:", -1, PROPSHEETPADDING, 95, 97, 8
EDITTEXT IDS_INFO_CONTACT, PROPSHEETPADDING+97, 93, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP
LTEXT "Support Information:", -1, PROPSHEETPADDING, 112, 97, 8
EDITTEXT IDS_INFO_SUPPORTINFO, PROPSHEETPADDING+97, 110, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP
LTEXT "Support Telephone:", -1, PROPSHEETPADDING, 129, 97, 8
EDITTEXT IDS_INFO_SUPPORTPHONE, PROPSHEETPADDING+97, 127, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP
LTEXT "Product Updates:", -1, PROPSHEETPADDING, 146, 97, 8
EDITTEXT IDS_INFO_PRODUCT_UPDATES, PROPSHEETPADDING+97, 144, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP
LTEXT "Readme:", -1, PROPSHEETPADDING, 163, 97, 8
EDITTEXT IDS_INFO_README, PROPSHEETPADDING+97, 161, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP
LTEXT "Comments:", -1, PROPSHEETPADDING, 180, 97, 8
EDITTEXT IDS_INFO_COMMENTS, PROPSHEETPADDING+97, 178, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP
PUSHBUTTON "&Close", IDCANCEL, 212, 198, 50, 14
END
STRINGTABLE
BEGIN
IDS_CPLSYSTEMNAME "Add/Remove Programs"
IDS_CPLSYSTEMDESCRIPTION "Sets up programs and creates shortcuts."
IDS_NOITEM_SELECTED "No item selected!"
IDS_ERROR "Error"
IDS_UNABLEREAD_UNINSTSTR "Unable to read UninstallString. This entry is invalid or has been created by an MSI installer."
IDS_UNABLEOPEN_UNINSTKEY "Unable to open Uninstall Key"
@@ -163,4 +162,8 @@ BEGIN
IDS_DETAILS "Details"
IDS_CREATE_SHORTCUT "Create Shortcut"
IDS_ERROR_NOT_FOUND "The file %s was not found."
IDS_UNABLEREAD_INFORMATION "Unable to open Information Keys"
IDS_NO_INFORMATION "No information"
IDS_NONE_APP "There are no installed applications."
IDS_NONE_UPD "There are no installed updates."
END
+156 -74
View File
@@ -30,14 +30,77 @@
#include "appwiz.h"
VOID
CallInformation(HWND hwndDlg)
{
HWND InfoDialog;
BOOL
GetInfoItem(HWND hwndDlg, HKEY hKey, LPCTSTR RegName, UINT Control)
{
DWORD dwSize = 1024;
TCHAR pszInfoString[1024];
if (RegQueryValueEx(hKey,
RegName,
NULL,
NULL,
(LPBYTE)pszInfoString,
&dwSize) == ERROR_SUCCESS)
{
SendMessage(GetDlgItem(hwndDlg, Control), WM_SETTEXT, -1, (LPARAM)pszInfoString);
return TRUE;
}
else
{
dwSize = 1024;
LoadString(hApplet, IDS_NO_INFORMATION, pszInfoString, sizeof(pszInfoString) / sizeof(TCHAR));
SendMessage(GetDlgItem(hwndDlg, Control), WM_SETTEXT, -1, (LPARAM)pszInfoString);
return FALSE;
}
}
VOID
CallUninstall(HWND hwndDlg, UINT Control, BOOL isUpdate)
CallInformation(HWND hwndDlg, HWND infDlg, UINT Control)
{
INT nIndex;
HKEY hKey;
TCHAR Buf[256],Title[256];
nIndex = (INT)SendMessage(GetDlgItem(infDlg, Control),LVM_GETNEXTITEM,-1,LVNI_FOCUSED);
if (nIndex != -1)
{
LVITEM item;
ZeroMemory(&item, sizeof(LVITEM));
item.mask = LVIF_PARAM;
item.iItem = nIndex;
(void)ListView_GetItem(GetDlgItem(infDlg,Control),&item);
hKey = (HKEY)item.lParam;
if (!GetInfoItem(hwndDlg, hKey, L"DisplayName", IDS_INFO_DISPNAME))
{
LoadString(hApplet, IDS_UNABLEREAD_INFORMATION, Buf, sizeof(Buf) / sizeof(TCHAR));
LoadString(hApplet, IDS_ERROR, Title, sizeof(Title) / sizeof(TCHAR));
MessageBox(hwndDlg,
Buf,
Title,
MB_ICONSTOP);
return;
}
(void)GetInfoItem(hwndDlg, hKey, L"RegOwner", IDS_INFO_REGOWNER);
(void)GetInfoItem(hwndDlg, hKey, L"ProductID", IDS_INFO_PRODUCTID);
(void)GetInfoItem(hwndDlg, hKey, L"Publisher", IDS_INFO_PUBLISHER);
(void)GetInfoItem(hwndDlg, hKey, L"DisplayVersion", IDS_INFO_VERSION);
(void)GetInfoItem(hwndDlg, hKey, L"Contact", IDS_INFO_CONTACT);
(void)GetInfoItem(hwndDlg, hKey, L"HelpLink", IDS_INFO_SUPPORTINFO);
(void)GetInfoItem(hwndDlg, hKey, L"HelpTelephone", IDS_INFO_SUPPORTPHONE);
(void)GetInfoItem(hwndDlg, hKey, L"URLUpdateInfo", IDS_INFO_PRODUCT_UPDATES);
(void)GetInfoItem(hwndDlg, hKey, L"Readme", IDS_INFO_README);
(void)GetInfoItem(hwndDlg, hKey, L"Comments", IDS_INFO_COMMENTS);
}
}
VOID
CallUninstall(HWND hwndDlg, UINT Control, UINT RemBtn, UINT InfoBtn, BOOL isUpdate)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
@@ -49,23 +112,14 @@ CallUninstall(HWND hwndDlg, UINT Control, BOOL isUpdate)
TCHAR Buf[256],Title[256];
nIndex = (INT)SendMessage(GetDlgItem(hwndDlg, Control),LVM_GETNEXTITEM,-1,LVNI_FOCUSED);
if (nIndex == -1)
{
LoadString(hApplet, IDS_NOITEM_SELECTED, Buf, sizeof(Buf) / sizeof(TCHAR));
LoadString(hApplet, IDS_CPLSYSTEMNAME, Title, sizeof(Title) / sizeof(TCHAR));
MessageBox(hwndDlg,
Buf,
Title,
MB_ICONINFORMATION);
}
else
if (nIndex != -1)
{
LVITEM item;
ZeroMemory(&item, sizeof(LVITEM));
item.mask = LVIF_PARAM;
item.iItem = nIndex;
(void)ListView_GetItem(GetDlgItem(hwndDlg,IDC_SOFTWARELIST),&item);
(void)ListView_GetItem(GetDlgItem(hwndDlg,Control),&item);
hKey = (HKEY)item.lParam;
dwType = REG_SZ;
@@ -82,12 +136,13 @@ CallUninstall(HWND hwndDlg, UINT Control, BOOL isUpdate)
si.wShowWindow = SW_SHOW;
if (CreateProcess(NULL,pszUninstallString,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
{
ButtonStatus(hwndDlg, FALSE, RemBtn, InfoBtn);
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
// Update software list
(void)ListView_DeleteAllItems(GetDlgItem(hwndDlg, IDC_SOFTWARELIST));
FillSoftwareList(hwndDlg, isUpdate);
(void)ListView_DeleteAllItems(GetDlgItem(hwndDlg, Control));
FillSoftwareList(hwndDlg, isUpdate, Control);
}
}
else
@@ -118,7 +173,7 @@ AddListColumn(HWND hList, LPTSTR Caption)
}
static VOID
AddItemToList(HWND hwndDlg, LPARAM hSubKey, LPTSTR pszDisplayName, INT ItemIndex)
AddItemToList(HWND hwndDlg, LPARAM hSubKey, LPTSTR pszDisplayName, INT ItemIndex, UINT Control)
{
int index;
HIMAGELIST hImgListSmall;
@@ -153,7 +208,7 @@ AddItemToList(HWND hwndDlg, LPARAM hSubKey, LPTSTR pszDisplayName, INT ItemIndex
ImageList_AddIcon(hImgListLarge,hIcon);
DestroyIcon(hIcon);
hList = GetDlgItem(hwndDlg, IDC_SOFTWARELIST);
hList = GetDlgItem(hwndDlg, Control);
ZeroMemory(&listItem, sizeof(LV_ITEM));
listItem.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE | LVIF_IMAGE;
@@ -163,12 +218,35 @@ AddItemToList(HWND hwndDlg, LPARAM hSubKey, LPTSTR pszDisplayName, INT ItemIndex
listItem.iImage = index;
(void)ListView_InsertItem(hList, &listItem);
(void)ListView_SetImageList(GetDlgItem(hwndDlg, IDC_SOFTWARELIST),hImgListSmall,LVSIL_SMALL);
(void)ListView_SetImageList(GetDlgItem(hwndDlg, IDC_SOFTWARELIST),hImgListLarge,LVSIL_NORMAL);
(void)ListView_SetImageList(hList,hImgListSmall,LVSIL_SMALL);
(void)ListView_SetImageList(hList,hImgListLarge,LVSIL_NORMAL);
}
VOID
FillSoftwareList(HWND hwndDlg, BOOL bShowUpdates)
SetNoneAppMsg(HWND hwndDlg, BOOL IsUpdates)
{
TCHAR Buf[256];
if (IsUpdates)
{
LoadString(hApplet, IDS_NONE_UPD, Buf, sizeof(Buf) / sizeof(TCHAR));
AddItemToList(hwndDlg, -1, (LPTSTR)Buf, 0, IDC_UPDATESLIST);
EnableWindow(GetDlgItem(hwndDlg, IDC_UPD_FIND_EDIT),FALSE);
EnableWindow(GetDlgItem(hwndDlg, IDC_UPD_VIEW_COMBO),FALSE);
EnableWindow(GetDlgItem(hwndDlg, IDC_UPDATESLIST),FALSE);
}
else
{
LoadString(hApplet, IDS_NONE_APP, Buf, sizeof(Buf) / sizeof(TCHAR));
AddItemToList(hwndDlg, -1, (LPTSTR)Buf, 0, IDC_SOFTWARELIST);
EnableWindow(GetDlgItem(hwndDlg, IDC_FIND_EDIT),FALSE);
EnableWindow(GetDlgItem(hwndDlg, IDC_VIEW_COMBO),FALSE);
EnableWindow(GetDlgItem(hwndDlg, IDC_SOFTWARELIST),FALSE);
}
}
VOID
FillSoftwareList(HWND hwndDlg, BOOL bShowUpdates, UINT Control)
{
TCHAR pszName[MAX_PATH];
TCHAR pszDisplayName[MAX_PATH];
@@ -183,6 +261,7 @@ FillSoftwareList(HWND hwndDlg, BOOL bShowUpdates)
BOOL bIsSystemComponent = FALSE;
INT ItemIndex = 0;
TCHAR Buf[256],Title[256];
BOOL IsAdd = FALSE;
if (RegOpenKey(HKEY_LOCAL_MACHINE,
TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall"),
@@ -237,11 +316,13 @@ FillSoftwareList(HWND hwndDlg, BOOL bShowUpdates)
{
if ((!bIsUpdate) && (!bIsSystemComponent) && (!bShowUpdates))
{
AddItemToList(hwndDlg, (LPARAM)hSubKey, (LPTSTR)pszDisplayName, ItemIndex);
AddItemToList(hwndDlg, (LPARAM)hSubKey, (LPTSTR)pszDisplayName, ItemIndex, Control);
IsAdd = TRUE;
}
else if (bIsUpdate && bShowUpdates)
{
AddItemToList(hwndDlg, (LPARAM)hSubKey, (LPTSTR)pszDisplayName, ItemIndex);
AddItemToList(hwndDlg, (LPARAM)hSubKey, (LPTSTR)pszDisplayName, ItemIndex, Control);
IsAdd = TRUE;
}
}
}
@@ -251,16 +332,19 @@ FillSoftwareList(HWND hwndDlg, BOOL bShowUpdates)
}
RegCloseKey(hKey);
if (!IsAdd) SetNoneAppMsg(hwndDlg, bShowUpdates);
}
VOID
AddItemsToViewControl(HWND hwndDlg)
AddItemsToViewControl(HWND hwndDlg, UINT Control)
{
TCHAR Buf[256];
int Index;
HWND hList;
hList = GetDlgItem(hwndDlg, IDC_VIEW_COMBO);
hList = GetDlgItem(hwndDlg, Control);
// Large Icons
LoadString(hApplet, IDS_LARGEICONS, Buf, sizeof(Buf) / sizeof(TCHAR));
Index = (int)SendMessage(hList,
@@ -300,7 +384,7 @@ AddItemsToViewControl(HWND hwndDlg)
}
VOID
FindItems(HWND hwndDlg)
FindItems(HWND hwndDlg, UINT ListControl, UINT EditControl, UINT RemBtn, UINT InfoBtn)
{
HWND hList;
HWND hEdit;
@@ -310,8 +394,8 @@ FindItems(HWND hwndDlg)
LV_ITEM listItem;
BOOL comp = TRUE;
hList = GetDlgItem(hwndDlg, IDC_SOFTWARELIST);
hEdit = GetDlgItem(hwndDlg, IDC_FIND_EDIT);
hList = GetDlgItem(hwndDlg, ListControl);
hEdit = GetDlgItem(hwndDlg, EditControl);
SendMessage(hEdit, WM_GETTEXT, 128, (LPARAM)szText);
@@ -330,45 +414,41 @@ FindItems(HWND hwndDlg)
}
ListView_SetItemState(hList, Index, LVIS_SELECTED | LVIS_FOCUSED, -1);
if (comp)
{
EnableWindow(GetDlgItem(hwndDlg, IDC_ADDREMOVE),TRUE);
}
ButtonStatus(hwndDlg, TRUE, RemBtn, InfoBtn);
else
{
EnableWindow(GetDlgItem(hwndDlg, IDC_ADDREMOVE),FALSE);
}
ButtonStatus(hwndDlg, FALSE, RemBtn, InfoBtn);
}
VOID
GetCurrentView(HWND hwndDlg)
GetCurrentView(HWND hwndDlg, UINT ViewControl, UINT ListControl)
{
int nCurrSel;
nCurrSel = (int)SendMessage(GetDlgItem(hwndDlg, IDC_VIEW_COMBO),
nCurrSel = (int)SendMessage(GetDlgItem(hwndDlg, ViewControl),
CB_GETCURSEL,
(WPARAM)0,
(LPARAM)0);
switch (nCurrSel)
{
case 0:
SetWindowLong(GetDlgItem(hwndDlg, IDC_SOFTWARELIST),
SetWindowLong(GetDlgItem(hwndDlg, ListControl),
GWL_STYLE, LVS_ICON | LVS_SORTASCENDING | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP);
break;
case 1:
SetWindowLong(GetDlgItem(hwndDlg, IDC_SOFTWARELIST),
SetWindowLong(GetDlgItem(hwndDlg, ListControl),
GWL_STYLE,LVS_LIST | LVS_SORTASCENDING | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP);
break;
case 2:
SetWindowLong(GetDlgItem(hwndDlg, IDC_SOFTWARELIST),
SetWindowLong(GetDlgItem(hwndDlg, ListControl),
GWL_STYLE,LVS_REPORT | LVS_SORTASCENDING | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP);
break;
}
}
VOID
ShowPopupMenu(HWND hwndDlg, UINT ResMenu, INT xPos, INT yPos)
ShowPopupMenu(HWND hwndDlg, UINT ResMenu, INT xPos, INT yPos, UINT Control)
{
INT nIndex;
nIndex = (INT)SendMessage(GetDlgItem(hwndDlg, IDC_SOFTWARELIST),LVM_GETNEXTITEM,-1,LVNI_FOCUSED);
nIndex = (INT)SendMessage(GetDlgItem(hwndDlg, Control),LVM_GETNEXTITEM,-1,LVNI_FOCUSED);
if ( nIndex != -1)
{
POINT pt;
@@ -377,7 +457,7 @@ ShowPopupMenu(HWND hwndDlg, UINT ResMenu, INT xPos, INT yPos)
GetCursorPos(&pt);
GetWindowRect(GetDlgItem(hwndDlg, IDC_SOFTWARELIST), &lvRect);
GetWindowRect(GetDlgItem(hwndDlg, Control), &lvRect);
if (PtInRect(&lvRect, pt))
{
hMenu = GetSubMenu(LoadMenu(hApplet, MAKEINTRESOURCE(ResMenu)),0);
@@ -392,6 +472,7 @@ ShowPopupMenu(HWND hwndDlg, UINT ResMenu, INT xPos, INT yPos)
}
}
static
INT_PTR CALLBACK
InfoPropDlgProc(HWND hDlg,
UINT message,
@@ -404,15 +485,12 @@ InfoPropDlgProc(HWND hDlg,
{
case WM_INITDIALOG:
{
CallInformation(hDlg, InfoDialog, IDC_SOFTWARELIST);
}
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDOK:
break;
case IDCANCEL:
EndDialog(hDlg,LOWORD(wParam));
break;
@@ -424,6 +502,22 @@ InfoPropDlgProc(HWND hDlg,
return FALSE;
}
BOOL
IsItemSelected(HWND hwndDlg, UINT Control)
{
INT nIndex;
nIndex = (INT)SendMessage(GetDlgItem(hwndDlg, Control),LVM_GETNEXTITEM,-1,LVNI_FOCUSED);
if (nIndex != -1) return TRUE;
return FALSE;
}
VOID
ButtonStatus(HWND hwndDlg, BOOL Status, UINT RemBtn, UINT InfoBtn)
{
EnableWindow(GetDlgItem(hwndDlg, RemBtn),Status);
EnableWindow(GetDlgItem(hwndDlg, InfoBtn),Status);
}
/* Property page dialog callback */
INT_PTR CALLBACK
RemovePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
@@ -434,10 +528,11 @@ RemovePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
switch (uMsg)
{
case WM_INITDIALOG:
AddItemsToViewControl(hwndDlg);
AddItemsToViewControl(hwndDlg, IDC_VIEW_COMBO);
LoadString(hApplet, IDS_APPLIST, Buf, sizeof(Buf) / sizeof(TCHAR));
AddListColumn(GetDlgItem(hwndDlg, IDC_SOFTWARELIST),Buf);
FillSoftwareList(hwndDlg, FALSE);
FillSoftwareList(hwndDlg, FALSE, IDC_SOFTWARELIST);
InfoDialog = hwndDlg;
break;
case WM_COMMAND:
@@ -446,25 +541,26 @@ RemovePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
case IDC_FIND_EDIT:
if (HIWORD(wParam) == EN_CHANGE)
{
FindItems(hwndDlg);
FindItems(hwndDlg,IDC_SOFTWARELIST,IDC_FIND_EDIT,IDC_ADDREMOVE,IDC_INFO_BUTTON);
}
break;
case ID_APP_MODIFYREMOVE:
case IDC_ADDREMOVE:
CallUninstall(hwndDlg, IDC_SOFTWARELIST, FALSE);
CallUninstall(hwndDlg, IDC_SOFTWARELIST, IDC_ADDREMOVE, IDC_INFO_BUTTON, FALSE);
break;
case ID_APP_INFORMATION:
case IDC_INFO_BUTTON:
{
if (IsItemSelected(hwndDlg, IDC_SOFTWARELIST))
DialogBox(hApplet,
MAKEINTRESOURCE(IDD_INFORMATION),
hwndDlg,
InfoPropDlgProc);
}
break;
case IDC_VIEW_COMBO:
if (HIWORD(wParam) == CBN_SELCHANGE)
{
GetCurrentView(hwndDlg);
}
GetCurrentView(hwndDlg, IDC_VIEW_COMBO, IDC_SOFTWARELIST);
break;
}
break;
@@ -476,22 +572,14 @@ RemovePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
switch (((LPNMHDR)lParam)->code)
{
case NM_DBLCLK:
CallUninstall(hwndDlg, IDC_SOFTWARELIST, FALSE);
CallUninstall(hwndDlg, IDC_SOFTWARELIST, IDC_ADDREMOVE, IDC_INFO_BUTTON, FALSE);
break;
case NM_CLICK:
{
INT nIndex;
nIndex = (INT)SendMessage(GetDlgItem(hwndDlg, IDC_SOFTWARELIST),LVM_GETNEXTITEM,-1,LVNI_FOCUSED);
if (nIndex == -1)
{
EnableWindow(GetDlgItem(hwndDlg, IDC_ADDREMOVE),FALSE);
EnableWindow(GetDlgItem(hwndDlg, IDC_INFO_BUTTON),FALSE);
}
if (!IsItemSelected(hwndDlg, IDC_SOFTWARELIST))
ButtonStatus(hwndDlg, FALSE, IDC_ADDREMOVE, IDC_INFO_BUTTON);
else
{
EnableWindow(GetDlgItem(hwndDlg, IDC_ADDREMOVE),TRUE);
EnableWindow(GetDlgItem(hwndDlg, IDC_INFO_BUTTON),TRUE);
}
ButtonStatus(hwndDlg, TRUE, IDC_ADDREMOVE, IDC_INFO_BUTTON);
}
break;
}
@@ -499,19 +587,13 @@ RemovePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
}
}
break;
case WM_MENUSELECT:
{
switch((UINT)LOWORD(wParam))
{
}
}
break;
case WM_CONTEXTMENU:
{
ShowPopupMenu(hwndDlg,
IDR_POPUP_APP,
GET_X_LPARAM(lParam),
GET_Y_LPARAM(lParam));
GET_Y_LPARAM(lParam),
IDC_SOFTWARELIST);
}
break;
}
+30 -22
View File
@@ -45,28 +45,31 @@
/* strings */
#define IDS_CPLSYSTEMNAME 1001
#define IDS_CPLSYSTEMDESCRIPTION 2001
#define IDS_NOITEM_SELECTED 2002
#define IDS_ERROR 2003
#define IDS_UNABLEREAD_UNINSTSTR 2004
#define IDS_UNABLEOPEN_UNINSTKEY 2005
#define IDS_APPLIST 2006
#define IDS_LARGEICONS 2007
#define IDS_LIST 2008
#define IDS_DETAILS 2009
#define IDS_UPDATESLIST 2010
#define IDS_INFO_DISPNAME 2011
#define IDS_INFO_PUBLISHER 2012
#define IDS_INFO_VERSION 2013
#define IDS_INFO_CONTACT 2014
#define IDS_INFO_SUPPORTINFO 2015
#define IDS_INFO_SUPPORTPHONE 2016
#define IDS_INFO_PRODUCT_UPDATES 2017
#define IDS_INFO_COMMENTS 2018
#define IDS_INFO_REGOWNER 2019
#define IDS_INFO_PRODUCTID 2020
#define IDS_INFO_README 2021
#define IDS_CREATE_SHORTCUT 2022
#define IDS_ERROR_NOT_FOUND 2023
#define IDS_ERROR 2002
#define IDS_UNABLEREAD_UNINSTSTR 2003
#define IDS_UNABLEOPEN_UNINSTKEY 2004
#define IDS_APPLIST 2005
#define IDS_LARGEICONS 2006
#define IDS_LIST 2007
#define IDS_DETAILS 2008
#define IDS_UPDATESLIST 2009
#define IDS_INFO_DISPNAME 2010
#define IDS_INFO_PUBLISHER 2011
#define IDS_INFO_VERSION 2012
#define IDS_INFO_CONTACT 2013
#define IDS_INFO_SUPPORTINFO 2014
#define IDS_INFO_SUPPORTPHONE 2015
#define IDS_INFO_PRODUCT_UPDATES 2016
#define IDS_INFO_COMMENTS 2017
#define IDS_INFO_REGOWNER 2018
#define IDS_INFO_PRODUCTID 2019
#define IDS_INFO_README 2020
#define IDS_CREATE_SHORTCUT 2021
#define IDS_ERROR_NOT_FOUND 2022
#define IDS_UNABLEREAD_INFORMATION 2023
#define IDS_NO_INFORMATION 2024
#define IDS_NONE_APP 2025
#define IDS_NONE_UPD 2026
/* controls */
#define IDC_INSTALL 101
@@ -81,6 +84,11 @@
#define IDC_ADD_DOWNLOAD_BUTTON 110
#define IDC_ADD_FIND_BUTTON 111
#define IDC_ADD_PROP_BUTTON 112
#define IDC_UPD_VIEW_COMBO 113
#define IDC_UPDATESLIST 114
#define IDC_UPD_FIND_EDIT 115
#define IDC_UPD_REMOVE 116
#define IDC_UPD_INFO_BUTTON 117
#endif /* __CPL_RESOURCE_H */
+53 -26
View File
@@ -30,6 +30,38 @@
#include "appwiz.h"
HWND UpdInfoDialog;
static
INT_PTR CALLBACK
InfoPropDlgProc(HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
{
CallInformation(hDlg, UpdInfoDialog, IDC_UPDATESLIST);
}
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDCANCEL:
EndDialog(hDlg,LOWORD(wParam));
break;
}
}
break;
}
return FALSE;
}
/* Property page dialog callback */
INT_PTR CALLBACK
UpdatesPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
@@ -42,62 +74,56 @@ UpdatesPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
switch (uMsg)
{
case WM_INITDIALOG:
AddItemsToViewControl(hwndDlg);
AddItemsToViewControl(hwndDlg, IDC_UPD_VIEW_COMBO);
LoadString(hApplet, IDS_UPDATESLIST, Buf, sizeof(Buf) / sizeof(TCHAR));
AddListColumn(GetDlgItem(hwndDlg, IDC_SOFTWARELIST),Buf);
FillSoftwareList(hwndDlg, TRUE);
AddListColumn(GetDlgItem(hwndDlg, IDC_UPDATESLIST),Buf);
FillSoftwareList(hwndDlg, TRUE, IDC_UPDATESLIST);
UpdInfoDialog = hwndDlg;
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_FIND_EDIT:
case IDC_UPD_FIND_EDIT:
if (HIWORD(wParam) == EN_CHANGE)
{
FindItems(hwndDlg);
FindItems(hwndDlg,IDC_UPDATESLIST,IDC_UPD_FIND_EDIT,IDC_UPD_REMOVE,IDC_UPD_INFO_BUTTON);
}
break;
case ID_UPD_INFORMATION:
case IDC_INFO_BUTTON:
case IDC_UPD_INFO_BUTTON:
{
if (IsItemSelected(hwndDlg, IDC_SOFTWARELIST))
DialogBox(hApplet,
MAKEINTRESOURCE(IDD_INFORMATION),
hwndDlg,
InfoPropDlgProc);
}
break;
case ID_UPD_REMOVE:
case IDC_ADDREMOVE:
CallUninstall(hwndDlg, IDC_SOFTWARELIST, TRUE);
case IDC_UPD_REMOVE:
CallUninstall(hwndDlg, IDC_UPDATESLIST, IDC_UPD_REMOVE, IDC_UPD_INFO_BUTTON, TRUE);
break;
case IDC_VIEW_COMBO:
case IDC_UPD_VIEW_COMBO:
if (HIWORD(wParam) == CBN_SELCHANGE)
{
GetCurrentView(hwndDlg);
}
GetCurrentView(hwndDlg, IDC_UPD_VIEW_COMBO, IDC_UPDATESLIST);
break;
}
break;
case WM_NOTIFY:
switch (LOWORD(wParam))
{
case IDC_SOFTWARELIST:
case IDC_UPDATESLIST:
switch (((LPNMHDR)lParam)->code)
{
case NM_DBLCLK:
CallUninstall(hwndDlg, IDC_SOFTWARELIST, TRUE);
CallUninstall(hwndDlg, IDC_UPDATESLIST, IDC_UPD_REMOVE, IDC_UPD_INFO_BUTTON, TRUE);
break;
case NM_CLICK:
{
INT nIndex;
nIndex = (INT)SendMessage(GetDlgItem(hwndDlg, IDC_SOFTWARELIST),LVM_GETNEXTITEM,-1,LVNI_FOCUSED);
if (nIndex == -1)
{
EnableWindow(GetDlgItem(hwndDlg, IDC_ADDREMOVE),FALSE);
EnableWindow(GetDlgItem(hwndDlg, IDC_INFO_BUTTON),FALSE);
}
if (!IsItemSelected(hwndDlg, IDC_UPDATESLIST))
ButtonStatus(hwndDlg, FALSE, IDC_UPD_REMOVE, IDC_UPD_INFO_BUTTON);
else
{
EnableWindow(GetDlgItem(hwndDlg, IDC_ADDREMOVE),TRUE);
EnableWindow(GetDlgItem(hwndDlg, IDC_INFO_BUTTON),TRUE);
}
ButtonStatus(hwndDlg, TRUE, IDC_UPD_REMOVE, IDC_UPD_INFO_BUTTON);
}
break;
}
@@ -109,7 +135,8 @@ UpdatesPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
ShowPopupMenu(hwndDlg,
IDR_POPUP_UPD,
GET_X_LPARAM(lParam),
GET_Y_LPARAM(lParam));
GET_Y_LPARAM(lParam),
IDC_UPDATESLIST);
}
break;
}