root/middleware-offline/trunk/_src/eidmw/dialogs/dialogsWin32/dlgWndModal.cpp @ 5

Revision 5, 9.2 KB (checked in by vsilva, 9 years ago)

Initial comit

Line 
1/* ****************************************************************************
2
3 * eID Middleware Project.
4 * Copyright (C) 2008-2009 FedICT.
5 *
6 * This is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU Lesser General Public License version
8 * 3.0 as published by the Free Software Foundation.
9 *
10 * This software is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this software; if not, see
17 * http://www.gnu.org/licenses/.
18
19**************************************************************************** */
20
21#include "stdafx.h"
22#include "dlgWndModal.h"
23#include "resource.h"
24#include "../langUtil.h"
25#include "Log.h"
26
27#define IMG_ICO_SIZE 64
28
29dlgWndModal::dlgWndModal( DlgIcon icon, const std::wstring & Msg, unsigned char ulButtons, 
30                                                 unsigned char ulEnterButton, unsigned char ulCancelButton, HWND Parent )
31:Win32Dialog(L"WndModal")
32{
33        //The ID of the buttons are remaped to enabled the following behaviour
34        // - IDOK for the Enter Button
35        // - IDCANCEL for the Escape button
36        m_ulEnterButton=ulEnterButton;
37        m_ulCancelButton=ulCancelButton;
38
39        szHeader = _wcsdup( Msg.c_str() );
40        int iWidth = 0;
41        for( int i = 16; i > 0; i /= 2 )
42        {
43                if( i & ulButtons )
44                        iWidth++;
45                else if( i == 0 )
46                        break;
47        }
48        iWidth = iWidth * 80 + 40;
49
50        std::wstring tmpTitle = L"";
51        tmpTitle += GETSTRING_DLG(Message);
52
53        if( iWidth < 450 )
54                iWidth = 450;
55
56
57        if( CreateWnd( tmpTitle.c_str() , iWidth, 300, 0, Parent ) )
58        {
59                RECT clientRect;
60                GetClientRect( m_hWnd, &clientRect );
61                iWidth = 1;
62
63                TextFont = CreateFont( 12, 0, 0, 0, FW_DONTCARE, 0, 0, 0,
64                                DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
65                                DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"MS Shell Dlg" );
66
67                if( ulButtons & DLG_BUTTON_NO )
68                {
69                        HWND hNoButton = CreateWindow(
70                                L"BUTTON", GETSTRING_DLG(No), WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_TEXT
71                                | (m_ulEnterButton==DLG_BUTTON_NO?BS_DEFPUSHBUTTON:0), 
72                                clientRect.right - iWidth*80, clientRect.bottom - 36, 72, 24, m_hWnd, 
73                                (HMENU)(m_ulEnterButton==DLG_BUTTON_NO?IDOK:(m_ulCancelButton==DLG_BUTTON_NO?IDCANCEL:IDNO)), 
74                                m_hInstance, NULL );
75                        SendMessage( hNoButton, WM_SETFONT, (WPARAM)TextFont, 0 );
76                        iWidth++;
77                }
78
79                if( ulButtons & DLG_BUTTON_CANCEL )
80                {
81                        HWND hCancelButton = CreateWindow(
82                                L"BUTTON", GETSTRING_DLG(Cancel), WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_TEXT
83                                | (m_ulEnterButton==DLG_BUTTON_CANCEL?BS_DEFPUSHBUTTON:0), 
84                                clientRect.right - iWidth*80, clientRect.bottom - 36, 72, 24, m_hWnd,
85                                (HMENU)(m_ulEnterButton==DLG_BUTTON_CANCEL?IDOK:(m_ulCancelButton==DLG_BUTTON_CANCEL?IDCANCEL:IDCANCEL)), 
86                                m_hInstance, NULL );
87                        SendMessage( hCancelButton, WM_SETFONT, (WPARAM)TextFont, 0 );
88                        iWidth++;
89                }
90
91                if( ulButtons & DLG_BUTTON_RETRY )
92                {
93                        HWND hRetryButton = CreateWindow(
94                                L"BUTTON", GETSTRING_DLG(Retry), WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_TEXT
95                                | (m_ulEnterButton==DLG_BUTTON_RETRY?BS_DEFPUSHBUTTON:0), 
96                                clientRect.right - iWidth*80, clientRect.bottom - 36, 72, 24, m_hWnd, 
97                                (HMENU)(m_ulEnterButton==DLG_BUTTON_RETRY?IDOK:(m_ulCancelButton==DLG_BUTTON_RETRY?IDCANCEL:IDRETRY)), 
98                                m_hInstance, NULL );
99                        SendMessage( hRetryButton, WM_SETFONT, (WPARAM)TextFont, 0 );
100                        iWidth++;
101                }
102
103                if( ulButtons & DLG_BUTTON_YES )
104                {
105                        HWND hYesButton = CreateWindow(
106                                L"BUTTON", GETSTRING_DLG(Yes), WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_TEXT
107                                | (m_ulEnterButton==DLG_BUTTON_YES?BS_DEFPUSHBUTTON:0), 
108                                clientRect.right - iWidth*80, clientRect.bottom - 36, 72, 24, m_hWnd, 
109                                (HMENU)(m_ulEnterButton==DLG_BUTTON_YES?IDOK:(m_ulCancelButton==DLG_BUTTON_YES?IDCANCEL:IDYES)), 
110                                m_hInstance, NULL );
111                        SendMessage( hYesButton, WM_SETFONT, (WPARAM)TextFont, 0 );
112                        iWidth++;
113                }
114
115                if( ulButtons & DLG_BUTTON_OK )
116                {
117                        HWND hOkButton = CreateWindow(
118                                L"BUTTON", GETSTRING_DLG(Ok), WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_TEXT
119                                | (m_ulEnterButton==DLG_BUTTON_OK?BS_DEFPUSHBUTTON:0), 
120                                clientRect.right - iWidth*80, clientRect.bottom - 36, 72, 24, m_hWnd, 
121                                (HMENU)(m_ulEnterButton==DLG_BUTTON_OK?IDOK:(m_ulCancelButton==DLG_BUTTON_OK?IDCANCEL:IDOK)), 
122                                m_hInstance, NULL );
123                        SendMessage( hOkButton, WM_SETFONT, (WPARAM)TextFont, 0 );
124                }
125
126                switch( icon )
127                {
128                case DLG_ICON_INFO:
129                        ImageICO = LoadBitmap( m_hInstance, MAKEINTRESOURCE(IDB_ICO_INFO) );
130                        break;
131
132                case DLG_ICON_WARN:
133                        ImageICO = LoadBitmap( m_hInstance, MAKEINTRESOURCE(IDB_ICO_WARNING) );
134                        break;
135
136                case DLG_ICON_ERROR:
137                        ImageICO = LoadBitmap( m_hInstance, MAKEINTRESOURCE(IDB_ICO_NOK) );
138                        break;
139
140                case DLG_ICON_QUESTION:
141                        ImageICO = LoadBitmap( m_hInstance, MAKEINTRESOURCE(IDB_ICO_QUESTION) );
142                        break;
143
144                default:
145                        ImageICO = LoadBitmap( m_hInstance, MAKEINTRESOURCE(IDB_ICO_NOK) );
146                        break;
147                }
148                CreateBitapMask( ImageICO, ImageICO_Mask );
149
150        }
151}
152
153dlgWndModal::~dlgWndModal()
154{
155        KillWindow( );
156        if(szHeader)
157        {
158                free(szHeader);
159                szHeader=NULL;
160        }
161}
162
163LRESULT dlgWndModal::ProcecEvent(       UINT            uMsg,                   // Message For This Window
164                                                                        WPARAM          wParam,                 // Additional Message Information
165                                                                        LPARAM          lParam )                // Additional Message Information
166{
167        PAINTSTRUCT ps;
168        RECT rect;
169
170        switch( uMsg )
171        {
172                case WM_COMMAND:
173                {
174                        switch( LOWORD(wParam) )
175                        {
176                                case IDOK:
177                                        switch(m_ulEnterButton)
178                                        {
179                                        case DLG_BUTTON_NO:
180                                                dlgResult = eIDMW::DLG_NO;              break;
181                                        case DLG_BUTTON_CANCEL:
182                                                dlgResult = eIDMW::DLG_CANCEL;  break;
183                                        case DLG_BUTTON_RETRY:
184                                                dlgResult = eIDMW::DLG_RETRY;   break;
185                                        case DLG_BUTTON_YES:
186                                                dlgResult = eIDMW::DLG_YES;             break;
187                                        default:
188                                                dlgResult = eIDMW::DLG_OK;              break;
189                                        }
190                                        close();
191                                        return TRUE;
192
193                                case IDCANCEL:
194                                        switch(m_ulCancelButton)
195                                        {
196                                        case DLG_BUTTON_NO:
197                                                dlgResult = eIDMW::DLG_NO;              break;
198                                        case DLG_BUTTON_RETRY:
199                                                dlgResult = eIDMW::DLG_RETRY;   break;
200                                        case DLG_BUTTON_YES:
201                                                dlgResult = eIDMW::DLG_YES;             break;
202                                        case DLG_BUTTON_OK:
203                                                dlgResult = eIDMW::DLG_OK;              break;
204                                        default:
205                                                dlgResult = eIDMW::DLG_CANCEL;  break;
206                                        }
207                                        close();
208                                        return TRUE;
209
210                                case IDRETRY:
211                                        dlgResult = eIDMW::DLG_RETRY;
212                                        close();
213                                        return TRUE;
214
215                                case IDYES:
216                                        dlgResult = eIDMW::DLG_YES;
217                                        close();
218                                        return TRUE;
219
220                                case IDNO:
221                                        dlgResult = eIDMW::DLG_NO;
222                                        close();
223                                        return TRUE;
224
225                                default:
226                                        return DefWindowProc( m_hWnd, uMsg, wParam, lParam );
227                        }
228                }
229
230
231                case WM_SIZE:
232                {
233                        MWLOG(LEV_DEBUG, MOD_DLG, L"  --> dlgWndModal::ProcecEvent WM_SIZE (wParam=%X, lParam=%X)",wParam,lParam);
234
235                        if( IsIconic( m_hWnd ) )
236                                return 0;
237                        break;
238                }
239
240                case WM_PAINT:
241                {
242                        m_hDC = BeginPaint( m_hWnd, &ps );
243
244                                HDC hdcMem;
245
246                                GetClientRect( m_hWnd, &rect );
247                                rect.bottom -= 48;
248
249                                hdcMem = CreateCompatibleDC( m_hDC );
250                                SelectObject( hdcMem , ImageICO );
251
252                                MaskBlt( m_hDC, 8, (rect.bottom - rect.top - IMG_ICO_SIZE)/2, IMG_ICO_SIZE, IMG_ICO_SIZE,
253                                        hdcMem, 0, 0,
254                                        ImageICO_Mask, 0, 0,
255                                        MAKEROP4( SRCCOPY, 0x00AA0029 ) );
256
257                                DeleteDC(hdcMem);
258
259                                rect.left += IMG_ICO_SIZE + 32;
260                                rect.top += 32;
261                                rect.right -= 8;
262                                SetBkColor( m_hDC, GetSysColor( COLOR_3DFACE ) );
263                                SelectObject( m_hDC, TextFont );
264                                DrawText( m_hDC, szHeader, -1, &rect, DT_WORDBREAK );
265
266                        EndPaint( m_hWnd, &ps );
267
268                        SetForegroundWindow( m_hWnd );
269
270                        return 0;
271                }
272
273                case WM_NCACTIVATE:
274                {
275                        MWLOG(LEV_DEBUG, MOD_DLG, L"  --> dlgWndModal::ProcecEvent WM_NCACTIVATE (wParam=%X, lParam=%X)",wParam,lParam);
276
277                        if( !IsIconic( m_hWnd ) && m_ModalHold && Active_hWnd == m_hWnd )
278                        {
279                                ShowWindow( m_hWnd, SW_SHOW );
280                                SetFocus( m_hWnd );
281                                return 0;
282                        }
283                        break;
284                }
285
286                case WM_KILLFOCUS:
287                {
288                        MWLOG(LEV_DEBUG, MOD_DLG, L"  --> dlgWndModal::ProcecEvent WM_KILLFOCUS (wParam=%X, lParam=%X)",wParam,lParam);
289
290                        if( !IsIconic( m_hWnd ) && m_ModalHold && Active_hWnd == m_hWnd )
291                        {
292                                if( GetParent((HWND)wParam ) != m_hWnd )
293                                {
294                                        SetFocus( m_hWnd );
295                                        return 0;
296                                }
297                        }
298                        break;
299                }
300
301                case WM_CREATE:
302                {
303                        MWLOG(LEV_DEBUG, MOD_DLG, L"  --> dlgWndModal::ProcecEvent WM_CREATE (wParam=%X, lParam=%X)",wParam,lParam);
304
305                        HMENU hSysMenu;
306
307                        hSysMenu = GetSystemMenu( m_hWnd, FALSE );
308                        EnableMenuItem( hSysMenu, 2, MF_BYPOSITION | MF_GRAYED );
309
310                        return 1;
311                }
312
313                case WM_CLOSE:
314                {
315                        MWLOG(LEV_DEBUG, MOD_DLG, L"  --> dlgWndModal::ProcecEvent WM_CLOSE (wParam=%X, lParam=%X)",wParam,lParam);
316
317                        if( IsIconic( m_hWnd ) )
318                                return DefWindowProc( m_hWnd, uMsg, wParam, lParam );
319
320                        ShowWindow( m_hWnd, SW_MINIMIZE );
321                        return 0;
322                }
323
324                case WM_DESTROY: 
325                {
326                        MWLOG(LEV_DEBUG, MOD_DLG, L"  --> dlgWndModal::ProcecEvent WM_DESTROY (wParam=%X, lParam=%X)",wParam,lParam);
327                        break;
328                }
329
330                default:
331                {
332                        return DefWindowProc( m_hWnd, uMsg, wParam, lParam );
333                }
334        }
335        return DefWindowProc( m_hWnd, uMsg, wParam, lParam );
336}
Note: See TracBrowser for help on using the browser.