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_sfx2.hxx" 26 27 #include "alienwarn.hxx" 28 #include "sfx2/sfxresid.hxx" 29 #include <sfx2/sfxuno.hxx> 30 31 #include "alienwarn.hrc" 32 #include "dialog.hrc" 33 #include <vcl/msgbox.hxx> 34 #include <unotools/saveopt.hxx> 35 36 // class SfxAlienWarningDialog ------------------------------------------- 37 38 SfxAlienWarningDialog::SfxAlienWarningDialog( Window* pParent, const String& _rFormatName ) : 39 40 SfxModalDialog( pParent, SfxResId( RID_DLG_ALIEN_WARNING ) ), 41 42 m_aKeepCurrentBtn ( this, SfxResId( PB_NO ) ), 43 m_aSaveODFBtn ( this, SfxResId( PB_YES ) ), 44 m_aMoreInfoBtn ( this, SfxResId( PB_MOREINFO ) ), 45 m_aOptionLine ( this, SfxResId( FL_OPTION ) ), 46 m_aWarningOnBox ( this, SfxResId( CB_WARNING_OFF ) ), 47 m_aQueryImage ( this, SfxResId( FI_QUERY ) ), 48 m_aInfoText ( this, SfxResId( FT_INFOTEXT ) ) 49 50 { 51 FreeResource(); 52 53 // set questionmark image 54 m_aQueryImage.SetImage( QueryBox::GetStandardImage() ); 55 56 // replace formatname 57 String sInfoText = m_aInfoText.GetText(); 58 sInfoText.SearchAndReplaceAll( DEFINE_CONST_UNICODE("%FORMATNAME"), _rFormatName ); 59 m_aInfoText.SetText( sInfoText ); 60 61 // load value of "warning on" checkbox from save options 62 m_aWarningOnBox.Check( SvtSaveOptions().IsWarnAlienFormat() == sal_True ); 63 64 // set focus to "Keep Current Format" button 65 m_aKeepCurrentBtn.GrabFocus(); 66 67 // pb: #i43989# we have no online help for this dialog at the moment 68 // -> hide the "more info" button 69 //m_aMoreInfoBtn.Hide(); 70 71 // calculate and set the size of the dialog and its controls 72 InitSize(); 73 } 74 75 // ----------------------------------------------------------------------- 76 77 SfxAlienWarningDialog::~SfxAlienWarningDialog() 78 { 79 // save value of "warning off" checkbox, if necessary 80 SvtSaveOptions aSaveOpt; 81 sal_Bool bChecked = m_aWarningOnBox.IsChecked(); 82 if ( aSaveOpt.IsWarnAlienFormat() != bChecked ) 83 aSaveOpt.SetWarnAlienFormat( bChecked ); 84 } 85 86 // ----------------------------------------------------------------------- 87 88 void SfxAlienWarningDialog::InitSize() 89 { 90 // if the button text is too wide, then broaden the button 91 long nTxtW = m_aMoreInfoBtn.GetCtrlTextWidth( m_aMoreInfoBtn.GetText() ); 92 long nCtrlW = m_aMoreInfoBtn.GetSizePixel().Width(); 93 if ( nTxtW >= nCtrlW ) 94 { 95 long nDelta = nTxtW - nCtrlW; 96 nDelta += IMPL_EXTRA_BUTTON_WIDTH; 97 Point aNextPoint = m_aKeepCurrentBtn.GetPosPixel(); 98 aNextPoint.X() += m_aKeepCurrentBtn.GetSizePixel().Width(); 99 Point aNewPoint = m_aMoreInfoBtn.GetPosPixel(); 100 aNewPoint.X() -= nDelta; 101 if ( aNextPoint.X() >= aNewPoint.X() ) 102 { 103 long nSpace = aNextPoint.X() - aNewPoint.X(); 104 nSpace += 2; 105 nDelta -= nSpace; 106 aNewPoint.X() += nSpace; 107 } 108 Size aNewSize = m_aMoreInfoBtn.GetSizePixel(); 109 aNewSize.Width() += nDelta; 110 m_aMoreInfoBtn.SetPosSizePixel( aNewPoint, aNewSize ); 111 } 112 113 // text of checkbox to wide -> add new line 114 nTxtW = m_aWarningOnBox.GetCtrlTextWidth( m_aWarningOnBox.GetText() ) + IMPL_EXTRA_BUTTON_WIDTH; 115 nCtrlW = m_aWarningOnBox.GetSizePixel().Width(); 116 if ( nTxtW >= nCtrlW ) 117 { 118 long nTextHeight = m_aWarningOnBox.GetTextHeight(); 119 Size aNewSize = m_aWarningOnBox.GetSizePixel(); 120 aNewSize.Height() += nTextHeight; 121 m_aWarningOnBox.SetSizePixel( aNewSize ); 122 aNewSize = GetSizePixel(); 123 aNewSize.Height() += nTextHeight; 124 SetSizePixel( aNewSize ); 125 } 126 127 // align the size of the information text control (FixedText) to its content 128 Size aMinSize = m_aInfoText.CalcMinimumSize( m_aInfoText.GetSizePixel().Width() ); 129 long nTxtH = aMinSize.Height(); 130 long nCtrlH = m_aInfoText.GetSizePixel().Height(); 131 long nDelta = ( nCtrlH - nTxtH ); 132 Size aNewSize = m_aInfoText.GetSizePixel(); 133 aNewSize.Height() -= nDelta; 134 m_aInfoText.SetSizePixel( aNewSize ); 135 136 // new position for the succeeding windows 137 Window* pWins[] = 138 { 139 &m_aSaveODFBtn, &m_aKeepCurrentBtn, &m_aMoreInfoBtn, &m_aOptionLine, &m_aWarningOnBox 140 }; 141 Window** pCurrent = pWins; 142 for ( sal_uInt32 i = 0; i < sizeof( pWins ) / sizeof( pWins[ 0 ] ); ++i, ++pCurrent ) 143 { 144 Point aNewPos = (*pCurrent)->GetPosPixel(); 145 aNewPos.Y() -= nDelta; 146 (*pCurrent)->SetPosPixel( aNewPos ); 147 } 148 149 // new size of the dialog 150 aNewSize = GetSizePixel(); 151 aNewSize.Height() -= nDelta; 152 SetSizePixel( aNewSize ); 153 154 // recalculate the size and position of the buttons 155 m_aMoreInfoBtn.Hide(); 156 nTxtW = m_aKeepCurrentBtn.GetCtrlTextWidth( m_aKeepCurrentBtn.GetText() ); 157 long nTemp = m_aSaveODFBtn.GetCtrlTextWidth( m_aSaveODFBtn.GetText() ); 158 if ( nTemp > nTxtW ) 159 nTxtW = nTemp; 160 nTxtW += IMPL_EXTRA_BUTTON_WIDTH; 161 Size a3Size = LogicToPixel( Size( 3, 3 ), MAP_APPFONT ); 162 Point aPos = m_aKeepCurrentBtn.GetPosPixel(); 163 aPos.X() = ( aNewSize.Width() - (2*nTxtW) - a3Size.Width() ) / 2; 164 long nDefX = m_aWarningOnBox.GetPosPixel().X(); 165 if ( nDefX < aPos.X() ) 166 aPos.X() = nDefX; 167 aNewSize = m_aKeepCurrentBtn.GetSizePixel(); 168 aNewSize.Width() = nTxtW; 169 m_aKeepCurrentBtn.SetPosSizePixel( aPos, aNewSize ); 170 aPos.X() += nTxtW + a3Size.Width(); 171 m_aSaveODFBtn.SetPosSizePixel( aPos, aNewSize ); 172 } 173 174