blob: 0072db335baca35b6adaf7e1252088fcadccce19 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#include <svtools/filedlg.hxx>
#include <vcl/msgbox.hxx>
#ifndef UUI_IDS_HRC
#include <ids.hrc>
#endif
#ifndef UUI_MASTERPASSCRTDLG_HRC
#include <masterpasscrtdlg.hrc>
#endif
#include <masterpasscrtdlg.hxx>
// MasterPasswordCreateDialog---------------------------------------------------
// -----------------------------------------------------------------------
IMPL_LINK( MasterPasswordCreateDialog, EditHdl_Impl, Edit *, EMPTYARG )
{
aOKBtn.Enable( aEDMasterPasswordCrt.GetText().Len() >= nMinLen );
return 0;
}
// -----------------------------------------------------------------------
IMPL_LINK( MasterPasswordCreateDialog, OKHdl_Impl, OKButton *, EMPTYARG )
{
// compare both passwords and show message box if there are not equal!!
if( aEDMasterPasswordCrt.GetText() == aEDMasterPasswordRepeat.GetText() )
EndDialog( RET_OK );
else
{
String aErrorMsg( ResId( STR_ERROR_PASSWORDS_NOT_IDENTICAL, *pResourceMgr ));
ErrorBox aErrorBox( this, WB_OK, aErrorMsg );
aErrorBox.Execute();
aEDMasterPasswordCrt.SetText( String() );
aEDMasterPasswordRepeat.SetText( String() );
aEDMasterPasswordCrt.GrabFocus();
}
return 1;
}
// -----------------------------------------------------------------------
MasterPasswordCreateDialog::MasterPasswordCreateDialog
(
Window* pParent,
ResMgr* pResMgr
) :
ModalDialog( pParent, ResId( DLG_UUI_MASTERPASSWORD_CRT, *pResMgr ) ),
aFTInfoText ( this, ResId( FT_INFOTEXT, *pResMgr ) ),
aFLInfoText ( this, ResId( FL_INFOTEXT, *pResMgr ) ),
aFTMasterPasswordCrt ( this, ResId( FT_MASTERPASSWORD_CRT, *pResMgr ) ),
aEDMasterPasswordCrt ( this, ResId( ED_MASTERPASSWORD_CRT, *pResMgr ) ),
aFTMasterPasswordRepeat ( this, ResId( FT_MASTERPASSWORD_REPEAT, *pResMgr ) ),
aEDMasterPasswordRepeat ( this, ResId( ED_MASTERPASSWORD_REPEAT, *pResMgr ) ),
aFTCautionText ( this, ResId( FT_CAUTIONTEXT, *pResMgr ) ),
aFLCautionText ( this, ResId( FL_CAUTIONTEXT, *pResMgr ) ),
aFTMasterPasswordWarning ( this, ResId( FT_MASTERPASSWORD_WARNING, *pResMgr ) ),
aFL ( this, ResId( FL_FIXED_LINE, *pResMgr ) ),
aOKBtn ( this, ResId( BTN_MASTERPASSCRT_OK, *pResMgr ) ),
aCancelBtn ( this, ResId( BTN_MASTERPASSCRT_CANCEL, *pResMgr ) ),
aHelpBtn ( this, ResId( BTN_MASTERPASSCRT_HELP, *pResMgr ) ),
pResourceMgr ( pResMgr ),
nMinLen ( 1 )
{
FreeResource();
aOKBtn.Enable( sal_False );
aOKBtn.SetClickHdl( LINK( this, MasterPasswordCreateDialog, OKHdl_Impl ) );
aEDMasterPasswordCrt.SetModifyHdl( LINK( this, MasterPasswordCreateDialog, EditHdl_Impl ) );
CalculateTextHeight();
long nLableWidth = aFTMasterPasswordWarning.GetSizePixel().Width();
long nLabelHeight = aFTMasterPasswordWarning.GetSizePixel().Height();
long nTextWidth = aFTMasterPasswordWarning.GetCtrlTextWidth( aFTMasterPasswordWarning.GetText() );
long nTextHeight = aFTMasterPasswordWarning.GetTextHeight();
Rectangle aLabelRect( aFTMasterPasswordWarning.GetPosPixel(), aFTMasterPasswordWarning.GetSizePixel() );
Rectangle aRect = aFTMasterPasswordWarning.GetTextRect( aLabelRect, aFTMasterPasswordWarning.GetText() );
long nNewLabelHeight = 0;
if ( nTextWidth > 0 )
{
for( nNewLabelHeight = ( nTextWidth / nLableWidth + 1 ) * nTextHeight;
nNewLabelHeight < aRect.GetHeight();
nNewLabelHeight += nTextHeight ) {};
}
long nDelta = nNewLabelHeight - nLabelHeight;
Size aNewDlgSize = GetSizePixel();
aNewDlgSize.Height() += nDelta;
SetSizePixel( aNewDlgSize );
Size aNewWarningSize = aFTMasterPasswordWarning.GetSizePixel();
aNewWarningSize.Height() = nNewLabelHeight;
aFTMasterPasswordWarning.SetPosSizePixel( aFTMasterPasswordWarning.GetPosPixel(), aNewWarningSize );
Window* pControls[] = { &aFL, &aOKBtn, &aCancelBtn, &aHelpBtn };
const sal_Int32 nCCount = sizeof( pControls ) / sizeof( pControls[0] );
for ( int i = 0; i < nCCount; ++i )
{
Point aNewPos =(*pControls[i]).GetPosPixel();
aNewPos.Y() += nDelta;
pControls[i]->SetPosSizePixel( aNewPos, pControls[i]->GetSizePixel() );
}
};
void MasterPasswordCreateDialog::CalculateTextHeight()
{
Size aSize = aFTInfoText.GetSizePixel();
Size aMinSize = aFTInfoText.CalcMinimumSize( aSize.Width() );
long nDelta = 0;
if ( aSize.Height() > aMinSize.Height() )
{
aFTInfoText.SetSizePixel( aMinSize );
nDelta = aSize.Height() - aMinSize.Height();
Window* pWins[] = { &aFLInfoText, &aFTMasterPasswordCrt, &aEDMasterPasswordCrt,
&aFTMasterPasswordRepeat, &aEDMasterPasswordRepeat, &aFTCautionText,
&aFLCautionText, &aOKBtn, &aCancelBtn, &aHelpBtn };
Window** pWindow = pWins;
const sal_Int32 nCount = sizeof( pWins ) / sizeof( pWins[0] );
for ( sal_Int32 i = 0; i < nCount; ++i, ++pWindow )
{
Point aNewPos = (*pWindow)->GetPosPixel();
aNewPos.Y() -= nDelta;
(*pWindow)->SetPosPixel( aNewPos );
}
}
aSize = aFTCautionText.GetSizePixel();
aMinSize = aFTCautionText.CalcMinimumSize( aSize.Width() );
if ( aSize.Height() > aMinSize.Height() )
{
aFTCautionText.SetSizePixel( aMinSize );
long nTemp = aSize.Height() - aMinSize.Height();
nDelta += nTemp;
Window* pWins[] = { &aFLCautionText, &aOKBtn, &aCancelBtn, &aHelpBtn };
Window** pWindow = pWins;
const sal_Int32 nCount = sizeof( pWins ) / sizeof( pWins[0] );
for ( sal_Int32 i = 0; i < nCount; ++i, ++pWindow )
{
Point aNewPos = (*pWindow)->GetPosPixel();
aNewPos.Y() -= nTemp;
(*pWindow)->SetPosPixel( aNewPos );
}
}
if ( nDelta > 0 )
{
Size aDlgSize = GetOutputSizePixel();
aDlgSize.Height() -= nDelta;
SetSizePixel( aDlgSize );
}
}