static LRESULT CALLBACK TabViewWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { struct TabViewInfo *pTabViewInfo; WNDPROC pfnParentWndProc; BOOL bHandled = FALSE; LRESULT rc = 0; pTabViewInfo = GetTabViewInfo(hWnd); pfnParentWndProc = pTabViewInfo->pfnParentWndProc; switch(message) { case WM_DESTROY: free(pTabViewInfo); SetWindowLongPtr(hWnd, GWLP_WNDPROC, (LONG_PTR) pfnParentWndProc); SetWindowLongPtr(hWnd, GWLP_USERDATA, (LONG_PTR) NULL); break; } if (!bHandled) rc = CallParentWndProc(pfnParentWndProc, hWnd, message, wParam, lParam); switch(message) { case WM_MOVE: case WM_SIZE: if (pTabViewInfo->pCallbacks->pfnOnMoveSize) pTabViewInfo->pCallbacks->pfnOnMoveSize(); break; } return rc; }
void TabView_Reset(HWND hwndTabView) { struct TabViewInfo *pTabViewInfo; TC_ITEM tci; int i; TCHAR* t_text; HRESULT res; BOOL b_res; pTabViewInfo = GetTabViewInfo(hwndTabView); b_res = TabCtrl_DeleteAllItems(hwndTabView); memset(&tci, 0, sizeof(tci)); tci.mask = TCIF_TEXT; tci.cchTextMax = 20; for (i = 0; i < pTabViewInfo->nTabCount; i++) { if (!pTabViewInfo->pCallbacks->pfnGetShowTab || pTabViewInfo->pCallbacks->pfnGetShowTab(i)) { t_text = tstring_from_utf8(pTabViewInfo->pCallbacks->pfnGetTabLongName(i)); if( !t_text ) return; tci.pszText = t_text; res = TabCtrl_InsertItem(hwndTabView, i, &tci); osd_free(t_text); } } TabView_UpdateSelection(hwndTabView); }
void TabView_Reset(HWND hWndTabView) { struct TabViewInfo *pTabViewInfo = GetTabViewInfo(hWndTabView); TCITEM tci; (void)TabCtrl_DeleteAllItems(hWndTabView); memset(&tci, 0, sizeof(TCITEM)); tci.mask = TCIF_TEXT | TCIF_IMAGE; tci.cchTextMax = 20; for (int i = 0; i < pTabViewInfo->nTabCount; i++) { if (!pTabViewInfo->pCallbacks->pfnGetShowTab || pTabViewInfo->pCallbacks->pfnGetShowTab(i)) { TCHAR *t_text = tstring_from_utf8(pTabViewInfo->pCallbacks->pfnGetTabLongName(i)); if(!t_text) return; tci.pszText = t_text; tci.iImage = i; (void)TabCtrl_InsertItem(hWndTabView, i, &tci); free(t_text); } } TabView_UpdateSelection(hWndTabView); }
static LRESULT CallParentWndProc(WNDPROC pfnParentWndProc, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { if (!pfnParentWndProc) pfnParentWndProc = GetTabViewInfo(hWnd)->pfnParentWndProc; LRESULT rc = CallWindowProc(pfnParentWndProc, hWnd, message, wParam, lParam); return rc; }
static LRESULT CallParentWndProc(WNDPROC pfnParentWndProc, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { LRESULT rc; if (!pfnParentWndProc) pfnParentWndProc = GetTabViewInfo(hWnd)->pfnParentWndProc; if (IsWindowUnicode(hWnd)) rc = CallWindowProcW(pfnParentWndProc, hWnd, message, wParam, lParam); else rc = CallWindowProcA(pfnParentWndProc, hWnd, message, wParam, lParam); return rc; }
void TabView_CalculateNextTab(HWND hWndTabView) { struct TabViewInfo *pTabViewInfo = GetTabViewInfo(hWndTabView); // at most loop once through all options for (int i = 0; i < pTabViewInfo->nTabCount; i++) { int nCurrentTab = TabView_GetCurrentTab(hWndTabView); TabView_SetCurrentTab(hWndTabView, (nCurrentTab + 1) % pTabViewInfo->nTabCount); nCurrentTab = TabView_GetCurrentTab(hWndTabView); if (!pTabViewInfo->pCallbacks->pfnGetShowTab || pTabViewInfo->pCallbacks->pfnGetShowTab(nCurrentTab)) // this tab is being shown, so we're all set return; } }
static int TabView_GetCurrentTabIndex(HWND hWndTabView) { int shown_tabs = 0; int nCurrentTab = TabView_GetCurrentTab(hWndTabView); struct TabViewInfo *pTabViewInfo = GetTabViewInfo(hWndTabView); for (int i = 0; i < pTabViewInfo->nTabCount; i++) { if (i == nCurrentTab) break; if (!pTabViewInfo->pCallbacks->pfnGetShowTab || pTabViewInfo->pCallbacks->pfnGetShowTab(i)) shown_tabs++; } return shown_tabs; }
void TabView_SetCurrentTab(HWND hWndTabView, int nTab) { struct TabViewInfo *pTabViewInfo = GetTabViewInfo(hWndTabView); const char *pszName = NULL; char szBuffer[16]; if (pTabViewInfo->pCallbacks->pfnGetTabShortName) pszName = pTabViewInfo->pCallbacks->pfnGetTabShortName(nTab); else { snprintf(szBuffer, ARRAY_LENGTH(szBuffer), "%d", nTab); pszName = szBuffer; } if (pTabViewInfo->pCallbacks->pfnSetCurrentTab) pTabViewInfo->pCallbacks->pfnSetCurrentTab(pszName); }
static int TabView_GetTabFromTabIndex(HWND hWndTabView, int tab_index) { int shown_tabs = -1; struct TabViewInfo *pTabViewInfo = GetTabViewInfo(hWndTabView); for (int i = 0; i < pTabViewInfo->nTabCount; i++) { if (!pTabViewInfo->pCallbacks->pfnGetShowTab || pTabViewInfo->pCallbacks->pfnGetShowTab(i)) { shown_tabs++; if (shown_tabs == tab_index) return i; } } return 0; }
static int TabView_GetTabFromTabIndex(HWND hwndTabView, int tab_index) { int shown_tabs = -1; int i; struct TabViewInfo *pTabViewInfo; pTabViewInfo = GetTabViewInfo(hwndTabView); for (i = 0; i < pTabViewInfo->nTabCount; i++) { if (!pTabViewInfo->pCallbacks->pfnGetShowTab || pTabViewInfo->pCallbacks->pfnGetShowTab(i)) { shown_tabs++; if (shown_tabs == tab_index) return i; } } dprintf("invalid tab index %i\n", tab_index); return 0; }
void TabView_SetCurrentTab(HWND hwndTabView, int nTab) { struct TabViewInfo *pTabViewInfo; LPCSTR pszName; char szBuffer[16]; pTabViewInfo = GetTabViewInfo(hwndTabView); if (pTabViewInfo->pCallbacks->pfnGetTabShortName) { pszName = pTabViewInfo->pCallbacks->pfnGetTabShortName(nTab); } else { snprintf(szBuffer, ARRAY_LENGTH(szBuffer), "%d", nTab); pszName = szBuffer; } if (pTabViewInfo->pCallbacks->pfnSetCurrentTab) pTabViewInfo->pCallbacks->pfnSetCurrentTab(pszName); }
bool TabView_HandleNotify(LPNMHDR lpNmHdr) { HWND hWndTabView = lpNmHdr->hwndFrom; struct TabViewInfo *pTabViewInfo = GetTabViewInfo(hWndTabView); bool bResult = false; switch (lpNmHdr->code) { case TCN_SELCHANGE: int nTabIndex = TabCtrl_GetCurSel(hWndTabView); int nTab = TabView_GetTabFromTabIndex(hWndTabView, nTabIndex); TabView_SetCurrentTab(hWndTabView, nTab); if (pTabViewInfo->pCallbacks->pfnOnSelectionChanged) pTabViewInfo->pCallbacks->pfnOnSelectionChanged(); bResult = true; break; } return bResult; }
int TabView_GetCurrentTab(HWND hwndTabView) { struct TabViewInfo *pTabViewInfo; LPCSTR pszTab = NULL; LPCSTR pszThatTab; int i, nTab = -1; pTabViewInfo = GetTabViewInfo(hwndTabView); if (pTabViewInfo->pCallbacks->pfnGetCurrentTab) pszTab = pTabViewInfo->pCallbacks->pfnGetCurrentTab(); if (pszTab) { if (pTabViewInfo->pCallbacks->pfnGetTabShortName) { for (i = 0; i < pTabViewInfo->nTabCount; i++) { pszThatTab = pTabViewInfo->pCallbacks->pfnGetTabShortName(i); if (pszThatTab && !core_stricmp(pszTab, pszThatTab)) { nTab = i; break; } } } if (nTab < 0) { nTab = 0; sscanf(pszTab, "%d", &nTab); } } else { nTab = 0; } return nTab; }
BOOL TabView_HandleNotify(LPNMHDR lpNmHdr) { HWND hwndTabView; struct TabViewInfo *pTabViewInfo; BOOL bResult = FALSE; int nTabIndex, nTab; hwndTabView = lpNmHdr->hwndFrom; pTabViewInfo = GetTabViewInfo(hwndTabView); switch (lpNmHdr->code) { case TCN_SELCHANGE: nTabIndex = TabCtrl_GetCurSel(hwndTabView); nTab = TabView_GetTabFromTabIndex(hwndTabView, nTabIndex); TabView_SetCurrentTab(hwndTabView, nTab); if (pTabViewInfo->pCallbacks->pfnOnSelectionChanged) pTabViewInfo->pCallbacks->pfnOnSelectionChanged(); bResult = TRUE; break; } return bResult; }
int TabView_GetCurrentTab(HWND hWndTabView) { struct TabViewInfo *pTabViewInfo = GetTabViewInfo(hWndTabView); const char *pszTab = NULL; int nTab = -1; if (pTabViewInfo->pCallbacks->pfnGetCurrentTab) pszTab = pTabViewInfo->pCallbacks->pfnGetCurrentTab(); if (pszTab) { if (pTabViewInfo->pCallbacks->pfnGetTabShortName) { for (int i = 0; i < pTabViewInfo->nTabCount; i++) { const char *pszThatTab = pTabViewInfo->pCallbacks->pfnGetTabShortName(i); if (pszThatTab && !core_stricmp(pszTab, pszThatTab)) { nTab = i; break; } } } if (nTab < 0) { nTab = 0; sscanf(pszTab, "%d", &nTab); } } else nTab = 0; return nTab; }