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 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 Main_RepopulateTabs (BOOL fDestroyInvalid) { static BOOL fInHere = FALSE; if (!fInHere) { fInHere = TRUE; if (IsWindowVisible (g.hMain)) fDestroyInvalid = FALSE; // First we'll have to look around and see what credentials we currently // have. This call just updates g.aCreds[]; it doesn't do anything else. // (void)GetCurrentCredentials(); // We want one tab on the main dialog for each g.aCredentials entry, // and one tab for Advanced. // HWND hTab = GetDlgItem (g.hMain, IDC_TABS); // Generate a list of the lParams we'll be giving tabs... // LPTSTR *aTabs = NULL; size_t cTabs = 0; size_t iTabOut = 0; size_t nCreds = 0; lock_ObtainMutex(&g.credsLock); size_t iCreds; for (iCreds = 0; iCreds < g.cCreds; ++iCreds) { if (g.aCreds[ iCreds ].szCell[0]) ++nCreds; } if (!nCreds) { fDestroyInvalid = TRUE; } if (!fDestroyInvalid) { int nTabs = TabCtrl_GetItemCount(hTab); for (int iTab = 0; iTab < nTabs; ++iTab) { LPTSTR pszTab = (LPTSTR)GetTabParam (hTab, iTab); if (ISCELLTAB(pszTab) && (*pszTab)) { if (REALLOC (aTabs, cTabs, 1+iTabOut, cREALLOC_TABS)) aTabs[ iTabOut++ ] = CloneString(pszTab); } } } if (nCreds == 0) { if (REALLOC (aTabs, cTabs, 1+iTabOut, cREALLOC_TABS)) aTabs[ iTabOut++ ] = CloneString (TEXT("")); } else for (iCreds = 0; iCreds < g.cCreds; ++iCreds) { if (g.aCreds[ iCreds ].szCell[0]) { size_t ii; for (ii = 0; ii < iTabOut; ++ii) { if (!ISCELLTAB (aTabs[ii])) continue; if (!lstrcmpi (g.aCreds[ iCreds ].szCell, aTabs[ ii ])) break; } if (ii == iTabOut) { if (REALLOC (aTabs, cTabs, 1+iTabOut, cREALLOC_TABS)) aTabs[ iTabOut++ ] = CloneString (g.aCreds[ iCreds ].szCell); } } } lock_ReleaseMutex(&g.credsLock); if (Main_ShowMountTab()) { if (REALLOC (aTabs, cTabs, 1+iTabOut, cREALLOC_TABS)) aTabs[ iTabOut++ ] = dwTABPARAM_MOUNT; } #ifndef UAC_COMPATIBLE if (g.fIsWinNT) { if (REALLOC (aTabs, cTabs, 1+iTabOut, cREALLOC_TABS)) aTabs[ iTabOut++ ] = dwTABPARAM_ADVANCED; } #endif // Now erase the current tabs, and re-add new ones. Remember which tab is // currently selected, so we can try to go back to it later. // int iTabSel = 0; if (TabCtrl_GetItemCount(hTab)) { LPTSTR pszTabSel = (LPTSTR)GetTabParam (hTab, TabCtrl_GetCurSel(hTab)); for (size_t iSel = 0; iSel < iTabOut; ++iSel) { if ((!ISCELLTAB(pszTabSel)) && (!ISCELLTAB(aTabs[iSel])) && (pszTabSel == aTabs[iSel])) iTabSel = iSel; else if (ISCELLTAB(pszTabSel) && ISCELLTAB(aTabs[iSel]) && !lstrcmpi (pszTabSel, aTabs[iSel])) iTabSel = iSel; } } int nTabs = TabCtrl_GetItemCount(hTab); for (int iTab = 0; iTab < nTabs; ++iTab) { LPTSTR pszTab = (LPTSTR)GetTabParam (hTab, iTab); if (ISCELLTAB(pszTab)) FreeString (pszTab); } TabCtrl_DeleteAllItems (hTab); for (size_t ii = 0; ii < iTabOut; ++ii) { TCHAR szTitle[cchRESOURCE]; if (aTabs[ii] == dwTABPARAM_ADVANCED) GetString (szTitle, IDS_ADVANCED); else if (aTabs[ii] == dwTABPARAM_MOUNT) GetString (szTitle, IDS_MOUNT); else if ((nCreds <= 1) || (aTabs[ii][0] == TEXT('\0'))) GetString (szTitle, IDS_CREDENTIALS); else lstrcpy (szTitle, aTabs[ii]); TC_ITEM Item; memset (&Item, 0x00, sizeof(Item)); Item.mask = TCIF_PARAM | TCIF_TEXT; Item.pszText = szTitle; Item.cchTextMax = cchRESOURCE; Item.lParam = (LPARAM)(aTabs[ii]); TabCtrl_InsertItem (hTab, ii, &Item); } if (aTabs != NULL) Free (aTabs); TabCtrl_SetCurSel (hTab, iTabSel); Main_OnSelectTab (); fInHere = FALSE; } }