Initial IBM OpenAFS 1.0 tree
[openafs.git] / src / WINNT / afssvrmgr / set_repprop.cpp
1 extern "C" {
2 #include <afs/param.h>
3 #include <afs/stds.h>
4 }
5
6 #include "svrmgr.h"
7 #include "set_repprop.h"
8 #include "set_createrep.h"
9 #include "set_delete.h"
10 #include "set_release.h"
11 #include "propcache.h"
12 #include "display.h"
13 #include "columns.h"
14
15
16 /*
17  * DEFINITIONS ________________________________________________________________
18  *
19  */
20
21 typedef struct
22    {
23    LPIDENT lpiReq;
24    LPIDENT lpiRW;
25    FILESETSTATUS fs;
26    } SET_REPPROP_PARAMS, *LPSET_REPPROP_PARAMS;
27
28
29 /*
30  * PROTOTYPES _________________________________________________________________
31  *
32  */
33
34 BOOL CALLBACK Filesets_RepSites_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
35 void Filesets_RepSites_OnInitDialog (HWND hDlg, LPSET_REPPROP_PARAMS prp);
36 void Filesets_RepSites_OnSelect (HWND hDlg);
37 void Filesets_RepSites_OnDelete (HWND hDlg);
38
39
40 /*
41  * ROUTINES ___________________________________________________________________
42  *
43  */
44
45 void Filesets_ShowReplication (HWND hDlg, LPIDENT lpiFileset, LPIDENT lpiTarget)
46 {
47    LPSET_REPPROP_INIT_PARAMS lpp = New (SET_REPPROP_INIT_PARAMS);
48    memset (lpp, 0x00, sizeof(SET_REPPROP_INIT_PARAMS));
49    lpp->lpiReq = lpiFileset;
50
51    StartTask (taskSET_REPPROP_INIT, g.hMain, lpp);
52 }
53
54 void Filesets_OnEndTask_ShowReplication (LPTASKPACKET ptp)
55 {
56    LPSET_REPPROP_INIT_PARAMS lpp = (LPSET_REPPROP_INIT_PARAMS)(ptp->lpUser);
57
58    TCHAR szSvrName[ cchNAME ];
59    TCHAR szAggName[ cchNAME ];
60    TCHAR szSetName[ cchNAME ];
61    lpp->lpiReq->GetServerName (szSvrName);
62    lpp->lpiReq->GetAggregateName (szAggName);
63    lpp->lpiReq->GetFilesetName (szSetName);
64
65    if (!ptp->rc)
66       {
67       ErrorDialog (ptp->status, IDS_ERROR_REFRESH_FILESET_STATUS, TEXT("%s%s%s"), szSvrName, szAggName, szSetName);
68       }
69    else if (!lpp->lpiRW) // couldn't find RW fileset entry?
70       {
71       ErrorDialog (ptp->status, IDS_ERROR_NOT_REPLICATED, TEXT("%s"), szSetName);
72       }
73    else
74       {
75       HWND hCurrent;
76       if ((hCurrent = PropCache_Search (pcSET_REP, lpp->lpiRW)) != NULL)
77          {
78          SetFocus (hCurrent);
79          }
80       else
81          {
82          LPSET_REPPROP_PARAMS prp = New (SET_REPPROP_PARAMS);
83          prp->lpiReq = lpp->lpiReq;
84          prp->lpiRW = lpp->lpiRW;
85          memcpy (&prp->fs, &lpp->fs, sizeof(lpp->fs));
86
87          LPTSTR pszTitle = FormatString (IDS_SET_REP_TITLE, TEXT("%s"), szSetName);
88          LPPROPSHEET psh = PropSheet_Create (pszTitle, FALSE);
89          psh->sh.dwFlags |= PSH_NOAPPLYNOW;
90          psh->fMadeCaption = TRUE;
91
92          if (PropSheet_AddTab (psh, IDS_SET_REPSITES_TAB, IDD_SET_REPSITES, (DLGPROC)Filesets_RepSites_DlgProc, (LPARAM)prp, TRUE, TRUE))
93             {
94             PropSheet_ShowModeless (psh);
95             }
96          }
97       }
98
99    Delete (lpp);
100 }
101
102
103 BOOL CALLBACK Filesets_RepSites_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
104 {
105    if (HandleColumnNotify (hDlg, msg, wp, lp, &gr.viewRep))
106       return FALSE;
107
108    if (AfsAppLib_HandleHelp (IDD_SET_REPSITES, hDlg, msg, wp, lp))
109       return TRUE;
110
111    if (msg == WM_INITDIALOG)
112       SetWindowLong (hDlg, DWL_USER, ((LPPROPSHEETPAGE)lp)->lParam);
113
114    if (msg == WM_INITDIALOG_SHEET)
115       {
116       PropCache_Add (pcSET_REP, ((LPSET_REPPROP_PARAMS)lp)->lpiRW, hDlg);
117       }
118    else if (msg == WM_DESTROY_SHEET)
119       {
120       PropCache_Delete (hDlg);
121       }
122    else
123       {
124       LPSET_REPPROP_PARAMS prp;
125       if ((prp = (LPSET_REPPROP_PARAMS)GetWindowLong (hDlg, DWL_USER)) != NULL)
126          {
127          switch (msg)
128             {
129             case WM_INITDIALOG:
130                FastList_SetTextCallback (GetDlgItem (hDlg, IDC_SET_REP_LIST), GetItemText, (DWORD)&gr.viewRep);
131                Filesets_RepSites_OnInitDialog (hDlg, prp);
132                NotifyMe (WHEN_SETS_CHANGE, NULL, hDlg, 0);
133                break;
134
135             case WM_DESTROY:
136                DontNotifyMeEver (hDlg);
137                SetWindowLong (hDlg, DWL_USER, 0);
138                Delete (prp);
139                break;
140
141             case WM_CONTEXTMENU:
142                if ((HWND)wp == GetDlgItem (hDlg, IDC_SET_REP_LIST))
143                   {
144                   HWND hList = GetDlgItem (hDlg, IDC_SET_REP_LIST);
145
146                   POINT ptScreen;
147                   ptScreen.x = LOWORD(lp);
148                   ptScreen.y = HIWORD(lp);
149
150                   POINT ptClient;
151                   ptClient = ptScreen;
152                   ScreenToClient ((HWND)wp, &ptClient);
153
154                   if (FL_HitTestForHeaderBar (hList, ptClient))
155                      {
156                      HMENU hm = TaLocale_LoadMenu (MENU_COLUMNS);
157                      DisplayContextMenu (hm, ptScreen, hList);
158                      }
159                   }
160                break; 
161
162             case WM_COLUMNS_CHANGED:
163                HWND hList;
164                hList = GetDlgItem (hDlg, IDC_SET_REP_LIST);
165                LPIDENT lpiSel;
166                lpiSel = (LPIDENT)FL_GetSelectedData (hList);
167                FL_RestoreView (hList, &gr.viewRep);
168                UpdateDisplay_Replicas (FALSE, hList, prp->lpiRW, lpiSel);
169                break;
170
171             case WM_COMMAND:
172                switch (LOWORD(wp))
173                   {
174                   case IDOK:
175                   case IDCANCEL:
176                   case IDAPPLY:
177                      break;
178
179                   case IDC_SET_REPSITE_ADD:
180                      Filesets_CreateReplica (prp->lpiRW);
181                      break;
182
183                   case IDC_SET_REPSITE_DELETE:
184                      Filesets_RepSites_OnDelete (hDlg);
185                      break;
186
187                   case IDC_SET_RELEASE:
188                      Filesets_Release (prp->lpiRW);
189                      break;
190                   }
191                break;
192
193             case WM_NOTIFY_FROM_DISPATCH:
194                UpdateDisplay_Replicas (FALSE, GetDlgItem (hDlg, IDC_SET_REP_LIST), prp->lpiRW, prp->lpiReq);
195                Delete ((LPNOTIFYSTRUCT)lp);
196                break;
197
198             case WM_NOTIFY:
199                switch (((LPNMHDR)lp)->code)
200                   {
201                   case FLN_COLUMNRESIZE:
202                      FL_StoreView (GetDlgItem (hDlg, IDC_SET_REP_LIST), &gr.viewRep);
203                      break;
204
205                   case FLN_ITEMSELECT:
206                      Filesets_RepSites_OnSelect (hDlg);
207                      break;
208                   }
209                break;
210             }
211          }
212       }
213
214    return FALSE;
215 }
216
217
218 static LONG procRepSitesList = 0;
219
220 LRESULT CALLBACK Filesets_RepSites_SubclassListProc (HWND hList, UINT msg, WPARAM wp, LPARAM lp)
221 {
222    LRESULT rc;
223
224    if (procRepSitesList == 0)
225       rc = DefWindowProc (hList, msg, wp, lp);
226    else
227       rc = CallWindowProc ((WNDPROC)procRepSitesList, hList, msg, wp, lp);
228
229    switch (msg)
230       {
231       case WM_DESTROY:
232          if (procRepSitesList != 0)
233             SetWindowLong (hList, GWL_WNDPROC, procRepSitesList);
234          break;
235
236       case WM_COMMAND: 
237          switch (LOWORD(wp))
238             {
239             case M_COLUMNS:
240                ShowColumnsDialog (GetParent (hList), &gr.viewRep);
241                break;
242             }
243          break; 
244       }
245
246    return rc;
247 }
248
249
250 void Filesets_RepSites_OnInitDialog (HWND hDlg, LPSET_REPPROP_PARAMS prp)
251 {
252    HWND hList = GetDlgItem (hDlg, IDC_SET_REP_LIST);
253    if (procRepSitesList == 0)
254       procRepSitesList = GetWindowLong (hList, GWL_WNDPROC);
255    SetWindowLong (hList, GWL_WNDPROC, (LONG)Filesets_RepSites_SubclassListProc);
256
257    TCHAR szServer[ cchNAME ];
258    TCHAR szFileset[ cchNAME ];
259    TCHAR szAggregate[ cchNAME ];
260    prp->lpiRW->GetServerName (szServer);
261    prp->lpiRW->GetAggregateName (szAggregate);
262    prp->lpiRW->GetFilesetName (szFileset);
263    SetDlgItemText (hDlg, IDC_SET_SERVER, szServer);
264    SetDlgItemText (hDlg, IDC_SET_AGGREGATE, szAggregate);
265    SetDlgItemText (hDlg, IDC_SET_NAME, szFileset);
266
267    FL_RestoreView (GetDlgItem (hDlg, IDC_SET_REP_LIST), &gr.viewRep);
268    UpdateDisplay_Replicas (FALSE, GetDlgItem (hDlg, IDC_SET_REP_LIST), prp->lpiRW, prp->lpiReq);
269 }
270
271
272 void Filesets_RepSites_OnSelect (HWND hDlg)
273 {
274    LPIDENT lpiSelected = (LPIDENT)FL_GetSelectedData (GetDlgItem (hDlg, IDC_SET_REP_LIST));
275    EnableWindow (GetDlgItem (hDlg, IDC_SET_REPSITE_DELETE), (lpiSelected != NULL));
276 }
277
278
279 void Filesets_RepSites_OnDelete (HWND hDlg)
280 {
281    LPIDENT lpiSelected = (LPIDENT)FL_GetSelectedData (GetDlgItem (hDlg, IDC_SET_REP_LIST));
282    if (lpiSelected)
283       Filesets_Delete (lpiSelected);
284 }
285