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