From 73b6c28cf839ae12f3b17c1737f38329e995745e Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Mon, 8 Oct 2007 15:56:31 +0000 Subject: [PATCH] Dmitry Chapyshev - Modify/Remove action: Wait for the process completion and only then become active again (like Windows' AppWiz does) - Move Updates to another tab - Move all include directives to appwiz.h - Add context menu for applications list - Slightly change this applet's design - Add an icon for ReactOS setup and Update tabs - Add a working Download! button. This button is active only if Download!.exe exists in system32 directory when appwiz.cpl starts - Other small changes svn path=/trunk/; revision=29458 --- reactos/dll/cpl/appwiz/add.c | 56 ++++-- reactos/dll/cpl/appwiz/appwiz.c | 18 +- reactos/dll/cpl/appwiz/appwiz.h | 49 +++++ reactos/dll/cpl/appwiz/appwiz.rbuild | 1 + reactos/dll/cpl/appwiz/appwiz.rc | 2 + reactos/dll/cpl/appwiz/createlink.c | 22 +-- reactos/dll/cpl/appwiz/lang/en-US.rc | 82 +++++++- reactos/dll/cpl/appwiz/remove.c | 191 +++++++++++++------ reactos/dll/cpl/appwiz/resource.h | 45 ++++- reactos/dll/cpl/appwiz/resources/reactos.ico | Bin 0 -> 9774 bytes reactos/dll/cpl/appwiz/resources/updates.ico | Bin 0 -> 9774 bytes reactos/dll/cpl/appwiz/rossetup.c | 13 +- reactos/dll/cpl/appwiz/updates.c | 118 ++++++++++++ 13 files changed, 468 insertions(+), 129 deletions(-) create mode 100644 reactos/dll/cpl/appwiz/resources/reactos.ico create mode 100644 reactos/dll/cpl/appwiz/resources/updates.ico create mode 100644 reactos/dll/cpl/appwiz/updates.c diff --git a/reactos/dll/cpl/appwiz/add.c b/reactos/dll/cpl/appwiz/add.c index a4ab569d52a..a47beda6ebb 100644 --- a/reactos/dll/cpl/appwiz/add.c +++ b/reactos/dll/cpl/appwiz/add.c @@ -19,7 +19,7 @@ /* * * PROJECT: ReactOS Software Control Panel - * FILE: dll/cpl/appwiz/appwiz.c + * FILE: dll/cpl/appwiz/add.c * PURPOSE: ReactOS Software Control Panel * PROGRAMMERS: Gero Kuehn (reactos.filter@gkware.com) * Dmitry Chapyshev (lentind@yandex.ru) @@ -28,19 +28,40 @@ * 09-25-2007 Modify */ -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "resource.h" #include "appwiz.h" +BOOL +CheckDownload(VOID) +{ + TCHAR Buf[MAX_PATH]; + if(!GetSystemDirectory(Buf,MAX_PATH)) return FALSE; + lstrcat((LPTSTR)Buf, L"\\downloader.exe"); + if (GetFileAttributes(Buf) != 0xFFFFFFFF) return TRUE; + return FALSE; +} + +BOOL +LaunchDownload(HWND hwndDlg) +{ + STARTUPINFO si; + PROCESS_INFORMATION pi; + TCHAR Buf[MAX_PATH]; + + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + ZeroMemory(&pi, sizeof(pi)); + + if(!GetSystemDirectory(Buf,MAX_PATH)) return FALSE; + lstrcat((LPTSTR)Buf, L"\\downloader.exe"); + + if(CreateProcess(NULL,Buf,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)) + { + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + return TRUE; + } + return FALSE; +} /* Property page dialog callback */ INT_PTR CALLBACK @@ -54,7 +75,16 @@ AddPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { case WM_INITDIALOG: EnableWindow(GetDlgItem(hwndDlg, IDC_INSTALL), FALSE); - break; + if (CheckDownload()) EnableWindow(GetDlgItem(hwndDlg, IDC_ADD_DOWNLOAD_BUTTON), TRUE); + break; + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDC_ADD_DOWNLOAD_BUTTON: + LaunchDownload(hwndDlg); + break; + } + break; } return FALSE; diff --git a/reactos/dll/cpl/appwiz/appwiz.c b/reactos/dll/cpl/appwiz/appwiz.c index 166f60be86c..dc52163471c 100644 --- a/reactos/dll/cpl/appwiz/appwiz.c +++ b/reactos/dll/cpl/appwiz/appwiz.c @@ -28,17 +28,6 @@ * 09-25-2007 Modify */ -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "resource.h" #include "appwiz.h" #define NUM_APPLETS (1) @@ -71,7 +60,7 @@ InitPropSheetPage(PROPSHEETPAGE *psp, WORD idDlg, DLGPROC DlgProc) LONG CALLBACK SystemApplet(VOID) { - PROPSHEETPAGE psp[3]; + PROPSHEETPAGE psp[4]; PROPSHEETHEADER psh; TCHAR Caption[1024]; @@ -90,8 +79,9 @@ SystemApplet(VOID) psh.pfnCallback = NULL; InitPropSheetPage(&psp[0], IDD_PROPPAGEINSTALL, (DLGPROC) RemovePageProc); - InitPropSheetPage(&psp[1], IDD_PROPPAGEADD, (DLGPROC) AddPageProc); - InitPropSheetPage(&psp[2], IDD_PROPPAGEROSSETUP, (DLGPROC) RosPageProc); + InitPropSheetPage(&psp[1], IDD_PROPPAGEUPDATES, (DLGPROC) UpdatesPageProc); + InitPropSheetPage(&psp[2], IDD_PROPPAGEADD, (DLGPROC) AddPageProc); + InitPropSheetPage(&psp[3], IDD_PROPPAGEROSSETUP, (DLGPROC) RosPageProc); return (LONG)(PropertySheet(&psh) != -1); } diff --git a/reactos/dll/cpl/appwiz/appwiz.h b/reactos/dll/cpl/appwiz/appwiz.h index ab55924bb58..8f3c21cb683 100644 --- a/reactos/dll/cpl/appwiz/appwiz.h +++ b/reactos/dll/cpl/appwiz/appwiz.h @@ -1,6 +1,24 @@ #ifndef __CPL_APPWIZ_H #define __CPL_APPWIZ_H +#include +#include /* GET_X/Y_LPARAM */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "resource.h" + typedef LONG (CALLBACK *CPLAPPLET_PROC)(VOID); typedef struct @@ -26,6 +44,33 @@ 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); + +VOID +AddItemsToViewControl(HWND hwndDlg); + +VOID +FindItems(HWND hwndDlg); + +VOID +CallUninstall(HWND hwndDlg, UINT Control, BOOL isUpdate); + +VOID +GetCurrentView(HWND hwndDlg); + +VOID +CallInformation(HWND hwndDlg); + +VOID +ShowPopupMenu(HWND hwndDlg, UINT ResMenu, INT xPos, INT yPos); + /* add.c */ INT_PTR CALLBACK AddPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); @@ -44,6 +89,10 @@ FinishDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); LONG CALLBACK NewLinkHere(HWND hwndCPl, UINT uMsg, LPARAM lParam1, LPARAM lParam2); +/* updates.c */ +INT_PTR CALLBACK +UpdatesPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); + void ShowLastWin32Error(HWND hWndOwner); #endif /* __CPL_APPWIZ_H */ diff --git a/reactos/dll/cpl/appwiz/appwiz.rbuild b/reactos/dll/cpl/appwiz/appwiz.rbuild index d907a4cd24d..c8e488fc46f 100644 --- a/reactos/dll/cpl/appwiz/appwiz.rbuild +++ b/reactos/dll/cpl/appwiz/appwiz.rbuild @@ -19,5 +19,6 @@ add.c rossetup.c createlink.c + updates.c appwiz.rc diff --git a/reactos/dll/cpl/appwiz/appwiz.rc b/reactos/dll/cpl/appwiz/appwiz.rc index f7eaacfa832..537f752d3bd 100644 --- a/reactos/dll/cpl/appwiz/appwiz.rc +++ b/reactos/dll/cpl/appwiz/appwiz.rc @@ -21,6 +21,8 @@ IDI_INSTICO ICON "resources/1502.ico" IDI_RECBINICO ICON "resources/1503.ico" IDI_DOWNLOADICO ICON "resources/1504.ico" IDI_APPINETICO ICON "resources/1505.ico" +IDI_UPDATES ICON "resources/updates.ico" +IDI_REACTOS ICON "resources/reactos.ico" IDB_WATERMARK BITMAP "resources/watermark.bmp" diff --git a/reactos/dll/cpl/appwiz/createlink.c b/reactos/dll/cpl/appwiz/createlink.c index c0cda414331..cac6757f0a0 100644 --- a/reactos/dll/cpl/appwiz/createlink.c +++ b/reactos/dll/cpl/appwiz/createlink.c @@ -1,27 +1,15 @@ - /* $Id: appwiz.c 29364 2007-10-02 23:34:00Z janderwald $ * * PROJECT: ReactOS Software Control Panel * FILE: dll/cpl/appwiz/createlink.c * PURPOSE: ReactOS Software Control Panel - * PROGRAMMER: Johannes Anderwald + * PROGRAMMER: Gero Kuehn (reactos.filter@gkware.com) + * Dmitry Chapyshev (lentind@yandex.ru) + * Johannes Anderwald + * UPDATE HISTORY: + * 06-17-2004 Created */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "resource.h" #include "appwiz.h" diff --git a/reactos/dll/cpl/appwiz/lang/en-US.rc b/reactos/dll/cpl/appwiz/lang/en-US.rc index 23c32060e4d..6b753824e00 100644 --- a/reactos/dll/cpl/appwiz/lang/en-US.rc +++ b/reactos/dll/cpl/appwiz/lang/en-US.rc @@ -1,5 +1,23 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +IDR_POPUP_APP MENU +BEGIN + POPUP "popup" + BEGIN + MENUITEM "Modify/&Remove",ID_APP_MODIFYREMOVE + MENUITEM "&Information", ID_APP_INFORMATION + END +END + +IDR_POPUP_UPD MENU +BEGIN + POPUP "popup" + BEGIN + MENUITEM "&Remove", ID_UPD_REMOVE + MENUITEM "&Information", ID_UPD_INFORMATION + END +END + IDD_PROPPAGEINSTALL DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Change or Remove Programs" @@ -7,14 +25,29 @@ 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 - CONTROL "&Show updates",IDC_SHOWUPDATES,"button",BS_AUTOCHECKBOX | WS_TABSTOP,PROPSHEETPADDING, 30, 100, 14 - LTEXT "Find:",-1,172,33,50,14 - EDITTEXT IDC_FIND_EDIT, 193, 30, 180, 14, WS_VISIBLE | WS_TABSTOP + 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 "Modify/&Remove", IDC_ADDREMOVE, PROPSHEETPADDING, 210, 80, 14, WS_DISABLED PUSHBUTTON "&Information", IDC_INFO_BUTTON, PROPSHEETPADDING+85, 210, 80, 14, WS_DISABLED - LTEXT "View:",-1,253,212,40,8 - COMBOBOX IDC_VIEW_COMBO, 280, 210, 94, 80, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL +END + +IDD_PROPPAGEUPDATES DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION +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 END IDD_PROPPAGEADD DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT @@ -28,12 +61,12 @@ BEGIN LTEXT "", -1, PROPSHEETPADDING, 70, PROPSHEETWIDTH-12, 1, NOT WS_GROUP | SS_SUNKEN ICON IDI_DOWNLOADICO,-1,PROPSHEETPADDING,80,32,32 LTEXT "To download and install new applications, press ""Download !"".",-1,36,83,PROPSHEETWIDTH-48,17 - PUSHBUTTON "&Download !", IDC_INSTALL, PROPSHEETWIDTH-(90), 125, 80, 14 + PUSHBUTTON "&Download !", IDC_ADD_DOWNLOAD_BUTTON, PROPSHEETWIDTH-(90), 125, 80, 14, WS_DISABLED LTEXT "", -1, PROPSHEETPADDING, 150, PROPSHEETWIDTH-12, 1, NOT WS_GROUP | SS_SUNKEN ICON IDI_APPINETICO,-1,PROPSHEETPADDING,160,32,32 LTEXT "Press ""Find in the Internet"" button in order to search for new applications available via Internet connection.",-1,36,161,PROPSHEETWIDTH-48,17 - PUSHBUTTON "&Properties...", IDC_INSTALL, PROPSHEETWIDTH-(175), 205, 80, 14 - PUSHBUTTON "&Find in the Internet", IDC_INSTALL, PROPSHEETWIDTH-(90), 205, 80, 14 + PUSHBUTTON "&Properties...", IDC_ADD_PROP_BUTTON, PROPSHEETWIDTH-(175), 205, 80, 14, WS_DISABLED + PUSHBUTTON "&Find in the Internet", IDC_ADD_FIND_BUTTON, PROPSHEETWIDTH-(90), 205, 80, 14, WS_DISABLED END IDD_PROPPAGEROSSETUP DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT @@ -41,7 +74,8 @@ STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION 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 END IDD_FIRSTPAGE DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT @@ -85,6 +119,35 @@ BEGIN LTEXT "Click Finish to create the shortcut.", -1, 120, 50, 150, 10 END +IDD_INFORMATION DIALOG 5, 100, 269, 200 +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 +END + STRINGTABLE BEGIN IDS_CPLSYSTEMNAME "Add/Remove Programs" @@ -94,6 +157,7 @@ BEGIN 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" IDS_APPLIST "Currently installed programs" + IDS_UPDATESLIST "Currently installed updates" IDS_LARGEICONS "Large Icons" IDS_LIST "List" IDS_DETAILS "Details" diff --git a/reactos/dll/cpl/appwiz/remove.c b/reactos/dll/cpl/appwiz/remove.c index 054eb91cfe3..7d50640b9de 100644 --- a/reactos/dll/cpl/appwiz/remove.c +++ b/reactos/dll/cpl/appwiz/remove.c @@ -19,7 +19,7 @@ /* * * PROJECT: ReactOS Software Control Panel - * FILE: dll/cpl/appwiz/appwiz.c + * FILE: dll/cpl/appwiz/remove.c * PURPOSE: ReactOS Software Control Panel * PROGRAMMERS: Gero Kuehn (reactos.filter@gkware.com) * Dmitry Chapyshev (lentind@yandex.ru) @@ -28,21 +28,16 @@ * 09-25-2007 Modify */ -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "resource.h" #include "appwiz.h" -static VOID -CallUninstall(HWND hwndDlg) +VOID +CallInformation(HWND hwndDlg) +{ + +} + +VOID +CallUninstall(HWND hwndDlg, UINT Control, BOOL isUpdate) { STARTUPINFO si; PROCESS_INFORMATION pi; @@ -53,7 +48,7 @@ CallUninstall(HWND hwndDlg) DWORD dwSize; TCHAR Buf[256],Title[256]; - 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) { LoadString(hApplet, IDS_NOITEM_SELECTED, Buf, sizeof(Buf) / sizeof(TCHAR)); @@ -87,8 +82,12 @@ CallUninstall(HWND hwndDlg) si.wShowWindow = SW_SHOW; if (CreateProcess(NULL,pszUninstallString,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)) { + WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); + // Update software list + (void)ListView_DeleteAllItems(GetDlgItem(hwndDlg, IDC_SOFTWARELIST)); + FillSoftwareList(hwndDlg, isUpdate); } } else @@ -103,7 +102,7 @@ CallUninstall(HWND hwndDlg) } } -static VOID +VOID AddListColumn(HWND hList, LPTSTR Caption) { LV_COLUMN dummy; @@ -166,11 +165,10 @@ AddItemToList(HWND hwndDlg, LPARAM hSubKey, LPTSTR pszDisplayName, INT ItemIndex (void)ListView_SetImageList(GetDlgItem(hwndDlg, IDC_SOFTWARELIST),hImgListSmall,LVSIL_SMALL); (void)ListView_SetImageList(GetDlgItem(hwndDlg, IDC_SOFTWARELIST),hImgListLarge,LVSIL_NORMAL); - } -static VOID -FillSoftwareList(HWND hwndDlg) +VOID +FillSoftwareList(HWND hwndDlg, BOOL bShowUpdates) { TCHAR pszName[MAX_PATH]; TCHAR pszDisplayName[MAX_PATH]; @@ -183,11 +181,8 @@ FillSoftwareList(HWND hwndDlg) DWORD dwValue = 0; BOOL bIsUpdate = FALSE; BOOL bIsSystemComponent = FALSE; - BOOL bShowUpdates = FALSE; INT ItemIndex = 0; TCHAR Buf[256],Title[256]; - - bShowUpdates = (SendMessage(GetDlgItem(hwndDlg, IDC_SHOWUPDATES), BM_GETCHECK, 0, 0) == BST_CHECKED); if (RegOpenKey(HKEY_LOCAL_MACHINE, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall"), @@ -240,7 +235,7 @@ FillSoftwareList(HWND hwndDlg) (LPBYTE)pszDisplayName, &dwSize) == ERROR_SUCCESS) { - if ((!bIsUpdate) && (!bIsSystemComponent)) + if ((!bIsUpdate) && (!bIsSystemComponent) && (!bShowUpdates)) { AddItemToList(hwndDlg, (LPARAM)hSubKey, (LPTSTR)pszDisplayName, ItemIndex); } @@ -258,7 +253,7 @@ FillSoftwareList(HWND hwndDlg) RegCloseKey(hKey); } -static VOID +VOID AddItemsToViewControl(HWND hwndDlg) { TCHAR Buf[256]; @@ -304,7 +299,7 @@ AddItemsToViewControl(HWND hwndDlg) (LPARAM)Buf); } -static VOID +VOID FindItems(HWND hwndDlg) { HWND hList; @@ -344,6 +339,91 @@ FindItems(HWND hwndDlg) } } +VOID +GetCurrentView(HWND hwndDlg) +{ + int nCurrSel; + nCurrSel = (int)SendMessage(GetDlgItem(hwndDlg, IDC_VIEW_COMBO), + CB_GETCURSEL, + (WPARAM)0, + (LPARAM)0); + switch (nCurrSel) + { + case 0: + SetWindowLong(GetDlgItem(hwndDlg, IDC_SOFTWARELIST), + 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), + 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), + 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) +{ + INT nIndex; + nIndex = (INT)SendMessage(GetDlgItem(hwndDlg, IDC_SOFTWARELIST),LVM_GETNEXTITEM,-1,LVNI_FOCUSED); + if ( nIndex != -1) + { + POINT pt; + RECT lvRect; + HMENU hMenu; + + GetCursorPos(&pt); + + GetWindowRect(GetDlgItem(hwndDlg, IDC_SOFTWARELIST), &lvRect); + if (PtInRect(&lvRect, pt)) + { + hMenu = GetSubMenu(LoadMenu(hApplet, MAKEINTRESOURCE(ResMenu)),0); + TrackPopupMenuEx(hMenu, + TPM_RIGHTBUTTON, + xPos, + yPos, + hwndDlg, + NULL); + DestroyMenu(hMenu); + } + } +} + +INT_PTR CALLBACK +InfoPropDlgProc(HWND hDlg, + UINT message, + WPARAM wParam, + LPARAM lParam) +{ + UNREFERENCED_PARAMETER(lParam); + + switch (message) + { + case WM_INITDIALOG: + { + + } + case WM_COMMAND: + { + switch (LOWORD(wParam)) + { + case IDOK: + + break; + case IDCANCEL: + EndDialog(hDlg,LOWORD(wParam)); + break; + } + } + break; + } + + return FALSE; +} + /* Property page dialog callback */ INT_PTR CALLBACK RemovePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) @@ -357,7 +437,7 @@ RemovePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) AddItemsToViewControl(hwndDlg); LoadString(hApplet, IDS_APPLIST, Buf, sizeof(Buf) / sizeof(TCHAR)); AddListColumn(GetDlgItem(hwndDlg, IDC_SOFTWARELIST),Buf); - FillSoftwareList(hwndDlg); + FillSoftwareList(hwndDlg, FALSE); break; case WM_COMMAND: @@ -369,51 +449,34 @@ RemovePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) FindItems(hwndDlg); } break; - case IDC_SHOWUPDATES: - if (HIWORD(wParam) == BN_CLICKED) - { - SendMessage(GetDlgItem(hwndDlg, IDC_SOFTWARELIST),LVM_DELETEALLITEMS,0,0); - FillSoftwareList(hwndDlg); - } - break; + case ID_APP_MODIFYREMOVE: case IDC_ADDREMOVE: - CallUninstall(hwndDlg); + CallUninstall(hwndDlg, IDC_SOFTWARELIST, FALSE); break; + case ID_APP_INFORMATION: + case IDC_INFO_BUTTON: + DialogBox(hApplet, + MAKEINTRESOURCE(IDD_INFORMATION), + hwndDlg, + InfoPropDlgProc); + break; case IDC_VIEW_COMBO: if (HIWORD(wParam) == CBN_SELCHANGE) { - int nCurrSel; - nCurrSel = (int)SendMessage(GetDlgItem(hwndDlg, IDC_VIEW_COMBO), - CB_GETCURSEL, - (WPARAM)0, - (LPARAM)0); - switch (nCurrSel) - { - case 0: - SetWindowLong(GetDlgItem(hwndDlg, IDC_SOFTWARELIST), - 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), - 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), - GWL_STYLE,LVS_REPORT | LVS_SORTASCENDING | LVS_AUTOARRANGE | LVS_SINGLESEL | WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP); - break; - } + GetCurrentView(hwndDlg); } break; } break; case WM_NOTIFY: + { switch (LOWORD(wParam)) { case IDC_SOFTWARELIST: switch (((LPNMHDR)lParam)->code) { case NM_DBLCLK: - CallUninstall(hwndDlg); + CallUninstall(hwndDlg, IDC_SOFTWARELIST, FALSE); break; case NM_CLICK: { @@ -422,16 +485,34 @@ RemovePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) if (nIndex == -1) { EnableWindow(GetDlgItem(hwndDlg, IDC_ADDREMOVE),FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_INFO_BUTTON),FALSE); } else { EnableWindow(GetDlgItem(hwndDlg, IDC_ADDREMOVE),TRUE); + EnableWindow(GetDlgItem(hwndDlg, IDC_INFO_BUTTON),TRUE); } } break; } break; } + } + 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)); + } break; } diff --git a/reactos/dll/cpl/appwiz/resource.h b/reactos/dll/cpl/appwiz/resource.h index de9b4cb1241..0b08bff0da5 100644 --- a/reactos/dll/cpl/appwiz/resource.h +++ b/reactos/dll/cpl/appwiz/resource.h @@ -18,6 +18,17 @@ #define IDI_RECBINICO 1503 #define IDI_DOWNLOADICO 1504 #define IDI_APPINETICO 1505 +#define IDI_UPDATES 1506 +#define IDI_REACTOS 1507 + +/* menus */ +#define IDR_POPUP_APP 3000 +#define IDR_POPUP_UPD 3001 + +#define ID_APP_MODIFYREMOVE 3500 +#define ID_APP_INFORMATION 3501 +#define ID_UPD_REMOVE 3502 +#define ID_UPD_INFORMATION 3503 /* dialogs */ #define IDD_PROPPAGEINSTALL 200 @@ -25,6 +36,8 @@ #define IDD_PROPPAGEADD 202 #define IDD_SHORTCUT_LOCATION 203 #define IDD_SHORTCUT_FINISH 204 +#define IDD_PROPPAGEUPDATES 205 +#define IDD_INFORMATION 206 /* bitmaps */ #define IDB_WATERMARK 5001 @@ -40,20 +53,34 @@ #define IDS_LARGEICONS 2007 #define IDS_LIST 2008 #define IDS_DETAILS 2009 -#define IDS_CREATE_SHORTCUT 2010 -#define IDS_ERROR_NOT_FOUND 2011 +#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 /* controls */ #define IDC_INSTALL 101 #define IDC_SOFTWARELIST 102 #define IDC_ADDREMOVE 103 -#define IDC_SHOWUPDATES 104 -#define IDC_FIND_EDIT 105 -#define IDC_INFO_BUTTON 106 -#define IDC_VIEW_COMBO 107 -#define IDC_SHORTCUT_LOCATION 108 -#define IDC_SHORTCUT_BROWSE 109 -#define IDC_SHORTCUT_NAME 110 +#define IDC_FIND_EDIT 104 +#define IDC_INFO_BUTTON 105 +#define IDC_VIEW_COMBO 106 +#define IDC_SHORTCUT_LOCATION 107 +#define IDC_SHORTCUT_BROWSE 108 +#define IDC_SHORTCUT_NAME 109 +#define IDC_ADD_DOWNLOAD_BUTTON 110 +#define IDC_ADD_FIND_BUTTON 111 +#define IDC_ADD_PROP_BUTTON 112 #endif /* __CPL_RESOURCE_H */ diff --git a/reactos/dll/cpl/appwiz/resources/reactos.ico b/reactos/dll/cpl/appwiz/resources/reactos.ico new file mode 100644 index 0000000000000000000000000000000000000000..dd7881716aedf0415d039b2bd87369d6e6335570 GIT binary patch literal 9774 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 literal 0 HcmV?d00001 diff --git a/reactos/dll/cpl/appwiz/rossetup.c b/reactos/dll/cpl/appwiz/rossetup.c index 05a5c94e5a0..28e45f5ad73 100644 --- a/reactos/dll/cpl/appwiz/rossetup.c +++ b/reactos/dll/cpl/appwiz/rossetup.c @@ -19,7 +19,7 @@ /* * * PROJECT: ReactOS Software Control Panel - * FILE: dll/cpl/appwiz/appwiz.c + * FILE: dll/cpl/appwiz/rossetup.c * PURPOSE: ReactOS Software Control Panel * PROGRAMMERS: Gero Kuehn (reactos.filter@gkware.com) * Dmitry Chapyshev (lentind@yandex.ru) @@ -28,17 +28,6 @@ * 09-25-2007 Modify */ -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "resource.h" #include "appwiz.h" diff --git a/reactos/dll/cpl/appwiz/updates.c b/reactos/dll/cpl/appwiz/updates.c new file mode 100644 index 00000000000..3221f6e369f --- /dev/null +++ b/reactos/dll/cpl/appwiz/updates.c @@ -0,0 +1,118 @@ +/* + * ReactOS + * Copyright (C) 2004 ReactOS Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +/* + * + * PROJECT: ReactOS Software Control Panel + * FILE: dll/cpl/appwiz/updates.c + * PURPOSE: ReactOS Software Control Panel + * PROGRAMMERS: Gero Kuehn (reactos.filter@gkware.com) + * Dmitry Chapyshev (lentind@yandex.ru) + * UPDATE HISTORY: + * 06-17-2004 Created + * 09-25-2007 Modify + */ + +#include "appwiz.h" + +/* Property page dialog callback */ +INT_PTR CALLBACK +UpdatesPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + UNREFERENCED_PARAMETER(lParam); + UNREFERENCED_PARAMETER(wParam); + UNREFERENCED_PARAMETER(hwndDlg); + TCHAR Buf[256]; + + switch (uMsg) + { + case WM_INITDIALOG: + AddItemsToViewControl(hwndDlg); + LoadString(hApplet, IDS_UPDATESLIST, Buf, sizeof(Buf) / sizeof(TCHAR)); + AddListColumn(GetDlgItem(hwndDlg, IDC_SOFTWARELIST),Buf); + FillSoftwareList(hwndDlg, TRUE); + break; + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDC_FIND_EDIT: + if (HIWORD(wParam) == EN_CHANGE) + { + FindItems(hwndDlg); + } + break; + case ID_UPD_INFORMATION: + case IDC_INFO_BUTTON: + DialogBox(hApplet, + MAKEINTRESOURCE(IDD_INFORMATION), + hwndDlg, + InfoPropDlgProc); + break; + case ID_UPD_REMOVE: + case IDC_ADDREMOVE: + CallUninstall(hwndDlg, IDC_SOFTWARELIST, TRUE); + break; + case IDC_VIEW_COMBO: + if (HIWORD(wParam) == CBN_SELCHANGE) + { + GetCurrentView(hwndDlg); + } + break; + } + break; + case WM_NOTIFY: + switch (LOWORD(wParam)) + { + case IDC_SOFTWARELIST: + switch (((LPNMHDR)lParam)->code) + { + case NM_DBLCLK: + CallUninstall(hwndDlg, IDC_SOFTWARELIST, 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); + } + else + { + EnableWindow(GetDlgItem(hwndDlg, IDC_ADDREMOVE),TRUE); + EnableWindow(GetDlgItem(hwndDlg, IDC_INFO_BUTTON),TRUE); + } + } + break; + } + break; + } + break; + case WM_CONTEXTMENU: + { + ShowPopupMenu(hwndDlg, + IDR_POPUP_UPD, + GET_X_LPARAM(lParam), + GET_Y_LPARAM(lParam)); + } + break; + } + + return FALSE; +}