xref: /AOO41X/main/vcl/source/window/msgbox.cxx (revision ae642d40cb705d587b6030dcc4808405fd18fb7f)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_vcl.hxx"
26 
27 #include <tools/rc.h>
28 
29 #include <svids.hrc>
30 #include <svdata.hxx>
31 #include <brdwin.hxx>
32 #include <window.h>
33 
34 #include <vcl/metric.hxx>
35 #include <vcl/svapp.hxx>
36 #include <vcl/wrkwin.hxx>
37 #include <vcl/fixed.hxx>
38 #include <vcl/sound.hxx>
39 #include <vcl/msgbox.hxx>
40 #include <vcl/button.hxx>
41 #include <vcl/mnemonic.hxx>
42 
43 
44 
45 // =======================================================================
46 
ImplInitMsgBoxImageList()47 static void ImplInitMsgBoxImageList()
48 {
49     ImplSVData* pSVData = ImplGetSVData();
50     if ( !pSVData->maWinData.mpMsgBoxImgList )
51     {
52         ResMgr* pResMgr = ImplGetResMgr();
53         pSVData->maWinData.mpMsgBoxImgList = new ImageList(4);
54         pSVData->maWinData.mpMsgBoxHCImgList = new ImageList(4);
55         if( pResMgr )
56         {
57             Color aNonAlphaMask( 0xC0, 0xC0, 0xC0 );
58             pSVData->maWinData.mpMsgBoxImgList->InsertFromHorizontalBitmap
59                 ( ResId( SV_RESID_BITMAP_MSGBOX, *pResMgr ), 4, &aNonAlphaMask );
60             pSVData->maWinData.mpMsgBoxHCImgList->InsertFromHorizontalBitmap
61                 ( ResId( SV_RESID_BITMAP_MSGBOX_HC, *pResMgr ), 4, &aNonAlphaMask );
62         }
63     }
64 }
65 
66 // =======================================================================
67 
ImplInitMessBoxData()68 void MessBox::ImplInitMessBoxData()
69 {
70     mpFixedText         = NULL;
71     mpFixedImage        = NULL;
72     mnSoundType         = 0;
73     mbHelpBtn           = sal_False;
74     mbSound             = sal_True;
75     mpCheckBox          = NULL;
76     mbCheck             = sal_False;
77 }
78 
79 // -----------------------------------------------------------------------
80 
ImplInitButtons()81 void MessBox::ImplInitButtons()
82 {
83     WinBits nStyle = GetStyle();
84     sal_uInt16  nOKFlags = BUTTONDIALOG_OKBUTTON;
85     sal_uInt16  nCancelFlags = BUTTONDIALOG_CANCELBUTTON;
86     sal_uInt16  nRetryFlags = 0;
87     sal_uInt16  nYesFlags = 0;
88     sal_uInt16  nNoFlags = 0;
89 
90     if ( nStyle & WB_OK_CANCEL )
91     {
92         if ( nStyle & WB_DEF_CANCEL )
93             nCancelFlags |= BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_FOCUSBUTTON;
94         else // WB_DEF_OK
95             nOKFlags |= BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_FOCUSBUTTON;
96 
97         AddButton( BUTTON_OK, BUTTONID_OK, nOKFlags );
98         AddButton( BUTTON_CANCEL, BUTTONID_CANCEL, nCancelFlags );
99     }
100     else if ( nStyle & WB_YES_NO )
101     {
102         if ( nStyle & WB_DEF_YES )
103             nYesFlags |= BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_FOCUSBUTTON;
104         else // WB_DEF_NO
105             nNoFlags |= BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_FOCUSBUTTON;
106         nNoFlags |= BUTTONDIALOG_CANCELBUTTON;
107 
108         AddButton( BUTTON_YES, BUTTONID_YES, nYesFlags );
109         AddButton( BUTTON_NO, BUTTONID_NO, nNoFlags );
110     }
111     else if ( nStyle & WB_YES_NO_CANCEL )
112     {
113         if ( nStyle & WB_DEF_YES )
114             nYesFlags |= BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_FOCUSBUTTON;
115         else if ( nStyle & WB_DEF_NO )
116             nNoFlags |= BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_FOCUSBUTTON;
117         else
118             nCancelFlags |= BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_FOCUSBUTTON;
119 
120         AddButton( BUTTON_YES, BUTTONID_YES, nYesFlags );
121         AddButton( BUTTON_NO, BUTTONID_NO, nNoFlags );
122         AddButton( BUTTON_CANCEL, BUTTONID_CANCEL, nCancelFlags );
123     }
124     else if ( nStyle & WB_RETRY_CANCEL )
125     {
126         if ( nStyle & WB_DEF_CANCEL )
127             nCancelFlags |= BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_FOCUSBUTTON;
128         else // WB_DEF_RETRY
129             nRetryFlags |= BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_FOCUSBUTTON;
130 
131         AddButton( BUTTON_RETRY, BUTTONID_RETRY, nRetryFlags );
132         AddButton( BUTTON_CANCEL, BUTTONID_CANCEL, nCancelFlags );
133     }
134     else if ( nStyle & WB_ABORT_RETRY_IGNORE )
135     {
136         sal_uInt16 nAbortFlags = 0;
137         sal_uInt16 nIgnoreFlags = 0;
138 
139         if ( nStyle & WB_DEF_CANCEL )
140             nAbortFlags |= BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_FOCUSBUTTON;
141         else if ( nStyle & WB_DEF_RETRY )
142             nRetryFlags |= BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_FOCUSBUTTON;
143         else if ( nStyle & WB_DEF_IGNORE )
144             nIgnoreFlags |= BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_FOCUSBUTTON;
145 
146         AddButton( BUTTON_ABORT, BUTTONID_CANCEL, nAbortFlags );
147         AddButton( BUTTON_RETRY, BUTTONID_RETRY, nRetryFlags );
148         AddButton( BUTTON_IGNORE, BUTTONID_IGNORE, nIgnoreFlags );
149     }
150     else if ( nStyle & WB_OK )
151     {
152         nOKFlags |= BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_FOCUSBUTTON;
153 
154         AddButton( BUTTON_OK, BUTTONID_OK, nOKFlags );
155     }
156 }
157 
158 // -----------------------------------------------------------------------
159 
MessBox(WindowType)160 MessBox::MessBox( WindowType ) :
161     ButtonDialog( WINDOW_MESSBOX )
162 {
163     ImplInitMessBoxData();
164 }
165 
166 // -----------------------------------------------------------------------
167 
MessBox(Window * pParent,WinBits nStyle,const XubString & rTitle,const XubString & rMessage)168 MessBox::MessBox( Window* pParent, WinBits nStyle,
169                   const XubString& rTitle, const XubString& rMessage ) :
170     ButtonDialog( WINDOW_MESSBOX ),
171     maMessText( rMessage )
172 {
173     ImplInitMessBoxData();
174     ImplInit( pParent, nStyle | WB_MOVEABLE | WB_HORZ | WB_CENTER );
175     ImplInitButtons();
176 
177     if ( rTitle.Len() )
178         SetText( rTitle );
179 }
180 
181 // -----------------------------------------------------------------------
182 
MessBox(Window * pParent,const ResId & rResId)183 MessBox::MessBox( Window* pParent, const ResId& rResId ) :
184     ButtonDialog( WINDOW_MESSBOX )
185 {
186     ImplInitMessBoxData();
187 
188     GetRes( rResId.SetRT( RSC_MESSBOX ) );
189     sal_uInt16 nHiButtons   = ReadShortRes();
190     sal_uInt16 nLoButtons   = ReadShortRes();
191     sal_uInt16 nHiDefButton = ReadShortRes();
192     sal_uInt16 nLoDefButton = ReadShortRes();
193     rtl::OString aHelpId( ReadByteStringRes() );
194     /* sal_uInt16 bSysModal = */ ReadShortRes();
195     SetHelpId( aHelpId );
196     WinBits nBits = (((sal_uLong)nHiButtons << 16) + nLoButtons) |
197                     (((sal_uLong)nHiDefButton << 16) + nLoDefButton);
198     ImplInit( pParent, nBits | WB_MOVEABLE | WB_HORZ | WB_CENTER );
199 
200     ImplLoadRes( rResId );
201     ImplInitButtons();
202 }
203 
204 // -----------------------------------------------------------------------
205 
ImplLoadRes(const ResId &)206 void MessBox::ImplLoadRes( const ResId& )
207 {
208     SetText( ReadStringRes() );
209     SetMessText( ReadStringRes() );
210     SetHelpText( ReadStringRes() );
211 }
212 
213 // -----------------------------------------------------------------------
214 
~MessBox()215 MessBox::~MessBox()
216 {
217     if ( mpFixedText )
218         delete mpFixedText;
219     if ( mpFixedImage )
220         delete mpFixedImage;
221     if ( mpCheckBox )
222         delete mpCheckBox;
223 }
224 
225 // -----------------------------------------------------------------------
226 
ImplPosControls()227 void MessBox::ImplPosControls()
228 {
229     if ( GetHelpId().getLength() )
230     {
231         if ( !mbHelpBtn )
232         {
233             AddButton( BUTTON_HELP, BUTTONID_HELP, BUTTONDIALOG_HELPBUTTON, 3 );
234             mbHelpBtn = sal_True;
235         }
236     }
237     else
238     {
239         if ( mbHelpBtn )
240         {
241             RemoveButton( BUTTONID_HELP );
242             mbHelpBtn = sal_False;
243         }
244     }
245 
246     XubString       aMessText( maMessText );
247     TextRectInfo    aTextInfo;
248     Rectangle       aRect( 0, 0, 30000, 30000 );
249     Rectangle       aFormatRect;
250     Point           aTextPos( IMPL_DIALOG_OFFSET, IMPL_DIALOG_OFFSET+IMPL_MSGBOX_OFFSET_EXTRA_Y );
251     Size            aImageSize;
252     Size            aPageSize;
253     Size            aFixedSize;
254     long            nTitleWidth;
255     long            nButtonSize = ImplGetButtonSize();
256     long            nMaxWidth = GetDesktopRectPixel().GetWidth()-8;
257     long            nMaxLineWidth;
258     long            nWidth;
259     WinBits         nWinStyle = WB_LEFT | WB_WORDBREAK | WB_NOLABEL | WB_INFO;
260     sal_uInt16          nTextStyle = TEXT_DRAW_MULTILINE | TEXT_DRAW_TOP | TEXT_DRAW_LEFT;
261 
262     if ( mpFixedText )
263         delete mpFixedText;
264     if ( mpFixedImage )
265     {
266         delete mpFixedImage;
267         mpFixedImage = NULL;
268     }
269     if ( mpCheckBox )
270     {
271         mbCheck = mpCheckBox->IsChecked();
272         delete mpCheckBox;
273         mpCheckBox = NULL;
274     }
275 
276 
277     // Message-Text um Tabs bereinigen
278     XubString   aTabStr( RTL_CONSTASCII_USTRINGPARAM( "    " ) );
279     sal_uInt16      nIndex = 0;
280     while ( nIndex != STRING_NOTFOUND )
281         nIndex = aMessText.SearchAndReplace( '\t', aTabStr, nIndex );
282 
283     // Wenn Fenster zu schmall, machen wir Dialog auch breiter
284     if ( mpWindowImpl->mbFrame )
285         nMaxWidth = 630;
286     else if ( nMaxWidth < 120 )
287         nMaxWidth = 120;
288 
289     nMaxWidth -= mpWindowImpl->mnLeftBorder+mpWindowImpl->mnRightBorder+4;
290 
291     // MessageBox sollte min. so breit sein, das auch Title sichtbar ist
292     // Extra-Width for Closer, because Closer is set after this call
293     nTitleWidth = CalcTitleWidth();
294     nTitleWidth += mpWindowImpl->mnTopBorder;
295 
296     nMaxWidth -= (IMPL_DIALOG_OFFSET*2)+(IMPL_MSGBOX_OFFSET_EXTRA_X*2);
297 
298     // Wenn wir ein Image haben, dann deren Groesse ermitteln und das
299     // entsprechende Control anlegen und positionieren
300     aImageSize = maImage.GetSizePixel();
301     if ( aImageSize.Width() )
302     {
303         aImageSize.Width()  += 4;
304         aImageSize.Height() += 4;
305         aTextPos.X() += aImageSize.Width()+IMPL_SEP_MSGBOX_IMAGE;
306         mpFixedImage = new FixedImage( this );
307         mpFixedImage->SetPosSizePixel( Point( IMPL_DIALOG_OFFSET-2+IMPL_MSGBOX_OFFSET_EXTRA_X,
308                                               IMPL_DIALOG_OFFSET-2+IMPL_MSGBOX_OFFSET_EXTRA_Y ),
309                                        aImageSize );
310         mpFixedImage->SetImage( maImage );
311         // forward the HC image
312         if( !!maImageHC )
313             mpFixedImage->SetModeImage( maImageHC, BMP_COLOR_HIGHCONTRAST );
314         mpFixedImage->Show();
315         nMaxWidth -= aImageSize.Width()+IMPL_SEP_MSGBOX_IMAGE;
316     }
317     else
318         aTextPos.X() += IMPL_MSGBOX_OFFSET_EXTRA_X;
319 
320     // Maximale Zeilenlaenge ohne Wordbreak ermitteln
321     aFormatRect = GetTextRect( aRect, aMessText, nTextStyle, &aTextInfo );
322     nMaxLineWidth = aFormatRect.GetWidth();
323     nTextStyle |= TEXT_DRAW_WORDBREAK;
324 
325     // Breite fuer Textformatierung ermitteln
326     if ( nMaxLineWidth > 450 )
327         nWidth = 450;
328     else if ( nMaxLineWidth > 300 )
329         nWidth = nMaxLineWidth+5;
330     else
331         nWidth = 300;
332     if ( nButtonSize > nWidth )
333         nWidth = nButtonSize-(aTextPos.X()-IMPL_DIALOG_OFFSET);
334     if ( nWidth > nMaxWidth )
335         nWidth = nMaxWidth;
336 
337     aRect.Right() = nWidth;
338     aFormatRect = GetTextRect( aRect, aMessText, nTextStyle, &aTextInfo );
339     if ( aTextInfo.GetMaxLineWidth() > nWidth )
340     {
341         nWidth = aTextInfo.GetMaxLineWidth()+8;
342         aRect.Right() = nWidth;
343         aFormatRect = GetTextRect( aRect, aMessText, nTextStyle, &aTextInfo );
344     }
345 
346     // Style fuer FixedText ermitteln
347     aPageSize.Width()   = aImageSize.Width();
348     aFixedSize.Width()  = aTextInfo.GetMaxLineWidth()+1;
349     aFixedSize.Height() = aFormatRect.GetHeight();
350     if ( aFixedSize.Height() < aImageSize.Height() )
351     {
352         nWinStyle |= WB_VCENTER;
353         aPageSize.Height()  = aImageSize.Height();
354         aFixedSize.Height() = aImageSize.Height();
355     }
356     else
357     {
358         nWinStyle |= WB_TOP;
359         aPageSize.Height()  = aFixedSize.Height();
360     }
361     if ( aImageSize.Width() )
362         aPageSize.Width() += IMPL_SEP_MSGBOX_IMAGE;
363     aPageSize.Width()  += (IMPL_DIALOG_OFFSET*2)+(IMPL_MSGBOX_OFFSET_EXTRA_X*2);
364     aPageSize.Width()  += aFixedSize.Width()+1;
365     aPageSize.Height() += (IMPL_DIALOG_OFFSET*2)+(IMPL_MSGBOX_OFFSET_EXTRA_Y*2);
366 
367     if ( aPageSize.Width() < IMPL_MINSIZE_MSGBOX_WIDTH )
368         aPageSize.Width() = IMPL_MINSIZE_MSGBOX_WIDTH;
369     if ( aPageSize.Width() < nTitleWidth )
370         aPageSize.Width() = nTitleWidth;
371 
372     if ( maCheckBoxText.Len() )
373     {
374         Size aMinCheckboxSize ( aFixedSize );
375         if ( aPageSize.Width() < IMPL_MINSIZE_MSGBOX_WIDTH+80 )
376         {
377             aPageSize.Width() = IMPL_MINSIZE_MSGBOX_WIDTH+80;
378             aMinCheckboxSize.Width() += 80;
379         }
380 
381         // #104492# auto mnemonics for CJK strings may increase the length, so measure the
382         // checkbox length including a temporary mnemonic, the correct auto mnemonic will be
383         // generated later in the dialog (see init_show)
384 
385         String aMnemonicString( maCheckBoxText );
386         if( GetSettings().GetStyleSettings().GetAutoMnemonic() )
387         {
388             if( aMnemonicString == GetNonMnemonicString( maCheckBoxText ) )
389             {
390                 // no mnemonic found -> create one
391                 MnemonicGenerator aMnemonicGenerator;
392                 aMnemonicGenerator.CreateMnemonic( aMnemonicString );
393             }
394         }
395 
396         mpCheckBox = new CheckBox( this );
397         mpCheckBox->Check( mbCheck );
398         mpCheckBox->SetText( aMnemonicString );
399         mpCheckBox->SetStyle( mpCheckBox->GetStyle() | WB_WORDBREAK );
400         mpCheckBox->SetHelpId( GetHelpId() );   // DR: Check box and dialog have same HID
401 
402         // align checkbox with message text
403         Size aSize = mpCheckBox->CalcMinimumSize( aMinCheckboxSize.Width() );
404 
405         // now set the original non-mnemonic string
406         mpCheckBox->SetText( maCheckBoxText );
407 
408         Point aPos( aTextPos );
409         aPos.Y() += aFixedSize.Height() + (IMPL_DIALOG_OFFSET)+(IMPL_MSGBOX_OFFSET_EXTRA_Y*2);
410 
411         // increase messagebox
412         aPageSize.Height() += aSize.Height() + (IMPL_DIALOG_OFFSET*2)+(IMPL_MSGBOX_OFFSET_EXTRA_Y*2);
413 
414         mpCheckBox->SetPosSizePixel( aPos, aSize );
415         mpCheckBox->Show();
416     }
417 
418     mpFixedText = new FixedText( this, nWinStyle );
419     if( mpFixedText->GetStyle() & WB_EXTRAOFFSET ) // TODO: use CalcMinimumSize() instead
420         aFixedSize.Width() += 2;
421     mpFixedText->SetPosSizePixel( aTextPos, aFixedSize );
422     mpFixedText->SetText( aMessText );
423     mpFixedText->Show();
424     SetPageSizePixel( aPageSize );
425 }
426 
427 // -----------------------------------------------------------------------
428 
StateChanged(StateChangedType nType)429 void MessBox::StateChanged( StateChangedType nType )
430 {
431     if ( nType == STATE_CHANGE_INITSHOW )
432     {
433         ImplPosControls();
434         if ( mbSound && mnSoundType )
435             Sound::Beep( (SoundType)(mnSoundType-1), this );
436     }
437     ButtonDialog::StateChanged( nType );
438 }
439 
440 // -----------------------------------------------------------------------
441 
GetCheckBoxState() const442 sal_Bool MessBox::GetCheckBoxState() const
443 {
444     return mpCheckBox ? mpCheckBox->IsChecked() : mbCheck;
445 }
446 
447 // -----------------------------------------------------------------------
448 
SetCheckBoxState(sal_Bool bCheck)449 void MessBox::SetCheckBoxState( sal_Bool bCheck )
450 {
451     if( mpCheckBox ) mpCheckBox->Check( bCheck );
452     mbCheck = bCheck;
453 }
454 
455 // -----------------------------------------------------------------------
456 
SetDefaultCheckBoxText()457 void MessBox::SetDefaultCheckBoxText()
458 {
459     ResMgr* pResMgr = ImplGetResMgr();
460     if( pResMgr )
461         maCheckBoxText = XubString( ResId( SV_STDTEXT_DONTHINTAGAIN, *pResMgr ) );
462 }
463 
464 // -----------------------------------------------------------------------
465 
SetModeImage(const Image & rImage,BmpColorMode eMode)466 sal_Bool MessBox::SetModeImage( const Image& rImage, BmpColorMode eMode )
467 {
468     if( eMode == BMP_COLOR_NORMAL )
469         SetImage( rImage );
470     else if( eMode == BMP_COLOR_HIGHCONTRAST )
471         maImageHC = rImage;
472     else
473         return sal_False;
474     return sal_True;
475 }
476 
477 // -----------------------------------------------------------------------
478 
GetModeImage(BmpColorMode eMode) const479 const Image& MessBox::GetModeImage( BmpColorMode eMode ) const
480 {
481     if( eMode == BMP_COLOR_HIGHCONTRAST )
482         return maImageHC;
483     else
484         return maImage;
485 }
486 
487 // -----------------------------------------------------------------------
488 
ImplInitInfoBoxData()489 void InfoBox::ImplInitInfoBoxData()
490 {
491     // Default Text is the display title from the application
492     if ( !GetText().Len() )
493         SetText( Application::GetDisplayName() );
494 
495     SetImage( GetSettings().GetStyleSettings().GetHighContrastMode() ?
496                 InfoBox::GetStandardImageHC() : InfoBox::GetStandardImage() );
497     mnSoundType = ((sal_uInt16)SOUND_INFO)+1;
498 }
499 
500 // -----------------------------------------------------------------------
501 
InfoBox(Window * pParent,const XubString & rMessage)502 InfoBox::InfoBox( Window* pParent, const XubString& rMessage ) :
503     MessBox( pParent, WB_OK | WB_DEF_OK, ImplGetSVEmptyStr(), rMessage )
504 {
505     ImplInitInfoBoxData();
506 }
507 
508 // -----------------------------------------------------------------------
509 
InfoBox(Window * pParent,const ResId & rResId)510 InfoBox::InfoBox( Window* pParent, const ResId & rResId ) :
511     MessBox( pParent, rResId.SetRT( RSC_INFOBOX ) )
512 {
513     ImplInitInfoBoxData();
514 }
515 
516 // -----------------------------------------------------------------------
517 
InfoBox(Window * pParent,WinBits nStyle,const XubString & rMessage)518 InfoBox::InfoBox( Window* pParent, WinBits nStyle, const XubString& rMessage ) :
519     MessBox( pParent, nStyle, ImplGetSVEmptyStr(), rMessage )
520 {
521     ImplInitInfoBoxData();
522 }
523 
524 // -----------------------------------------------------------------------
525 
GetStandardImage()526 Image InfoBox::GetStandardImage()
527 {
528     ImplInitMsgBoxImageList();
529     return ImplGetSVData()->maWinData.mpMsgBoxImgList->GetImage( 4 );
530 }
531 
532 // -----------------------------------------------------------------------
533 
GetStandardImageHC()534 Image InfoBox::GetStandardImageHC()
535 {
536     ImplInitMsgBoxImageList();
537     return ImplGetSVData()->maWinData.mpMsgBoxHCImgList->GetImage( 4 );
538 }
539 
540 // -----------------------------------------------------------------------
541 
ImplInitWarningBoxData()542 void WarningBox::ImplInitWarningBoxData()
543 {
544     // Default Text is the display title from the application
545     if ( !GetText().Len() )
546         SetText( Application::GetDisplayName() );
547 
548     SetImage( WarningBox::GetStandardImage() );
549     mnSoundType = ((sal_uInt16)SOUND_WARNING)+1;
550 }
551 
552 // -----------------------------------------------------------------------
553 
WarningBox(Window * pParent,WinBits nStyle,const XubString & rMessage)554 WarningBox::WarningBox( Window* pParent, WinBits nStyle,
555                         const XubString& rMessage ) :
556     MessBox( pParent, nStyle, ImplGetSVEmptyStr(), rMessage )
557 {
558     ImplInitWarningBoxData();
559 }
560 
561 // -----------------------------------------------------------------------
562 
WarningBox(Window * pParent,const ResId & rResId)563 WarningBox::WarningBox( Window* pParent, const ResId& rResId ) :
564     MessBox( pParent, rResId.SetRT( RSC_WARNINGBOX ) )
565 {
566     ImplInitWarningBoxData();
567 }
568 
569 // -----------------------------------------------------------------------
570 
SetDefaultCheckBoxText()571 void WarningBox::SetDefaultCheckBoxText()
572 {
573     ResMgr* pResMgr = ImplGetResMgr();
574     if( pResMgr )
575         maCheckBoxText = XubString( ResId( SV_STDTEXT_DONTWARNAGAIN, *pResMgr ) );
576 }
577 
578 // -----------------------------------------------------------------------
579 
GetStandardImage()580 Image WarningBox::GetStandardImage()
581 {
582     ImplInitMsgBoxImageList();
583     return ImplGetSVData()->maWinData.mpMsgBoxImgList->GetImage( 3 );
584 }
585 
586 // -----------------------------------------------------------------------
587 
ImplInitErrorBoxData()588 void ErrorBox::ImplInitErrorBoxData()
589 {
590     // Default Text is the display title from the application
591     if ( !GetText().Len() )
592         SetText( Application::GetDisplayName() );
593 
594     SetImage( GetSettings().GetStyleSettings().GetHighContrastMode() ?
595         ErrorBox::GetStandardImageHC() : ErrorBox::GetStandardImage() );
596     mnSoundType = ((sal_uInt16)SOUND_ERROR)+1;
597 }
598 
599 // -----------------------------------------------------------------------
600 
ErrorBox(Window * pParent,WinBits nStyle,const XubString & rMessage)601 ErrorBox::ErrorBox( Window* pParent, WinBits nStyle,
602                     const XubString& rMessage ) :
603     MessBox( pParent, nStyle, ImplGetSVEmptyStr(), rMessage )
604 {
605     ImplInitErrorBoxData();
606 }
607 
608 // -----------------------------------------------------------------------
609 
ErrorBox(Window * pParent,const ResId & rResId)610 ErrorBox::ErrorBox( Window* pParent, const ResId& rResId ) :
611     MessBox( pParent, rResId.SetRT( RSC_ERRORBOX ) )
612 {
613     ImplInitErrorBoxData();
614 }
615 
616 // -----------------------------------------------------------------------
617 
GetStandardImage()618 Image ErrorBox::GetStandardImage()
619 {
620     ImplInitMsgBoxImageList();
621     return ImplGetSVData()->maWinData.mpMsgBoxImgList->GetImage( 1 );
622 }
623 
624 // -----------------------------------------------------------------------
625 
GetStandardImageHC()626 Image ErrorBox::GetStandardImageHC()
627 {
628     ImplInitMsgBoxImageList();
629     return ImplGetSVData()->maWinData.mpMsgBoxHCImgList->GetImage( 1 );
630 }
631 
632 // -----------------------------------------------------------------------
633 
ImplInitQueryBoxData()634 void QueryBox::ImplInitQueryBoxData()
635 {
636     // Default Text is the display title from the application
637     if ( !GetText().Len() )
638         SetText( Application::GetDisplayName() );
639 
640     SetImage( GetSettings().GetStyleSettings().GetHighContrastMode() ?
641         QueryBox::GetStandardImageHC() : QueryBox::GetStandardImage() );
642     mnSoundType = ((sal_uInt16)SOUND_QUERY)+1;
643 }
644 
645 // -----------------------------------------------------------------------
646 
QueryBox(Window * pParent,WinBits nStyle,const XubString & rMessage)647 QueryBox::QueryBox( Window* pParent, WinBits nStyle, const XubString& rMessage ) :
648     MessBox( pParent, nStyle, ImplGetSVEmptyStr(), rMessage )
649 {
650     ImplInitQueryBoxData();
651 }
652 
653 // -----------------------------------------------------------------------
654 
QueryBox(Window * pParent,const ResId & rResId)655 QueryBox::QueryBox( Window* pParent, const ResId& rResId ) :
656     MessBox( pParent, rResId.SetRT( RSC_QUERYBOX ) )
657 {
658     ImplInitQueryBoxData();
659 }
660 
661 // -----------------------------------------------------------------------
662 
SetDefaultCheckBoxText()663 void QueryBox::SetDefaultCheckBoxText()
664 {
665     ResMgr* pResMgr = ImplGetResMgr();
666     if( pResMgr )
667         maCheckBoxText = XubString( ResId( SV_STDTEXT_DONTASKAGAIN, *pResMgr ) );
668 }
669 
670 // -----------------------------------------------------------------------
671 
GetStandardImage()672 Image QueryBox::GetStandardImage()
673 {
674     ImplInitMsgBoxImageList();
675     return ImplGetSVData()->maWinData.mpMsgBoxImgList->GetImage( 2 );
676 }
677 
678 // -----------------------------------------------------------------------
679 
GetStandardImageHC()680 Image QueryBox::GetStandardImageHC()
681 {
682     ImplInitMsgBoxImageList();
683     return ImplGetSVData()->maWinData.mpMsgBoxHCImgList->GetImage( 2 );
684 }
685 
686 // -----------------------------------------------------------------------
687 
GetOptimalSize(WindowSizeType eType) const688 Size MessBox::GetOptimalSize(WindowSizeType eType) const
689 {
690     switch( eType ) {
691     case WINDOWSIZE_MINIMUM:
692         // FIXME: base me on the font size ?
693         return Size( 250, 100 );
694     default:
695         return Window::GetOptimalSize( eType );
696     }
697 }
698