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
11 #include <afs/param.h>
13 #include <afs/fs_utils.h>
16 #include "afs_config.h"
17 #include "tab_drives.h"
18 #include <lanahelper.h>
21 * PROTOTYPES _________________________________________________________________
25 void DrivesTab_OnInitDialog (HWND hDlg);
26 void DrivesTab_OnSelect (HWND hDlg);
27 void DrivesTab_OnCheck (HWND hDlg);
28 void DrivesTab_OnAdd (HWND hDlg);
29 void DrivesTab_OnEdit (HWND hDlg);
30 void DrivesTab_OnRemove (HWND hDlg);
31 void DrivesTab_OnAdvanced (HWND hDlg);
33 void DrivesTab_Enable (HWND hDlg);
34 int DrivesTab_DriveFromItem (HWND hDlg, int iItem);
35 void DrivesTab_FillList (HWND hDlg);
36 void DrivesTab_EditMapping (HWND hDlg, int iDrive);
38 BOOL CALLBACK DriveEdit_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
39 void DriveEdit_OnInitDialog (HWND hDlg);
40 void DriveEdit_OnOK (HWND hDlg);
41 void DriveEdit_Enable (HWND hDlg);
43 BOOL CALLBACK Submounts_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
44 void Submounts_OnInitDialog (HWND hDlg);
45 void Submounts_OnApply (HWND hDlg);
46 void Submounts_OnSelect (HWND hDlg);
47 void Submounts_OnAdd (HWND hDlg);
48 void Submounts_OnEdit (HWND hDlg);
49 void Submounts_OnRemove (HWND hDlg);
50 void Submounts_EditSubmount (HWND hDlg, PSUBMOUNT pSubmount);
52 BOOL CALLBACK SubEdit_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
53 void SubEdit_OnInitDialog (HWND hDlg);
54 void SubEdit_OnOK (HWND hDlg);
55 void SubEdit_Enable (HWND hDlg);
59 * ROUTINES ___________________________________________________________________
63 BOOL CALLBACK DrivesTab_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
68 DrivesTab_OnInitDialog (hDlg);
75 DrivesTab_Enable (hDlg);
79 if (HIWORD(wp) == LBN_CLICKED)
80 DrivesTab_OnCheck (hDlg);
81 else if ((HIWORD(wp) == LBN_SELCHANGE) || (HIWORD(wp) == LBN_SELCANCEL))
82 DrivesTab_OnSelect (hDlg);
86 DrivesTab_OnAdd (hDlg);
90 DrivesTab_OnEdit (hDlg);
94 DrivesTab_OnRemove (hDlg);
98 DrivesTab_OnAdvanced (hDlg);
102 DrivesTab_DlgProc (hDlg, WM_HELP, 0, 0);
108 WinHelp (hDlg, g.szHelpFile, HELP_CONTEXT, IDH_AFSCONFIG_DRIVES);
116 void DrivesTab_OnInitDialog (HWND hDlg)
118 ShowWindow (GetDlgItem (hDlg, IDC_ADVANCED), g.fIsWinNT);
120 DrivesTab_FillList (hDlg);
124 void DrivesTab_OnSelect (HWND hDlg)
126 if (IsWindowEnabled (GetDlgItem (hDlg, IDC_LIST)))
128 UINT iSel = SendDlgItemMessage (hDlg, IDC_LIST, LB_GETCURSEL, 0, 0);
130 EnableWindow (GetDlgItem (hDlg, IDC_EDIT), (iSel != -1));
131 EnableWindow (GetDlgItem (hDlg, IDC_REMOVE), (iSel != -1));
136 void DrivesTab_OnCheck (HWND hDlg)
138 HWND hList = GetDlgItem (hDlg, IDC_LIST);
139 int iItemSel = SendMessage (hList, LB_GETCURSEL, 0, 0);
140 int iDriveSel = DrivesTab_DriveFromItem (hDlg, iItemSel);
141 BOOL fChecked = SendMessage (hList, LB_GETITEMDATA, iItemSel, 0);
146 if (fChecked && g.Configuration.NetDrives.aDriveMap[ iDriveSel ].szMapping[0] && !g.Configuration.NetDrives.aDriveMap[ iDriveSel ].fActive)
148 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))
149 Message (MB_OK | MB_ICONHAND, IDS_ERROR_MAP, IDS_ERROR_MAP_DESC, TEXT("%08lX"), dwStatus);
150 DrivesTab_FillList (hDlg);
152 else if (!fChecked && g.Configuration.NetDrives.aDriveMap[ iDriveSel ].fActive)
154 if (!InactivateDriveMap (g.Configuration.NetDrives.aDriveMap[ iDriveSel ].chDrive, &dwStatus))
155 Message (MB_OK | MB_ICONHAND, IDS_ERROR_UNMAP, IDS_ERROR_UNMAP_DESC, TEXT("%08lX"), dwStatus);
156 DrivesTab_FillList (hDlg);
162 void DrivesTab_OnAdd (HWND hDlg)
164 DrivesTab_EditMapping (hDlg, -1);
168 void DrivesTab_OnEdit (HWND hDlg)
170 HWND hList = GetDlgItem (hDlg, IDC_LIST);
171 int iItemSel = SendMessage (hList, LB_GETCURSEL, 0, 0);
172 int iDriveSel = DrivesTab_DriveFromItem (hDlg, iItemSel);
174 DrivesTab_EditMapping (hDlg, iDriveSel);
178 void DrivesTab_OnRemove (HWND hDlg)
180 HWND hList = GetDlgItem (hDlg, IDC_LIST);
181 int iItemSel = SendMessage (hList, LB_GETCURSEL, 0, 0);
182 int iDriveSel = DrivesTab_DriveFromItem (hDlg, iItemSel);
186 if (g.Configuration.NetDrives.aDriveMap[ iDriveSel ].szMapping[0])
188 if (g.Configuration.NetDrives.aDriveMap[ iDriveSel ].fActive)
191 if (!InactivateDriveMap (g.Configuration.NetDrives.aDriveMap[ iDriveSel ].chDrive, &dwStatus))
193 Message (MB_OK | MB_ICONHAND, IDS_ERROR_UNMAP, IDS_ERROR_UNMAP_DESC, TEXT("%08lX"), dwStatus);
197 g.Configuration.NetDrives.aDriveMap[ iDriveSel ].szMapping[0] = TEXT('\0');
198 WriteDriveMappings (&g.Configuration.NetDrives);
200 DrivesTab_FillList (hDlg);
206 void DrivesTab_OnAdvanced (HWND hDlg)
208 TCHAR szTitle[ cchRESOURCE ];
209 GetString (szTitle, IDS_SUBMOUNTS_TITLE);
211 LPPROPSHEET psh = PropSheet_Create (szTitle, FALSE, GetParent(hDlg), 0);
212 psh->sh.dwFlags |= PSH_NOAPPLYNOW; // Remove the Apply button
213 psh->sh.dwFlags |= PSH_HASHELP; // Add a Help button instead
214 PropSheet_AddTab (psh, szTitle, IDD_SUBMOUNTS, (DLGPROC)Submounts_DlgProc, 0, TRUE);
215 PropSheet_ShowModal (psh);
219 void DrivesTab_Enable (HWND hDlg)
221 BOOL fRunning = (Config_GetServiceState() == SERVICE_RUNNING);
223 EnableWindow (GetDlgItem (hDlg, IDC_LIST), fRunning);
224 EnableWindow (GetDlgItem (hDlg, IDC_ADD), fRunning);
225 EnableWindow (GetDlgItem (hDlg, IDC_EDIT), fRunning);
226 EnableWindow (GetDlgItem (hDlg, IDC_REMOVE), fRunning);
228 TCHAR szText[ cchRESOURCE ];
229 GetString (szText, (fRunning) ? IDS_TIP_DRIVES : IDS_WARN_STOPPED);
230 SetDlgItemText (hDlg, IDC_WARN, szText);
234 int DrivesTab_DriveFromItem (HWND hDlg, int iItem)
236 TCHAR szItem[ 1024 ] = TEXT("");
237 SendDlgItemMessage (hDlg, IDC_LIST, LB_GETTEXT, iItem, (LPARAM)szItem);
240 if ((pch = (LPTSTR)lstrchr (szItem, TEXT(':'))) != NULL)
245 if ((*pch >= TEXT('A')) && (*pch <= TEXT('Z')))
246 return (*pch) - TEXT('A');
254 void DrivesTab_FillList (HWND hDlg)
256 FreeDriveMapList (&g.Configuration.NetDrives);
257 QueryDriveMapList (&g.Configuration.NetDrives);
259 HWND hList = GetDlgItem (hDlg, IDC_LIST);
260 int iItemSel = SendMessage (hList, LB_GETCURSEL, 0, 0);
261 int iDriveSel = DrivesTab_DriveFromItem (hDlg, iItemSel);
262 SendMessage (hList, WM_SETREDRAW, FALSE, 0);
263 SendMessage (hList, LB_RESETCONTENT, 0, 0);
267 for (int iDrive = 0; iDrive < 26; ++iDrive)
269 if (!g.Configuration.NetDrives.aDriveMap[ iDrive ].szMapping[0])
272 TCHAR szAfsPath[ MAX_PATH ];
273 AdjustAfsPath (szAfsPath, g.Configuration.NetDrives.aDriveMap[ iDrive ].szMapping, TRUE, FALSE);
275 LPTSTR psz = FormatString (IDS_DRIVE_MAP, TEXT("%c%s"), g.Configuration.NetDrives.aDriveMap[ iDrive ].chDrive, szAfsPath);
276 int iItem = SendMessage (hList, LB_ADDSTRING, 0, (LPARAM)psz);
277 SendMessage (hList, LB_SETITEMDATA, iItem, g.Configuration.NetDrives.aDriveMap[ iDrive ].fActive);
279 if (iDrive == iDriveSel)
283 SendMessage (hList, WM_SETREDRAW, TRUE, 0);
285 SendMessage (hList, LB_SETCURSEL, iItemSel, 0);
287 DrivesTab_Enable (hDlg);
288 DrivesTab_OnSelect (hDlg);
292 void DrivesTab_EditMapping (HWND hDlg, int iDrive)
294 DRIVEMAP DriveMapOrig;
295 memset (&DriveMapOrig, 0x00, sizeof(DRIVEMAP));
299 memcpy (&DriveMapOrig, &g.Configuration.NetDrives.aDriveMap[ iDrive ], sizeof(DRIVEMAP));
303 memcpy (&DriveMap, &DriveMapOrig, sizeof(DRIVEMAP));
305 if (ModalDialogParam (IDD_DRIVE_EDIT, GetParent(hDlg), (DLGPROC)DriveEdit_DlgProc, (LPARAM)&DriveMap) == IDOK)
307 TCHAR szAfsPathOrig[ MAX_PATH ] = TEXT("");
309 AdjustAfsPath (szAfsPathOrig, DriveMapOrig.szMapping, TRUE, TRUE);
311 TCHAR szAfsPathNew[ MAX_PATH ];
312 AdjustAfsPath (szAfsPathNew, DriveMap.szMapping, TRUE, TRUE);
314 if ( (lstrcmpi (szAfsPathOrig, szAfsPathNew)) ||
315 (lstrcmpi (DriveMapOrig.szSubmount, DriveMap.szSubmount)) ||
316 (DriveMapOrig.chDrive != DriveMap.chDrive) ||
317 (DriveMapOrig.fPersistent != DriveMap.fPersistent) )
321 if ((iDrive != -1) && (DriveMapOrig.fActive))
323 if (!InactivateDriveMap (DriveMapOrig.chDrive, &dwStatus))
325 Message (MB_OK | MB_ICONHAND, IDS_ERROR_UNMAP, IDS_ERROR_UNMAP_DESC, TEXT("%08lX"), dwStatus);
326 DrivesTab_FillList (hDlg);
331 if (!ActivateDriveMap (DriveMap.chDrive, szAfsPathNew, DriveMap.szSubmount, DriveMap.fPersistent, &dwStatus))
333 Message (MB_OK | MB_ICONHAND, IDS_ERROR_MAP, IDS_ERROR_MAP_DESC, TEXT("%08lX"), dwStatus);
334 DrivesTab_FillList (hDlg);
338 if (DriveMap.szSubmount[0])
340 TCHAR szSubmountNow[ MAX_PATH ];
341 if (GetDriveSubmount (DriveMap.chDrive, szSubmountNow))
343 if (lstrcmpi (DriveMap.szSubmount, szSubmountNow))
344 Message (MB_OK | MB_ICONASTERISK, GetCautionTitle(), IDS_NEWSUB_DESC);
349 memset (&g.Configuration.NetDrives.aDriveMap[ iDrive ], 0x00, sizeof(DRIVEMAP));
350 memcpy (&g.Configuration.NetDrives.aDriveMap[ DriveMap.chDrive-chDRIVE_A ], &DriveMap, sizeof(DRIVEMAP));
351 lstrcpy (g.Configuration.NetDrives.aDriveMap[ DriveMap.chDrive-chDRIVE_A ].szMapping, szAfsPathNew);
352 WriteDriveMappings (&g.Configuration.NetDrives);
354 DrivesTab_FillList (hDlg);
360 BOOL CALLBACK DriveEdit_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
365 SetWindowLong (hDlg, DWL_USER, lp);
366 DriveEdit_OnInitDialog (hDlg);
373 DriveEdit_OnOK (hDlg);
377 EndDialog (hDlg, IDCANCEL);
381 DriveEdit_Enable (hDlg);
385 DriveEdit_DlgProc (hDlg, WM_HELP, 0, 0);
391 WinHelp (hDlg, g.szHelpFile, HELP_CONTEXT, IDH_AFSCONFIG_DRIVES_ADDEDIT);
397 void DriveEdit_OnInitDialog (HWND hDlg)
399 PDRIVEMAP pMap = (PDRIVEMAP)GetWindowLong (hDlg, DWL_USER);
401 // Fill in the combo box
403 DWORD dwDrives = GetLogicalDrives() | 0x07; // Always pretend A,B,C: are used
405 if (pMap->chDrive != 0)
406 dwDrives &= ~( 1 << (pMap->chDrive - chDRIVE_A) );
409 HWND hCombo = GetDlgItem (hDlg, IDC_DRIVE);
410 SendMessage (hCombo, WM_SETREDRAW, FALSE, 0);
412 for (int ii = 0; ii < 26; ++ii)
414 if (!(dwDrives & (1<<ii)))
416 TCHAR szText[ cchRESOURCE ];
417 GetString (szText, IDS_MAP_LETTER);
420 if ((pch = (LPTSTR)lstrchr (szText, TEXT('*'))) != NULL)
421 *pch = TEXT('A') + ii;
423 int iItem = SendMessage (hCombo, CB_ADDSTRING, 0, (LPARAM)szText);
424 SendMessage (hCombo, CB_SETITEMDATA, iItem, ii);
425 if (pMap->chDrive && (ii == pMap->chDrive - chDRIVE_A))
427 else if ((!pMap->chDrive) && (iItemSel == -1))
432 SendMessage (hCombo, WM_SETREDRAW, TRUE, 0);
433 SendMessage (hCombo, CB_SETCURSEL, iItemSel, 0);
435 TCHAR szMapping[ MAX_PATH ];
436 AdjustAfsPath (szMapping, ((pMap->szMapping[0]) ? pMap->szMapping : cm_slash_mount_root), TRUE, FALSE);
438 CHAR msg[256], msgf[256];
439 if (GetDlgItemText(hDlg,IDC_STATICSUBMOUNT,(LPSTR)msg,sizeof(msg)-1)>0)
441 wsprintf(msgf,msg,cm_back_slash_mount_root,cm_back_slash_mount_root);
442 SetDlgItemText (hDlg, IDC_STATICSUBMOUNT, msgf);
444 SetDlgItemText (hDlg, IDC_PATH, szMapping);
445 SetDlgItemText (hDlg, IDC_DESC, pMap->szSubmount);
447 CheckDlgButton (hDlg, IDC_PERSISTENT, (pMap->chDrive == 0) ? TRUE : (pMap->fPersistent));
449 DriveEdit_Enable (hDlg);
453 void DriveEdit_OnOK (HWND hDlg)
455 PDRIVEMAP pMap = (PDRIVEMAP)GetWindowLong (hDlg, DWL_USER);
457 int iItem = SendDlgItemMessage (hDlg, IDC_DRIVE, CB_GETCURSEL, 0, 0);
458 int iDrive = SendDlgItemMessage (hDlg, IDC_DRIVE, CB_GETITEMDATA, iItem, 0);
460 pMap->chDrive = chDRIVE_A + iDrive;
461 GetDlgItemText (hDlg, IDC_PATH, pMap->szMapping, MAX_PATH);
462 GetDlgItemText (hDlg, IDC_DESC, pMap->szSubmount, MAX_PATH);
463 pMap->fPersistent = IsDlgButtonChecked (hDlg, IDC_PERSISTENT);
465 if (pMap->szSubmount[0] && !IsValidSubmountName (pMap->szSubmount))
467 Message (MB_ICONHAND, GetErrorTitle(), IDS_BADSUB_DESC);
471 if ( (lstrncmpi (pMap->szMapping, cm_slash_mount_root, lstrlen(cm_slash_mount_root))) &&
472 (lstrncmpi (pMap->szMapping, cm_back_slash_mount_root, lstrlen(cm_back_slash_mount_root))) )
474 Message (MB_ICONHAND, GetErrorTitle(), IDS_BADMAP_DESC);
478 EndDialog (hDlg, IDOK);
482 void DriveEdit_Enable (HWND hDlg)
484 TCHAR szPath[ MAX_PATH ];
485 GetDlgItemText (hDlg, IDC_PATH, szPath, MAX_PATH);
486 EnableWindow (GetDlgItem (hDlg, IDOK), (szPath[0] != TEXT('\0')));
490 BOOL CALLBACK Submounts_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
495 Submounts_OnInitDialog (hDlg);
502 Submounts_OnApply (hDlg);
506 Submounts_OnAdd (hDlg);
510 Submounts_OnEdit (hDlg);
514 Submounts_OnRemove (hDlg);
518 Submounts_DlgProc (hDlg, WM_HELP, 0, 0);
524 WinHelp (hDlg, g.szHelpFile, HELP_CONTEXT, IDH_AFSCONFIG_SUBMOUNTS_NT);
528 switch (((LPNMHDR)lp)->code)
531 Submounts_OnSelect (hDlg);
535 if (IsWindowEnabled (GetDlgItem (hDlg, IDC_EDIT)))
536 Submounts_OnEdit (hDlg);
546 void Submounts_OnInitDialog (HWND hDlg)
548 // Prepare the columns on the server list
550 HWND hList = GetDlgItem (hDlg, IDC_LIST);
552 FASTLISTCOLUMN Column;
553 Column.dwFlags = FLCF_JUSTIFY_LEFT;
554 Column.cxWidth = 100;
555 GetString (Column.szText, IDS_SUBCOL_SHARE);
556 FastList_SetColumn (hList, 0, &Column);
558 Column.dwFlags = FLCF_JUSTIFY_LEFT;
559 Column.cxWidth = 200;
560 GetString (Column.szText, IDS_SUBCOL_PATH);
561 FastList_SetColumn (hList, 1, &Column);
563 // Remove the Context Help [?] thing from the title bar
565 DWORD dwStyle = GetWindowLong (GetParent (hDlg), GWL_STYLE);
566 dwStyle &= ~DS_CONTEXTHELP;
567 SetWindowLong (GetParent (hDlg), GWL_STYLE, dwStyle);
569 dwStyle = GetWindowLong (GetParent (hDlg), GWL_EXSTYLE);
570 dwStyle &= ~WS_EX_CONTEXTHELP;
571 SetWindowLong (GetParent (hDlg), GWL_EXSTYLE, dwStyle);
573 // Fill in the list of submounts
575 FastList_Begin (hList);
577 for (size_t ii = 0; ii < g.Configuration.NetDrives.cSubmounts; ++ii)
579 if (!g.Configuration.NetDrives.aSubmounts[ ii ].szSubmount[0])
583 memset (&ai, 0x00, sizeof(FASTLISTADDITEM));
584 ai.iFirstImage = IMAGE_NOIMAGE;
585 ai.iSecondImage = IMAGE_NOIMAGE;
586 ai.pszText = g.Configuration.NetDrives.aSubmounts[ ii ].szSubmount;
588 HLISTITEM hItem = FastList_AddItem (hList, &ai);
590 TCHAR szMapping[ MAX_PATH ];
591 AdjustAfsPath (szMapping, g.Configuration.NetDrives.aSubmounts[ ii ].szMapping, TRUE, FALSE);
592 FastList_SetItemText (hList, hItem, 1, szMapping);
595 FastList_End (hList);
596 Submounts_OnSelect (hDlg);
600 void Submounts_OnApply (HWND hDlg)
602 HWND hList = GetDlgItem (hDlg, IDC_LIST);
604 // Remove our current list of submounts
606 for (size_t ii = 0; ii < g.Configuration.NetDrives.cSubmounts; ++ii)
608 RemoveSubMount (g.Configuration.NetDrives.aSubmounts[ ii ].szSubmount);
611 // Add back all our new submounts
614 for (hItem = FastList_FindFirst (hList); hItem; hItem = FastList_FindNext (hList, hItem))
617 if ((pszSubmount = FastList_GetItemText (hList, hItem, 0)) == NULL)
620 if ((pszMapping = FastList_GetItemText (hList, hItem, 1)) == NULL)
623 AddSubMount ((LPTSTR)pszSubmount, (LPTSTR)pszMapping);
626 FreeDriveMapList (&g.Configuration.NetDrives);
627 QueryDriveMapList (&g.Configuration.NetDrives);
628 if (g.Configuration.fLogonAuthent)
633 void Submounts_OnSelect (HWND hDlg)
635 HWND hList = GetDlgItem (hDlg, IDC_LIST);
637 size_t cSelected = 0;
638 size_t cSelectedInUse = 0;
641 for (hItem = FastList_FindFirstSelected (hList); hItem; hItem = FastList_FindNextSelected (hList, hItem))
646 if ((pszSubmount = FastList_GetItemText (hList, hItem, 0)) != NULL)
648 for (size_t ii = 0; ii < g.Configuration.NetDrives.cSubmounts; ++ii)
650 if (!lstrcmpi (pszSubmount, g.Configuration.NetDrives.aSubmounts[ii].szSubmount))
652 if (g.Configuration.NetDrives.aSubmounts[ii].fInUse)
659 EnableWindow (GetDlgItem (hDlg, IDC_REMOVE), (cSelected != 0) && (!cSelectedInUse));
660 EnableWindow (GetDlgItem (hDlg, IDC_EDIT), (cSelected == 1) && (!cSelectedInUse));
664 void Submounts_OnAdd (HWND hDlg)
666 HWND hList = GetDlgItem (hDlg, IDC_LIST);
669 memset (&Submount, 0x00, sizeof(Submount));
671 Submounts_EditSubmount (hDlg, &Submount);
675 void Submounts_OnEdit (HWND hDlg)
677 HWND hList = GetDlgItem (hDlg, IDC_LIST);
680 if ((hItem = FastList_FindFirstSelected (hList)) != NULL)
682 LPCTSTR pszSubmount = FastList_GetItemText (hList, hItem, 0);
683 LPCTSTR pszMapping = FastList_GetItemText (hList, hItem, 1);
686 memset (&Submount, 0x00, sizeof(Submount));
687 lstrcpy (Submount.szSubmount, pszSubmount);
688 lstrcpy (Submount.szMapping, pszMapping);
690 Submounts_EditSubmount (hDlg, &Submount);
694 // Action - On Remove submount item
696 void Submounts_OnRemove (HWND hDlg)
698 HWND hList = GetDlgItem (hDlg, IDC_LIST);
699 FastList_Begin (hList);
702 while ((hItem = FastList_FindFirstSelected (hList)) != NULL)
704 FastList_RemoveItem (hList, hItem);
707 FastList_End (hList);
711 // Action - On Add or On Edit a submount item
712 void Submounts_EditSubmount (HWND hDlg, PSUBMOUNT pSubmount)
714 HWND hList = GetDlgItem (hDlg, IDC_LIST);
716 if (ModalDialogParam (IDD_SUBMOUNT_EDIT, GetParent(hDlg), (DLGPROC)SubEdit_DlgProc, (LPARAM)pSubmount) == IDOK)
718 TCHAR szMapping[ MAX_PATH ];
719 AdjustAfsPath (szMapping, pSubmount->szMapping, TRUE, FALSE);
722 for (hItem = FastList_FindFirst (hList); hItem; hItem = FastList_FindNext (hList, hItem))
725 if ((pszSubmount = FastList_GetItemText (hList, hItem, 0)) == NULL)
728 if (!lstrcmpi (pszSubmount, pSubmount->szSubmount))
735 memset (&ai, 0x00, sizeof(FASTLISTADDITEM));
736 ai.iFirstImage = IMAGE_NOIMAGE;
737 ai.iSecondImage = IMAGE_NOIMAGE;
738 ai.pszText = pSubmount->szSubmount;
740 hItem = FastList_AddItem (hList, &ai);
743 FastList_SetItemText (hList, hItem, 1, szMapping);
748 BOOL CALLBACK SubEdit_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
753 SetWindowLong (hDlg, DWL_USER, lp);
754 SubEdit_OnInitDialog (hDlg);
755 SubEdit_Enable (hDlg);
766 EndDialog (hDlg, IDCANCEL);
771 SubEdit_Enable (hDlg);
775 SubEdit_DlgProc (hDlg, WM_HELP, 0, 0);
781 WinHelp (hDlg, g.szHelpFile, HELP_CONTEXT, IDH_AFSCONFIG_SUBMOUNTS_NT_ADDEDIT);
789 void SubEdit_OnInitDialog (HWND hDlg)
791 CHAR msg[256], msgf[256];
792 PSUBMOUNT pSubmount = (PSUBMOUNT)GetWindowLong (hDlg, DWL_USER);
793 if (GetDlgItemText(hDlg,IDC_STATICSUBMOUNT,(LPSTR)msg,sizeof(msg)-1)>0)
795 wsprintf(msgf,msg,cm_back_slash_mount_root,cm_back_slash_mount_root);
796 SetDlgItemText (hDlg, IDC_STATICSUBMOUNT, msgf);
799 SetDlgItemText (hDlg, IDC_SUBMOUNT, pSubmount->szSubmount);
801 SetDlgItemText (hDlg, IDC_MAPPING, pSubmount->szMapping);
805 void SubEdit_OnOK (HWND hDlg)
807 PSUBMOUNT pSubmount = (PSUBMOUNT)GetWindowLong (hDlg, DWL_USER);
808 GetDlgItemText (hDlg, IDC_SUBMOUNT, pSubmount->szSubmount, MAX_PATH);
809 GetDlgItemText (hDlg, IDC_MAPPING, pSubmount->szMapping, MAX_PATH);
810 EndDialog (hDlg, IDOK);
814 void SubEdit_Enable (HWND hDlg)
818 TCHAR szText[ MAX_PATH ];
819 GetDlgItemText (hDlg, IDC_SUBMOUNT, szText, MAX_PATH);
823 GetDlgItemText (hDlg, IDC_MAPPING, szText, MAX_PATH);
827 EnableWindow (GetDlgItem (hDlg, IDOK), fEnable);