Author: dquintana
Date: Mon Apr 27 15:01:40 2015
New Revision: 67460
URL:
http://svn.reactos.org/svn/reactos?rev=67460&view=rev
Log:
[RAPPS_NEW]
Initial work on a lightweight layout engine for ATL::CWindow.
Although a lot of work is still required making the classes more generic and
layout-aware,
but it is already able to replicate the original rapps layout without explicit positioning
of the windows.
Committing mostly for backup/history purposes.
CORE-9593
Added:
trunk/reactos/base/applications/rapps_new/gui.cpp (with props)
trunk/reactos/base/applications/rapps_new/rosui.h (with props)
Removed:
trunk/reactos/base/applications/rapps_new/listview.cpp
trunk/reactos/base/applications/rapps_new/richedit.cpp
trunk/reactos/base/applications/rapps_new/statusbar.cpp
Modified:
trunk/reactos/base/applications/rapps_new/CMakeLists.txt
trunk/reactos/base/applications/rapps_new/rapps.h
trunk/reactos/base/applications/rapps_new/toolbar.cpp
trunk/reactos/base/applications/rapps_new/winmain.cpp
trunk/reactos/include/reactos/rosctrls.h
Modified: trunk/reactos/base/applications/rapps_new/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/rapps_ne…
==============================================================================
--- trunk/reactos/base/applications/rapps_new/CMakeLists.txt [iso-8859-1] (original)
+++ trunk/reactos/base/applications/rapps_new/CMakeLists.txt [iso-8859-1] Mon Apr 27
15:01:40 2015
@@ -7,15 +7,12 @@
list(APPEND SOURCE
aboutdlg.cpp
available.cpp
+ gui.cpp
installdlg.cpp
installed.cpp
- listview.cpp
loaddlg.cpp
misc.cpp
- richedit.cpp
settingsdlg.cpp
- splitter.cpp
- statusbar.cpp
toolbar.cpp
treeview.cpp
winmain.cpp
Added: trunk/reactos/base/applications/rapps_new/gui.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/rapps_ne…
==============================================================================
--- trunk/reactos/base/applications/rapps_new/gui.cpp (added)
+++ trunk/reactos/base/applications/rapps_new/gui.cpp [iso-8859-1] Mon Apr 27 15:01:40
2015
@@ -0,0 +1,960 @@
+/* PROJECT: ReactOS CE Applications Manager
+ * LICENSE: GPL - See COPYING in the top level directory
+ * AUTHORS: David Quintana <gigaherz(a)gmail.com>
+ */
+
+#include "rapps.h"
+
+#include <shlobj_undoc.h>
+#include <shlguid_undoc.h>
+
+#include <atlbase.h>
+#include <atlcom.h>
+#include <atlwin.h>
+#include <wininet.h>
+#include <shellutils.h>
+
+#include <rosctrls.h>
+
+#include "rosui.h"
+
+PWSTR pLink = NULL;
+
+HWND hListView = NULL;
+
+VOID UpdateApplicationsList(INT EnumType);
+VOID MainWndOnCommand(HWND hwnd, WPARAM wParam, LPARAM lParam);
+BOOL IsSelectedNodeInstalled(void);
+VOID FreeInstalledAppList(VOID);
+
+class CUiRichEdit :
+ public CUiWindow< CWindowImplBaseT<CWindow> >
+{
+ BOOL ProcessWindowMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam,
LRESULT& theResult, DWORD dwMapId)
+ {
+ theResult = 0;
+ return FALSE;
+ }
+
+public:
+ VOID SetRangeFormatting(LONG Start, LONG End, DWORD dwEffects)
+ {
+ CHARFORMAT2 CharFormat;
+
+ SendMessageW(EM_SETSEL, Start, End);
+
+ ZeroMemory(&CharFormat, sizeof(CHARFORMAT2));
+
+ CharFormat.cbSize = sizeof(CHARFORMAT2);
+ CharFormat.dwMask = dwEffects;
+ CharFormat.dwEffects = dwEffects;
+
+ SendMessageW(EM_SETCHARFORMAT, SCF_WORD | SCF_SELECTION, (LPARAM)
&CharFormat);
+
+ SendMessageW(EM_SETSEL, End, End + 1);
+ }
+
+ LONG GetTextLen(VOID)
+ {
+ GETTEXTLENGTHEX TxtLenStruct;
+
+ TxtLenStruct.flags = GTL_NUMCHARS;
+ TxtLenStruct.codepage = 1200;
+
+ return (LONG) SendMessageW(EM_GETTEXTLENGTHEX, (WPARAM) &TxtLenStruct, 0);
+ }
+
+ /*
+ * Insert text (without cleaning old text)
+ * Supported effects:
+ * - CFM_BOLD
+ * - CFM_ITALIC
+ * - CFM_UNDERLINE
+ * - CFM_LINK
+ */
+ VOID InsertText(LPCWSTR lpszText, DWORD dwEffects)
+ {
+ SETTEXTEX SetText;
+ LONG Len = GetTextLen();
+
+ /* Insert new text */
+ SetText.flags = ST_SELECTION;
+ SetText.codepage = 1200;
+
+ SendMessageW(EM_SETTEXTEX, (WPARAM) &SetText, (LPARAM) lpszText);
+
+ SetRangeFormatting(Len, Len + wcslen(lpszText),
+ (dwEffects == CFM_LINK) ? (PathIsURLW(lpszText) ? dwEffects : 0) :
dwEffects);
+ }
+
+ /*
+ * Clear old text and add new
+ */
+ VOID SetText(LPCWSTR lpszText, DWORD dwEffects)
+ {
+ SetWindowTextW(L"");
+ InsertText(lpszText, dwEffects);
+ }
+
+ VOID OnLink(ENLINK *Link)
+ {
+ switch (Link->msg)
+ {
+ case WM_LBUTTONUP:
+ case WM_RBUTTONUP:
+ {
+ if (pLink) HeapFree(GetProcessHeap(), 0, pLink);
+
+ pLink = (PWSTR) HeapAlloc(GetProcessHeap(), 0,
+ (max(Link->chrg.cpMin, Link->chrg.cpMax) -
+ min(Link->chrg.cpMin, Link->chrg.cpMax) + 1) * sizeof(WCHAR));
+ if (!pLink)
+ {
+ /* TODO: Error message */
+ return;
+ }
+
+ SendMessageW(EM_SETSEL, Link->chrg.cpMin, Link->chrg.cpMax);
+ SendMessageW(EM_GETSELTEXT, 0, (LPARAM) pLink);
+
+ ShowPopupMenu(m_hWnd, IDR_LINKMENU, -1);
+ }
+ break;
+ }
+ }
+
+ HWND Create(HWND hwndParent)
+ {
+ LoadLibraryW(L"riched20.dll");
+
+ HWND hwnd = CreateWindowExW(0,
+ L"RichEdit20W",
+ NULL,
+ WS_CHILD | WS_VISIBLE | ES_MULTILINE |
+ ES_LEFT | ES_READONLY,
+ 205, 28, 465, 100,
+ hwndParent,
+ NULL,
+ hInst,
+ NULL);
+
+ SubclassWindow(hwnd);
+
+ if (hwnd)
+ {
+ SendMessageW(EM_SETBKGNDCOLOR, 0, GetSysColor(COLOR_BTNFACE));
+ SendMessageW(WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT), 0);
+ SendMessageW(EM_SETEVENTMASK, 0, ENM_LINK | ENM_MOUSEEVENTS);
+ SendMessageW(EM_SHOWSCROLLBAR, SB_VERT, TRUE);
+ }
+
+ return hwnd;
+ }
+
+};
+
+class CUiListView :
+ public CUiWindow<CListView>
+{
+ struct SortContext
+ {
+ CUiListView * lvw;
+ int iSubItem;
+ };
+
+public:
+ BOOL bAscending;
+
+ CUiListView()
+ {
+ bAscending = TRUE;
+ }
+
+ VOID ColumnClick(LPNMLISTVIEW pnmv)
+ {
+ SortContext ctx = { this, pnmv->iSubItem };
+
+ SortItems(s_CompareFunc, &ctx);
+
+ bAscending = !bAscending;
+ }
+
+ PVOID GetLParam(INT Index)
+ {
+ INT ItemIndex;
+ LVITEM Item;
+
+ if (Index == -1)
+ {
+ ItemIndex = (INT) SendMessage(LVM_GETNEXTITEM, -1, LVNI_FOCUSED);
+ if (ItemIndex == -1)
+ return NULL;
+ }
+ else
+ {
+ ItemIndex = Index;
+ }
+
+ ZeroMemory(&Item, sizeof(LVITEM));
+
+ Item.mask = LVIF_PARAM;
+ Item.iItem = ItemIndex;
+ if (!GetItem(&Item))
+ return NULL;
+
+ return (PVOID) Item.lParam;
+ }
+
+ BOOL AddColumn(INT Index, LPWSTR lpText, INT Width, INT Format)
+ {
+ LV_COLUMN Column;
+
+ ZeroMemory(&Column, sizeof(LV_COLUMN));
+
+ Column.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
+ Column.iSubItem = Index;
+ Column.pszText = (LPTSTR) lpText;
+ Column.cx = Width;
+ Column.fmt = Format;
+
+ return (InsertColumn(Index, &Column) == -1) ? FALSE : TRUE;
+ }
+
+ INT AddItem(INT ItemIndex, INT IconIndex, LPWSTR lpText, LPARAM lParam)
+ {
+ LV_ITEMW Item;
+
+ ZeroMemory(&Item, sizeof(LV_ITEM));
+
+ Item.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE | LVIF_IMAGE;
+ Item.pszText = lpText;
+ Item.lParam = lParam;
+ Item.iItem = ItemIndex;
+ Item.iImage = IconIndex;
+
+ return InsertItem(&Item);
+ }
+
+ static INT CALLBACK s_CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
+ {
+ SortContext * ctx = ((SortContext*) lParamSort);
+ return ctx->lvw->CompareFunc(lParam1, lParam2, ctx->iSubItem);
+ }
+
+ INT CompareFunc(LPARAM lParam1, LPARAM lParam2, INT iSubItem)
+ {
+ WCHAR Item1[MAX_STR_LEN], Item2[MAX_STR_LEN];
+ LVFINDINFO IndexInfo;
+ INT Index;
+
+ IndexInfo.flags = LVFI_PARAM;
+
+ IndexInfo.lParam = lParam1;
+ Index = FindItem(-1, &IndexInfo);
+ GetItemText(Index, iSubItem, Item1, sizeof(Item1) / sizeof(WCHAR));
+
+ IndexInfo.lParam = lParam2;
+ Index = FindItem(-1, &IndexInfo);
+ GetItemText(Index, iSubItem, Item2, sizeof(Item2) / sizeof(WCHAR));
+
+ if (bAscending)
+ return wcscmp(Item2, Item1);
+ else
+ return wcscmp(Item1, Item2);
+
+ return 0;
+ }
+
+ HWND Create(HWND hwndParent)
+ {
+ RECT r = { 205, 28, 465, 250 };
+ DWORD style = WS_CHILD | WS_VISIBLE | LVS_SORTASCENDING | LVS_REPORT |
LVS_SINGLESEL | LVS_SHOWSELALWAYS;
+ HMENU menu = GetSubMenu(LoadMenuW(hInst, MAKEINTRESOURCEW(IDR_APPLICATIONMENU)),
0);
+
+ HWND hwnd = CListView::Create(hwndParent, r, NULL, style, WS_EX_CLIENTEDGE,
menu);
+
+ if (hwnd)
+ SetExtendedListViewStyle(LVS_EX_FULLROWSELECT);
+
+ return hwnd;
+ }
+
+};
+
+class CUiStatusBar :
+ public CUiWindow<CStatusBar>
+{
+};
+
+class CUiMainWindow :
+ public CWindowImpl<CUiMainWindow, CWindow, CFrameWinTraits>
+{
+ CUiPanel * m_ClientPanel;
+
+ CUiWindow<> * m_Toolbar;
+ CUiWindow<> * m_TreeView;
+ CUiWindow<> * m_SearchBar;
+ CUiStatusBar * m_StatusBar;
+ CUiListView * m_ListView;
+ CUiRichEdit * m_RichEdit;
+ CUiSplitPanel * m_VSplitter;
+ CUiSplitPanel * m_HSplitter;
+
+ HIMAGELIST hImageTreeView;
+
+ VOID InitApplicationsList(VOID)
+ {
+ WCHAR szText[MAX_STR_LEN];
+
+ /* Add columns to ListView */
+ LoadStringW(hInst, IDS_APP_NAME, szText, _countof(szText));
+ m_ListView->AddColumn(0, szText, 200, LVCFMT_LEFT);
+
+ LoadStringW(hInst, IDS_APP_INST_VERSION, szText, _countof(szText));
+ m_ListView->AddColumn(1, szText, 90, LVCFMT_RIGHT);
+
+ LoadStringW(hInst, IDS_APP_DESCRIPTION, szText, _countof(szText));
+ m_ListView->AddColumn(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;
+
+ 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 CreateStatusBar()
+ {
+ m_StatusBar = new CUiStatusBar();
+ m_StatusBar->m_VerticalAlignment = UiAlign_RightBtm;
+ m_StatusBar->m_HorizontalAlignment = UiAlign_Stretch;
+ m_ClientPanel->Children().Append(m_StatusBar);
+
+ return m_StatusBar->Create(m_hWnd, (HMENU)IDC_STATUSBAR) != NULL;
+ }
+
+ BOOL CreateToolbar()
+ {
+ // TODO: WRAPPER
+ m_Toolbar = new CUiWindow<>();
+ m_Toolbar->m_VerticalAlignment = UiAlign_LeftTop;
+ m_Toolbar->m_HorizontalAlignment = UiAlign_Stretch;
+ m_ClientPanel->Children().Append(m_Toolbar);
+
+ CreateToolBar(m_hWnd);
+ m_Toolbar->m_hWnd = hToolBar;
+
+ return hToolBar != NULL;
+ }
+
+ BOOL CreateTreeView()
+ {
+ // TODO: WRAPPER
+ m_TreeView = new CUiWindow<>();
+ m_TreeView->m_VerticalAlignment = UiAlign_Stretch;
+ m_TreeView->m_HorizontalAlignment = UiAlign_Stretch;
+ m_VSplitter->First().Append(m_TreeView);
+
+ ::CreateTreeView(m_hWnd);
+ m_TreeView->m_hWnd = hTreeView;
+
+ return hTreeView != NULL;
+ }
+
+ BOOL CreateListView()
+ {
+ m_ListView = new CUiListView();
+ m_ListView->m_VerticalAlignment = UiAlign_Stretch;
+ m_ListView->m_HorizontalAlignment = UiAlign_Stretch;
+ m_HSplitter->First().Append(m_ListView);
+
+ hListView = m_ListView->Create(m_hWnd);
+ return hListView != NULL;
+ }
+
+ BOOL CreateRichEdit()
+ {
+ m_RichEdit = new CUiRichEdit();
+ m_RichEdit->m_VerticalAlignment = UiAlign_Stretch;
+ m_RichEdit->m_HorizontalAlignment = UiAlign_Stretch;
+ m_HSplitter->Second().Append(m_RichEdit);
+
+ return m_RichEdit->Create(m_hWnd) != NULL;
+ }
+
+ BOOL CreateVSplitter()
+ {
+ m_VSplitter = new CUiSplitPanel();
+ m_VSplitter->m_VerticalAlignment = UiAlign_Stretch;
+ m_VSplitter->m_HorizontalAlignment = UiAlign_Stretch;
+ m_VSplitter->m_DynamicFirst = FALSE;
+ m_VSplitter->m_Horizontal = FALSE;
+ m_VSplitter->m_MinFirst = 240;
+ m_VSplitter->m_MinSecond = 300;
+ m_ClientPanel->Children().Append(m_VSplitter);
+
+ return m_VSplitter->Create(m_hWnd) != NULL;
+ }
+
+ BOOL CreateHSplitter()
+ {
+ m_HSplitter = new CUiSplitPanel();
+ m_HSplitter->m_VerticalAlignment = UiAlign_Stretch;
+ m_HSplitter->m_HorizontalAlignment = UiAlign_Stretch;
+ m_HSplitter->m_DynamicFirst = TRUE;
+ m_HSplitter->m_Horizontal = TRUE;
+ m_HSplitter->m_Pos = 32768;
+ m_HSplitter->m_MinFirst = 300;
+ m_HSplitter->m_MinSecond = 80;
+ m_VSplitter->Second().Append(m_HSplitter);
+
+ return m_HSplitter->Create(m_hWnd) != NULL;
+ }
+
+ BOOL CreateSearchBar(VOID)
+ {
+ WCHAR szBuf[MAX_STR_LEN];
+
+ // TODO: WRAPPER
+ m_SearchBar = new CUiWindow<>();
+ m_SearchBar->m_VerticalAlignment = UiAlign_LeftTop;
+ m_SearchBar->m_HorizontalAlignment = UiAlign_RightBtm;
+ m_SearchBar->m_Margin.top = 6;
+ m_SearchBar->m_Margin.right = 6;
+ //m_ClientPanel->Children().Append(m_SearchBar);
+
+ hSearchBar = CreateWindowExW(WS_EX_CLIENTEDGE,
+ L"Edit",
+ NULL,
+ WS_CHILD | WS_VISIBLE | ES_LEFT | ES_AUTOHSCROLL,
+ 0,
+ 0,
+ 200,
+ 22,
+ m_Toolbar->m_hWnd,
+ (HMENU) 0,
+ hInst,
+ 0);
+
+ m_SearchBar->m_hWnd = hSearchBar;
+
+ m_SearchBar->SendMessageW(WM_SETFONT, (WPARAM)
GetStockObject(DEFAULT_GUI_FONT), 0);
+
+ LoadStringW(hInst, IDS_SEARCH_TEXT, szBuf, sizeof(szBuf) / sizeof(WCHAR));
+ m_SearchBar->SetWindowTextW(szBuf);
+
+ return hSearchBar != NULL;
+ }
+
+ BOOL CreateLayout()
+ {
+ bool b = TRUE;
+
+ m_ClientPanel = new CUiPanel();
+ m_ClientPanel->m_VerticalAlignment = UiAlign_Stretch;
+ m_ClientPanel->m_HorizontalAlignment = UiAlign_Stretch;
+
+ // Top level
+ b = b && CreateStatusBar();
+ b = b && CreateToolbar();
+ b = b && CreateSearchBar();
+ b = b && CreateVSplitter();
+
+ // Inside V Splitter
+ b = b && CreateHSplitter();
+ b = b && CreateTreeView();
+
+ // Inside H Splitter
+ b = b && CreateListView();
+ b = b && CreateRichEdit();
+
+ if (b)
+ {
+ RECT rTop;
+ RECT rBottom;
+
+ /* Size status bar */
+ m_StatusBar->SendMessage(WM_SIZE, 0, 0);
+
+ /* Size tool bar */
+ SendMessage(hToolBar, TB_AUTOSIZE, 0, 0);
+
+ ::GetWindowRect(m_Toolbar->m_hWnd, &rTop);
+ ::GetWindowRect(m_StatusBar->m_hWnd, &rBottom);
+
+ m_VSplitter->m_Margin.left = 3;
+ m_VSplitter->m_Margin.right = 3;
+ m_VSplitter->m_Margin.top = rTop.bottom - rTop.top + 3;
+ m_VSplitter->m_Margin.bottom = rBottom.bottom-rBottom.top + 3;
+ }
+
+ return b;
+ }
+
+ BOOL InitControls()
+ {
+ /* Create image list */
+ hImageTreeView = ImageList_Create(TREEVIEW_ICON_SIZE, TREEVIEW_ICON_SIZE,
+ GetSystemColorDepth() | ILC_MASK,
+ 0, 1);
+
+ if (CreateLayout())
+ {
+ WCHAR szBuffer1[MAX_STR_LEN], szBuffer2[MAX_STR_LEN];
+
+ InitApplicationsList();
+
+ InitCategoriesList();
+
+ LoadStringW(hInst, IDS_APPS_COUNT, szBuffer2, _countof(szBuffer2));
+ StringCbPrintfW(szBuffer1, sizeof(szBuffer1),
+ szBuffer2,
+ m_ListView->GetItemCount());
+ m_StatusBar->SetText(szBuffer1);
+ return TRUE;
+ }
+
+ return FALSE;
+ }
+
+ VOID OnSize(HWND hwnd, WPARAM wParam, LPARAM lParam)
+ {
+ /* Size status bar */
+ m_StatusBar->SendMessage(WM_SIZE, 0, 0);
+
+ /* Size tool bar */
+ SendMessage(hToolBar, TB_AUTOSIZE, 0, 0);
+
+
+ RECT r = { 0, 0, LOWORD(lParam), HIWORD(lParam) };
+
+ HDWP hdwp = NULL;
+
+ int count = m_ClientPanel->CountSizableChildren();
+ hdwp = BeginDeferWindowPos(count);
+ hdwp = m_ClientPanel->OnParentSize(r, hdwp);
+ EndDeferWindowPos(hdwp);
+
+ // TODO: Sub-layouts for children of children
+ count = m_SearchBar->CountSizableChildren();
+ hdwp = BeginDeferWindowPos(count);
+ hdwp = m_SearchBar->OnParentSize(r, hdwp);
+ EndDeferWindowPos(hdwp);
+ }
+
+ BOOL ProcessWindowMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam,
LRESULT& theResult, DWORD dwMapId)
+ {
+ theResult = 0;
+ switch (Msg)
+ {
+ case WM_CREATE:
+ if (!InitControls())
+ PostMessage(hwnd, WM_CLOSE, 0, 0);
+ break;
+
+ case WM_DESTROY:
+ {
+ ShowWindow(SW_HIDE);
+ SaveSettings(hwnd);
+
+ FreeLogs();
+
+ FreeCachedAvailableEntries();
+
+ if (IS_INSTALLED_ENUM(SelectedEnumType))
+ FreeInstalledAppList();
+
+ if (hImageTreeView)
+ ImageList_Destroy(hImageTreeView);
+
+ delete m_ClientPanel;
+
+ PostQuitMessage(0);
+ return 0;
+ }
+
+ 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;
+ }
+ }
+
+ HMENU mainMenu = GetMenu(hwnd);
+ HMENU lvwMenu = GetMenu(m_ListView->m_hWnd);
+
+ /* Disable/enable items based on treeview selection */
+ if (IsSelectedNodeInstalled())
+ {
+ EnableMenuItem(mainMenu, ID_REGREMOVE, MF_ENABLED);
+ EnableMenuItem(mainMenu, ID_INSTALL, MF_GRAYED);
+ EnableMenuItem(mainMenu, ID_UNINSTALL, MF_ENABLED);
+ EnableMenuItem(mainMenu, ID_MODIFY, MF_ENABLED);
+
+ EnableMenuItem(lvwMenu, ID_REGREMOVE, MF_ENABLED);
+ EnableMenuItem(lvwMenu, ID_INSTALL, MF_GRAYED);
+ EnableMenuItem(lvwMenu, ID_UNINSTALL, MF_ENABLED);
+ EnableMenuItem(lvwMenu, 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(mainMenu, ID_REGREMOVE, MF_GRAYED);
+ EnableMenuItem(mainMenu, ID_INSTALL, MF_ENABLED);
+ EnableMenuItem(mainMenu, ID_UNINSTALL, MF_GRAYED);
+ EnableMenuItem(mainMenu, ID_MODIFY, MF_GRAYED);
+
+ EnableMenuItem(lvwMenu, ID_REGREMOVE, MF_GRAYED);
+ EnableMenuItem(lvwMenu, ID_INSTALL, MF_ENABLED);
+ EnableMenuItem(lvwMenu, ID_UNINSTALL, MF_GRAYED);
+ EnableMenuItem(lvwMenu, 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 == m_ListView->m_hWnd)
+ {
+ /* 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;
+
+ m_ListView->ColumnClick(pnmv);
+ }
+ break;
+
+ case NM_CLICK:
+ {
+ if (data->hwndFrom == m_ListView->m_hWnd && ((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 == m_ListView->m_hWnd && ((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 == m_ListView->m_hWnd && ((LPNMLISTVIEW)
lParam)->iItem != -1)
+ {
+ ShowPopupMenu(m_ListView->m_hWnd, 0, ID_INSTALL);
+ }
+ }
+ break;
+
+ case EN_LINK:
+ m_RichEdit->OnLink((ENLINK*) lParam);
+ break;
+
+ case TTN_GETDISPINFO:
+ ToolBarOnGetDispInfo((LPTOOLTIPTEXT) lParam);
+ break;
+ }
+ }
+ break;
+
+ case WM_SIZE:
+ OnSize(hwnd, wParam, lParam);
+ break;
+
+ case WM_SIZING:
+ {
+ LPRECT pRect = (LPRECT) lParam;
+
+ 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 */
+ m_ListView->SendMessage(WM_SYSCOLORCHANGE, 0, 0);
+ SendMessage(hTreeView, WM_SYSCOLORCHANGE, 0, 0);
+ SendMessage(hToolBar, WM_SYSCOLORCHANGE, 0, 0);
+ m_ListView->SendMessage(EM_SETBKGNDCOLOR, 0, GetSysColor(COLOR_BTNFACE));
+ }
+ break;
+ }
+
+ return FALSE;
+ }
+
+public:
+ CUiMainWindow() :
+ m_ClientPanel(NULL),
+ hImageTreeView(NULL)
+ {
+
+ }
+
+ static ATL::CWndClassInfo& GetWndClassInfo()
+ {
+ DWORD csStyle = CS_VREDRAW |CS_HREDRAW;
+ static ATL::CWndClassInfo wc =
+ {
+ { sizeof(WNDCLASSEX), csStyle, StartWindowProc,
+ 0, 0, NULL,
+ LoadIcon(_AtlBaseModule.GetModuleInstance(), MAKEINTRESOURCE(IDI_MAIN)),
+ LoadCursor(NULL, IDC_ARROW),
+ (HBRUSH) (COLOR_BTNFACE + 1), NULL,
+ L"RAppsWnd", NULL },
+ NULL, NULL, IDC_ARROW, TRUE, 0, _T("")
+ };
+ return wc;
+ }
+
+ HWND Create()
+ {
+ WCHAR szWindowName[MAX_STR_LEN];
+
+ LoadStringW(hInst, IDS_APPTITLE, szWindowName, _countof(szWindowName));
+
+ RECT r = {
+ (SettingsInfo.bSaveWndPos ? SettingsInfo.Left : CW_USEDEFAULT),
+ (SettingsInfo.bSaveWndPos ? SettingsInfo.Top : CW_USEDEFAULT),
+ (SettingsInfo.bSaveWndPos ? SettingsInfo.Width : 680),
+ (SettingsInfo.bSaveWndPos ? SettingsInfo.Height : 450)
+ };
+ r.right += r.left;
+ r.bottom += r.top;
+
+ return CWindowImpl::Create(NULL, r, szWindowName, WS_OVERLAPPEDWINDOW |
WS_CLIPCHILDREN | WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE);
+ }
+
+ CUiStatusBar * GetStatusBar()
+ {
+ return m_StatusBar;
+ }
+
+ CUiListView * GetListView()
+ {
+ return m_ListView;
+ }
+
+ CUiRichEdit * GetRichEdit()
+ {
+ return m_RichEdit;
+ }
+};
+
+CUiMainWindow * g_MainWindow;
+
+HWND CreateMainWindow()
+{
+ g_MainWindow = new CUiMainWindow();
+ return g_MainWindow->Create();
+}
+
+DWORD_PTR ListViewGetlParam(INT item)
+{
+ return g_MainWindow->GetListView()->GetItemData(item);
+}
+
+VOID SetStatusBarText(PCWSTR szText)
+{
+ g_MainWindow->GetStatusBar()->SetText(szText);
+}
+
+INT ListViewAddItem(INT ItemIndex, INT IconIndex, PWSTR lpName, LPARAM lParam)
+{
+ return g_MainWindow->GetListView()->AddItem(ItemIndex, IconIndex, lpName,
lParam);
+}
+
+VOID NewRichEditText(PCWSTR szText, DWORD flags)
+{
+ g_MainWindow->GetRichEdit()->SetText(szText, flags);
+}
+
+VOID InsertRichEditText(PCWSTR szText, DWORD flags)
+{
+ g_MainWindow->GetRichEdit()->InsertText(szText, flags);
+}
Propchange: trunk/reactos/base/applications/rapps_new/gui.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Removed: trunk/reactos/base/applications/rapps_new/listview.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/rapps_ne…
==============================================================================
--- trunk/reactos/base/applications/rapps_new/listview.cpp [iso-8859-1] (original)
+++ trunk/reactos/base/applications/rapps_new/listview.cpp (removed)
@@ -1,121 +0,0 @@
-/*
- * PROJECT: ReactOS Applications Manager
- * LICENSE: GPL - See COPYING in the top level directory
- * FILE: base/applications/rapps/listview.c
- * PURPOSE: ListView functions
- * PROGRAMMERS: Dmitry Chapyshev (dmitry(a)reactos.org)
- */
-
-#include "rapps.h"
-
-HWND hListView;
-BOOL bAscending = TRUE;
-
-PVOID
-ListViewGetlParam(INT Index)
-{
- INT ItemIndex;
- LVITEM Item;
-
- if (Index == -1)
- {
- ItemIndex = (INT) SendMessage(hListView, LVM_GETNEXTITEM, -1, LVNI_FOCUSED);
- if (ItemIndex == -1)
- return NULL;
- }
- else
- {
- ItemIndex = Index;
- }
-
- ZeroMemory(&Item, sizeof(LVITEM));
-
- Item.mask = LVIF_PARAM;
- Item.iItem = ItemIndex;
- if (!ListView_GetItem(hListView, &Item))
- return NULL;
-
- return (PVOID)Item.lParam;
-}
-
-BOOL
-ListViewAddColumn(INT Index, LPWSTR lpText, INT Width, INT Format)
-{
- LV_COLUMN Column;
-
- ZeroMemory(&Column, sizeof(LV_COLUMN));
-
- Column.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
- Column.iSubItem = Index;
- Column.pszText = (LPTSTR)lpText;
- Column.cx = Width;
- Column.fmt = Format;
-
- return (ListView_InsertColumn(hListView, Index, &Column) == -1) ? FALSE : TRUE;
-}
-
-INT
-ListViewAddItem(INT ItemIndex, INT IconIndex, LPWSTR lpText, LPARAM lParam)
-{
- LV_ITEMW Item;
-
- ZeroMemory(&Item, sizeof(LV_ITEM));
-
- Item.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE | LVIF_IMAGE;
- Item.pszText = lpText;
- Item.lParam = lParam;
- Item.iItem = ItemIndex;
- Item.iImage = IconIndex;
-
- return ListView_InsertItem(hListView, &Item);
-}
-
-INT
-CALLBACK
-ListViewCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
-{
- WCHAR Item1[MAX_STR_LEN], Item2[MAX_STR_LEN];
- LVFINDINFO IndexInfo;
- INT Index;
-
- IndexInfo.flags = LVFI_PARAM;
-
- IndexInfo.lParam = lParam1;
- Index = ListView_FindItem(hListView, -1, &IndexInfo);
- ListView_GetItemText(hListView, Index, (INT)lParamSort, Item1, sizeof(Item1) /
sizeof(WCHAR));
-
- IndexInfo.lParam = lParam2;
- Index = ListView_FindItem(hListView, -1, &IndexInfo);
- ListView_GetItemText(hListView, Index, (INT)lParamSort, Item2, sizeof(Item2) /
sizeof(WCHAR));
-
- if (bAscending)
- return wcscmp(Item2, Item1);
- else
- return wcscmp(Item1, Item2);
-
- return 0;
-}
-
-BOOL
-CreateListView(HWND hwnd)
-{
- hListView = CreateWindowExW(WS_EX_CLIENTEDGE,
- WC_LISTVIEWW,
- L"",
- WS_CHILD | WS_VISIBLE | LVS_SORTASCENDING | LVS_REPORT |
LVS_SINGLESEL | LVS_SHOWSELALWAYS,
- 205, 28, 465, 250,
- hwnd,
- GetSubMenu(LoadMenuW(hInst,
MAKEINTRESOURCEW(IDR_APPLICATIONMENU)), 0),
- hInst,
- NULL);
-
- if (!hListView)
- {
- /* TODO: Show error message */
- return FALSE;
- }
-
- (VOID) ListView_SetExtendedListViewStyle(hListView, LVS_EX_FULLROWSELECT);
-
- return TRUE;
-}
Modified: trunk/reactos/base/applications/rapps_new/rapps.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/rapps_ne…
==============================================================================
--- trunk/reactos/base/applications/rapps_new/rapps.h [iso-8859-1] (original)
+++ trunk/reactos/base/applications/rapps_new/rapps.h [iso-8859-1] Mon Apr 27 15:01:40
2015
@@ -149,15 +149,6 @@
VOID SaveSettings(HWND hwnd);
VOID FillDefaultSettings(PSETTINGS_INFO pSettingsInfo);
-/* listview.c */
-extern HWND hListView;
-extern BOOL bAscending;
-BOOL CreateListView(HWND hwnd);
-BOOL ListViewAddColumn(INT Index, LPWSTR lpText, INT Width, INT Format);
-INT ListViewAddItem(INT ItemIndex, INT IconIndex, LPWSTR lpText, LPARAM lParam);
-INT CALLBACK ListViewCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
-PVOID ListViewGetlParam(INT Index);
-
/* loaddlg.c */
BOOL DownloadApplication(INT Index);
VOID DownloadApplicationsDB(LPCWSTR lpUrl);
@@ -181,29 +172,8 @@
UINT ParserGetString(LPCWSTR lpKeyName, LPWSTR lpReturnedString, UINT nSize, LPCWSTR
lpFileName);
UINT ParserGetInt(LPCWSTR lpKeyName, LPCWSTR lpFileName);
-/* richedit.c */
-extern HWND hRichEdit;
-extern PWSTR pLink;
-BOOL CreateRichEdit(HWND hwnd);
-VOID RichEditOnLink(HWND hwnd, ENLINK *Link);
-VOID InsertRichEditText(LPCWSTR lpszText, DWORD dwEffects);
-VOID NewRichEditText(LPCWSTR lpszText, DWORD dwEffects);
-
/* settingsdlg.c */
VOID CreateSettingsDlg(HWND hwnd);
-
-/* splitter.c */
-extern HWND hVSplitter;
-extern HWND hHSplitter;
-BOOL CreateVSplitBar(HWND hwnd);
-BOOL CreateHSplitBar(HWND hwnd);
-int GetHSplitterPos(VOID);
-VOID SetHSplitterPos(int Pos);
-
-/* statusbar.c */
-extern HWND hStatusBar;
-BOOL CreateStatusBar(HWND hwnd);
-VOID SetStatusBarText(LPCWSTR lpszText);
/* toolbar.c */
extern HWND hToolBar;
@@ -216,4 +186,14 @@
BOOL CreateTreeView(HWND hwnd);
HTREEITEM TreeViewAddItem(HTREEITEM hParent, LPWSTR lpText, INT Image, INT SelectedImage,
LPARAM lParam);
+/* gui.cpp */
+HWND CreateMainWindow();
+DWORD_PTR ListViewGetlParam(INT item);
+INT ListViewAddItem(INT ItemIndex, INT IconIndex, PWSTR lpName, LPARAM lParam);
+VOID SetStatusBarText(PCWSTR szText);
+VOID NewRichEditText(PCWSTR szText, DWORD flags);
+VOID InsertRichEditText(PCWSTR szText, DWORD flags);
+extern HWND hListView;
+extern PWSTR pLink;
+
#endif /* _RAPPS_H */
Removed: trunk/reactos/base/applications/rapps_new/richedit.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/rapps_ne…
==============================================================================
--- trunk/reactos/base/applications/rapps_new/richedit.cpp [iso-8859-1] (original)
+++ trunk/reactos/base/applications/rapps_new/richedit.cpp (removed)
@@ -1,136 +0,0 @@
-/*
- * PROJECT: ReactOS Applications Manager
- * LICENSE: GPL - See COPYING in the top level directory
- * FILE: base/applications/rapps/richedit.c
- * PURPOSE: RichEdit functions
- * PROGRAMMERS: Dmitry Chapyshev (dmitry(a)reactos.org)
- */
-
-#include "rapps.h"
-
-#include <shlwapi.h>
-
-HWND hRichEdit;
-PWSTR pLink = NULL;
-
-VOID
-RichEditOnLink(HWND hwnd, ENLINK *Link)
-{
- switch (Link->msg)
- {
- case WM_LBUTTONUP:
- case WM_RBUTTONUP:
- {
- if (pLink) HeapFree(GetProcessHeap(), 0, pLink);
-
- pLink = (PWSTR)HeapAlloc(GetProcessHeap(),
- 0,
- (max(Link->chrg.cpMin, Link->chrg.cpMax) -
- min(Link->chrg.cpMin, Link->chrg.cpMax) + 1) *
sizeof(WCHAR));
- if (!pLink)
- {
- /* TODO: Error message */
- return;
- }
-
- SendMessageW(hRichEdit, EM_SETSEL, Link->chrg.cpMin,
Link->chrg.cpMax);
- SendMessageW(hRichEdit, EM_GETSELTEXT, 0, (LPARAM)pLink);
-
- ShowPopupMenu(hwnd, IDR_LINKMENU, -1);
- }
- break;
- }
-}
-
-static VOID
-SetRangeFormatting(LONG Start, LONG End, DWORD dwEffects)
-{
- CHARFORMAT2 CharFormat;
-
- SendMessageW(hRichEdit, EM_SETSEL, Start, End);
-
- ZeroMemory(&CharFormat, sizeof(CHARFORMAT2));
-
- CharFormat.cbSize = sizeof(CHARFORMAT2);
- CharFormat.dwMask = dwEffects;
- CharFormat.dwEffects = dwEffects;
-
- SendMessageW(hRichEdit, EM_SETCHARFORMAT, SCF_WORD | SCF_SELECTION,
(LPARAM)&CharFormat);
-
- SendMessageW(hRichEdit, EM_SETSEL, End, End + 1);
-}
-
-static LONG
-GetRichEditTextLen(VOID)
-{
- GETTEXTLENGTHEX TxtLenStruct;
-
- TxtLenStruct.flags = GTL_NUMCHARS;
- TxtLenStruct.codepage = 1200;
-
- return (LONG) SendMessageW(hRichEdit, EM_GETTEXTLENGTHEX, (WPARAM)&TxtLenStruct,
0);
-}
-
-/*
- * Insert text (without cleaning old text)
- * Supported effects:
- * - CFM_BOLD
- * - CFM_ITALIC
- * - CFM_UNDERLINE
- * - CFM_LINK
- */
-VOID
-InsertRichEditText(LPCWSTR lpszText, DWORD dwEffects)
-{
- SETTEXTEX SetText;
- LONG Len = GetRichEditTextLen();
-
- /* Insert new text */
- SetText.flags = ST_SELECTION;
- SetText.codepage = 1200;
-
- SendMessageW(hRichEdit, EM_SETTEXTEX, (WPARAM)&SetText, (LPARAM)lpszText);
-
- SetRangeFormatting(Len, Len + wcslen(lpszText),
- (dwEffects == CFM_LINK) ? (PathIsURLW(lpszText) ? dwEffects : 0) :
dwEffects);
-}
-
-/*
- * Clear old text and add new
- */
-VOID
-NewRichEditText(LPCWSTR lpszText, DWORD dwEffects)
-{
- SetWindowTextW(hRichEdit, L"");
- InsertRichEditText(lpszText, dwEffects);
-}
-
-BOOL
-CreateRichEdit(HWND hwnd)
-{
- LoadLibraryW(L"riched20.dll");
-
- hRichEdit = CreateWindowExW(0,
- L"RichEdit20W",
- NULL,
- WS_CHILD | WS_VISIBLE | ES_MULTILINE |
- ES_LEFT | ES_READONLY,
- 205, 28, 465, 100,
- hwnd,
- NULL,
- hInst,
- NULL);
-
- if (!hRichEdit)
- {
- /* TODO: Show error message */
- return FALSE;
- }
-
- SendMessageW(hRichEdit, EM_SETBKGNDCOLOR, 0, GetSysColor(COLOR_BTNFACE));
- SendMessageW(hRichEdit, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);
- SendMessageW(hRichEdit, EM_SETEVENTMASK, 0, ENM_LINK | ENM_MOUSEEVENTS);
- SendMessageW(hRichEdit, EM_SHOWSCROLLBAR, SB_VERT, TRUE);
-
- return TRUE;
-}
Added: trunk/reactos/base/applications/rapps_new/rosui.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/rapps_ne…
==============================================================================
--- trunk/reactos/base/applications/rapps_new/rosui.h (added)
+++ trunk/reactos/base/applications/rapps_new/rosui.h [iso-8859-1] Mon Apr 27 15:01:40
2015
@@ -0,0 +1,796 @@
+/* PROJECT: ReactOS UI Layout Engine
+ * LICENSE: GPL - See COPYING in the top level directory
+ * AUTHORS: David Quintana <gigaherz(a)gmail.com>
+ */
+#pragma once
+
+template<class T, int GrowthRate = 10>
+class CPointerArray
+{
+protected:
+ HDPA m_hDpa;
+
+public:
+ CPointerArray()
+ {
+ m_hDpa = DPA_Create(GrowthRate);
+ }
+
+ ~CPointerArray()
+ {
+ DPA_DestroyCallback(m_hDpa, s_OnRemoveItem, this);
+ }
+
+private:
+ static int CALLBACK s_OnRemoveItem(void * ptr, void * context)
+ {
+ CPointerArray * self = (CPointerArray*) context;
+ return (int) self->OnRemoveItem(reinterpret_cast<T*>(ptr));
+ }
+
+ static int CALLBACK s_OnCompareItems(void *p1, void *p2, LPARAM lParam)
+ {
+ CPointerArray * self = (CPointerArray*) lParam;
+ return self->OnCompareItems(reinterpret_cast<T*>(p1),
reinterpret_cast<T*>(p2));
+ }
+
+public:
+ virtual BOOL OnRemoveItem(T * ptr)
+ {
+ return TRUE;
+ }
+
+ virtual int OnCompareItems(T * p1, T * p2)
+ {
+ int t = (reinterpret_cast<int>(p2) -reinterpret_cast<int>(p1));
+ if (t > 0)
+ return 1;
+ if (t < 0)
+ return -1;
+ return 0;
+ }
+
+public:
+ int GetCount() const
+ {
+ return DPA_GetPtrCount(m_hDpa);
+ }
+
+ T* Get(int i) const
+ {
+ return (T*) DPA_GetPtr(m_hDpa, i);
+ }
+
+ BOOL Set(int i, T* ptr)
+ {
+ return DPA_SetPtr(m_hDpa, i, ptr);
+ }
+
+ int Insert(int at, T* ptr)
+ {
+ return DPA_InsertPtr(m_hDpa, at, ptr);
+ }
+
+ int Append(T* ptr)
+ {
+ return DPA_InsertPtr(m_hDpa, DA_LAST, ptr);
+ }
+
+ int IndexOf(T* ptr) const
+ {
+ return DPA_GetPtrIndex(m_hDpa, ptr);
+ }
+
+ BOOL Remove(T* ptr)
+ {
+ int i = IndexOf(ptr);
+ if (i < 0)
+ return FALSE;
+ return RemoveAt(i);
+ }
+
+ BOOL RemoveAt(int i)
+ {
+ T* ptr = (T*) DPA_GetPtr(m_hDpa, i);
+ OnRemoveItem(ptr);
+ return DPA_DeletePtr(m_hDpa, i);
+ }
+
+ BOOL Clear()
+ {
+ DPA_EnumCallback(s_OnRemoveItem, this);
+ return DPA_DeleteAllPtrs(m_hDpa);
+ }
+
+ BOOL Sort()
+ {
+ return DPA_Sort(m_hDpa, s_OnCompareItems, (LPARAM)this);
+ }
+
+ int Search(T* item, int iStart, UINT uFlags)
+ {
+ return DPA_Search(m_hDpa, s_OnCompareItems, (LPARAM)this);
+ }
+};
+
+class CUiRect
+ : public RECT
+{
+public:
+ CUiRect()
+ {
+ left = right = top = bottom = 0;
+ }
+
+ CUiRect(int l, int t, int r, int b)
+ {
+ left = l;
+ right = r;
+ top = t;
+ bottom = b;
+ }
+};
+
+class CUiMargin
+ : public CUiRect
+{
+public:
+ CUiMargin()
+ {
+ }
+
+ CUiMargin(int all)
+ : CUiRect(all, all, all, all)
+ {
+ }
+
+ CUiMargin(int horz, int vert)
+ : CUiRect(horz, vert, horz, vert)
+ {
+ }
+};
+
+class CUiMeasure
+{
+public:
+ enum MeasureType
+ {
+ Type_FitContent = 0,
+ Type_Fixed = 1,
+ Type_Percent = 2,
+ Type_FitParent = 3
+ };
+
+private:
+ MeasureType m_Type;
+ int m_Value;
+
+public:
+ CUiMeasure()
+ {
+ m_Type = Type_FitContent;
+ m_Value = 0;
+ }
+
+ CUiMeasure(MeasureType type, int value)
+ {
+ m_Type = type;
+ m_Value = value;
+ }
+
+ int ComputeMeasure(int parent, int content)
+ {
+ switch (m_Type)
+ {
+ case Type_FitContent:
+ return content;
+ case Type_Fixed:
+ return m_Value;
+ case Type_Percent:
+ return max(content, parent * m_Value / 100);
+ case Type_FitParent:
+ return parent;
+ }
+
+ return 0;
+ }
+
+public:
+ static CUiMeasure FitContent()
+ {
+ return CUiMeasure(Type_FitContent, 0);
+ }
+
+ static CUiMeasure FitParent()
+ {
+ return CUiMeasure(Type_FitParent, 0);
+ }
+
+ static CUiMeasure Fixed(int pixels)
+ {
+ return CUiMeasure(Type_Fixed, pixels);
+ }
+
+ static CUiMeasure Percent(int percent)
+ {
+ return CUiMeasure(Type_Percent, percent);
+ }
+};
+
+enum CUiAlignment
+{
+ UiAlign_LeftTop,
+ UiAlign_Middle,
+ UiAlign_RightBtm,
+ UiAlign_Stretch
+};
+
+class CUiBox
+{
+public:
+ CUiMargin m_Margin;
+
+ CUiAlignment m_HorizontalAlignment;
+ CUiAlignment m_VerticalAlignment;
+
+protected:
+ CUiBox()
+ {
+ m_HorizontalAlignment = UiAlign_LeftTop;
+ m_VerticalAlignment = UiAlign_LeftTop;
+ }
+
+ virtual void ComputeRect(RECT parentRect, RECT currentRect, RECT* newRect)
+ {
+ parentRect.left += m_Margin.left;
+ parentRect.right -= m_Margin.right;
+ parentRect.top += m_Margin.top;
+ parentRect.bottom -= m_Margin.bottom;
+
+ if (parentRect.right < parentRect.left)
+ parentRect.right = parentRect.left;
+
+ if (parentRect.bottom < parentRect.top)
+ parentRect.bottom = parentRect.top;
+
+ SIZE szParent = { parentRect.right - parentRect.left, parentRect.bottom -
parentRect.top };
+ SIZE szCurrent = { currentRect.right - currentRect.left, currentRect.bottom -
currentRect.top };
+
+ currentRect = parentRect;
+
+ switch (m_HorizontalAlignment)
+ {
+ case UiAlign_LeftTop:
+ currentRect.right = currentRect.left + szCurrent.cx;
+ break;
+ case UiAlign_Middle:
+ currentRect.left = parentRect.left + (szParent.cx - szCurrent.cx) / 2;
+ currentRect.right = currentRect.left + szCurrent.cx;
+ break;
+ case UiAlign_RightBtm:
+ currentRect.left = currentRect.right - szCurrent.cx;
+ break;
+ default:
+ break;
+ }
+
+ switch (m_VerticalAlignment)
+ {
+ case UiAlign_LeftTop:
+ currentRect.bottom = currentRect.top + szCurrent.cy;
+ break;
+ case UiAlign_Middle:
+ currentRect.top = parentRect.top + (szParent.cy - szCurrent.cy) / 2;
+ currentRect.bottom = currentRect.top + szCurrent.cy;
+ break;
+ case UiAlign_RightBtm:
+ currentRect.top = currentRect.bottom - szCurrent.cy;
+ break;
+ default:
+ break;
+ }
+
+ *newRect = currentRect;
+ }
+
+
+public:
+ virtual void ComputeMinimalSize(SIZE* size)
+ {
+ // Override in subclass
+ size->cx = max(size->cx, 0);
+ size->cy = min(size->cy, 0);
+ };
+
+ virtual void ComputeContentBounds(RECT* rect)
+ {
+ // Override in subclass
+ };
+
+ virtual DWORD_PTR CountSizableChildren()
+ {
+ // Override in subclass
+ return 0;
+ };
+
+ virtual HDWP OnParentSize(RECT parentRect, HDWP hDwp)
+ {
+ // Override in subclass
+ return NULL;
+ };
+};
+
+class CUiPrimitive
+{
+protected:
+ CUiPrimitive * m_Parent;
+
+public:
+ virtual ~CUiPrimitive() {}
+
+ virtual CUiBox * AsBox() { return NULL; }
+};
+
+class CUiCollection :
+ public CPointerArray < CUiPrimitive >
+{
+ virtual BOOL OnRemoveItem(CUiPrimitive * ptr)
+ {
+ delete ptr;
+ return TRUE;
+ }
+};
+
+class CUiContainer
+{
+protected:
+ CUiCollection m_Children;
+
+public:
+ CUiCollection& Children() { return m_Children; }
+};
+
+class CUiPanel :
+ public CUiPrimitive,
+ public CUiBox,
+ public CUiContainer
+{
+public:
+ CUiMeasure m_Width;
+ CUiMeasure m_Height;
+
+ CUiPanel()
+ {
+ m_Width = CUiMeasure::FitParent();
+ m_Height = CUiMeasure::FitParent();
+ }
+
+ virtual ~CUiPanel()
+ {
+ }
+
+ virtual CUiBox * AsBox() { return this; }
+
+ virtual void ComputeMinimalSize(SIZE* size)
+ {
+ for (int i = 0; i < m_Children.GetCount(); i++)
+ {
+ CUiBox * box = m_Children.Get(i)->AsBox();
+ if (box)
+ {
+ box->ComputeMinimalSize(size);
+ }
+ }
+ };
+
+ virtual void ComputeContentBounds(RECT* rect)
+ {
+ for (int i = 0; i < m_Children.GetCount(); i++)
+ {
+ CUiBox * box = m_Children.Get(i)->AsBox();
+ if (box)
+ {
+ box->ComputeContentBounds(rect);
+ }
+ }
+ };
+
+ virtual DWORD_PTR CountSizableChildren()
+ {
+ int count = 0;
+ for (int i = 0; i < m_Children.GetCount(); i++)
+ {
+ CUiBox * box = m_Children.Get(i)->AsBox();
+ if (box)
+ {
+ count += box->CountSizableChildren();
+ }
+ }
+ return count;
+ }
+
+ virtual HDWP OnParentSize(RECT parentRect, HDWP hDwp)
+ {
+ RECT rect = { 0 };
+
+ SIZE content = { 0 };
+ ComputeMinimalSize(&content);
+
+ int preferredWidth = m_Width.ComputeMeasure(parentRect.right - parentRect.left,
content.cx);
+ int preferredHeight = m_Height.ComputeMeasure(parentRect.bottom - parentRect.top,
content.cy);
+
+ rect.right = preferredWidth;
+ rect.bottom = preferredHeight;
+
+ ComputeRect(parentRect, rect, &rect);
+
+ for (int i = 0; i < m_Children.GetCount(); i++)
+ {
+ CUiBox * box = m_Children.Get(i)->AsBox();
+ if (box)
+ {
+ hDwp = box->OnParentSize(rect, hDwp);
+ }
+ }
+
+ return hDwp;
+ }
+};
+
+template<class T = CWindow>
+class CUiWindow :
+ public CUiPrimitive,
+ public CUiBox,
+ public T
+{
+public:
+ virtual CUiBox * AsBox() { return this; }
+
+ HWND GetWindow() { return T::m_hWnd; }
+
+ virtual void ComputeMinimalSize(SIZE* size)
+ {
+ // TODO: Maybe use WM_GETMINMAXINFO?
+ return CUiBox::ComputeMinimalSize(size);
+ };
+
+ virtual void ComputeContentBounds(RECT* rect)
+ {
+ RECT r;
+ GetWindowRect(T::m_hWnd, &r);
+ rect->left = min(rect->left, r.left);
+ rect->top = min(rect->top, r.top);
+ rect->right = max(rect->right, r.right);
+ rect->bottom = max(rect->bottom, r.bottom);
+ };
+
+ virtual DWORD_PTR CountSizableChildren()
+ {
+ return 1;
+ };
+
+ virtual HDWP OnParentSize(RECT parentRect, HDWP hDwp)
+ {
+ RECT rect;
+
+ ::GetWindowRect(T::m_hWnd, &rect);
+
+ ComputeRect(parentRect, rect, &rect);
+
+ if (hDwp)
+ {
+ return DeferWindowPos(hDwp, T::m_hWnd, NULL, rect.left, rect.top, rect.right
- rect.left, rect.bottom - rect.top, SWP_NOACTIVATE | SWP_NOZORDER);
+ }
+ else
+ {
+ T::SetWindowPos(NULL, rect.left, rect.top, rect.right - rect.left,
rect.bottom - rect.top, SWP_NOACTIVATE | SWP_NOZORDER | SWP_DEFERERASE);
+ return NULL;
+ }
+ };
+
+public:
+ virtual ~CUiWindow()
+ {
+ T::DestroyWindow();
+ }
+};
+
+class CUiSplitPanel :
+ public CUiPrimitive,
+ public CUiBox,
+ public CWindowImpl<CUiSplitPanel>
+{
+ static const int THICKNESS = 4;
+
+protected:
+
+ HCURSOR m_hCursor;
+
+ CUiPanel m_First;
+ CUiPanel m_Second;
+
+ RECT m_LastRect;
+
+ BOOL m_HasOldRect;
+
+public:
+ int m_Pos;
+ BOOL m_Horizontal;
+ BOOL m_DynamicFirst;
+ int m_MinFirst;
+ int m_MinSecond;
+
+ CUiMeasure m_Width;
+ CUiMeasure m_Height;
+
+public:
+ CUiSplitPanel()
+ {
+ m_Width = CUiMeasure::FitParent();
+ m_Height = CUiMeasure::FitParent();
+ m_Pos = 100;
+ m_MinFirst = 100;
+ m_MinSecond = 100;
+ m_DynamicFirst = FALSE;
+ m_HasOldRect = FALSE;
+ }
+
+ virtual ~CUiSplitPanel()
+ {
+ }
+
+ virtual CUiBox * AsBox() { return this; }
+
+ CUiCollection& First() { return m_First.Children(); }
+ CUiCollection& Second() { return m_Second.Children(); }
+
+ virtual void ComputeMinimalSize(SIZE* size)
+ {
+ if (m_Horizontal)
+ size->cx = max(size->cx, THICKNESS);
+ else
+ size->cy = max(size->cy, THICKNESS);
+ m_First.ComputeMinimalSize(size);
+ m_Second.ComputeMinimalSize(size);
+ };
+
+ virtual void ComputeContentBounds(RECT* rect)
+ {
+ RECT r;
+
+ m_First.ComputeContentBounds(rect);
+ m_Second.ComputeContentBounds(rect);
+
+ ::GetWindowRect(m_hWnd, &r);
+
+ rect->left = min(rect->left, r.left);
+ rect->top = min(rect->top, r.top);
+ rect->right = max(rect->right, r.right);
+ rect->bottom = max(rect->bottom, r.bottom);
+ };
+
+ virtual DWORD_PTR CountSizableChildren()
+ {
+ int count = 1;
+ count += m_First.CountSizableChildren();
+ count += m_Second.CountSizableChildren();
+ return count;
+ };
+
+ virtual HDWP OnParentSize(RECT parentRect, HDWP hDwp)
+ {
+ RECT rect = { 0 };
+
+ SIZE content = { 0 };
+ ComputeMinimalSize(&content);
+
+ int preferredWidth = m_Width.ComputeMeasure(parentRect.right - parentRect.left,
content.cx);
+ int preferredHeight = m_Width.ComputeMeasure(parentRect.bottom - parentRect.top,
content.cy);
+
+ rect.right = preferredWidth;
+ rect.bottom = preferredHeight;
+
+ ComputeRect(parentRect, rect, &rect);
+
+ SIZE growth = { 0 };
+ if (m_HasOldRect)
+ {
+ RECT oldRect = m_LastRect;
+
+ growth.cx = (parentRect.right - parentRect.left) - (oldRect.right -
oldRect.left);
+ growth.cy = (parentRect.bottom - parentRect.top) - (oldRect.bottom -
oldRect.top);
+ }
+
+ RECT splitter = rect;
+ RECT first = rect;
+ RECT second = rect;
+
+ if (m_Horizontal)
+ {
+ rect.top += m_MinFirst;
+ rect.bottom -= THICKNESS + m_MinSecond;
+ if (m_DynamicFirst)
+ {
+ if (growth.cy > 0)
+ {
+ m_Pos += min(growth.cy, rect.bottom - (m_Pos+THICKNESS));
+ }
+ else if (growth.cy < 0)
+ {
+ m_Pos += max(growth.cy, rect.top - m_Pos);
+ }
+ }
+
+ if (m_Pos > rect.bottom)
+ m_Pos = rect.bottom;
+
+ if (m_Pos < rect.top)
+ m_Pos = rect.top;
+
+ splitter.top = m_Pos;
+ splitter.bottom = m_Pos + THICKNESS;
+ first.bottom = splitter.top;
+ second.top = splitter.bottom;
+ }
+ else
+ {
+ rect.left += m_MinFirst;
+ rect.right -= THICKNESS + m_MinSecond;
+ if (m_DynamicFirst)
+ {
+ if (growth.cx > 0)
+ {
+ m_Pos += min(growth.cx, rect.right - (m_Pos + THICKNESS));
+ }
+ else if (growth.cx < 0)
+ {
+ m_Pos += max(growth.cy, rect.left - m_Pos);
+ }
+ }
+
+ if (m_Pos > rect.right)
+ m_Pos = rect.right;
+
+ if (m_Pos < rect.left)
+ m_Pos = rect.left;
+
+ splitter.left = m_Pos;
+ splitter.right = m_Pos + THICKNESS;
+ first.right = splitter.left;
+ second.left = splitter.right;
+ }
+
+ m_LastRect = parentRect;
+ m_HasOldRect = TRUE;
+
+ hDwp = m_First.OnParentSize(first, hDwp);
+ hDwp = m_Second.OnParentSize(second, hDwp);
+
+ if (hDwp)
+ {
+ return DeferWindowPos(hDwp, m_hWnd, NULL,
+ splitter.left, splitter.top,
+ splitter.right - splitter.left,
+ splitter.bottom - splitter.top,
+ SWP_NOACTIVATE | SWP_NOZORDER);
+ }
+ else
+ {
+ SetWindowPos(NULL,
+ splitter.left, splitter.top,
+ splitter.right - splitter.left,
+ splitter.bottom - splitter.top,
+ SWP_NOACTIVATE | SWP_NOZORDER);
+ return NULL;
+ }
+ };
+
+private:
+ BOOL ProcessWindowMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam,
LRESULT& theResult, DWORD dwMapId)
+ {
+ theResult = 0;
+ switch (Msg)
+ {
+ case WM_SETCURSOR:
+ SetCursor(m_hCursor);
+ theResult = TRUE;
+ break;
+
+ case WM_LBUTTONDOWN:
+ SetCapture();
+ break;
+
+ case WM_LBUTTONUP:
+ case WM_RBUTTONDOWN:
+ if (GetCapture() == m_hWnd)
+ {
+ ReleaseCapture();
+ }
+ break;
+
+ case WM_MOUSEMOVE:
+ if (GetCapture() == m_hWnd)
+ {
+ POINT Point;
+ GetCursorPos(&Point);
+ ::ScreenToClient(GetParent(), &Point);
+ if (m_Horizontal)
+ SetPos(Point.y);
+ else
+ SetPos(Point.x);
+ }
+ break;
+
+ default:
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+public:
+ int GetPos(VOID)
+ {
+ return m_Pos;
+ }
+
+ void SetPos(int NewPos)
+ {
+ RECT rcParent;
+
+ rcParent = m_LastRect;
+
+ if (m_Horizontal)
+ {
+ rcParent.bottom -= THICKNESS;
+
+ m_Pos = NewPos;
+
+ if (m_Pos < rcParent.top)
+ m_Pos = rcParent.top;
+
+ if (m_Pos > rcParent.bottom)
+ m_Pos = rcParent.bottom;
+ }
+ else
+ {
+ rcParent.right -= THICKNESS;
+
+ m_Pos = NewPos;
+
+ if (m_Pos < rcParent.left)
+ m_Pos = rcParent.left;
+
+ if (m_Pos > rcParent.right)
+ m_Pos = rcParent.right;
+ }
+
+ int count = CountSizableChildren();
+
+ HDWP hdwp = NULL;
+ hdwp = BeginDeferWindowPos(count);
+ hdwp = OnParentSize(m_LastRect, hdwp);
+ EndDeferWindowPos(hdwp);
+ }
+
+public:
+ DECLARE_WND_CLASS_EX(_T("SplitterWindowClass"), CS_HREDRAW | CS_VREDRAW,
COLOR_BTNFACE)
+
+ /* Create splitter bar */
+ HWND Create(HWND hwndParent)
+ {
+ if (m_Horizontal)
+ m_hCursor = LoadCursor(0, IDC_SIZENS);
+ else
+ m_hCursor = LoadCursor(0, IDC_SIZEWE);
+
+ DWORD style = WS_CHILD | WS_VISIBLE;
+ DWORD exStyle = WS_EX_TRANSPARENT;
+
+ RECT size = { 205, 180, 465, THICKNESS };
+ size.right += size.left;
+ size.bottom += size.top;
+
+ return CWindowImpl::Create(hwndParent, size, NULL, style, exStyle);
+ }
+};
Propchange: trunk/reactos/base/applications/rapps_new/rosui.h
------------------------------------------------------------------------------
svn:eol-style = native
Removed: trunk/reactos/base/applications/rapps_new/statusbar.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/rapps_ne…
==============================================================================
--- trunk/reactos/base/applications/rapps_new/statusbar.cpp [iso-8859-1] (original)
+++ trunk/reactos/base/applications/rapps_new/statusbar.cpp (removed)
@@ -1,42 +0,0 @@
-/*
- * PROJECT: ReactOS Applications Manager
- * LICENSE: GPL - See COPYING in the top level directory
- * FILE: base/applications/rapps/statusbar.c
- * PURPOSE: StatusBar functions
- * PROGRAMMERS: Dmitry Chapyshev (dmitry(a)reactos.org)
- */
-
-#include "rapps.h"
-
-HWND hStatusBar;
-
-BOOL
-CreateStatusBar(HWND hwnd)
-{
- hStatusBar = CreateWindowExW(0,
- STATUSCLASSNAMEW,
- NULL,
- WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP,
- 0, 0, 0, 0,
- hwnd,
- (HMENU)IDC_STATUSBAR,
- hInst,
- NULL);
-
- if (!hStatusBar)
- {
- /* TODO: Show error message */
- return FALSE;
- }
-
- return TRUE;
-}
-
-VOID
-SetStatusBarText(LPCWSTR lpszText)
-{
- if (hStatusBar)
- {
- SendMessageW(hStatusBar, SB_SETTEXT, SBT_NOBORDERS, (LPARAM)lpszText);
- }
-}
Modified: trunk/reactos/base/applications/rapps_new/toolbar.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/rapps_ne…
==============================================================================
--- trunk/reactos/base/applications/rapps_new/toolbar.cpp [iso-8859-1] (original)
+++ trunk/reactos/base/applications/rapps_new/toolbar.cpp [iso-8859-1] Mon Apr 27 15:01:40
2015
@@ -110,35 +110,6 @@
return hImageList;
}
-static
-BOOL
-CreateSearchBar(VOID)
-{
- WCHAR szBuf[MAX_STR_LEN];
-
- hSearchBar = CreateWindowExW(WS_EX_CLIENTEDGE,
- L"Edit",
- NULL,
- WS_CHILD | WS_VISIBLE | ES_LEFT | ES_AUTOHSCROLL,
- 0,
- 5,
- 200,
- 22,
- hToolBar,
- (HMENU)0,
- hInst,
- 0);
-
- SendMessageW(hSearchBar, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);
-
- LoadStringW(hInst, IDS_SEARCH_TEXT, szBuf, sizeof(szBuf) / sizeof(WCHAR));
- SetWindowTextW(hSearchBar, szBuf);
-
- SetParent(hSearchBar, hToolBar);
-
- return TRUE;
-}
-
BOOL
CreateToolBar(HWND hwnd)
{
@@ -183,7 +154,5 @@
SendMessageW(hToolBar, TB_ADDBUTTONS, NumButtons, (LPARAM)Buttons);
- CreateSearchBar();
-
return TRUE;
}
Modified: trunk/reactos/base/applications/rapps_new/winmain.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/rapps_ne…
==============================================================================
--- trunk/reactos/base/applications/rapps_new/winmain.cpp [iso-8859-1] (original)
+++ trunk/reactos/base/applications/rapps_new/winmain.cpp [iso-8859-1] Mon Apr 27 15:01:40
2015
@@ -17,7 +17,6 @@
HWND hMainWnd;
HINSTANCE hInst;
-HIMAGELIST hImageTreeView = NULL;
INT SelectedEnumType = ENUM_ALL_COMPONENTS;
SETTINGS_INFO SettingsInfo;
@@ -283,115 +282,6 @@
ListView_SetColumnWidth(hListView, 0, LVSCW_AUTOSIZE);
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
@@ -529,93 +419,6 @@
}
}
-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 @@
}
}
-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 @@
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 */
Modified: trunk/reactos/include/reactos/rosctrls.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/reactos/rosctrls.h…
==============================================================================
--- trunk/reactos/include/reactos/rosctrls.h [iso-8859-1] (original)
+++ trunk/reactos/include/reactos/rosctrls.h [iso-8859-1] Mon Apr 27 15:01:40 2015
@@ -112,7 +112,12 @@
{
return (BOOL)SendMessage(LVM_SETITEM, 0, reinterpret_cast<LPARAM>(pitem));
}
-
+
+ BOOL FindItem(int iStart, const LV_FINDINFO * plvfi)
+ {
+ return (BOOL)SendMessage(LVM_FINDITEM, iStart, (LPARAM) plvfi);
+ }
+
int GetItemCount()
{
return SendMessage(LVM_GETITEMCOUNT);
@@ -200,6 +205,15 @@
return GetItem(pItem);
}
+ void GetItemText(int iItem, int iSubItem, LPTSTR pszText, int cchTextMax)
+ {
+ LV_ITEM itemInfo;
+ itemInfo.iSubItem = iSubItem;
+ itemInfo.pszText = pszText;
+ itemInfo.cchTextMax = cchTextMax;
+
+ SendMessage(LVM_GETITEMTEXT, iItem, (LPARAM) &itemInfo);
+ }
};
template<typename TItemData = DWORD_PTR>
@@ -399,3 +413,35 @@
return SetButtonInfo(index, &info);
}
};
+
+class CStatusBar :
+ public CWindowImplBaseT<CWindow>
+{
+ BOOL ProcessWindowMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam,
LRESULT& theResult, DWORD dwMapId)
+ {
+ theResult = 0;
+ return FALSE;
+ }
+
+public:
+ VOID SetText(LPCWSTR lpszText)
+ {
+ SendMessage(SB_SETTEXT, SBT_NOBORDERS, (LPARAM) lpszText);
+ }
+
+ HWND Create(HWND hwndParent, HMENU hMenu)
+ {
+ HWND hwnd = CreateWindowExW(0,
+ STATUSCLASSNAMEW,
+ NULL,
+ WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP,
+ 0, 0, 0, 0,
+ hwndParent,
+ hMenu,
+ _AtlBaseModule.GetModuleInstance(),
+ NULL);
+ SubclassWindow(hwnd);
+ return hwnd;
+ }
+
+};