6 #include "TaAfsUsrMgr.h"
12 * PROTOTYPES _________________________________________________________________
16 BOOL CALLBACK Columns_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
17 void Columns_OnInitDialog (HWND hDlg, LPVIEWINFO lpviDefault);
18 void Columns_OnSelect (HWND hDlg);
19 void Columns_OnSelAvail (HWND hDlg);
20 void Columns_OnSelShown (HWND hDlg);
21 void Columns_OnInsert (HWND hDlg);
22 void Columns_OnDelete (HWND hDlg);
23 void Columns_OnMoveUp (HWND hDlg);
24 void Columns_OnMoveDown (HWND hDlg);
25 void Columns_OnApply (HWND hDlg);
29 * COLUMNS DIALOG _____________________________________________________________
35 ceUSERS, // gr.viewUsr
36 ceGROUPS, // gr.viewGrp
37 ceMACHINES, // gr.viewMch
49 { IDS_COL_USERS, FALSE }, // ceUSERS
50 { IDS_COL_GROUPS, FALSE }, // ceGROUPS
51 { IDS_COL_MACHINES, FALSE }, // ceMACHINES
54 #define nCOLUMNS (sizeof(COLUMNS)/sizeof(COLUMNS[0]))
59 LPVIEWINFO lpviDefault;
62 void ShowColumnsDialog (HWND hParent, LPVIEWINFO lpvi)
64 for (size_t iCol = 0; iCol < nCOLUMNS; ++iCol)
66 COLUMNS[ iCol ].fChanged = FALSE;
69 memcpy (&COLUMNS[ ceUSERS ].vi, &gr.viewUsr, sizeof(VIEWINFO));
70 memcpy (&COLUMNS[ ceGROUPS ].vi, &gr.viewGrp, sizeof(VIEWINFO));
71 memcpy (&COLUMNS[ ceMACHINES ].vi, &gr.viewMch, sizeof(VIEWINFO));
73 if (lpvi == &gr.viewUsr)
74 lpvi = &COLUMNS[ ceUSERS ].vi;
75 else if (lpvi == &gr.viewGrp)
76 lpvi = &COLUMNS[ ceGROUPS ].vi;
77 else if (lpvi == &gr.viewMch)
78 lpvi = &COLUMNS[ ceMACHINES ].vi;
80 // If the caller didn't specify which VIEWINFO structure to adjust
81 // by default, pick whichever one is on the currently-displayed tab
85 switch (Display_GetActiveTab())
88 lpvi = &COLUMNS[ ceUSERS ].vi;
91 lpvi = &COLUMNS[ ceGROUPS ].vi;
94 lpvi = &COLUMNS[ ceMACHINES ].vi;
99 // Show the Columns dialog
101 LPPROPSHEET psh = PropSheet_Create (IDS_COLUMNS_TITLE, FALSE);
102 psh->sh.hwndParent = hParent;
104 ShowColumnsParams *pscp = New (ShowColumnsParams);
105 pscp->hParent = hParent;
106 pscp->lpviDefault = lpvi;
108 PropSheet_AddTab (psh, 0, IDD_COLUMNS, (DLGPROC)Columns_DlgProc, (LPARAM)pscp, TRUE);
109 PropSheet_ShowModal (psh, PumpMessage);
113 BOOL CALLBACK Columns_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
115 if (AfsAppLib_HandleHelp (IDD_COLUMNS, hDlg, msg, wp, lp))
118 if (msg == WM_INITDIALOG)
119 SetWindowLong (hDlg, DWL_USER, ((LPPROPSHEETPAGE)lp)->lParam);
121 ShowColumnsParams *pscp;
122 pscp = (ShowColumnsParams *)GetWindowLong (hDlg, DWL_USER);
127 Columns_OnInitDialog (hDlg, (pscp) ? pscp->lpviDefault : NULL);
134 Columns_OnApply (hDlg);
139 EndDialog (hDlg, LOWORD(wp));
143 if (HIWORD(wp) == CBN_SELCHANGE)
145 Columns_OnSelect (hDlg);
150 if (HIWORD(wp) == LBN_SELCHANGE)
152 Columns_OnSelAvail (hDlg);
157 if (HIWORD(wp) == LBN_SELCHANGE)
159 Columns_OnSelShown (hDlg);
164 Columns_OnInsert (hDlg);
168 Columns_OnDelete (hDlg);
172 Columns_OnMoveUp (hDlg);
176 Columns_OnMoveDown (hDlg);
186 void Columns_OnInitDialog (HWND hDlg, LPVIEWINFO lpviDefault)
188 HWND hList = GetDlgItem (hDlg, IDC_COLUMNS);
189 CB_StartChange (hList);
191 for (size_t iCol = 0; iCol < nCOLUMNS; ++iCol)
193 if ((COLUMNS[iCol].fUsuallyHidden) && (lpviDefault != &COLUMNS[iCol].vi))
196 CB_AddItem (hList, COLUMNS[iCol].ids, (LPARAM)&COLUMNS[iCol].vi);
199 CB_EndChange (hList, (LPARAM)lpviDefault);
201 Columns_OnSelect (hDlg);
205 void Columns_OnSelect (HWND hDlg)
208 LPVIEWINFO lpvi = (LPVIEWINFO)CB_GetSelectedData (GetDlgItem(hDlg,IDC_COLUMNS));
210 // Fill in the Available list...
212 hList = GetDlgItem (hDlg, IDC_COL_AVAIL);
213 LB_StartChange (hList);
215 for (size_t iAvail = 0; iAvail < lpvi->nColsAvail; ++iAvail)
217 for (size_t iShown = 0; iShown < lpvi->nColsShown; ++iShown)
219 if (lpvi->aColumns[ iShown ] == iAvail)
222 if (iShown == lpvi->nColsShown)
224 LB_AddItem (hList, lpvi->idsColumns[ iAvail ], (LPARAM)iAvail);
228 LB_EndChange (hList);
229 Columns_OnSelAvail (hDlg);
231 // Fill in the Shown list...
233 hList = GetDlgItem (hDlg, IDC_COL_SHOWN);
234 LB_StartChange (hList);
236 for (size_t iShown = 0; iShown < lpvi->nColsShown; ++iShown)
238 iAvail = lpvi->aColumns[ iShown ];
239 LB_AddItem (hList, lpvi->idsColumns[ iAvail ], (LPARAM)iAvail);
242 LB_EndChange (hList);
243 Columns_OnSelShown (hDlg);
247 void Columns_OnSelAvail (HWND hDlg)
249 HWND hList = GetDlgItem (hDlg, IDC_COL_AVAIL);
250 int ii = LB_GetSelected (hList);
252 EnableWindow (GetDlgItem (hDlg, IDC_COL_INSERT), (ii != -1));
256 void Columns_OnSelShown (HWND hDlg)
258 HWND hList = GetDlgItem (hDlg, IDC_COL_SHOWN);
259 int ii = LB_GetSelected (hList);
263 EnableWindow (GetDlgItem (hDlg, IDC_COL_DELETE), FALSE);
264 EnableWindow (GetDlgItem (hDlg, IDC_COL_UP), FALSE);
265 EnableWindow (GetDlgItem (hDlg, IDC_COL_DOWN), FALSE);
269 int iAvail = LB_GetData (hList, ii);
270 EnableWindow (GetDlgItem (hDlg, IDC_COL_DELETE), (iAvail != 0));
272 int ci = (int)SendMessage (hList, LB_GETCOUNT, 0, 0);
273 EnableWindow (GetDlgItem (hDlg, IDC_COL_UP), (ii > 1));
274 EnableWindow (GetDlgItem (hDlg, IDC_COL_DOWN), (ii > 0 && ii < ci-1));
279 void Columns_OnInsert (HWND hDlg)
281 LPVIEWINFO lpvi = (LPVIEWINFO)CB_GetSelectedData (GetDlgItem (hDlg, IDC_COLUMNS));
282 HWND hAvail = GetDlgItem (hDlg, IDC_COL_AVAIL);
283 HWND hShown = GetDlgItem (hDlg, IDC_COL_SHOWN);
284 int ii = LB_GetSelected (hAvail);
288 size_t iAvail = LB_GetData (hAvail, ii);
289 int iShown = 1+ LB_GetSelected (hShown);
291 TCHAR szText[ cchRESOURCE ];
292 SendMessage (hAvail, LB_GETTEXT, ii, (LPARAM)szText);
294 LB_AddItem (hShown, szText, iAvail);
295 SendMessage (hAvail, LB_DELETESTRING, ii, 0);
297 lpvi->aColumns[ lpvi->nColsShown ] = iAvail;
300 for (size_t iCol = 0; iCol < nCOLUMNS; ++iCol)
302 if (lpvi == &COLUMNS[ iCol ].vi)
303 COLUMNS[ iCol ].fChanged = TRUE;
306 Columns_OnSelAvail (hDlg);
307 Columns_OnSelShown (hDlg);
308 PropSheetChanged (hDlg);
313 void Columns_OnDelete (HWND hDlg)
315 LPVIEWINFO lpvi = (LPVIEWINFO)CB_GetSelectedData (GetDlgItem (hDlg, IDC_COLUMNS));
316 HWND hAvail = GetDlgItem (hDlg, IDC_COL_AVAIL);
317 HWND hShown = GetDlgItem (hDlg, IDC_COL_SHOWN);
318 int ii = LB_GetSelected (hShown);
322 TCHAR szText[ cchRESOURCE ];
323 SendMessage (hShown, LB_GETTEXT, ii, (LPARAM)szText);
325 size_t iAvail = (size_t)LB_GetData (hShown, ii);
326 LB_AddItem (hAvail, szText, iAvail);
327 SendMessage (hShown, LB_DELETESTRING, ii, 0);
329 for ( ; ii < (int)lpvi->nColsShown-1; ++ii)
331 lpvi->aColumns[ ii ] = lpvi->aColumns[ ii+1 ];
335 for (size_t iCol = 0; iCol < nCOLUMNS; ++iCol)
337 if (lpvi == &COLUMNS[ iCol ].vi)
338 COLUMNS[ iCol ].fChanged = TRUE;
341 Columns_OnSelAvail (hDlg);
342 Columns_OnSelShown (hDlg);
343 PropSheetChanged (hDlg);
348 void Columns_OnMoveUp (HWND hDlg)
350 LPVIEWINFO lpvi = (LPVIEWINFO)CB_GetSelectedData (GetDlgItem (hDlg, IDC_COLUMNS));
351 HWND hAvail = GetDlgItem (hDlg, IDC_COL_AVAIL);
352 HWND hShown = GetDlgItem (hDlg, IDC_COL_SHOWN);
353 int ii = LB_GetSelected (hShown);
357 size_t iAvail = (size_t)LB_GetData (hShown, ii);
358 lpvi->aColumns[ ii ] = lpvi->aColumns[ ii-1 ];
359 lpvi->aColumns[ ii-1 ] = iAvail;
361 for (size_t iCol = 0; iCol < nCOLUMNS; ++iCol)
363 if (lpvi == &COLUMNS[ iCol ].vi)
364 COLUMNS[ iCol ].fChanged = TRUE;
367 Columns_OnSelect (hDlg);
368 LB_SetSelectedByData (hShown, (LPARAM)iAvail);
369 Columns_OnSelShown (hDlg);
370 PropSheetChanged (hDlg);
375 void Columns_OnMoveDown (HWND hDlg)
377 LPVIEWINFO lpvi = (LPVIEWINFO)CB_GetSelectedData (GetDlgItem (hDlg, IDC_COLUMNS));
378 HWND hAvail = GetDlgItem (hDlg, IDC_COL_AVAIL);
379 HWND hShown = GetDlgItem (hDlg, IDC_COL_SHOWN);
380 int ii = LB_GetSelected (hShown);
384 size_t iAvail = (size_t)LB_GetData (hShown, ii);
385 lpvi->aColumns[ ii ] = lpvi->aColumns[ ii+1 ];
386 lpvi->aColumns[ ii+1 ] = iAvail;
388 for (size_t iCol = 0; iCol < nCOLUMNS; ++iCol)
390 if (lpvi == &COLUMNS[ iCol ].vi)
391 COLUMNS[ iCol ].fChanged = TRUE;
394 Columns_OnSelect (hDlg);
395 LB_SetSelectedByData (hShown, (LPARAM)iAvail);
396 Columns_OnSelShown (hDlg);
397 PropSheetChanged (hDlg);
402 void Columns_OnApply (HWND hDlg)
404 for (size_t iCol = 0; iCol < nCOLUMNS; ++iCol)
406 if (COLUMNS[ iCol ].fChanged)
411 if (Display_GetActiveTab() == ttUSERS)
412 Display_RefreshView (&COLUMNS[ iCol ].vi, gr.ivUsr);
414 memcpy (&gr.viewUsr, &COLUMNS[ iCol ].vi, sizeof(VIEWINFO));
418 if (Display_GetActiveTab() == ttGROUPS)
419 Display_RefreshView (&COLUMNS[ iCol ].vi, gr.ivGrp);
421 memcpy (&gr.viewGrp, &COLUMNS[ iCol ].vi, sizeof(VIEWINFO));
425 if (Display_GetActiveTab() == ttMACHINES)
426 Display_RefreshView (&COLUMNS[ iCol ].vi, gr.ivMch);
428 memcpy (&gr.viewMch, &COLUMNS[ iCol ].vi, sizeof(VIEWINFO));