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
14 #include <afs/param.h>
16 #include <afs/fs_utils.h>
19 #include "afs_config.h"
20 #include "tab_drives.h"
21 #include <lanahelper.h>
24 * PROTOTYPES _________________________________________________________________
28 void DrivesTab_OnInitDialog (HWND hDlg
);
29 void DrivesTab_OnSelect (HWND hDlg
);
30 void DrivesTab_OnCheck (HWND hDlg
);
31 void DrivesTab_OnAdd (HWND hDlg
);
32 void DrivesTab_OnEdit (HWND hDlg
);
33 void DrivesTab_OnRemove (HWND hDlg
);
34 void DrivesTab_OnAdvanced (HWND hDlg
);
36 void DrivesTab_Enable (HWND hDlg
);
37 int DrivesTab_DriveFromItem (HWND hDlg
, int iItem
);
38 void DrivesTab_FillList (HWND hDlg
);
39 void DrivesTab_EditMapping (HWND hDlg
, int iDrive
);
41 BOOL CALLBACK
DriveEdit_DlgProc (HWND hDlg
, UINT msg
, WPARAM wp
, LPARAM lp
);
42 void DriveEdit_OnInitDialog (HWND hDlg
);
43 void DriveEdit_OnOK (HWND hDlg
);
44 void DriveEdit_Enable (HWND hDlg
);
46 BOOL CALLBACK
Submounts_DlgProc (HWND hDlg
, UINT msg
, WPARAM wp
, LPARAM lp
);
47 void Submounts_OnInitDialog (HWND hDlg
);
48 void Submounts_OnApply (HWND hDlg
);
49 void Submounts_OnSelect (HWND hDlg
);
50 void Submounts_OnAdd (HWND hDlg
);
51 void Submounts_OnEdit (HWND hDlg
);
52 void Submounts_OnRemove (HWND hDlg
);
53 void Submounts_EditSubmount (HWND hDlg
, PSUBMOUNT pSubmount
);
55 BOOL CALLBACK
SubEdit_DlgProc (HWND hDlg
, UINT msg
, WPARAM wp
, LPARAM lp
);
56 void SubEdit_OnInitDialog (HWND hDlg
);
57 void SubEdit_OnOK (HWND hDlg
);
58 void SubEdit_Enable (HWND hDlg
);
62 * ROUTINES ___________________________________________________________________
66 BOOL CALLBACK
DrivesTab_DlgProc (HWND hDlg
, UINT msg
, WPARAM wp
, LPARAM lp
)
71 DrivesTab_OnInitDialog (hDlg
);
78 DrivesTab_Enable (hDlg
);
82 if (HIWORD(wp
) == LBN_CLICKED
)
83 DrivesTab_OnCheck (hDlg
);
84 else if ((HIWORD(wp
) == LBN_SELCHANGE
) || (HIWORD(wp
) == LBN_SELCANCEL
))
85 DrivesTab_OnSelect (hDlg
);
89 DrivesTab_OnAdd (hDlg
);
93 DrivesTab_OnEdit (hDlg
);
97 DrivesTab_OnRemove (hDlg
);
101 DrivesTab_OnAdvanced (hDlg
);
105 DrivesTab_DlgProc (hDlg
, WM_HELP
, 0, 0);
111 WinHelp (hDlg
, g
.szHelpFile
, HELP_CONTEXT
, IDH_AFSCONFIG_DRIVES
);
119 void DrivesTab_OnInitDialog (HWND hDlg
)
121 ShowWindow (GetDlgItem (hDlg
, IDC_ADVANCED
), g
.fIsWinNT
);
123 DrivesTab_FillList (hDlg
);
127 void DrivesTab_OnSelect (HWND hDlg
)
129 if (IsWindowEnabled (GetDlgItem (hDlg
, IDC_LIST
)))
131 UINT iSel
= SendDlgItemMessage (hDlg
, IDC_LIST
, LB_GETCURSEL
, 0, 0);
133 EnableWindow (GetDlgItem (hDlg
, IDC_EDIT
), (iSel
!= -1));
134 EnableWindow (GetDlgItem (hDlg
, IDC_REMOVE
), (iSel
!= -1));
139 void DrivesTab_OnCheck (HWND hDlg
)
141 HWND hList
= GetDlgItem (hDlg
, IDC_LIST
);
142 int iItemSel
= SendMessage (hList
, LB_GETCURSEL
, 0, 0);
143 int iDriveSel
= DrivesTab_DriveFromItem (hDlg
, iItemSel
);
144 BOOL fChecked
= SendMessage (hList
, LB_GETITEMDATA
, iItemSel
, 0);
149 if (fChecked
&& g
.Configuration
.NetDrives
.aDriveMap
[ iDriveSel
].szMapping
[0] && !g
.Configuration
.NetDrives
.aDriveMap
[ iDriveSel
].fActive
)
151 if (!ActivateDriveMap (g
.Configuration
.NetDrives
.aDriveMap
[ iDriveSel
].chDrive
, g
.Configuration
.NetDrives
.aDriveMap
[ iDriveSel
].szMapping
, g
.Configuration
.NetDrives
.aDriveMap
[ iDriveSel
].szSubmount
, g
.Configuration
.NetDrives
.aDriveMap
[ iDriveSel
].fPersistent
, &dwStatus
))
152 Message (MB_OK
| MB_ICONHAND
, IDS_ERROR_MAP
, IDS_ERROR_MAP_DESC
, TEXT("%08lX"), dwStatus
);
153 DrivesTab_FillList (hDlg
);
155 else if (!fChecked
&& g
.Configuration
.NetDrives
.aDriveMap
[ iDriveSel
].fActive
)
157 if (!InactivateDriveMap (g
.Configuration
.NetDrives
.aDriveMap
[ iDriveSel
].chDrive
, &dwStatus
))
158 Message (MB_OK
| MB_ICONHAND
, IDS_ERROR_UNMAP
, IDS_ERROR_UNMAP_DESC
, TEXT("%08lX"), dwStatus
);
159 DrivesTab_FillList (hDlg
);
161 WriteActiveMap(g
.Configuration
.NetDrives
.aDriveMap
[ iDriveSel
].chDrive
, fChecked
&&
162 g
.Configuration
.NetDrives
.aDriveMap
[ iDriveSel
].fPersistent
);
168 void DrivesTab_OnAdd (HWND hDlg
)
170 DrivesTab_EditMapping (hDlg
, -1);
174 void DrivesTab_OnEdit (HWND hDlg
)
176 HWND hList
= GetDlgItem (hDlg
, IDC_LIST
);
177 int iItemSel
= SendMessage (hList
, LB_GETCURSEL
, 0, 0);
178 int iDriveSel
= DrivesTab_DriveFromItem (hDlg
, iItemSel
);
180 DrivesTab_EditMapping (hDlg
, iDriveSel
);
184 void DrivesTab_OnRemove (HWND hDlg
)
186 HWND hList
= GetDlgItem (hDlg
, IDC_LIST
);
187 int iItemSel
= SendMessage (hList
, LB_GETCURSEL
, 0, 0);
188 int iDriveSel
= DrivesTab_DriveFromItem (hDlg
, iItemSel
);
192 if (g
.Configuration
.NetDrives
.aDriveMap
[ iDriveSel
].szMapping
[0])
194 if (g
.Configuration
.NetDrives
.aDriveMap
[ iDriveSel
].fActive
)
197 if (!InactivateDriveMap (g
.Configuration
.NetDrives
.aDriveMap
[ iDriveSel
].chDrive
, &dwStatus
))
199 Message (MB_OK
| MB_ICONHAND
, IDS_ERROR_UNMAP
, IDS_ERROR_UNMAP_DESC
, TEXT("%08lX"), dwStatus
);
203 g
.Configuration
.NetDrives
.aDriveMap
[ iDriveSel
].szMapping
[0] = TEXT('\0');
204 WriteDriveMappings (&g
.Configuration
.NetDrives
);
206 DrivesTab_FillList (hDlg
);
208 WriteActiveMap(g
.Configuration
.NetDrives
.aDriveMap
[ iDriveSel
].chDrive
, FALSE
);
213 void DrivesTab_OnAdvanced (HWND hDlg
)
215 TCHAR szTitle
[ cchRESOURCE
];
216 GetString (szTitle
, IDS_SUBMOUNTS_TITLE
);
218 LPPROPSHEET psh
= PropSheet_Create (szTitle
, FALSE
, GetParent(hDlg
), 0);
219 psh
->sh
.dwFlags
|= PSH_NOAPPLYNOW
; // Remove the Apply button
220 psh
->sh
.dwFlags
|= PSH_HASHELP
; // Add a Help button instead
221 PropSheet_AddTab (psh
, szTitle
, IDD_SUBMOUNTS
, (DLGPROC
)Submounts_DlgProc
, 0, TRUE
);
222 PropSheet_ShowModal (psh
);
226 void DrivesTab_Enable (HWND hDlg
)
228 BOOL fRunning
= (Config_GetServiceState() == SERVICE_RUNNING
);
230 EnableWindow (GetDlgItem (hDlg
, IDC_LIST
), fRunning
);
231 EnableWindow (GetDlgItem (hDlg
, IDC_ADD
), fRunning
);
232 EnableWindow (GetDlgItem (hDlg
, IDC_EDIT
), fRunning
);
233 EnableWindow (GetDlgItem (hDlg
, IDC_REMOVE
), fRunning
);
235 TCHAR szText
[ cchRESOURCE
];
236 GetString (szText
, (fRunning
) ? IDS_TIP_DRIVES
: IDS_WARN_STOPPED
);
237 SetDlgItemText (hDlg
, IDC_WARN
, szText
);
241 int DrivesTab_DriveFromItem (HWND hDlg
, int iItem
)
243 TCHAR szItem
[ 1024 ] = TEXT("");
244 SendDlgItemMessage (hDlg
, IDC_LIST
, LB_GETTEXT
, iItem
, (LPARAM
)szItem
);
247 if ((pch
= (LPTSTR
)lstrchr (szItem
, TEXT(':'))) != NULL
)
252 if ((*pch
>= TEXT('A')) && (*pch
<= TEXT('Z')))
253 return (*pch
) - TEXT('A');
261 void DrivesTab_FillList (HWND hDlg
)
263 FreeDriveMapList (&g
.Configuration
.NetDrives
);
264 QueryDriveMapList (&g
.Configuration
.NetDrives
);
266 HWND hList
= GetDlgItem (hDlg
, IDC_LIST
);
267 int iItemSel
= SendMessage (hList
, LB_GETCURSEL
, 0, 0);
268 int iDriveSel
= DrivesTab_DriveFromItem (hDlg
, iItemSel
);
269 SendMessage (hList
, WM_SETREDRAW
, FALSE
, 0);
270 SendMessage (hList
, LB_RESETCONTENT
, 0, 0);
274 for (int iDrive
= 0; iDrive
< 26; ++iDrive
)
276 if (!g
.Configuration
.NetDrives
.aDriveMap
[ iDrive
].szMapping
[0])
279 TCHAR szAfsPath
[ MAX_PATH
];
280 AdjustAfsPath (szAfsPath
, g
.Configuration
.NetDrives
.aDriveMap
[ iDrive
].szMapping
, TRUE
, FALSE
);
282 LPTSTR psz
= FormatString (IDS_DRIVE_MAP
, TEXT("%c%s"), g
.Configuration
.NetDrives
.aDriveMap
[ iDrive
].chDrive
, szAfsPath
);
283 int iItem
= SendMessage (hList
, LB_ADDSTRING
, 0, (LPARAM
)psz
);
284 SendMessage (hList
, LB_SETITEMDATA
, iItem
, g
.Configuration
.NetDrives
.aDriveMap
[ iDrive
].fActive
);
286 if (iDrive
== iDriveSel
)
290 SendMessage (hList
, WM_SETREDRAW
, TRUE
, 0);
292 SendMessage (hList
, LB_SETCURSEL
, iItemSel
, 0);
294 DrivesTab_Enable (hDlg
);
295 DrivesTab_OnSelect (hDlg
);
299 void DrivesTab_EditMapping (HWND hDlg
, int iDrive
)
301 DRIVEMAP DriveMapOrig
;
302 memset (&DriveMapOrig
, 0x00, sizeof(DRIVEMAP
));
306 memcpy (&DriveMapOrig
, &g
.Configuration
.NetDrives
.aDriveMap
[ iDrive
], sizeof(DRIVEMAP
));
310 memcpy (&DriveMap
, &DriveMapOrig
, sizeof(DRIVEMAP
));
312 if (ModalDialogParam (IDD_DRIVE_EDIT
, GetParent(hDlg
), (DLGPROC
)DriveEdit_DlgProc
, (LPARAM
)&DriveMap
) == IDOK
)
314 TCHAR szAfsPathOrig
[ MAX_PATH
] = TEXT("");
316 AdjustAfsPath (szAfsPathOrig
, DriveMapOrig
.szMapping
, TRUE
, TRUE
);
318 TCHAR szAfsPathNew
[ MAX_PATH
];
319 AdjustAfsPath (szAfsPathNew
, DriveMap
.szMapping
, TRUE
, TRUE
);
321 if ( (lstrcmpi (szAfsPathOrig
, szAfsPathNew
)) ||
322 (lstrcmpi (DriveMapOrig
.szSubmount
, DriveMap
.szSubmount
)) ||
323 (DriveMapOrig
.chDrive
!= DriveMap
.chDrive
) ||
324 (DriveMapOrig
.fPersistent
!= DriveMap
.fPersistent
) )
328 if ((iDrive
!= -1) && (DriveMapOrig
.fActive
))
330 if (!InactivateDriveMap (DriveMapOrig
.chDrive
, &dwStatus
))
332 Message (MB_OK
| MB_ICONHAND
, IDS_ERROR_UNMAP
, IDS_ERROR_UNMAP_DESC
, TEXT("%08lX"), dwStatus
);
333 DrivesTab_FillList (hDlg
);
338 if (!ActivateDriveMap (DriveMap
.chDrive
, szAfsPathNew
, DriveMap
.szSubmount
, DriveMap
.fPersistent
, &dwStatus
))
340 Message (MB_OK
| MB_ICONHAND
, IDS_ERROR_MAP
, IDS_ERROR_MAP_DESC
, TEXT("%08lX"), dwStatus
);
341 DrivesTab_FillList (hDlg
);
345 if (DriveMap
.szSubmount
[0])
347 TCHAR szSubmountNow
[ MAX_PATH
];
348 if (GetDriveSubmount (DriveMap
.chDrive
, szSubmountNow
))
350 if (lstrcmpi (DriveMap
.szSubmount
, szSubmountNow
))
351 Message (MB_OK
| MB_ICONASTERISK
, GetCautionTitle(), IDS_NEWSUB_DESC
);
356 memset (&g
.Configuration
.NetDrives
.aDriveMap
[ iDrive
], 0x00, sizeof(DRIVEMAP
));
357 memcpy (&g
.Configuration
.NetDrives
.aDriveMap
[ DriveMap
.chDrive
-chDRIVE_A
], &DriveMap
, sizeof(DRIVEMAP
));
358 lstrcpy (g
.Configuration
.NetDrives
.aDriveMap
[ DriveMap
.chDrive
-chDRIVE_A
].szMapping
, szAfsPathNew
);
359 WriteDriveMappings (&g
.Configuration
.NetDrives
);
362 WriteActiveMap(DriveMap
.chDrive
, DriveMap
.fPersistent
);
363 } else if ( (chDRIVE_A
+ iDrive
) != DriveMap
.chDrive
) {
364 WriteActiveMap(chDRIVE_A
+iDrive
, FALSE
);
365 WriteActiveMap(DriveMap
.chDrive
, DriveMap
.fPersistent
);
368 DrivesTab_FillList (hDlg
);
374 BOOL CALLBACK
DriveEdit_DlgProc (HWND hDlg
, UINT msg
, WPARAM wp
, LPARAM lp
)
379 SetWindowLongPtr (hDlg
, DWLP_USER
, lp
);
380 DriveEdit_OnInitDialog (hDlg
);
387 DriveEdit_OnOK (hDlg
);
391 EndDialog (hDlg
, IDCANCEL
);
395 DriveEdit_Enable (hDlg
);
399 DriveEdit_DlgProc (hDlg
, WM_HELP
, 0, 0);
405 WinHelp (hDlg
, g
.szHelpFile
, HELP_CONTEXT
, IDH_AFSCONFIG_DRIVES_ADDEDIT
);
411 void DriveEdit_OnInitDialog (HWND hDlg
)
413 PDRIVEMAP pMap
= (PDRIVEMAP
)GetWindowLongPtr (hDlg
, DWLP_USER
);
415 // Fill in the combo box
417 DWORD dwDrives
= GetLogicalDrives() | 0x07; // Always pretend A,B,C: are used
419 if (pMap
->chDrive
!= 0)
420 dwDrives
&= ~( 1 << (pMap
->chDrive
- chDRIVE_A
) );
423 HWND hCombo
= GetDlgItem (hDlg
, IDC_DRIVE
);
424 SendMessage (hCombo
, WM_SETREDRAW
, FALSE
, 0);
426 for (int ii
= 0; ii
< 26; ++ii
)
428 if (!(dwDrives
& (1<<ii
)))
430 TCHAR szText
[ cchRESOURCE
];
431 GetString (szText
, IDS_MAP_LETTER
);
434 if ((pch
= (LPTSTR
)lstrchr (szText
, TEXT('*'))) != NULL
)
435 *pch
= TEXT('A') + ii
;
437 int iItem
= SendMessage (hCombo
, CB_ADDSTRING
, 0, (LPARAM
)szText
);
438 SendMessage (hCombo
, CB_SETITEMDATA
, iItem
, ii
);
439 if (pMap
->chDrive
&& (ii
== pMap
->chDrive
- chDRIVE_A
))
441 else if ((!pMap
->chDrive
) && (iItemSel
== -1))
446 SendMessage (hCombo
, WM_SETREDRAW
, TRUE
, 0);
447 SendMessage (hCombo
, CB_SETCURSEL
, iItemSel
, 0);
449 TCHAR szMapping
[ MAX_PATH
];
450 AdjustAfsPath (szMapping
, ((pMap
->szMapping
[0]) ? pMap
->szMapping
: cm_slash_mount_root
), TRUE
, FALSE
);
452 CHAR msg
[256], msgf
[256];
453 if (GetDlgItemText(hDlg
,IDC_STATICSUBMOUNT
,(LPSTR
)msg
,sizeof(msg
)-1)>0)
455 wsprintf(msgf
,msg
,cm_back_slash_mount_root
,cm_back_slash_mount_root
);
456 SetDlgItemText (hDlg
, IDC_STATICSUBMOUNT
, msgf
);
458 SetDlgItemText (hDlg
, IDC_PATH
, szMapping
);
459 SetDlgItemText (hDlg
, IDC_DESC
, pMap
->szSubmount
);
461 CheckDlgButton (hDlg
, IDC_PERSISTENT
, (pMap
->chDrive
== 0) ? TRUE
: (pMap
->fPersistent
));
463 DriveEdit_Enable (hDlg
);
467 void DriveEdit_OnOK (HWND hDlg
)
469 PDRIVEMAP pMap
= (PDRIVEMAP
)GetWindowLongPtr (hDlg
, DWLP_USER
);
471 int iItem
= SendDlgItemMessage (hDlg
, IDC_DRIVE
, CB_GETCURSEL
, 0, 0);
472 int iDrive
= SendDlgItemMessage (hDlg
, IDC_DRIVE
, CB_GETITEMDATA
, iItem
, 0);
474 pMap
->chDrive
= chDRIVE_A
+ iDrive
;
475 GetDlgItemText (hDlg
, IDC_PATH
, pMap
->szMapping
, MAX_PATH
);
476 GetDlgItemText (hDlg
, IDC_DESC
, pMap
->szSubmount
, MAX_PATH
);
477 pMap
->fPersistent
= IsDlgButtonChecked (hDlg
, IDC_PERSISTENT
);
479 if (pMap
->szSubmount
[0] && !IsValidSubmountName (pMap
->szSubmount
))
481 Message (MB_ICONHAND
, GetErrorTitle(), IDS_BADSUB_DESC
);
485 if ( (lstrncmpi (pMap
->szMapping
, cm_slash_mount_root
, lstrlen(cm_slash_mount_root
))) &&
486 (lstrncmpi (pMap
->szMapping
, cm_back_slash_mount_root
, lstrlen(cm_back_slash_mount_root
))) )
488 Message (MB_ICONHAND
, GetErrorTitle(), IDS_BADMAP_DESC
);
492 EndDialog (hDlg
, IDOK
);
496 void DriveEdit_Enable (HWND hDlg
)
498 TCHAR szPath
[ MAX_PATH
];
499 GetDlgItemText (hDlg
, IDC_PATH
, szPath
, MAX_PATH
);
500 EnableWindow (GetDlgItem (hDlg
, IDOK
), (szPath
[0] != TEXT('\0')));
504 BOOL CALLBACK
Submounts_DlgProc (HWND hDlg
, UINT msg
, WPARAM wp
, LPARAM lp
)
509 Submounts_OnInitDialog (hDlg
);
516 Submounts_OnApply (hDlg
);
520 Submounts_OnAdd (hDlg
);
524 Submounts_OnEdit (hDlg
);
528 Submounts_OnRemove (hDlg
);
532 Submounts_DlgProc (hDlg
, WM_HELP
, 0, 0);
538 WinHelp (hDlg
, g
.szHelpFile
, HELP_CONTEXT
, IDH_AFSCONFIG_SUBMOUNTS_NT
);
542 switch (((LPNMHDR
)lp
)->code
)
545 Submounts_OnSelect (hDlg
);
549 if (IsWindowEnabled (GetDlgItem (hDlg
, IDC_EDIT
)))
550 Submounts_OnEdit (hDlg
);
560 void Submounts_OnInitDialog (HWND hDlg
)
562 // Prepare the columns on the server list
564 HWND hList
= GetDlgItem (hDlg
, IDC_LIST
);
566 FASTLISTCOLUMN Column
;
567 Column
.dwFlags
= FLCF_JUSTIFY_LEFT
;
568 Column
.cxWidth
= 100;
569 GetString (Column
.szText
, IDS_SUBCOL_SHARE
);
570 FastList_SetColumn (hList
, 0, &Column
);
572 Column
.dwFlags
= FLCF_JUSTIFY_LEFT
;
573 Column
.cxWidth
= 200;
574 GetString (Column
.szText
, IDS_SUBCOL_PATH
);
575 FastList_SetColumn (hList
, 1, &Column
);
577 // Remove the Context Help [?] thing from the title bar
579 DWORD dwStyle
= GetWindowLong (GetParent (hDlg
), GWL_STYLE
);
580 dwStyle
&= ~DS_CONTEXTHELP
;
581 SetWindowLong (GetParent (hDlg
), GWL_STYLE
, dwStyle
);
583 dwStyle
= GetWindowLong (GetParent (hDlg
), GWL_EXSTYLE
);
584 dwStyle
&= ~WS_EX_CONTEXTHELP
;
585 SetWindowLong (GetParent (hDlg
), GWL_EXSTYLE
, dwStyle
);
587 // Fill in the list of submounts
589 FastList_Begin (hList
);
591 for (size_t ii
= 0; ii
< g
.Configuration
.NetDrives
.cSubmounts
; ++ii
)
593 if (!g
.Configuration
.NetDrives
.aSubmounts
[ ii
].szSubmount
[0])
597 memset (&ai
, 0x00, sizeof(FASTLISTADDITEM
));
598 ai
.iFirstImage
= IMAGE_NOIMAGE
;
599 ai
.iSecondImage
= IMAGE_NOIMAGE
;
600 ai
.pszText
= g
.Configuration
.NetDrives
.aSubmounts
[ ii
].szSubmount
;
602 HLISTITEM hItem
= FastList_AddItem (hList
, &ai
);
604 TCHAR szMapping
[ MAX_PATH
];
605 AdjustAfsPath (szMapping
, g
.Configuration
.NetDrives
.aSubmounts
[ ii
].szMapping
, TRUE
, FALSE
);
606 FastList_SetItemText (hList
, hItem
, 1, szMapping
);
609 FastList_End (hList
);
610 Submounts_OnSelect (hDlg
);
614 void Submounts_OnApply (HWND hDlg
)
616 HWND hList
= GetDlgItem (hDlg
, IDC_LIST
);
618 // Remove our current list of submounts
620 for (size_t ii
= 0; ii
< g
.Configuration
.NetDrives
.cSubmounts
; ++ii
)
622 RemoveSubMount (g
.Configuration
.NetDrives
.aSubmounts
[ ii
].szSubmount
);
625 // Add back all our new submounts
628 for (hItem
= FastList_FindFirst (hList
); hItem
; hItem
= FastList_FindNext (hList
, hItem
))
631 if ((pszSubmount
= FastList_GetItemText (hList
, hItem
, 0)) == NULL
)
634 if ((pszMapping
= FastList_GetItemText (hList
, hItem
, 1)) == NULL
)
637 AddSubMount ((LPTSTR
)pszSubmount
, (LPTSTR
)pszMapping
);
640 FreeDriveMapList (&g
.Configuration
.NetDrives
);
641 QueryDriveMapList (&g
.Configuration
.NetDrives
);
642 if (g
.Configuration
.fLogonAuthent
)
647 void Submounts_OnSelect (HWND hDlg
)
649 HWND hList
= GetDlgItem (hDlg
, IDC_LIST
);
651 size_t cSelected
= 0;
652 size_t cSelectedInUse
= 0;
655 for (hItem
= FastList_FindFirstSelected (hList
); hItem
; hItem
= FastList_FindNextSelected (hList
, hItem
))
660 if ((pszSubmount
= FastList_GetItemText (hList
, hItem
, 0)) != NULL
)
662 for (size_t ii
= 0; ii
< g
.Configuration
.NetDrives
.cSubmounts
; ++ii
)
664 if (!lstrcmpi (pszSubmount
, g
.Configuration
.NetDrives
.aSubmounts
[ii
].szSubmount
))
666 if (g
.Configuration
.NetDrives
.aSubmounts
[ii
].fInUse
)
673 EnableWindow (GetDlgItem (hDlg
, IDC_REMOVE
), (cSelected
!= 0) && (!cSelectedInUse
));
674 EnableWindow (GetDlgItem (hDlg
, IDC_EDIT
), (cSelected
== 1) && (!cSelectedInUse
));
678 void Submounts_OnAdd (HWND hDlg
)
680 HWND hList
= GetDlgItem (hDlg
, IDC_LIST
);
683 memset (&Submount
, 0x00, sizeof(Submount
));
685 Submounts_EditSubmount (hDlg
, &Submount
);
689 void Submounts_OnEdit (HWND hDlg
)
691 HWND hList
= GetDlgItem (hDlg
, IDC_LIST
);
694 if ((hItem
= FastList_FindFirstSelected (hList
)) != NULL
)
696 LPCTSTR pszSubmount
= FastList_GetItemText (hList
, hItem
, 0);
697 LPCTSTR pszMapping
= FastList_GetItemText (hList
, hItem
, 1);
700 memset (&Submount
, 0x00, sizeof(Submount
));
701 lstrcpy (Submount
.szSubmount
, pszSubmount
);
702 lstrcpy (Submount
.szMapping
, pszMapping
);
704 Submounts_EditSubmount (hDlg
, &Submount
);
708 // Action - On Remove submount item
710 void Submounts_OnRemove (HWND hDlg
)
712 HWND hList
= GetDlgItem (hDlg
, IDC_LIST
);
713 FastList_Begin (hList
);
716 while ((hItem
= FastList_FindFirstSelected (hList
)) != NULL
)
718 FastList_RemoveItem (hList
, hItem
);
721 FastList_End (hList
);
725 // Action - On Add or On Edit a submount item
726 void Submounts_EditSubmount (HWND hDlg
, PSUBMOUNT pSubmount
)
728 TCHAR szOrigSubmount
[MAX_PATH
];
729 _tcscpy(szOrigSubmount
, pSubmount
->szSubmount
);
731 HWND hList
= GetDlgItem (hDlg
, IDC_LIST
);
733 if (ModalDialogParam (IDD_SUBMOUNT_EDIT
, GetParent(hDlg
), (DLGPROC
)SubEdit_DlgProc
, (LPARAM
)pSubmount
) == IDOK
)
735 TCHAR szMapping
[ MAX_PATH
];
736 BOOL bNameChange
= (szOrigSubmount
[0] && _tcsicmp(szOrigSubmount
, pSubmount
->szSubmount
));
738 AdjustAfsPath (szMapping
, pSubmount
->szMapping
, TRUE
, FALSE
);
743 for (hItem
= FastList_FindFirst (hList
); hItem
; hItem
= FastList_FindNext (hList
, hItem
))
746 if ((pszSubmount
= FastList_GetItemText (hList
, hItem
, 0)) == NULL
)
749 if (!_tcsicmp(szOrigSubmount
, pszSubmount
) ) {
750 FastList_RemoveItem (hList
, hItem
);
756 for (hItem
= FastList_FindFirst (hList
); hItem
; hItem
= FastList_FindNext (hList
, hItem
))
759 if ((pszSubmount
= FastList_GetItemText (hList
, hItem
, 0)) == NULL
)
762 if (!_tcsicmp(pszSubmount
, pSubmount
->szSubmount
))
769 memset (&ai
, 0x00, sizeof(FASTLISTADDITEM
));
770 ai
.iFirstImage
= IMAGE_NOIMAGE
;
771 ai
.iSecondImage
= IMAGE_NOIMAGE
;
772 ai
.pszText
= pSubmount
->szSubmount
;
774 hItem
= FastList_AddItem (hList
, &ai
);
777 FastList_SetItemText (hList
, hItem
, 1, szMapping
);
782 BOOL CALLBACK
SubEdit_DlgProc (HWND hDlg
, UINT msg
, WPARAM wp
, LPARAM lp
)
787 SetWindowLongPtr (hDlg
, DWLP_USER
, lp
);
788 SubEdit_OnInitDialog (hDlg
);
789 SubEdit_Enable (hDlg
);
800 EndDialog (hDlg
, IDCANCEL
);
805 SubEdit_Enable (hDlg
);
809 SubEdit_DlgProc (hDlg
, WM_HELP
, 0, 0);
815 WinHelp (hDlg
, g
.szHelpFile
, HELP_CONTEXT
, IDH_AFSCONFIG_SUBMOUNTS_NT_ADDEDIT
);
823 void SubEdit_OnInitDialog (HWND hDlg
)
825 CHAR msg
[256], msgf
[256];
826 PSUBMOUNT pSubmount
= (PSUBMOUNT
)GetWindowLongPtr (hDlg
, DWLP_USER
);
827 if (GetDlgItemText(hDlg
,IDC_STATICSUBMOUNT
,(LPSTR
)msg
,sizeof(msg
)-1)>0)
829 wsprintf(msgf
,msg
,cm_back_slash_mount_root
,cm_back_slash_mount_root
);
830 SetDlgItemText (hDlg
, IDC_STATICSUBMOUNT
, msgf
);
833 SetDlgItemText (hDlg
, IDC_SUBMOUNT
, pSubmount
->szSubmount
);
835 SetDlgItemText (hDlg
, IDC_MAPPING
, pSubmount
->szMapping
);
839 void SubEdit_OnOK (HWND hDlg
)
841 PSUBMOUNT pSubmount
= (PSUBMOUNT
)GetWindowLongPtr (hDlg
, DWLP_USER
);
842 GetDlgItemText (hDlg
, IDC_SUBMOUNT
, pSubmount
->szSubmount
, MAX_PATH
);
843 GetDlgItemText (hDlg
, IDC_MAPPING
, pSubmount
->szMapping
, MAX_PATH
);
844 EndDialog (hDlg
, IDOK
);
848 void SubEdit_Enable (HWND hDlg
)
852 TCHAR szText
[ MAX_PATH
];
853 GetDlgItemText (hDlg
, IDC_SUBMOUNT
, szText
, MAX_PATH
);
857 GetDlgItemText (hDlg
, IDC_MAPPING
, szText
, MAX_PATH
);
861 EnableWindow (GetDlgItem (hDlg
, IDOK
), fEnable
);