Initial IBM OpenAFS 1.0 tree
[openafs.git] / src / WINNT / client_config / tab_advanced.cpp
1 extern "C" {
2 #include <afs/param.h>
3 #include <afs/stds.h>
4 }
5
6       #include <stdio.h>
7
8 #include "afs_config.h"
9 #include "tab_advanced.h"
10 #include "pagesize.h"
11
12
13 /*
14  * DEFINITIONS ________________________________________________________________
15  *
16  */
17
18 #define ckCACHE_MIN           1024L     // 1MB Cache Minimum
19 #define ckCACHE_MAX           2097152L  // 2GB Cache Maximum (limited by space)
20
21 #define ckCHUNK_MIN           4L
22 #define ckCHUNK_MAX           1048576L
23
24 #define cSTATS_MIN            256L
25 #define cSTATS_MAX            10000L
26
27
28 /*
29  * PROTOTYPES _________________________________________________________________
30  *
31  */
32
33 void AdvancedTab_OnInitDialog (HWND hDlg);
34 BOOL AdvancedTab_OnApply (HWND hDlg);
35 void AdvancedTab_OnRefresh (HWND hDlg);
36
37 // From dlg_automap.cpp
38 extern BOOL CALLBACK AutoMap_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
39
40 // From dlg_misc.cpp
41 extern BOOL Misc_OnApply();    
42 extern BOOL CALLBACK Misc_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
43
44 // From dlg_logon.cpp
45 extern BOOL CALLBACK Logon_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
46 extern BOOL Logon_OnApply();   
47
48 // From dlg_diag.cpp
49 extern BOOL CALLBACK Diag_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
50 extern BOOL Diag_OnApply();    
51
52
53 /*
54  * ROUTINES ___________________________________________________________________
55  *
56  */
57
58 static DWORD log2 (DWORD dwValue)
59 {
60    for (DWORD dwLog = 0; (DWORD)(1<<dwLog) < dwValue; ++dwLog)
61       ;
62    return dwLog;
63 }
64
65
66 BOOL CALLBACK AdvancedTab_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
67 {
68    switch (msg)
69       {
70       case WM_INITDIALOG:
71          AdvancedTab_OnInitDialog (hDlg);
72          break;
73
74       case WM_CTLCOLORSTATIC:
75          if ((HWND)lp == GetDlgItem (hDlg, IDC_CHUNK_SIZE))
76             {
77             if (IsWindowEnabled ((HWND)lp))
78                {
79                static HBRUSH hbrStatic = CreateSolidBrush (GetSysColor (COLOR_WINDOW));
80                SetTextColor ((HDC)wp, GetSysColor (COLOR_WINDOWTEXT));
81                SetBkColor ((HDC)wp, GetSysColor (COLOR_WINDOW));
82                return (BOOL)hbrStatic;
83                }
84             }
85          break;
86
87       case WM_COMMAND:
88          switch (LOWORD(wp))
89             {
90             case IDAPPLY:
91                if (!AdvancedTab_OnApply (hDlg))
92                   SetWindowLong (hDlg, DWL_MSGRESULT, TRUE);
93                break;
94
95             case IDC_REFRESH:
96                AdvancedTab_OnRefresh (hDlg);
97                break;
98
99             case IDC_MISC_PARMS:
100                     ModalDialog(IDD_MISC_CONFIG_PARMS, hDlg, (DLGPROC)Misc_DlgProc);
101                 break;
102                 
103             case IDC_LOGON_PARMS:
104                 ModalDialog(IDD_LOGIN_CONFIG_PARMS, hDlg, (DLGPROC)Logon_DlgProc);
105                 break;
106
107             case IDC_AUTOMAP_PARMS: 
108                 ModalDialog(IDD_GLOBAL_DRIVES, hDlg, (DLGPROC)AutoMap_DlgProc);
109                 break;
110
111             case IDC_DIAG_PARMS:
112                 ModalDialog(IDD_DIAG_PARMS, hDlg, (DLGPROC)Diag_DlgProc);
113                 break;
114
115             case IDC_CHUNK_SIZE:
116                switch (HIWORD(wp))
117                   {
118                   case SPN_CHANGE_UP:
119                      (*(LPDWORD)lp) <<= 1;
120                      break;
121                   case SPN_CHANGE_DOWN:
122                      (*(LPDWORD)lp) >>= 1;
123                      break;
124                   case SPN_CHANGE:
125                      (*(LPDWORD)lp) = 1 << (log2 (*(LPDWORD)lp));
126                      break;
127                   }
128                break;
129
130             case IDHELP:
131                AdvancedTab_DlgProc (hDlg, WM_HELP, 0, 0);
132                break;
133             }
134          break;
135
136       case WM_HELP:
137          WinHelp (hDlg, g.szHelpFile, HELP_CONTEXT, IDH_AFSCONFIG_ADVANCED_NT);
138          break;
139       }
140
141    return FALSE;
142 }
143
144
145 void AdvancedTab_OnInitDialog (HWND hDlg)
146 {
147    Config_GetCacheSize (&g.Configuration.ckCache);
148    Config_GetCachePath (g.Configuration.szCachePath);
149    Config_GetChunkSize (&g.Configuration.ckChunk);
150    Config_GetStatEntries (&g.Configuration.cStatEntries);
151
152    ULONG ckCacheMin = ckCACHE_MIN;
153    ULONG ckCacheMax = ckCACHE_MAX;
154
155    CreateSpinner (GetDlgItem (hDlg, IDC_CACHE_SIZE), 10, FALSE, ckCacheMin, g.Configuration.ckCache, ckCacheMax);
156    CreateSpinner (GetDlgItem (hDlg, IDC_CHUNK_SIZE), 10, FALSE, ckCHUNK_MIN, g.Configuration.ckChunk, ckCHUNK_MAX);
157    CreateSpinner (GetDlgItem (hDlg, IDC_STAT_ENTRIES), 10, FALSE, cSTATS_MIN, g.Configuration.cStatEntries, cSTATS_MAX);
158
159    SetDlgItemText (hDlg, IDC_CACHE_PATH, g.Configuration.szCachePath);
160    SetDlgItemText (hDlg, IDC_SYSNAME, g.Configuration.szSysName);
161
162    AdvancedTab_OnRefresh (hDlg);
163 }
164
165
166 BOOL AdvancedTab_CommitChanges (BOOL fForce)
167 {
168    HWND hDlg;
169    if ((hDlg = PropSheet_FindTabWindow (g.psh, (DLGPROC)AdvancedTab_DlgProc)) == NULL)
170       return TRUE;
171    if (fForce)
172       SetWindowLong (hDlg, DWL_MSGRESULT, FALSE); // Make sure we try to apply
173    if (AdvancedTab_OnApply (hDlg))
174       return TRUE;
175    SetWindowLong (hDlg, DWL_MSGRESULT, TRUE);
176    return FALSE;
177 }
178
179
180 BOOL AdvancedTab_OnApply (HWND hDlg)
181 {
182    // Don't try to do anything if we've already failed the apply
183    if (GetWindowLong (hDlg, DWL_MSGRESULT))
184       return FALSE;
185
186    ULONG Value = SP_GetPos (GetDlgItem (hDlg, IDC_CACHE_SIZE));
187    if (Value != g.Configuration.ckCache)
188       {
189       if (!Config_SetCacheSize (Value))
190          return FALSE;
191       g.Configuration.ckCache = Value;
192       }
193
194    Value = SP_GetPos (GetDlgItem (hDlg, IDC_CHUNK_SIZE));
195    if (Value != g.Configuration.ckChunk)
196       {
197       if (!Config_SetChunkSize (Value))
198          return FALSE;
199       g.Configuration.ckChunk = Value;
200       }
201
202    Value = SP_GetPos (GetDlgItem (hDlg, IDC_STAT_ENTRIES));
203    if (Value != g.Configuration.cStatEntries)
204       {
205       if (!Config_SetStatEntries (Value))
206          return FALSE;
207       g.Configuration.cStatEntries = Value;
208       }
209
210    TCHAR szText[ MAX_PATH ];
211    GetDlgItemText (hDlg, IDC_CACHE_PATH, szText, MAX_PATH);
212    if (lstrcmp (szText, g.Configuration.szCachePath))
213       {
214       if (!Config_SetCachePath (szText))
215          return FALSE;
216       lstrcpy (g.Configuration.szCachePath, szText);
217       }
218
219    // Save the data from the advanced tab dialogs
220    if (!Misc_OnApply())
221       return FALSE;
222       
223    if (!Logon_OnApply())
224       return FALSE;
225       
226    if (!Diag_OnApply())
227       return FALSE;
228
229    return TRUE;
230 }
231
232
233 void AdvancedTab_OnRefresh (HWND hDlg)
234 {
235    ULONG ckCacheInUse;
236    if (!Config_GetCacheInUse (&ckCacheInUse))
237       ckCacheInUse = 0;
238
239    LPTSTR pszInUse;
240    if (ckCacheInUse)
241       pszInUse = FormatString (IDS_KB_IN_USE, TEXT("%ld"), ckCacheInUse);
242    else
243       pszInUse = FormatString (IDS_KB_ONLY);
244    SetDlgItemText (hDlg, IDC_INUSE, pszInUse);
245    FreeString (pszInUse);
246 }
247