added a PopupMenu with Add and Delete functions in screensaver.c
authorChristoph von Wittich <christoph_vw@reactos.org>
Fri, 28 Apr 2006 15:34:58 +0000 (15:34 +0000)
committerChristoph von Wittich <christoph_vw@reactos.org>
Fri, 28 Apr 2006 15:34:58 +0000 (15:34 +0000)
svn path=/trunk/; revision=21751

reactos/dll/cpl/desk/de.rc
reactos/dll/cpl/desk/en.rc
reactos/dll/cpl/desk/resource.h
reactos/dll/cpl/desk/screensaver.c

index cd6e3c8..8ca1b4a 100644 (file)
@@ -55,6 +55,18 @@ BEGIN
                     90,112,8
 END
 
+IDR_POPUP_MENU MENU DISCARDABLE
+BEGIN
+  POPUP ""
+  BEGIN
+       MENUITEM "&Konfigurieren",  ID_MENU_CONFIG
+       MENUITEM "&Vorschau",       ID_MENU_PREVIEW
+       MENUITEM SEPARATOR
+       MENUITEM "&Hinzufügen",     ID_MENU_ADD
+       MENUITEM "&Löschen\tDel",   ID_MENU_DELETE
+  END
+END
+
 IDD_SETTINGS DIALOGEX DISCARDABLE  0, 0, 246, 188
 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
 CAPTION "Einstellungen"
index 3b8d95b..93c9f1e 100644 (file)
@@ -76,6 +76,18 @@ BEGIN
     PUSHBUTTON      "Ad&vanced...",IDC_SETTINGS_ADVANCED,306,165,56,14
 END
 
+IDR_POPUP_MENU MENU DISCARDABLE
+BEGIN
+  POPUP ""
+  BEGIN
+       MENUITEM "&Configure",     ID_MENU_CONFIG
+       MENUITEM "&Preview",       ID_MENU_PREVIEW
+       MENUITEM SEPARATOR
+       MENUITEM "&Add",           ID_MENU_ADD
+       MENUITEM "&Delete\tDel",   ID_MENU_DELETE
+  END
+END
+
 STRINGTABLE 
 BEGIN
     IDS_CPLNAME "Display"
index fe54dc4..8907226 100644 (file)
 #define IDC_SETTINGS_RESOLUTION_TEXT 204
 #define IDC_SETTINGS_ADVANCED        205
 
+#define IDR_POPUP_MENU                         2010
+#define ID_MENU_CONFIG                         2011
+#define ID_MENU_PREVIEW                                2012
+#define ID_MENU_ADD                                    2013
+#define ID_MENU_DELETE                         2014
+
+
 /* Settings Page */
 
 #define IDS_PIXEL                              2301
index c75e96a..86d8525 100644 (file)
@@ -27,6 +27,7 @@ ScreenSaverItem g_ScreenSaverItems[MAX_SCREENSAVERS];
 HWND g_hScreenBackgroundPage = NULL;
 HWND g_hScreengroundList = NULL;
 HWND ControlScreenSaverIsSecure = NULL;
+HMENU g_hPopupMenu = NULL;
 
 void ListViewItemAreChanged(int itemIndex)
 {
@@ -38,6 +39,57 @@ void ListViewItemAreChanged(int itemIndex)
     PropSheet_Changed(GetParent(g_hScreenBackgroundPage), g_hScreenBackgroundPage);
 }
 
+void
+ScreensaverConfig ()
+{
+    /*
+       /p:<hwnd>  Run in preview 
+       /s         Run normal
+       /c:<hwnd>  Run configuration, hwnd is handle of calling window
+       /a         Run change password
+
+    */
+
+    WCHAR szCmdline[2048];                                                
+    STARTUPINFO si;
+    PROCESS_INFORMATION pi;                        
+    swprintf(szCmdline, L"%s /c",g_ScreenSaverItems[ImageListSelection].szFilename);
+
+    ZeroMemory( &si, sizeof(si) );
+    si.cb = sizeof(si);
+    ZeroMemory( &pi, sizeof(pi) );                         
+   if(CreateProcess( NULL,  szCmdline, NULL, NULL, FALSE,  0,  NULL,NULL,&si, &pi )) 
+   {                          
+      CloseHandle( pi.hProcess );
+      CloseHandle( pi.hThread );                       
+   }                       
+}
+
+void
+ScreensaverPreview ()
+{
+    /*
+       /p:<hwnd>  Run in preview 
+       /s         Run normal
+       /c:<hwnd>  Run configuration, hwnd is handle of calling window
+       /a         Run change password
+    */
+
+    WCHAR szCmdline[2048];                                                
+    STARTUPINFO si;
+    PROCESS_INFORMATION pi;                        
+    swprintf(szCmdline, L"%s /p",g_ScreenSaverItems[ImageListSelection].szFilename);
+
+    ZeroMemory( &si, sizeof(si) );
+    si.cb = sizeof(si);
+    ZeroMemory( &pi, sizeof(pi) );                         
+   if(CreateProcess( NULL,  szCmdline, NULL, NULL, FALSE,  0,  NULL,NULL,&si, &pi )) 
+   {                          
+      CloseHandle( pi.hProcess );
+      CloseHandle( pi.hThread );                       
+   }                       
+ }
+
 INT_PTR
 CALLBACK
 ScreenSaverPageProc(HWND hwndDlg,
@@ -48,13 +100,23 @@ ScreenSaverPageProc(HWND hwndDlg,
     g_hScreenBackgroundPage = hwndDlg;
     
     switch(uMsg) {
+        case WM_DESTROY:
+        {
+            DestroyMenu(g_hPopupMenu);
+            break;
+        }
         case WM_INITDIALOG:
         {
             g_hScreengroundList = GetDlgItem(g_hScreenBackgroundPage, IDC_SCREENS_CHOICES);
             SendMessage(GetDlgItem(g_hScreenBackgroundPage, IDC_SCREENS_TIME), UDM_SETRANGE, 0, MAKELONG ((short) 240, (short) 0));
             AddListViewItems2();
+
+            g_hPopupMenu = LoadMenu(hApplet, MAKEINTRESOURCE(IDR_POPUP_MENU));
+            g_hPopupMenu = GetSubMenu(g_hPopupMenu, 0);
+
             CheckRegScreenSaverIsSecure();
         } break;
+
         case WM_COMMAND:
         {
             DWORD controlId = LOWORD(wParam);
@@ -69,65 +131,40 @@ ScreenSaverPageProc(HWND hwndDlg,
                 case IDC_SCREENS_TESTSC: // Screensaver Preview
                 {
                     if(command == BN_CLICKED)
-                    {
-                        /*
-                           /p:<hwnd>  Run in preview 
-                           /s         Run normal
-                           /c:<hwnd>  Run configuration, hwnd is handle of calling window
-                           /a         Run change password
-                        */
-
-                        WCHAR szCmdline[2048];                                                
-                        STARTUPINFO si;
-                        PROCESS_INFORMATION pi;                        
-                        swprintf(szCmdline, L"%s /p",g_ScreenSaverItems[ImageListSelection].szFilename);
-
-                        ZeroMemory( &si, sizeof(si) );
-                        si.cb = sizeof(si);
-                        ZeroMemory( &pi, sizeof(pi) );                         
-                       if(CreateProcess( NULL,  szCmdline, NULL, NULL, FALSE,  0,  NULL,NULL,&si, &pi )) 
-                       {                          
-                          CloseHandle( pi.hProcess );
-                          CloseHandle( pi.hThread );                       
-                       }                       
-                    }
-                        
-                } break;
-    /*            case IDC_SCREENS_DELETE: // Delete Screensaver
+                        ScreensaverPreview();   
+                    break;
+                } 
+                case ID_MENU_PREVIEW:
+                {
+                    ScreensaverPreview();
+                    break;
+                }
+                case ID_MENU_CONFIG:
                 {
+                    ScreensaverConfig();
+                    break;
+                }
+                case ID_MENU_DELETE: // Delete Screensaver
+                {
+                    LPSHFILEOPSTRUCT fos;
+
                     if(command == BN_CLICKED) {
-                        if (ImageListSelection == 0) // Can NOT delete None sry:-)
+                        if (ImageListSelection == 0) // Can NOT delete anything :-)
                            return FALSE;
-                        DeleteFileW(g_ScreenSaverItems[ImageListSelection].szFilename);
+
+                        fos->hwnd = hwndDlg;
+                        fos->wFunc = FO_DELETE;
+                        fos->fFlags = 0;
+                        fos->pFrom = g_ScreenSaverItems[ImageListSelection].szFilename;
+                        SHFileOperationW(fos);
                     }
-                } break; */
+                } break; 
                 case IDC_SCREENS_SETTINGS: // Screensaver Settings
                 {
                     if(command == BN_CLICKED)
-                    {   
-                        /*
-                           /p:<hwnd>  Run in preview 
-                           /s         Run normal
-                           /c:<hwnd>  Run configuration, hwnd is handle of calling window
-                           /a         Run change password
-
-                        */
-
-                        WCHAR szCmdline[2048];                                                
-                        STARTUPINFO si;
-                        PROCESS_INFORMATION pi;                        
-                        swprintf(szCmdline, L"%s /c",g_ScreenSaverItems[ImageListSelection].szFilename);
-
-                        ZeroMemory( &si, sizeof(si) );
-                        si.cb = sizeof(si);
-                        ZeroMemory( &pi, sizeof(pi) );                         
-                       if(CreateProcess( NULL,  szCmdline, NULL, NULL, FALSE,  0,  NULL,NULL,&si, &pi )) 
-                       {                          
-                          CloseHandle( pi.hProcess );
-                          CloseHandle( pi.hThread );                       
-                       }                       
-                    }                       
-                } break;
+                        ScreensaverConfig();
+                    break;
+                }
                 case IDC_SCREENS_USEPASSCHK: // Screensaver Is Secure
                 {
                     if(command == BN_CLICKED)
@@ -143,12 +180,21 @@ ScreenSaverPageProc(HWND hwndDlg,
         case WM_NOTIFY:
         {
            LPNMHDR lpnm = (LPNMHDR)lParam;
-                
+           LPNMITEMACTIVATE nmia = (LPNMITEMACTIVATE) lParam;
+           RECT rc;
+
            switch(lpnm->code) {   
              case PSN_APPLY:
              {
                 return TRUE;
              } break;
+             case NM_RCLICK:
+             {
+                GetWindowRect(g_hScreengroundList, &rc);
+                TrackPopupMenuEx(g_hPopupMenu, TPM_RIGHTBUTTON,
+                                 rc.left + nmia->ptAction.x, rc.top + nmia->ptAction.y, hwndDlg, NULL);
+                break;
+             }
              case LVN_ITEMCHANGED:
              {
                 LPNMLISTVIEW nm = (LPNMLISTVIEW)lParam;