b5caa3cfd24b09b968174272b135cb52706d5fe2
[openafs.git] / src / WINNT / talocale / tal_dialog.cpp
1
2 extern "C" {
3 #include <afs/param.h>
4 #include <afs/stds.h>
5 }
6
7 #include <WINNT/talocale.h>
8
9
10 /*
11  * DEFINITIONS ________________________________________________________________
12  *
13  */
14
15
16 /*
17  * PROTOTYPES _________________________________________________________________
18  *
19  */
20
21 int cdecl vMessage (UINT, LONG, LONG, LPCTSTR, va_list);
22 DWORD WINAPI Message_ThreadProc (PVOID lp);
23
24
25 /*
26  * ROUTINES ___________________________________________________________________
27  *
28  */
29
30 HWND ModelessDialog (int idd, HWND hWndParent, DLGPROC lpDialogFunc)
31 {
32    return ModelessDialogParam (idd, hWndParent, lpDialogFunc, 0);
33 }
34
35
36 HWND ModelessDialogParam (int idd, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam)
37 {
38    HINSTANCE hInstFound;
39    LPCDLGTEMPLATE pTemplate;
40    if ((pTemplate = TaLocale_GetDialogResource (idd, &hInstFound)) == NULL)
41       return NULL;
42
43    return CreateDialogIndirectParam (hInstFound, pTemplate, hWndParent, lpDialogFunc, dwInitParam);
44 }
45
46
47 int ModalDialog (int idd, HWND hWndParent, DLGPROC lpDialogFunc)
48 {
49    return ModalDialogParam (idd, hWndParent, lpDialogFunc, 0);
50 }
51
52
53 int ModalDialogParam (int idd, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam)
54 {
55    HINSTANCE hInstFound;
56    LPCDLGTEMPLATE pTemplate;
57    if ((pTemplate = TaLocale_GetDialogResource (idd, &hInstFound)) == NULL)
58       return NULL;
59
60    return DialogBoxIndirectParam (hInstFound, pTemplate, hWndParent, lpDialogFunc, dwInitParam);
61 }
62
63
64 /*** Message() - generic-text dialog box
65  *
66  */
67
68 int cdecl Message (UINT type, LPCTSTR title, LPCTSTR text, LPCTSTR fmt, ...)
69 {
70    va_list  arg;
71    if (fmt != NULL)
72       va_start (arg, fmt);
73    return vMessage (type, (LONG)title, (LONG)text, fmt, arg);
74 }
75
76
77 int cdecl Message (UINT type, LPCTSTR title, int text, LPCTSTR fmt, ...)
78 {
79    va_list  arg;
80    if (fmt != NULL)
81       va_start (arg, fmt);
82    return vMessage (type, (LONG)title, (LONG)text, fmt, arg);
83 }
84
85
86 int cdecl Message (UINT type, int title, LPCTSTR text, LPCTSTR fmt, ...)
87 {
88    va_list  arg;
89    if (fmt != NULL)
90       va_start (arg, fmt);
91    return vMessage (type, (LONG)title, (LONG)text, fmt, arg);
92 }
93
94
95 int cdecl Message (UINT type, int title, int text, LPCTSTR fmt, ...)
96 {
97    va_list  arg;
98    if (fmt != NULL)
99       va_start (arg, fmt);
100    return vMessage (type, (LONG)title, (LONG)text, fmt, arg);
101 }
102
103
104 int cdecl vMessage (UINT type, LPCTSTR title, LPCTSTR text, LPCTSTR fmt, va_list arg)
105 {
106    return vMessage (type, (LONG)title, (LONG)text, fmt, arg);
107 }
108
109
110 int cdecl vMessage (UINT type, LPCTSTR title, int text, LPCTSTR fmt, va_list arg)
111 {
112    return vMessage (type, (LONG)title, (LONG)text, fmt, arg);
113 }
114
115
116 int cdecl vMessage (UINT type, int title, LPCTSTR text, LPCTSTR fmt, va_list arg)
117 {
118    return vMessage (type, (LONG)title, (LONG)text, fmt, arg);
119 }
120
121
122 int cdecl vMessage (UINT type, int title, int text, LPCTSTR fmt, va_list arg)
123 {
124    return vMessage (type, (LONG)title, (LONG)text, fmt, arg);
125 }
126
127
128 typedef struct
129    {
130    UINT dwType;
131    LPTSTR pszTitle;
132    LPTSTR pszText;
133    } MESSAGE_PARAMS, *LPMESSAGE_PARAMS;
134
135 int cdecl vMessage (UINT type, LONG title, LONG text, LPCTSTR fmt, va_list arg)
136 {
137    LPMESSAGE_PARAMS pmp = New(MESSAGE_PARAMS);
138
139    pmp->dwType = type;
140
141    if ((pmp->pszTitle = FormatString (title, fmt, arg)) == NULL)
142       {
143       Delete(pmp);
144       return IDCANCEL;
145       }
146
147    if ((pmp->pszText = vFormatString (text, fmt, arg)) == NULL)
148       {
149       FreeString (pmp->pszTitle);
150       Delete(pmp);
151       return IDCANCEL;
152       }
153
154    if (!( pmp->dwType & 0xF0 )) // no icon requested?  pick one.
155       {
156       pmp->dwType |= ((pmp->dwType & 0x0F) ? MB_ICONQUESTION : MB_ICONASTERISK);
157       }
158
159    if (pmp->dwType & MB_MODELESS)
160       {
161       pmp->dwType &= ~MB_MODELESS;
162
163       HANDLE hThread;
164       if ((hThread = CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE)Message_ThreadProc, pmp, 0, NULL)) != NULL)
165          SetThreadPriority (hThread, THREAD_PRIORITY_BELOW_NORMAL);
166
167       return -1; // threaded--who knows what button was hit.
168       }
169
170    return Message_ThreadProc (pmp);
171 }
172
173
174 DWORD WINAPI Message_ThreadProc (PVOID lp)
175 {
176    LPMESSAGE_PARAMS pmp = (LPMESSAGE_PARAMS)lp;
177
178    DWORD rc = MessageBox (NULL, pmp->pszText, pmp->pszTitle, pmp->dwType);
179
180    FreeString (pmp->pszText);
181    FreeString (pmp->pszTitle);
182    Delete(pmp);
183
184    return rc;
185 }
186