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