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