Initial IBM OpenAFS 1.0 tree
[openafs.git] / src / WINNT / afsusrmgr / usr_tab.cpp
1 extern "C" {
2 #include <afs/param.h>
3 #include <afs/stds.h>
4 }
5
6 #include "TaAfsUsrMgr.h"
7 #include "usr_tab.h"
8 #include "usr_col.h"
9 #include "usr_search.h"
10 #include "command.h"
11 #include "window.h"
12
13
14 /*
15  * RESIZING WINDOWS ___________________________________________________________
16  *
17  */
18
19 rwWindowData awdUsersTab[] = {
20     { IDC_USERS_TITLE, raRepaint | raSizeX },
21     { IDC_ADVANCED, raMoveX },
22     { IDC_USERS_PATTERN, raMoveX },
23     { IDC_USERS_PATTERN_PROMPT, raRepaint | raMoveX },
24     { IDC_USERS_LIST, raSizeX | raSizeY },
25     { M_USER_CREATE, raMoveX | raMoveY },
26     { M_MEMBERSHIP, raMoveX | raMoveY },
27     { M_PROPERTIES, raMoveX | raMoveY },
28     { IDC_STATIC, raRepaint },
29     { idENDLIST, 0 }
30  };
31
32
33 /*
34  * DEFINITIONS ________________________________________________________________
35  *
36  */
37
38 #define ID_SEARCH_TIMER     0
39
40 #define msecSEARCH_TIMER  650
41
42 static struct
43    {
44    DWORD dwTickLastType;
45    } l;
46
47
48 /*
49  * PROTOTYPES _________________________________________________________________
50  *
51  */
52
53 void Users_EnableButtons (HWND hDlg);
54
55
56 /*
57  * ROUTINES ___________________________________________________________________
58  *
59  */
60
61 BOOL CALLBACK Users_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
62 {
63    if (Display_HandleColumnNotify (hDlg, msg, wp, lp, &gr.viewUsr))
64       return FALSE;
65
66    switch (msg)
67       {
68       case WM_INITDIALOG:
69          {
70          RECT rTab;
71          GetClientRect (GetParent(hDlg), &rTab);
72          TabCtrl_AdjustRect (GetParent (hDlg), FALSE, &rTab); 
73          ResizeWindow (hDlg, awdUsersTab, rwaMoveToHere, &rTab);
74
75          HIMAGELIST hSmall = AfsAppLib_CreateImageList (FALSE);
76          HIMAGELIST hLarge = AfsAppLib_CreateImageList (TRUE);
77          FastList_SetImageLists (GetDlgItem (hDlg, IDC_USERS_LIST), hSmall, hLarge);
78
79          FastList_SetSortFunction (GetDlgItem (hDlg, IDC_USERS_LIST), General_ListSortFunction);
80
81          FL_RestoreView (GetDlgItem (hDlg, IDC_USERS_LIST), &gr.viewUsr);
82          FastList_SetTextCallback (GetDlgItem (hDlg, IDC_USERS_LIST), Display_GetItemText, (DWORD)&gr.viewUsr);
83          SetDlgItemText (hDlg, IDC_USERS_PATTERN, g.szPatternUsers);
84          Users_EnableButtons(hDlg);
85          Display_PopulateUserList();
86
87          l.dwTickLastType = 0;
88          }
89          break;
90
91       case WM_HELP:
92          WinHelp (hDlg, cszHELPFILENAME, HELP_FINDER, 0);
93          break;
94
95       case WM_DESTROY:
96          FL_StoreView (GetDlgItem (hDlg, IDC_USERS_LIST), &gr.viewUsr);
97          break;
98
99       case WM_SIZE:
100          // if (lp==0), we're minimizing--don't call ResizeWindow().
101          //
102          if (lp != 0)
103             ResizeWindow (hDlg, awdUsersTab, rwaFixupGuts);
104          break;
105
106       case WM_TIMER:
107          switch (wp)
108             {
109             case ID_SEARCH_TIMER:
110                if ( (l.dwTickLastType) && (GetTickCount() > l.dwTickLastType + msecSEARCH_TIMER) )
111                   {
112                   KillTimer (hDlg, ID_SEARCH_TIMER);
113                   Display_PopulateUserList();
114                   }
115                break;
116             }
117          break;
118
119       case WM_CONTEXTMENU:
120          POINT ptScreen;
121          ptScreen.x = LOWORD(lp);
122          ptScreen.y = HIWORD(lp);
123          OnRightClick (pmUSER, GetDlgItem (hDlg, IDC_USERS_LIST), &ptScreen);
124          break;
125
126       case WM_COMMAND:
127          switch (LOWORD(wp))
128             {
129             case IDC_USERS_PATTERN:
130                if (HIWORD(wp) == EN_UPDATE)
131                   {
132                   l.dwTickLastType = GetTickCount();
133                   KillTimer (hDlg, ID_SEARCH_TIMER);
134                   SetTimer (hDlg, ID_SEARCH_TIMER, msecSEARCH_TIMER +15, NULL);
135                   }
136                break;
137
138             case IDC_ADVANCED:
139                Users_ShowAdvancedSearch (g.hMain);
140                break;
141
142             default:
143                OnContextCommand (LOWORD(wp));
144                break;
145             }
146          break;
147
148       case WM_NOTIFY:
149          switch (((LPNMHDR)lp)->code)
150             {
151             case FLN_ITEMSELECT:
152                Main_SetMenus();
153                Users_EnableButtons(hDlg);
154                break;
155
156             case FLN_LDBLCLICK:
157                PostMessage (hDlg, WM_COMMAND, MAKELONG(M_PROPERTIES,BN_CLICKED), (LPARAM)GetDlgItem (hDlg, M_PROPERTIES));
158                break;
159             }
160          break;
161       }
162
163    return FALSE;
164 }
165
166
167 void Users_EnableButtons (HWND hDlg)
168 {
169    BOOL fEnable = (Display_GetSelectedCount() != 0) ? TRUE : FALSE;
170    EnableWindow (GetDlgItem (hDlg, M_PROPERTIES), fEnable);
171    EnableWindow (GetDlgItem (hDlg, M_MEMBERSHIP), fEnable);
172 }
173