Dmitry Chapyshev <lentind@yandex.ru>
authorAleksey Bragin <aleksey@reactos.org>
Mon, 8 Oct 2007 15:56:31 +0000 (15:56 +0000)
committerAleksey Bragin <aleksey@reactos.org>
Mon, 8 Oct 2007 15:56:31 +0000 (15:56 +0000)
- 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

13 files changed:
reactos/dll/cpl/appwiz/add.c
reactos/dll/cpl/appwiz/appwiz.c
reactos/dll/cpl/appwiz/appwiz.h
reactos/dll/cpl/appwiz/appwiz.rbuild
reactos/dll/cpl/appwiz/appwiz.rc
reactos/dll/cpl/appwiz/createlink.c
reactos/dll/cpl/appwiz/lang/en-US.rc
reactos/dll/cpl/appwiz/remove.c
reactos/dll/cpl/appwiz/resource.h
reactos/dll/cpl/appwiz/resources/reactos.ico [new file with mode: 0644]
reactos/dll/cpl/appwiz/resources/updates.ico [new file with mode: 0644]
reactos/dll/cpl/appwiz/rossetup.c
reactos/dll/cpl/appwiz/updates.c [new file with mode: 0644]

index a4ab569..a47beda 100644 (file)
@@ -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)
  *     09-25-2007 Modify
  */
 
-#include <windows.h>
-#include <commctrl.h>
-#include <cpl.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <tchar.h>
-#include <process.h>
-
-#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;
index 166f60b..dc52163 100644 (file)
  *     09-25-2007 Modify
  */
 
-#include <windows.h>
-#include <commctrl.h>
-#include <cpl.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <tchar.h>
-#include <process.h>
-
-#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);
 }
index ab55924..8f3c21c 100644 (file)
@@ -1,6 +1,24 @@
 #ifndef __CPL_APPWIZ_H
 #define __CPL_APPWIZ_H
 
+#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 <stdarg.h>
+#include <tchar.h>
+#include <process.h>
+#include <prsht.h>
+#include <shlobj.h>
+#include <objbase.h>
+#include <shobjidl.h>
+#include <shlguid.h>
+
+#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 */
index d907a4c..c8e488f 100644 (file)
@@ -19,5 +19,6 @@
        <file>add.c</file>
        <file>rossetup.c</file>
        <file>createlink.c</file>
+       <file>updates.c</file>
        <file>appwiz.rc</file>
 </module>
index f7eaacf..537f752 100644 (file)
@@ -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"
 
index c0cda41..cac6757 100644 (file)
@@ -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 <windows.h>
-#include <commctrl.h>
-#include <cpl.h>
-#include <prsht.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <tchar.h>
-#include <process.h>
-#include <shlobj.h>
-#include <objbase.h>
-#include <shobjidl.h>
-#include <shlguid.h>
-#include <stdio.h>
-#include "resource.h"
 #include "appwiz.h"
 
 
index 23c3206..6b75382 100644 (file)
@@ -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"
index 054eb91..7d50640 100644 (file)
@@ -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)
  *     09-25-2007 Modify
  */
 
-#include <windows.h>
-#include <commctrl.h>
-#include <cpl.h>
+#include "appwiz.h"
 
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <tchar.h>
-#include <process.h>
+VOID
+CallInformation(HWND hwndDlg)
+{
 
-#include "resource.h"
-#include "appwiz.h"
+}
 
-static VOID
-CallUninstall(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;
     }
        
index de9b4cb..0b08bff 100644 (file)
 #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
 #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 (file)
index 0000000..dd78817
Binary files /dev/null and b/reactos/dll/cpl/appwiz/resources/reactos.ico differ
diff --git a/reactos/dll/cpl/appwiz/resources/updates.ico b/reactos/dll/cpl/appwiz/resources/updates.ico
new file mode 100644 (file)
index 0000000..82b4a1f
Binary files /dev/null and b/reactos/dll/cpl/appwiz/resources/updates.ico differ
index 05a5c94..28e45f5 100644 (file)
@@ -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)
  *     09-25-2007 Modify
  */
 
-#include <windows.h>
-#include <commctrl.h>
-#include <cpl.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <tchar.h>
-#include <process.h>
-
-#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 (file)
index 0000000..3221f6e
--- /dev/null
@@ -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;
+}