Module: wine Branch: master Commit: d3bd40d6274f73db083c7cc5b3b062083971f02a URL: http://source.winehq.org/git/wine.git/?a=commit;h=d3bd40d6274f73db083c7cc5b3...
Author: Erich Hoover ehoover@mines.edu Date: Wed Jan 27 01:11:56 2010 -0700
hhctrl.ocx: Add a ListView for the Index tab.
---
dlls/hhctrl.ocx/help.c | 73 ++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 68 insertions(+), 5 deletions(-)
diff --git a/dlls/hhctrl.ocx/help.c b/dlls/hhctrl.ocx/help.c index 092e97e..20305f1 100644 --- a/dlls/hhctrl.ocx/help.c +++ b/dlls/hhctrl.ocx/help.c @@ -320,8 +320,10 @@ static LRESULT Child_OnPaint(HWND hWnd) return 0; }
-static void ResizeTabChild(HHInfo *info, HWND hwnd) +static void ResizeTabChild(HHInfo *info, int tab) { + HWND hwnd = info->tabs[tab].hwnd; + INT width, height; RECT rect, tabrc; DWORD cnt;
@@ -333,9 +335,28 @@ static void ResizeTabChild(HHInfo *info, HWND hwnd) rect.top = TAB_TOP_PADDING + cnt*(tabrc.bottom-tabrc.top) + TAB_MARGIN; rect.right -= TAB_RIGHT_PADDING + TAB_MARGIN; rect.bottom -= TAB_MARGIN; + width = rect.right-rect.left; + height = rect.bottom-rect.top;
- SetWindowPos(hwnd, NULL, rect.left, rect.top, rect.right-rect.left, - rect.bottom-rect.top, SWP_NOZORDER | SWP_NOACTIVATE); + SetWindowPos(hwnd, NULL, rect.left, rect.top, width, height, + SWP_NOZORDER | SWP_NOACTIVATE); + + /* Resize the tab widget column to perfectly fit the tab window and + * leave sufficient space for the scroll widget. + */ + switch (tab) + { + case TAB_INDEX: { + int scroll_width = GetSystemMetrics(SM_CXVSCROLL); + int border_width = GetSystemMetrics(SM_CXBORDER); + int edge_width = GetSystemMetrics(SM_CXEDGE); + + SendMessageW(info->tabs[TAB_INDEX].hwnd, LVM_SETCOLUMNWIDTH, 0, + width-scroll_width-2*border_width-2*edge_width); + + break; + } + } }
static LRESULT Child_OnSize(HWND hwnd) @@ -351,7 +372,8 @@ static LRESULT Child_OnSize(HWND hwnd) rect.right - TAB_RIGHT_PADDING, rect.bottom - TAB_TOP_PADDING, SWP_NOMOVE);
- ResizeTabChild(info, info->tabs[TAB_CONTENTS].hwnd); + ResizeTabChild(info, TAB_CONTENTS); + ResizeTabChild(info, TAB_INDEX); return 0; }
@@ -729,6 +751,8 @@ static BOOL HH_AddHTMLPane(HHInfo *pHHInfo)
static BOOL AddContentTab(HHInfo *info) { + if(info->tabs[TAB_CONTENTS].id == -1) + return TRUE; /* No "Contents" tab */ info->tabs[TAB_CONTENTS].hwnd = CreateWindowExW(WS_EX_CLIENTEDGE, WC_TREEVIEWW, szEmpty, WS_CHILD | WS_BORDER | 0x25, 50, 50, 100, 100, info->WinType.hwndNavigation, NULL, hhctrl_hinstance, NULL); @@ -737,12 +761,41 @@ static BOOL AddContentTab(HHInfo *info) return FALSE; }
- ResizeTabChild(info, info->tabs[TAB_CONTENTS].hwnd); + ResizeTabChild(info, TAB_CONTENTS); ShowWindow(info->tabs[TAB_CONTENTS].hwnd, SW_SHOW);
return TRUE; }
+static BOOL AddIndexTab(HHInfo *info) +{ + char hidden_column[] = "Column"; + LVCOLUMNA lvc; + + if(info->tabs[TAB_INDEX].id == -1) + return TRUE; /* No "Index" tab */ + info->tabs[TAB_INDEX].hwnd = CreateWindowExW(WS_EX_CLIENTEDGE, WC_LISTVIEWW, + szEmpty, WS_CHILD | WS_BORDER | LVS_SINGLESEL | LVS_REPORT | LVS_NOCOLUMNHEADER, 50, 50, 100, 100, + info->WinType.hwndNavigation, NULL, hhctrl_hinstance, NULL); + if(!info->tabs[TAB_INDEX].hwnd) { + ERR("Could not create ListView control\n"); + return FALSE; + } + memset(&lvc, 0, sizeof(lvc)); + lvc.mask = LVCF_TEXT; + lvc.pszText = hidden_column; + if(SendMessageW(info->tabs[TAB_INDEX].hwnd, LVM_INSERTCOLUMNA, 0, (LPARAM) &lvc) == -1) + { + ERR("Could not create ListView column\n"); + return FALSE; + } + + ResizeTabChild(info, TAB_INDEX); + ShowWindow(info->tabs[TAB_INDEX].hwnd, SW_HIDE); + + return TRUE; +} + /* Viewer Window */
static LRESULT Help_OnSize(HWND hWnd) @@ -918,6 +971,9 @@ static BOOL CreateViewer(HHInfo *pHHInfo) if (!AddContentTab(pHHInfo)) return FALSE;
+ if (!AddIndexTab(pHHInfo)) + return FALSE; + InitContent(pHHInfo);
return TRUE; @@ -958,6 +1014,13 @@ void ReleaseHelpViewer(HHInfo *info) HHInfo *CreateHelpViewer(LPCWSTR filename) { HHInfo *info = heap_alloc_zero(sizeof(HHInfo)); + int i; + + /* Set the invalid tab ID (-1) as the default value for all + * of the tabs, this matches a failed TCM_INSERTITEM call. + */ + for(i=0;i<sizeof(info->tabs)/sizeof(HHTab);i++) + info->tabs[i].id = -1;
OleInitialize(NULL);