[RAPPS_NEW]
[reactos.git] / reactos / base / applications / rapps_new / winmain.cpp
index 59aec0a..8d4b8c8 100644 (file)
@@ -17,7 +17,6 @@
 
 HWND hMainWnd;
 HINSTANCE hInst;
-HIMAGELIST hImageTreeView = NULL;
 INT SelectedEnumType = ENUM_ALL_COMPONENTS;
 SETTINGS_INFO SettingsInfo;
 
@@ -285,115 +284,6 @@ UpdateApplicationsList(INT EnumType)
     SendMessage(hListView, WM_SETREDRAW, TRUE, 0);
 }
 
-VOID
-InitApplicationsList(VOID)
-{
-    WCHAR szText[MAX_STR_LEN];
-
-    /* Add columns to ListView */
-    LoadStringW(hInst, IDS_APP_NAME, szText, _countof(szText));
-    ListViewAddColumn(0, szText, 200, LVCFMT_LEFT);
-
-    LoadStringW(hInst, IDS_APP_INST_VERSION, szText, _countof(szText));
-    ListViewAddColumn(1, szText, 90, LVCFMT_RIGHT);
-
-    LoadStringW(hInst, IDS_APP_DESCRIPTION, szText, _countof(szText));
-    ListViewAddColumn(3, szText, 250, LVCFMT_LEFT);
-
-    UpdateApplicationsList(ENUM_ALL_COMPONENTS);
-}
-
-HTREEITEM
-AddCategory(HTREEITEM hRootItem, UINT TextIndex, UINT IconIndex)
-{
-    WCHAR szText[MAX_STR_LEN];
-    INT Index;
-    HICON hIcon;
-
-    hIcon = (HICON)LoadImage(hInst,
-                      MAKEINTRESOURCE(IconIndex),
-                      IMAGE_ICON,
-                      TREEVIEW_ICON_SIZE,
-                      TREEVIEW_ICON_SIZE,
-                      LR_CREATEDIBSECTION);
-
-    Index = ImageList_AddIcon(hImageTreeView, hIcon);
-    DestroyIcon(hIcon);
-
-    LoadStringW(hInst, TextIndex, szText, _countof(szText));
-
-    return TreeViewAddItem(hRootItem, szText, Index, Index, TextIndex);
-}
-
-VOID
-InitCategoriesList(VOID)
-{
-    HTREEITEM hRootItem1, hRootItem2;
-
-    /* Create image list */
-    hImageTreeView = ImageList_Create(TREEVIEW_ICON_SIZE,
-                                      TREEVIEW_ICON_SIZE,
-                                      GetSystemColorDepth() | ILC_MASK,
-                                      0, 1);
-
-    hRootItem1 = AddCategory(TVI_ROOT, IDS_INSTALLED, IDI_CATEGORY);
-    AddCategory(hRootItem1, IDS_APPLICATIONS, IDI_APPS);
-    AddCategory(hRootItem1, IDS_UPDATES, IDI_APPUPD);
-
-    hRootItem2 = AddCategory(TVI_ROOT, IDS_AVAILABLEFORINST, IDI_CATEGORY);
-    AddCategory(hRootItem2, IDS_CAT_AUDIO, IDI_CAT_AUDIO);
-    AddCategory(hRootItem2, IDS_CAT_VIDEO, IDI_CAT_VIDEO);
-    AddCategory(hRootItem2, IDS_CAT_GRAPHICS, IDI_CAT_GRAPHICS);
-    AddCategory(hRootItem2, IDS_CAT_GAMES, IDI_CAT_GAMES);
-    AddCategory(hRootItem2, IDS_CAT_INTERNET, IDI_CAT_INTERNET);
-    AddCategory(hRootItem2, IDS_CAT_OFFICE, IDI_CAT_OFFICE);
-    AddCategory(hRootItem2, IDS_CAT_DEVEL, IDI_CAT_DEVEL);
-    AddCategory(hRootItem2, IDS_CAT_EDU, IDI_CAT_EDU);
-    AddCategory(hRootItem2, IDS_CAT_ENGINEER, IDI_CAT_ENGINEER);
-    AddCategory(hRootItem2, IDS_CAT_FINANCE, IDI_CAT_FINANCE);
-    AddCategory(hRootItem2, IDS_CAT_SCIENCE, IDI_CAT_SCIENCE);
-    AddCategory(hRootItem2, IDS_CAT_TOOLS, IDI_CAT_TOOLS);
-    AddCategory(hRootItem2, IDS_CAT_DRIVERS, IDI_CAT_DRIVERS);
-    AddCategory(hRootItem2, IDS_CAT_LIBS, IDI_CAT_LIBS);
-    AddCategory(hRootItem2, IDS_CAT_OTHER, IDI_CAT_OTHER);
-
-    (VOID) TreeView_SetImageList(hTreeView, hImageTreeView, TVSIL_NORMAL);
-
-    (VOID) TreeView_Expand(hTreeView, hRootItem2, TVE_EXPAND);
-    (VOID) TreeView_Expand(hTreeView, hRootItem1, TVE_EXPAND);
-
-    (VOID) TreeView_SelectItem(hTreeView, hRootItem1);
-}
-
-BOOL
-InitControls(HWND hwnd)
-{
-
-    if (CreateStatusBar(hwnd) &&
-        CreateToolBar(hwnd)   &&
-        CreateListView(hwnd)  &&
-        CreateTreeView(hwnd)  &&
-        CreateRichEdit(hwnd)  &&
-        CreateVSplitBar(hwnd) &&
-        CreateHSplitBar(hwnd))
-    {
-        WCHAR szBuffer1[MAX_STR_LEN], szBuffer2[MAX_STR_LEN];
-
-        InitApplicationsList();
-
-        InitCategoriesList();
-
-        LoadStringW(hInst, IDS_APPS_COUNT, szBuffer2, _countof(szBuffer2));
-        StringCbPrintfW(szBuffer1, sizeof(szBuffer1),
-                        szBuffer2,
-                        ListView_GetItemCount(hListView));
-        SetStatusBarText(szBuffer1);
-        return TRUE;
-    }
-
-    return FALSE;
-}
-
 VOID CALLBACK
 SearchTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
 {
@@ -529,93 +419,6 @@ MainWndOnCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
     }
 }
 
-VOID
-MainWndOnSize(HWND hwnd, WPARAM wParam, LPARAM lParam)
-{
-    HDWP hdwp = BeginDeferWindowPos(5);
-    INT SearchBarWidth = GetWindowWidth(hSearchBar);
-    INT RichPos = GetWindowHeight(hRichEdit);
-    INT NewPos = HIWORD(lParam) - (RichPos + SPLIT_WIDTH + GetWindowHeight(hStatusBar));
-    INT VSplitterPos;
-
-    /* Size status bar */
-    SendMessage(hStatusBar, WM_SIZE, 0, 0);
-
-    /* Size tool bar */
-    SendMessage(hToolBar, TB_AUTOSIZE, 0, 0);
-
-    /* Size SearchBar */
-    MoveWindow(hSearchBar, LOWORD(lParam) - SearchBarWidth - 4, 5, SearchBarWidth, 22, TRUE);
-
-    /*
-     * HIWORD(lParam) - Height of main window
-     * LOWORD(lParam) - Width of main window
-     */
-
-    /* Size vertical splitter bar */
-    DeferWindowPos(hdwp,
-                   hVSplitter,
-                   0,
-                   (VSplitterPos = GetWindowWidth(hTreeView)),
-                   GetWindowHeight(hToolBar),
-                   SPLIT_WIDTH,
-                   HIWORD(lParam) - GetWindowHeight(hToolBar) - GetWindowHeight(hStatusBar),
-                   SWP_NOZORDER|SWP_NOACTIVATE);
-
-    /* Size TreeView */
-    DeferWindowPos(hdwp,
-                   hTreeView,
-                   0,
-                   0,
-                   GetWindowHeight(hToolBar),
-                   VSplitterPos,
-                   HIWORD(lParam) - GetWindowHeight(hToolBar) - GetWindowHeight(hStatusBar),
-                   SWP_NOZORDER|SWP_NOACTIVATE);
-
-    if(wParam != SIZE_MINIMIZED)
-    {
-        while (NewPos < SPLIT_WIDTH + GetWindowHeight(hToolBar))
-        {
-            RichPos--;
-            NewPos = HIWORD(lParam) - (RichPos +
-                     SPLIT_WIDTH + GetWindowHeight(hStatusBar));
-        }
-    }
-    SetHSplitterPos(NewPos);
-
-    /* Size ListView */
-    DeferWindowPos(hdwp,
-                   hListView,
-                   0,
-                   VSplitterPos + SPLIT_WIDTH,
-                   GetWindowHeight(hToolBar),
-                   LOWORD(lParam) - (VSplitterPos + SPLIT_WIDTH),
-                   GetHSplitterPos() - GetWindowHeight(hToolBar),
-                   SWP_NOZORDER|SWP_NOACTIVATE);
-
-    /* Size RichEdit */
-    DeferWindowPos(hdwp,
-                   hRichEdit,
-                   0,
-                   VSplitterPos + SPLIT_WIDTH,
-                   GetHSplitterPos() + SPLIT_WIDTH,
-                   LOWORD(lParam) - (VSplitterPos + SPLIT_WIDTH),
-                   RichPos,
-                   SWP_NOZORDER|SWP_NOACTIVATE);
-
-    /* Size horizontal splitter bar */
-    DeferWindowPos(hdwp,
-                   hHSplitter,
-                   0,
-                   VSplitterPos + SPLIT_WIDTH,
-                   GetHSplitterPos(),
-                   LOWORD(lParam) - (VSplitterPos + SPLIT_WIDTH),
-                   SPLIT_WIDTH,
-                   SWP_NOZORDER|SWP_NOACTIVATE);
-
-    EndDeferWindowPos(hdwp);
-}
-
 BOOL IsSelectedNodeInstalled(void)
 {
     HTREEITEM hSelectedItem = TreeView_GetSelection(hTreeView);
@@ -635,306 +438,10 @@ BOOL IsSelectedNodeInstalled(void)
     }
 }
 
-LRESULT CALLBACK
-MainWindowProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
-{
-
-    switch (Msg)
-    {
-        case WM_CREATE:
-            if (!InitControls(hwnd))
-                PostMessage(hwnd, WM_CLOSE, 0, 0);
-            break;
-
-        case WM_COMMAND:
-            MainWndOnCommand(hwnd, wParam, lParam);
-            break;
-
-        case WM_NOTIFY:
-        {
-            LPNMHDR data = (LPNMHDR)lParam;
-
-            switch (data->code)
-            {
-                case TVN_SELCHANGED:
-                {
-                    if (data->hwndFrom == hTreeView)
-                    {
-                        switch (((LPNMTREEVIEW)lParam)->itemNew.lParam)
-                        {
-                            case IDS_INSTALLED:
-                                UpdateApplicationsList(ENUM_ALL_COMPONENTS);
-                                break;
-
-                            case IDS_APPLICATIONS:
-                                UpdateApplicationsList(ENUM_APPLICATIONS);
-                                break;
-
-                            case IDS_UPDATES:
-                                UpdateApplicationsList(ENUM_UPDATES);
-                                break;
-
-                            case IDS_AVAILABLEFORINST:
-                                UpdateApplicationsList(ENUM_ALL_AVAILABLE);
-                                break;
-
-                            case IDS_CAT_AUDIO:
-                                UpdateApplicationsList(ENUM_CAT_AUDIO);
-                                break;
-
-                            case IDS_CAT_DEVEL:
-                                UpdateApplicationsList(ENUM_CAT_DEVEL);
-                                break;
-
-                            case IDS_CAT_DRIVERS:
-                                UpdateApplicationsList(ENUM_CAT_DRIVERS);
-                                break;
-
-                            case IDS_CAT_EDU:
-                                UpdateApplicationsList(ENUM_CAT_EDU);
-                                break;
-
-                            case IDS_CAT_ENGINEER:
-                                UpdateApplicationsList(ENUM_CAT_ENGINEER);
-                                break;
-
-                            case IDS_CAT_FINANCE:
-                                UpdateApplicationsList(ENUM_CAT_FINANCE);
-                                break;
-
-                            case IDS_CAT_GAMES:
-                                UpdateApplicationsList(ENUM_CAT_GAMES);
-                                break;
-
-                            case IDS_CAT_GRAPHICS:
-                                UpdateApplicationsList(ENUM_CAT_GRAPHICS);
-                                break;
-
-                            case IDS_CAT_INTERNET:
-                                UpdateApplicationsList(ENUM_CAT_INTERNET);
-                                break;
-
-                            case IDS_CAT_LIBS:
-                                UpdateApplicationsList(ENUM_CAT_LIBS);
-                                break;
-
-                            case IDS_CAT_OFFICE:
-                                UpdateApplicationsList(ENUM_CAT_OFFICE);
-                                break;
-
-                            case IDS_CAT_OTHER:
-                                UpdateApplicationsList(ENUM_CAT_OTHER);
-                                break;
-
-                            case IDS_CAT_SCIENCE:
-                                UpdateApplicationsList(ENUM_CAT_SCIENCE);
-                                break;
-
-                            case IDS_CAT_TOOLS:
-                                UpdateApplicationsList(ENUM_CAT_TOOLS);
-                                break;
-
-                            case IDS_CAT_VIDEO:
-                                UpdateApplicationsList(ENUM_CAT_VIDEO);
-                                break;
-                        }
-                    }
-
-                    /* Disable/enable items based on treeview selection */
-                    if (IsSelectedNodeInstalled())
-                    {
-                        EnableMenuItem(GetMenu(hwnd), ID_REGREMOVE, MF_ENABLED);
-                        EnableMenuItem(GetMenu(hwnd), ID_INSTALL, MF_GRAYED);
-                        EnableMenuItem(GetMenu(hwnd), ID_UNINSTALL, MF_ENABLED);
-                        EnableMenuItem(GetMenu(hwnd), ID_MODIFY, MF_ENABLED);
-
-                        EnableMenuItem(GetMenu(hListView), ID_REGREMOVE, MF_ENABLED);
-                        EnableMenuItem(GetMenu(hListView), ID_INSTALL, MF_GRAYED);
-                        EnableMenuItem(GetMenu(hListView), ID_UNINSTALL, MF_ENABLED);
-                        EnableMenuItem(GetMenu(hListView), ID_MODIFY, MF_ENABLED);
-
-                        SendMessage(hToolBar, TB_ENABLEBUTTON, ID_REGREMOVE, TRUE);
-                        SendMessage(hToolBar, TB_ENABLEBUTTON, ID_INSTALL, FALSE);
-                        SendMessage(hToolBar, TB_ENABLEBUTTON, ID_UNINSTALL, TRUE);
-                        SendMessage(hToolBar, TB_ENABLEBUTTON, ID_MODIFY, TRUE);
-                    }
-                    else
-                    {
-                        EnableMenuItem(GetMenu(hwnd), ID_REGREMOVE, MF_GRAYED);
-                        EnableMenuItem(GetMenu(hwnd), ID_INSTALL, MF_ENABLED);
-                        EnableMenuItem(GetMenu(hwnd), ID_UNINSTALL, MF_GRAYED);
-                        EnableMenuItem(GetMenu(hwnd), ID_MODIFY, MF_GRAYED);
-
-                        EnableMenuItem(GetMenu(hListView), ID_REGREMOVE, MF_GRAYED);
-                        EnableMenuItem(GetMenu(hListView), ID_INSTALL, MF_ENABLED);
-                        EnableMenuItem(GetMenu(hListView), ID_UNINSTALL, MF_GRAYED);
-                        EnableMenuItem(GetMenu(hListView), ID_MODIFY, MF_GRAYED);
-
-                        SendMessage(hToolBar, TB_ENABLEBUTTON, ID_REGREMOVE, FALSE);
-                        SendMessage(hToolBar, TB_ENABLEBUTTON, ID_INSTALL, TRUE);
-                        SendMessage(hToolBar, TB_ENABLEBUTTON, ID_UNINSTALL, FALSE);
-                        SendMessage(hToolBar, TB_ENABLEBUTTON, ID_MODIFY, FALSE);
-                    }
-                }
-                break;
-
-                case LVN_ITEMCHANGED:
-                {
-                    LPNMLISTVIEW pnic = (LPNMLISTVIEW) lParam;
-
-                    if (pnic->hdr.hwndFrom == hListView)
-                    {
-                        /* Check if this is a valid item
-                         * (technically, it can be also an unselect) */
-                        INT ItemIndex = pnic->iItem;
-                        if (ItemIndex == -1 ||
-                            ItemIndex >= ListView_GetItemCount(pnic->hdr.hwndFrom))
-                        {
-                            break;
-                        }
-
-                        /* Check if the focus has been moved to another item */
-                        if ((pnic->uChanged & LVIF_STATE) &&
-                            (pnic->uNewState & LVIS_FOCUSED) &&
-                            !(pnic->uOldState & LVIS_FOCUSED))
-                        {
-                            if (IS_INSTALLED_ENUM(SelectedEnumType))
-                                ShowInstalledAppInfo(ItemIndex);
-                            if (IS_AVAILABLE_ENUM(SelectedEnumType))
-                                ShowAvailableAppInfo(ItemIndex);
-                        }
-                    }
-                }
-                break;
-
-                case LVN_COLUMNCLICK:
-                {
-                    LPNMLISTVIEW pnmv = (LPNMLISTVIEW) lParam;
-
-                    (VOID) ListView_SortItems(hListView, ListViewCompareFunc, pnmv->iSubItem);
-                    bAscending = !bAscending;
-                }
-                break;
-
-                case NM_CLICK:
-                {
-                    if (data->hwndFrom == hListView && ((LPNMLISTVIEW)lParam)->iItem != -1)
-                    {
-                        if (IS_INSTALLED_ENUM(SelectedEnumType))
-                            ShowInstalledAppInfo(-1);
-                        if (IS_AVAILABLE_ENUM(SelectedEnumType))
-                            ShowAvailableAppInfo(-1);
-                    }
-                }
-                break;
-
-                case NM_DBLCLK:
-                {
-                    if (data->hwndFrom == hListView && ((LPNMLISTVIEW)lParam)->iItem != -1)
-                    {
-                        /* this won't do anything if the program is already installed */
-                        SendMessage(hwnd, WM_COMMAND, ID_INSTALL, 0);
-                    }
-                }
-                break;
-
-                case NM_RCLICK:
-                {
-                    if (data->hwndFrom == hListView && ((LPNMLISTVIEW)lParam)->iItem != -1)
-                    {
-                        ShowPopupMenu(hListView, 0, ID_INSTALL);
-                    }
-                }
-                break;
-
-                case EN_LINK:
-                    RichEditOnLink(hwnd, (ENLINK*)lParam);
-                    break;
-
-                case TTN_GETDISPINFO:
-                    ToolBarOnGetDispInfo((LPTOOLTIPTEXT)lParam);
-                    break;
-            }
-        }
-        break;
-
-        case WM_PAINT:
-        break;
-
-        case WM_SIZE:
-        {
-            if ((GetClientWindowHeight(hMainWnd) - GetWindowHeight(hStatusBar) - SPLIT_WIDTH) < GetHSplitterPos())
-            {
-                INT NewSplitPos = GetClientWindowHeight(hwnd) - 100 - GetWindowHeight(hStatusBar) - SPLIT_WIDTH;
-                if (NewSplitPos > GetWindowHeight(hToolBar) + SPLIT_WIDTH)
-                    SetHSplitterPos(NewSplitPos);
-            }
-
-            MainWndOnSize(hwnd, wParam, lParam);
-        }
-        break;
-
-        case WM_SIZING:
-        {
-            int RichEditHeight = GetWindowHeight(hRichEdit);
-            LPRECT pRect = (LPRECT)lParam;
-
-            while (RichEditHeight <= 100)
-            {
-                if (GetHSplitterPos() - 1 < GetWindowHeight(hToolBar) + GetWindowHeight(hListView) + SPLIT_WIDTH)
-                    break;
-                SetHSplitterPos(GetHSplitterPos() - 1);
-                RichEditHeight++;
-            }
-
-            if (pRect->right-pRect->left < 565)
-                pRect->right = pRect->left + 565;
-
-            if (pRect->bottom-pRect->top < 300)
-                pRect->bottom = pRect->top + 300;
-            return TRUE;
-        }
-
-        case WM_SYSCOLORCHANGE:
-        {
-            /* Forward WM_SYSCOLORCHANGE to common controls */
-            SendMessage(hListView, WM_SYSCOLORCHANGE, 0, 0);
-            SendMessage(hTreeView, WM_SYSCOLORCHANGE, 0, 0);
-            SendMessage(hToolBar, WM_SYSCOLORCHANGE, 0, 0);
-            SendMessageW(hRichEdit, EM_SETBKGNDCOLOR, 0, GetSysColor(COLOR_BTNFACE));
-        }
-        break;
-
-        case WM_DESTROY:
-        {
-            ShowWindow(hwnd, SW_HIDE);
-            SaveSettings(hwnd);
-
-            FreeLogs();
-
-            FreeCachedAvailableEntries();
-
-            if (IS_INSTALLED_ENUM(SelectedEnumType))
-                FreeInstalledAppList();
-
-            if (hImageTreeView)
-                ImageList_Destroy(hImageTreeView);
-
-            PostQuitMessage(0);
-            return 0;
-        }
-        break;
-    }
-
-    return DefWindowProc(hwnd, Msg, wParam, lParam);
-}
-
 int WINAPI
 wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nShowCmd)
 {
-    WNDCLASSEXW WndClass = {0};
     WCHAR szWindowClass[] = L"ROSAPPMGR";
-    WCHAR szWindowName[MAX_STR_LEN];
     HANDLE hMutex = NULL;
     HACCEL KeyBrd;
     MSG Msg;
@@ -974,33 +481,7 @@ wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nSh
 
     InitCommonControls();
 
-    /* Create the window */
-    WndClass.cbSize        = sizeof(WNDCLASSEXW);
-    WndClass.lpszClassName = szWindowClass;
-    WndClass.lpfnWndProc   = MainWindowProc;
-    WndClass.hInstance     = hInstance;
-    WndClass.hIcon         = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MAIN));
-    WndClass.hCursor       = LoadCursor(NULL, IDC_ARROW);
-    WndClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
-    WndClass.lpszMenuName  = MAKEINTRESOURCEW(IDR_MAINMENU);
-
-    if (RegisterClassExW(&WndClass) == (ATOM)0) goto Exit;
-
-    LoadStringW(hInst, IDS_APPTITLE, szWindowName, _countof(szWindowName));
-
-    hMainWnd = CreateWindowExW(WS_EX_WINDOWEDGE,
-                               szWindowClass,
-                               szWindowName,
-                               WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
-                               (SettingsInfo.bSaveWndPos ? SettingsInfo.Left   : CW_USEDEFAULT),
-                               (SettingsInfo.bSaveWndPos ? SettingsInfo.Top    : CW_USEDEFAULT),
-                               (SettingsInfo.bSaveWndPos ? SettingsInfo.Width  : 680),
-                               (SettingsInfo.bSaveWndPos ? SettingsInfo.Height : 450),
-                               NULL,
-                               NULL,
-                               hInstance,
-                               NULL);
-
+    hMainWnd = CreateMainWindow();
     if (!hMainWnd) goto Exit;
 
     /* Maximize it if we must */