void Display_SelectAll (void) { HWND hDlg = GetTabChild (GetDlgItem (g.hMain, IDC_TAB)); HWND hList = GetDlgItem (hDlg, IDC_GROUPS_LIST); if (!IsWindow (hList)) hList = GetDlgItem (hDlg, IDC_USERS_LIST); if (!IsWindow (hList)) hList = GetDlgItem (hDlg, IDC_MACHINES_LIST); if (IsWindow (hList)) { // Select all items in the list // FastList_SelectAll (hList); // Simulate a FLN_ITEMSELECT notification (since we changed // the selection programmatically, no notification will have been // sent). // FLN_ITEMSELECT_PARAMS fln; fln.hdr.hwndFrom = hList; fln.hdr.idFrom = GetWindowLong (hList, GWL_ID); fln.hdr.code = FLN_ITEMSELECT; fln.hItem = FastList_FindFirstSelected (hList); SendMessage (GetParent (hList), WM_NOTIFY, (WPARAM)fln.hdr.idFrom, (LPARAM)&fln); } }
LPASIDLIST Display_GetSelectedList (void) { LPASIDLIST pAsidList = NULL; HWND hDlg = GetTabChild (GetDlgItem (g.hMain, IDC_TAB)); HWND hList = GetDlgItem (hDlg, IDC_GROUPS_LIST); if (!IsWindow (hList)) hList = GetDlgItem (hDlg, IDC_USERS_LIST); if (!IsWindow (hList)) hList = GetDlgItem (hDlg, IDC_MACHINES_LIST); if (IsWindow (hList)) { if (asc_AsidListCreate (&pAsidList)) { for (HLISTITEM hItem = FastList_FindFirstSelected (hList); hItem != NULL; hItem = FastList_FindNextSelected (hList, hItem)) { ASID idObject = (ASID)FastList_GetItemParam (hList, hItem); if (idObject) asc_AsidListAddEntry (&pAsidList, idObject, 0); } } } return pAsidList; }
void Main_PrepareTabChild (size_t iTabNew) { HWND hTab = GetDlgItem (g.hMain, IDC_TAB); int iTabOld = TabCtrl_GetCurSel (hTab); if (iTabNew == -1) iTabNew = iTabOld; HWND hDlg; if ((hDlg = GetTabChild (hTab)) != NULL) DestroyWindow (hDlg); if ((hDlg = ModelessDialog (aTABS[ iTabNew ].iddChild, hTab, aTABS[ iTabNew ].procChild)) != NULL) { if (iTabNew != iTabOld) TabCtrl_SetCurSel (hTab, iTabNew); ShowWindow (hDlg, SW_SHOW); } // Remember this tab as the last one the user saw, so that if the app gets // closed we can re-open it to the same tab. // gr.iTabLast = iTabNew; // Check/uncheck/enable/disable our dialog's menu items as appropriate. // We do this whenever the current tab changes, because some of the // menu items will change state depending on which tab is visible. // Main_SetMenus(); }
TABTYPE Display_GetActiveTab (void) { HWND hDlg = GetTabChild (GetDlgItem (g.hMain, IDC_TAB)); if (IsWindow (GetDlgItem (hDlg, IDC_GROUPS_LIST))) return ttGROUPS; if (IsWindow (GetDlgItem (hDlg, IDC_MACHINES_LIST))) return ttMACHINES; return ttUSERS; }
void Main_OnSelectTab (void) { HWND hTab = GetDlgItem (g.hMain, IDC_TABS); size_t iTab = TabCtrl_GetCurSel (hTab); HWND hDlgOld = GetTabChild (hTab); HWND hDlgNew; if ((hDlgNew = Main_CreateTabDialog (hTab, iTab)) != NULL) ShowWindow (hDlgNew, SW_SHOW); if (hDlgOld) DestroyWindow (hDlgOld); }
void Display_RefreshView_Fast (void) { HWND hDlg = GetTabChild (GetDlgItem (g.hMain, IDC_TAB)); HWND hList = GetDlgItem (hDlg, IDC_GROUPS_LIST); if (!IsWindow (hList)) hList = GetDlgItem (hDlg, IDC_USERS_LIST); if (!IsWindow (hList)) hList = GetDlgItem (hDlg, IDC_MACHINES_LIST); if (IsWindow (hList)) { RECT rWindow; GetClientRect (hList, &rWindow); InvalidateRect (hList, &rWindow, FALSE); UpdateWindow (hList); } }
void Display_PopulateGroupList (void) { if (g.idCell) { HWND hDlg = GetTabChild (GetDlgItem (g.hMain, IDC_TAB)); HWND hList = GetDlgItem (hDlg, IDC_GROUPS_LIST); if (IsWindow (hList)) { TCHAR szQuerying[ cchRESOURCE ]; GetString (szQuerying, IDS_QUERYING_LONG); SetDlgItemText (hDlg, IDC_GROUPS_TITLE, szQuerying); Display_StartWorking(); GetDlgItemText (hDlg, IDC_GROUPS_PATTERN, g.szPatternGroups, cchNAME); StartTask (taskUPD_GROUPS, g.hMain); } } }
void NewCreds_OnCancel (HWND hDlg) { TCHAR szText[ cchRESOURCE ] = ""; LPTSTR pszCell = NULL; if (GetDlgItem (hDlg, IDC_NEWCREDS_CELL)) { GetDlgItemText (hDlg, IDC_NEWCREDS_CELL, szText, cchRESOURCE); if ( szText[0] ) pszCell = szText; } if ( !pszCell ) pszCell = (LPTSTR)GetWindowLongPtr (hDlg, DWLP_USER); if (pszCell) { HWND hTab = GetDlgItem (g.hMain, IDC_TABS); LPTSTR pszTab = (LPTSTR)GetTabParam (hTab, TabCtrl_GetCurSel(hTab)); HWND hChildDlg = NULL; lock_ObtainMutex(&g.credsLock); for (size_t iCreds = 0; iCreds < g.cCreds; ++iCreds) { if (!lstrcmpi (g.aCreds[ iCreds ].szCell, pszCell)) { g.aCreds[ iCreds ].fRemind = FALSE; SaveRemind (iCreds); // Check the active tab, and fix its checkbox if necessary // if (pszTab && HIWORD(pszTab) && (!lstrcmpi (pszTab, pszCell))) { hChildDlg = GetTabChild (hTab); } } } lock_ReleaseMutex(&g.credsLock); if (hChildDlg) CheckDlgButton (hChildDlg, IDC_CREDS_REMIND, FALSE); } }
void Server_DisplayTab (HWND hDlg, CHILDTAB iTab) { HWND hTab = GetDlgItem (hDlg, IDC_TABS); int idd = -1; DLGPROC dlgproc = NULL; switch (iTab) { case tabSERVICES: idd = IDD_SERVICES; dlgproc = (DLGPROC)Services_DlgProc; break; case tabAGGREGATES: idd = IDD_AGGREGATES; dlgproc = (DLGPROC)Aggregates_DlgProc; break; case tabFILESETS: idd = IDD_FILESETS; dlgproc = (DLGPROC)Filesets_DlgProc; break; } if (idd != -1) { HWND hDialogOld = GetTabChild (hTab); HWND hDialogNew = ModelessDialog (idd, hTab, dlgproc); if (hDialogNew != NULL) { TabCtrl_SetCurSel (hTab, iTab); ShowWindow (hDialogNew, SW_SHOW); if (hDialogOld != NULL) { DestroyWindow (hDialogOld); } Server_ForceRedraw (hDlg); } } }
size_t Display_GetSelectedCount (void) { size_t cSelected = 0; HWND hDlg = GetTabChild (GetDlgItem (g.hMain, IDC_TAB)); HWND hList = GetDlgItem (hDlg, IDC_GROUPS_LIST); if (!IsWindow (hList)) hList = GetDlgItem (hDlg, IDC_USERS_LIST); if (!IsWindow (hList)) hList = GetDlgItem (hDlg, IDC_MACHINES_LIST); if (IsWindow (hList)) { for (HLISTITEM hItem = FastList_FindFirstSelected (hList); hItem != NULL; hItem = FastList_FindNextSelected (hList, hItem)) { ++cSelected; } } return cSelected; }
void Main_OnCheckMenuRemind (void) { BOOL fRemind = FALSE; lock_ObtainMutex(&g.credsLock); size_t iCreds; for (iCreds = 0; iCreds < g.cCreds; ++iCreds) { if (g.aCreds[ iCreds ].fRemind) fRemind = TRUE; } fRemind = !fRemind; for (iCreds = 0; iCreds < g.cCreds; ++iCreds) { if (g.aCreds[ iCreds ].fRemind != fRemind) { g.aCreds[ iCreds ].fRemind = fRemind; SaveRemind (iCreds); } } lock_ReleaseMutex(&g.credsLock); // Check the active tab, and fix its checkbox if necessary // HWND hTab = GetDlgItem (g.hMain, IDC_TABS); LPTSTR pszTab = (LPTSTR)GetTabParam (hTab, TabCtrl_GetCurSel(hTab)); if (ISCELLTAB(pszTab) && (*pszTab)) { HWND hDlg = GetTabChild (hTab); if (hDlg) CheckDlgButton (hDlg, IDC_CREDS_REMIND, fRemind); } // Make sure the reminder timer is going // Main_EnableRemindTimer (fRemind); }
void Server_OnKey_Tab (HWND hDlg, BOOL fForward) { // The tab-cycle should go: // TabControl <-> TabChildControls // HWND hFocus = GetFocus(); HWND hTabChild = GetTabChild (GetDlgItem (hDlg, IDC_TABS)); if (fForward) { if (hFocus == GetDlgItem (hDlg, IDC_TABS)) { PostMessage (hDlg, WM_NEXTDLGCTL, (WPARAM)GetNextDlgTabItem (hTabChild, NULL, FALSE), TRUE); } else { if (GetNextDlgTabItem (hTabChild, hFocus, FALSE) == GetNextDlgTabItem (hTabChild, NULL, FALSE)) PostMessage (hDlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem (hDlg, IDC_TABS), TRUE); else PostMessage (hDlg, WM_NEXTDLGCTL, (WPARAM)GetNextDlgTabItem (hTabChild, hFocus, FALSE), TRUE); } } else // (!fForward) { if (hFocus == GetDlgItem (hDlg, IDC_TABS)) { PostMessage (hDlg, WM_NEXTDLGCTL, (WPARAM)GetLastDlgTabItem (hTabChild), TRUE); } else { if (hFocus == GetNextDlgTabItem (hTabChild, NULL, FALSE)) PostMessage (hDlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem (hDlg, IDC_TABS), TRUE); else PostMessage (hDlg, WM_NEXTDLGCTL, (WPARAM)GetNextDlgTabItem (hTabChild, hFocus, TRUE), TRUE); } } }
void Display_RefreshView (LPVIEWINFO pviNew, ICONVIEW ivNew) { // Find the current VIEWINFO and ICONVIEW settings // HWND hDlg = GetTabChild (GetDlgItem (g.hMain, IDC_TAB)); HWND hList; LPVIEWINFO pviOld; ICONVIEW *pivOld; switch (Display_GetActiveTab()) { case ttUSERS: pivOld = &gr.ivUsr; pviOld = &gr.viewUsr; hList = GetDlgItem (hDlg, IDC_USERS_LIST); break; case ttGROUPS: pivOld = &gr.ivGrp; pviOld = &gr.viewGrp; hList = GetDlgItem (hDlg, IDC_GROUPS_LIST); break; case ttMACHINES: pivOld = &gr.ivMch; pviOld = &gr.viewMch; hList = GetDlgItem (hDlg, IDC_MACHINES_LIST); break; } if (IsWindow(hList)) { FastList_Begin (hList); // If the VIEWINFO state has changed, fix it. This will change between // large icons, small icons and details, as well as correct the currently- // displayed columns to match what's in the new VIEWINFO structure. // BOOL fChangedLayouts = FALSE; if (memcmp (pviOld, pviNew, sizeof(VIEWINFO))) { FL_RestoreView (hList, pviNew); fChangedLayouts = ((pviOld->lvsView & FLS_VIEW_MASK) != (pviNew->lvsView & FLS_VIEW_MASK)) ? TRUE : FALSE; memcpy (pviOld, pviNew, sizeof(VIEWINFO)); } // If the ICONVIEW state has changed, fix all items to show just // the appropriate icons. We'll also have to do this if we just changed // from details/small/large icons to another layout (that's what // fChangedLayouts indicates) // if ((*pivOld != ivNew) || (fChangedLayouts)) { DWORD dwStyle = GetWindowLong (hList, GWL_STYLE); HLISTITEM hItem = NULL; while ((hItem = FastList_FindNext (hList, hItem)) != NULL) { ASID idObject = (ASID)FastList_GetItemParam (hList, hItem); int iFirstImage; int iSecondImage; if (pviOld == &gr.viewUsr) Display_GetImageIcons (dwStyle, ivNew, idObject, imageUSER, IMAGE_NOIMAGE, &iFirstImage, &iSecondImage); else if (pviOld == &gr.viewGrp) Display_GetImageIcons (dwStyle, ivNew, idObject, imageGROUP, IMAGE_NOIMAGE, &iFirstImage, &iSecondImage); else Display_GetImageIcons (dwStyle, ivNew, idObject, imageSERVER, IMAGE_NOIMAGE, &iFirstImage, &iSecondImage); FastList_SetItemFirstImage (hList, hItem, iFirstImage); FastList_SetItemSecondImage (hList, hItem, iSecondImage); } *pivOld = ivNew; } FastList_End (hList); } }
void Display_OnEndTask_UpdMachines (LPTASKPACKET ptp) { HWND hDlg = GetTabChild (GetDlgItem (g.hMain, IDC_TAB)); HWND hList = GetDlgItem (hDlg, IDC_MACHINES_LIST); if (IsWindow (hList) && !lstrcmpi (TASKDATA(ptp)->szPattern, g.szPatternMachines)) { FastList_Begin (hList); // Update the title above the list to indicate what we're showing // TCHAR szCell[ cchRESOURCE ]; asc_CellNameGet_Fast (g.idClient, g.idCell, szCell); LPTSTR pszTitle = FormatString ((TASKDATA(ptp)->szPattern[0]) ? IDS_MACHINES_PATTERN : IDS_MACHINES_ALL, TEXT("%s"), szCell); SetDlgItemText (hDlg, IDC_MACHINES_TITLE, pszTitle); FreeString (pszTitle); // For faster access, we'll want to use a hashlist to deal with // the items in our ASIDLIST (right now it's just a flat array). // This lets us remove duplicates--which is no big deal because // there shouldn't be any anyway--but more importantly it lets // us instantly determine if a particular ASID is in the list // (the asc_AsidListTest function is O(n), and we need O(1)). // LPHASHLIST pAsidList = New (HASHLIST); if (TASKDATA(ptp)->pAsidList) { for (size_t iAsid = 0; iAsid < TASKDATA(ptp)->pAsidList->cEntries; ++iAsid) pAsidList->AddUnique ((PVOID)(TASKDATA(ptp)->pAsidList->aEntries[ iAsid ].idObject)); } // Delete any items which are currently in the FastList but // which aren't in our AsidList. // HLISTITEM hItemNext; for (HLISTITEM hItem = FastList_FindFirst (hList); hItem; hItem = hItemNext) { hItemNext = FastList_FindNext (hList, hItem); ASID idObject = (ASID)FastList_GetItemParam (hList, hItem); if (!pAsidList->fIsInList ((PVOID)idObject)) FastList_RemoveItem (hList, hItem); } // Add items for any entries which are in our AsidList but aren't // currently in the FastList. // DWORD dwStyle = GetWindowLong (hList, GWL_STYLE); for (LPENUM pEnum = pAsidList->FindFirst(); pEnum; pEnum = pEnum->FindNext()) { ASID idObject = (ASID)( pEnum->GetObject() ); HLISTITEM hItem; if ((hItem = FastList_FindItem (hList, (LPARAM)idObject)) == NULL) { FASTLISTADDITEM ai; memset (&ai, 0x00, sizeof(ai)); Display_GetImageIcons (dwStyle, gr.ivMch, idObject, imageSERVER, IMAGE_NOIMAGE, &ai.iFirstImage, &ai.iSecondImage); ai.lParam = (LPARAM)idObject; hItem = FastList_AddItem (hList, &ai); } } Delete (pAsidList); FastList_End (hList); } Display_StopWorking(); }
HWND Server_GetCurrentTab (HWND hWnd) { return GetTabChild (GetDlgItem (hWnd, IDC_TABS)); }