2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
11 #include <afs/param.h>
15 #include "TaAfsUsrMgr.h"
21 * PROTOTYPES _________________________________________________________________
25 BOOL CALLBACK Columns_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
26 void Columns_OnInitDialog (HWND hDlg, LPVIEWINFO lpviDefault);
27 void Columns_OnSelect (HWND hDlg);
28 void Columns_OnSelAvail (HWND hDlg);
29 void Columns_OnSelShown (HWND hDlg);
30 void Columns_OnInsert (HWND hDlg);
31 void Columns_OnDelete (HWND hDlg);
32 void Columns_OnMoveUp (HWND hDlg);
33 void Columns_OnMoveDown (HWND hDlg);
34 void Columns_OnApply (HWND hDlg);
38 * COLUMNS DIALOG _____________________________________________________________
44 ceUSERS, // gr.viewUsr
45 ceGROUPS, // gr.viewGrp
46 ceMACHINES, // gr.viewMch
58 { IDS_COL_USERS, FALSE, {0}, FALSE }, // ceUSERS
59 { IDS_COL_GROUPS, FALSE, {0}, FALSE }, // ceGROUPS
60 { IDS_COL_MACHINES, FALSE, {0}, FALSE }, // ceMACHINES
63 #define nCOLUMNS (sizeof(COLUMNS)/sizeof(COLUMNS[0]))
68 LPVIEWINFO lpviDefault;
71 void ShowColumnsDialog (HWND hParent, LPVIEWINFO lpvi)
73 for (size_t iCol = 0; iCol < nCOLUMNS; ++iCol)
75 COLUMNS[ iCol ].fChanged = FALSE;
78 memcpy (&COLUMNS[ ceUSERS ].vi, &gr.viewUsr, sizeof(VIEWINFO));
79 memcpy (&COLUMNS[ ceGROUPS ].vi, &gr.viewGrp, sizeof(VIEWINFO));
80 memcpy (&COLUMNS[ ceMACHINES ].vi, &gr.viewMch, sizeof(VIEWINFO));
82 if (lpvi == &gr.viewUsr)
83 lpvi = &COLUMNS[ ceUSERS ].vi;
84 else if (lpvi == &gr.viewGrp)
85 lpvi = &COLUMNS[ ceGROUPS ].vi;
86 else if (lpvi == &gr.viewMch)
87 lpvi = &COLUMNS[ ceMACHINES ].vi;
89 // If the caller didn't specify which VIEWINFO structure to adjust
90 // by default, pick whichever one is on the currently-displayed tab
94 switch (Display_GetActiveTab())
97 lpvi = &COLUMNS[ ceUSERS ].vi;
100 lpvi = &COLUMNS[ ceGROUPS ].vi;
103 lpvi = &COLUMNS[ ceMACHINES ].vi;
108 // Show the Columns dialog
110 LPPROPSHEET psh = PropSheet_Create (IDS_COLUMNS_TITLE, FALSE);
111 psh->sh.hwndParent = hParent;
113 ShowColumnsParams *pscp = New (ShowColumnsParams);
114 pscp->hParent = hParent;
115 pscp->lpviDefault = lpvi;
117 PropSheet_AddTab (psh, 0, IDD_COLUMNS, (DLGPROC)Columns_DlgProc, (LPARAM)pscp, TRUE);
118 PropSheet_ShowModal (psh, PumpMessage);
122 BOOL CALLBACK Columns_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
124 if (AfsAppLib_HandleHelp (IDD_COLUMNS, hDlg, msg, wp, lp))
127 if (msg == WM_INITDIALOG)
128 SetWindowLong (hDlg, DWL_USER, ((LPPROPSHEETPAGE)lp)->lParam);
130 ShowColumnsParams *pscp;
131 pscp = (ShowColumnsParams *)GetWindowLong (hDlg, DWL_USER);
136 Columns_OnInitDialog (hDlg, (pscp) ? pscp->lpviDefault : NULL);
143 Columns_OnApply (hDlg);
148 EndDialog (hDlg, LOWORD(wp));
152 if (HIWORD(wp) == CBN_SELCHANGE)
154 Columns_OnSelect (hDlg);
159 if (HIWORD(wp) == LBN_SELCHANGE)
161 Columns_OnSelAvail (hDlg);
166 if (HIWORD(wp) == LBN_SELCHANGE)
168 Columns_OnSelShown (hDlg);
173 Columns_OnInsert (hDlg);
177 Columns_OnDelete (hDlg);
181 Columns_OnMoveUp (hDlg);
185 Columns_OnMoveDown (hDlg);
195 void Columns_OnInitDialog (HWND hDlg, LPVIEWINFO lpviDefault)
197 HWND hList = GetDlgItem (hDlg, IDC_COLUMNS);
198 CB_StartChange (hList);
200 for (size_t iCol = 0; iCol < nCOLUMNS; ++iCol)
202 if ((COLUMNS[iCol].fUsuallyHidden) && (lpviDefault != &COLUMNS[iCol].vi))
205 CB_AddItem (hList, COLUMNS[iCol].ids, (LPARAM)&COLUMNS[iCol].vi);
208 CB_EndChange (hList, (LPARAM)lpviDefault);
210 Columns_OnSelect (hDlg);
214 void Columns_OnSelect (HWND hDlg)
217 LPVIEWINFO lpvi = (LPVIEWINFO)CB_GetSelectedData (GetDlgItem(hDlg,IDC_COLUMNS));
219 // Fill in the Available list...
221 hList = GetDlgItem (hDlg, IDC_COL_AVAIL);
222 LB_StartChange (hList);
224 for (size_t iAvail = 0; iAvail < lpvi->nColsAvail; ++iAvail)
226 for (size_t iShown = 0; iShown < lpvi->nColsShown; ++iShown)
228 if (lpvi->aColumns[ iShown ] == iAvail)
231 if (iShown == lpvi->nColsShown)
233 LB_AddItem (hList, lpvi->idsColumns[ iAvail ], (LPARAM)iAvail);
237 LB_EndChange (hList);
238 Columns_OnSelAvail (hDlg);
240 // Fill in the Shown list...
242 hList = GetDlgItem (hDlg, IDC_COL_SHOWN);
243 LB_StartChange (hList);
245 for (size_t iShown = 0; iShown < lpvi->nColsShown; ++iShown)
247 iAvail = lpvi->aColumns[ iShown ];
248 LB_AddItem (hList, lpvi->idsColumns[ iAvail ], (LPARAM)iAvail);
251 LB_EndChange (hList);
252 Columns_OnSelShown (hDlg);
256 void Columns_OnSelAvail (HWND hDlg)
258 HWND hList = GetDlgItem (hDlg, IDC_COL_AVAIL);
259 int ii = LB_GetSelected (hList);
261 EnableWindow (GetDlgItem (hDlg, IDC_COL_INSERT), (ii != -1));
265 void Columns_OnSelShown (HWND hDlg)
267 HWND hList = GetDlgItem (hDlg, IDC_COL_SHOWN);
268 int ii = LB_GetSelected (hList);
272 EnableWindow (GetDlgItem (hDlg, IDC_COL_DELETE), FALSE);
273 EnableWindow (GetDlgItem (hDlg, IDC_COL_UP), FALSE);
274 EnableWindow (GetDlgItem (hDlg, IDC_COL_DOWN), FALSE);
278 int iAvail = LB_GetData (hList, ii);
279 EnableWindow (GetDlgItem (hDlg, IDC_COL_DELETE), (iAvail != 0));
281 int ci = (int)SendMessage (hList, LB_GETCOUNT, 0, 0);
282 EnableWindow (GetDlgItem (hDlg, IDC_COL_UP), (ii > 1));
283 EnableWindow (GetDlgItem (hDlg, IDC_COL_DOWN), (ii > 0 && ii < ci-1));
288 void Columns_OnInsert (HWND hDlg)
290 LPVIEWINFO lpvi = (LPVIEWINFO)CB_GetSelectedData (GetDlgItem (hDlg, IDC_COLUMNS));
291 HWND hAvail = GetDlgItem (hDlg, IDC_COL_AVAIL);
292 HWND hShown = GetDlgItem (hDlg, IDC_COL_SHOWN);
293 int ii = LB_GetSelected (hAvail);
297 size_t iAvail = LB_GetData (hAvail, ii);
298 int iShown = 1+ LB_GetSelected (hShown);
300 TCHAR szText[ cchRESOURCE ];
301 SendMessage (hAvail, LB_GETTEXT, ii, (LPARAM)szText);
303 LB_AddItem (hShown, szText, iAvail);
304 SendMessage (hAvail, LB_DELETESTRING, ii, 0);
306 lpvi->aColumns[ lpvi->nColsShown ] = iAvail;
309 for (size_t iCol = 0; iCol < nCOLUMNS; ++iCol)
311 if (lpvi == &COLUMNS[ iCol ].vi)
312 COLUMNS[ iCol ].fChanged = TRUE;
315 Columns_OnSelAvail (hDlg);
316 Columns_OnSelShown (hDlg);
317 PropSheetChanged (hDlg);
322 void Columns_OnDelete (HWND hDlg)
324 LPVIEWINFO lpvi = (LPVIEWINFO)CB_GetSelectedData (GetDlgItem (hDlg, IDC_COLUMNS));
325 HWND hAvail = GetDlgItem (hDlg, IDC_COL_AVAIL);
326 HWND hShown = GetDlgItem (hDlg, IDC_COL_SHOWN);
327 int ii = LB_GetSelected (hShown);
331 TCHAR szText[ cchRESOURCE ];
332 SendMessage (hShown, LB_GETTEXT, ii, (LPARAM)szText);
334 size_t iAvail = (size_t)LB_GetData (hShown, ii);
335 LB_AddItem (hAvail, szText, iAvail);
336 SendMessage (hShown, LB_DELETESTRING, ii, 0);
338 for ( ; ii < (int)lpvi->nColsShown-1; ++ii)
340 lpvi->aColumns[ ii ] = lpvi->aColumns[ ii+1 ];
344 for (size_t iCol = 0; iCol < nCOLUMNS; ++iCol)
346 if (lpvi == &COLUMNS[ iCol ].vi)
347 COLUMNS[ iCol ].fChanged = TRUE;
350 Columns_OnSelAvail (hDlg);
351 Columns_OnSelShown (hDlg);
352 PropSheetChanged (hDlg);
357 void Columns_OnMoveUp (HWND hDlg)
359 LPVIEWINFO lpvi = (LPVIEWINFO)CB_GetSelectedData (GetDlgItem (hDlg, IDC_COLUMNS));
360 HWND hAvail = GetDlgItem (hDlg, IDC_COL_AVAIL);
361 HWND hShown = GetDlgItem (hDlg, IDC_COL_SHOWN);
362 int ii = LB_GetSelected (hShown);
366 size_t iAvail = (size_t)LB_GetData (hShown, ii);
367 lpvi->aColumns[ ii ] = lpvi->aColumns[ ii-1 ];
368 lpvi->aColumns[ ii-1 ] = iAvail;
370 for (size_t iCol = 0; iCol < nCOLUMNS; ++iCol)
372 if (lpvi == &COLUMNS[ iCol ].vi)
373 COLUMNS[ iCol ].fChanged = TRUE;
376 Columns_OnSelect (hDlg);
377 LB_SetSelectedByData (hShown, (LPARAM)iAvail);
378 Columns_OnSelShown (hDlg);
379 PropSheetChanged (hDlg);
384 void Columns_OnMoveDown (HWND hDlg)
386 LPVIEWINFO lpvi = (LPVIEWINFO)CB_GetSelectedData (GetDlgItem (hDlg, IDC_COLUMNS));
387 HWND hAvail = GetDlgItem (hDlg, IDC_COL_AVAIL);
388 HWND hShown = GetDlgItem (hDlg, IDC_COL_SHOWN);
389 int ii = LB_GetSelected (hShown);
393 size_t iAvail = (size_t)LB_GetData (hShown, ii);
394 lpvi->aColumns[ ii ] = lpvi->aColumns[ ii+1 ];
395 lpvi->aColumns[ ii+1 ] = iAvail;
397 for (size_t iCol = 0; iCol < nCOLUMNS; ++iCol)
399 if (lpvi == &COLUMNS[ iCol ].vi)
400 COLUMNS[ iCol ].fChanged = TRUE;
403 Columns_OnSelect (hDlg);
404 LB_SetSelectedByData (hShown, (LPARAM)iAvail);
405 Columns_OnSelShown (hDlg);
406 PropSheetChanged (hDlg);
411 void Columns_OnApply (HWND hDlg)
413 for (size_t iCol = 0; iCol < nCOLUMNS; ++iCol)
415 if (COLUMNS[ iCol ].fChanged)
420 if (Display_GetActiveTab() == ttUSERS)
421 Display_RefreshView (&COLUMNS[ iCol ].vi, gr.ivUsr);
423 memcpy (&gr.viewUsr, &COLUMNS[ iCol ].vi, sizeof(VIEWINFO));
427 if (Display_GetActiveTab() == ttGROUPS)
428 Display_RefreshView (&COLUMNS[ iCol ].vi, gr.ivGrp);
430 memcpy (&gr.viewGrp, &COLUMNS[ iCol ].vi, sizeof(VIEWINFO));
434 if (Display_GetActiveTab() == ttMACHINES)
435 Display_RefreshView (&COLUMNS[ iCol ].vi, gr.ivMch);
437 memcpy (&gr.viewMch, &COLUMNS[ iCol ].vi, sizeof(VIEWINFO));