/************************************************************** * * 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. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sfx2.hxx" // Include --------------------------------------------------------------- #include #ifndef GCC #endif #include #include "sfxtypes.hxx" #include "sfx2/sfxresid.hxx" #include "dialog.hrc" #include "passwd.hrc" #include "vcl/sound.hxx" #include "vcl/arrange.hxx" // ----------------------------------------------------------------------- IMPL_LINK_INLINE_START( SfxPasswordDialog, EditModifyHdl, Edit *, pEdit ) { if( mbAsciiOnly && (pEdit == &maPasswordED || pEdit == &maPassword2ED) ) { rtl::OUString aTest( pEdit->GetText() ); const sal_Unicode* pTest = aTest.getStr(); sal_Int32 nLen = aTest.getLength(); rtl::OUStringBuffer aFilter( nLen ); bool bReset = false; for( sal_Int32 i = 0; i < nLen; i++ ) { if( *pTest > 0x007f ) bReset = true; else aFilter.append( *pTest ); pTest++; } if( bReset ) { Sound::Beep( SOUND_ERROR ); pEdit->SetSelection( Selection( 0, nLen ) ); pEdit->ReplaceSelected( aFilter.makeStringAndClear() ); } } bool bEnable = maPasswordED.GetText().Len() >= mnMinLen; if( maPassword2ED.IsVisible() ) bEnable = (bEnable && (maPassword2ED.GetText().Len() >= mnMinLen)); maOKBtn.Enable( bEnable ); return 0; } IMPL_LINK_INLINE_END( SfxPasswordDialog, EditModifyHdl, Edit *, EMPTYARG ) // ----------------------------------------------------------------------- IMPL_LINK( SfxPasswordDialog, OKHdl, OKButton *, EMPTYARG ) { bool bConfirmFailed = ( ( mnExtras & SHOWEXTRAS_CONFIRM ) == SHOWEXTRAS_CONFIRM ) && ( GetConfirm() != GetPassword() ); if( ( mnExtras & SHOWEXTRAS_CONFIRM2 ) == SHOWEXTRAS_CONFIRM2 && ( GetConfirm2() != GetPassword2() ) ) bConfirmFailed = true; if ( bConfirmFailed ) { ErrorBox aBox( this, SfxResId( MSG_ERROR_WRONG_CONFIRM ) ); aBox.Execute(); maConfirmED.SetText( String() ); maConfirmED.GrabFocus(); } else EndDialog( RET_OK ); return 0; } // CTOR / DTOR ----------------------------------------------------------- SfxPasswordDialog::SfxPasswordDialog( Window* pParent, const String* pGroupText ) : ModalDialog( pParent, SfxResId ( DLG_PASSWD ) ), maPasswordBox ( this, SfxResId( GB_PASSWD_PASSWORD ) ), maUserFT ( this, SfxResId( FT_PASSWD_USER ) ), maUserED ( this, SfxResId( ED_PASSWD_USER ) ), maPasswordFT ( this, SfxResId( FT_PASSWD_PASSWORD ) ), maPasswordED ( this, SfxResId( ED_PASSWD_PASSWORD ) ), maConfirmFT ( this, SfxResId( FT_PASSWD_CONFIRM ) ), maConfirmED ( this, SfxResId( ED_PASSWD_CONFIRM ) ), maPassword2Box ( this, 0 ), maPassword2FT ( this, SfxResId( FT_PASSWD_PASSWORD2 ) ), maPassword2ED ( this, SfxResId( ED_PASSWD_PASSWORD2 ) ), maConfirm2FT ( this, SfxResId( FT_PASSWD_CONFIRM2 ) ), maConfirm2ED ( this, SfxResId( ED_PASSWD_CONFIRM2 ) ), maOKBtn ( this, SfxResId( BTN_PASSWD_OK ) ), maCancelBtn ( this, SfxResId( BTN_PASSWD_CANCEL ) ), maHelpBtn ( this, SfxResId( BTN_PASSWD_HELP ) ), mnMinLen ( 1 ), mnExtras ( 0 ), mbAsciiOnly ( false ) { maPasswordED.SetAccessibleName(String(SfxResId(TEXT_PASSWD))); FreeResource(); // setup layout boost::shared_ptr xLayout = boost::dynamic_pointer_cast( getLayout() ); xLayout->setOuterBorder( 0 ); // get edit size, should be used as minimum Size aEditSize( maUserED.GetSizePixel() ); // add labelcolumn for the labeled edit fields boost::shared_ptr xEdits( new vcl::LabelColumn( xLayout.get() ) ); size_t nChildIndex = xLayout->addChild( xEdits ); xLayout->setBorders( nChildIndex, -2, -2, -2, 0 ); // add group box xEdits->addWindow( &maPasswordBox ); // add user line xEdits->addRow( &maUserFT, &maUserED, -2, aEditSize ); // add password line xEdits->addRow( &maPasswordFT, &maPasswordED, -2, aEditSize ); // add confirm line xEdits->addRow( &maConfirmFT, &maConfirmED, -2, aEditSize ); // add second group box xEdits->addWindow( &maPassword2Box ); // add second password line xEdits->addRow( &maPassword2FT, &maPassword2ED, -2, aEditSize ); // add second confirm line xEdits->addRow( &maConfirm2FT, &maConfirm2ED, -2, aEditSize ); // add a FixedLine FixedLine* pLine = new FixedLine( this, 0 ); pLine->Show(); addWindow( pLine, true ); xLayout->addWindow( pLine ); // add button column Size aBtnSize( maCancelBtn.GetSizePixel() ); boost::shared_ptr xButtons( new vcl::RowOrColumn( xLayout.get(), false ) ); nChildIndex = xLayout->addChild( xButtons ); xLayout->setBorders( nChildIndex, -2, 0, -2, -2 ); size_t nBtnIndex = xButtons->addWindow( &maHelpBtn, 0, aBtnSize ); xButtons->addChild( new vcl::Spacer( xButtons.get() ) ); nBtnIndex = xButtons->addWindow( &maOKBtn, 0, aBtnSize ); nBtnIndex = xButtons->addWindow( &maCancelBtn, 0, aBtnSize ); Link aLink = LINK( this, SfxPasswordDialog, EditModifyHdl ); maPasswordED.SetModifyHdl( aLink ); maPassword2ED.SetModifyHdl( aLink ); aLink = LINK( this, SfxPasswordDialog, OKHdl ); maOKBtn.SetClickHdl( aLink ); if ( pGroupText ) maPasswordBox.SetText( *pGroupText ); } // ----------------------------------------------------------------------- void SfxPasswordDialog::SetMinLen( sal_uInt16 nLen ) { mnMinLen = nLen; EditModifyHdl( NULL ); } // ----------------------------------------------------------------------- void SfxPasswordDialog::SetMaxLen( sal_uInt16 nLen ) { maPasswordED.SetMaxTextLen( nLen ); maConfirmED.SetMaxTextLen( nLen ); EditModifyHdl( NULL ); } // ----------------------------------------------------------------------- short SfxPasswordDialog::Execute() { maUserFT.Hide(); maUserED.Hide(); maConfirmFT.Hide(); maConfirmED.Hide(); maPasswordFT.Hide(); maPassword2Box.Hide(); maPassword2FT.Hide(); maPassword2ED.Hide(); maPassword2FT.Hide(); maConfirm2FT.Hide(); maConfirm2ED.Hide(); if( mnExtras != SHOWEXTRAS_NONE ) maPasswordFT.Show(); if( (mnExtras & SHOWEXTRAS_USER ) ) { maUserFT.Show(); maUserED.Show(); } if( (mnExtras & SHOWEXTRAS_CONFIRM ) ) { maConfirmFT.Show(); maConfirmED.Show(); } if( (mnExtras & SHOWEXTRAS_PASSWORD2) ) { maPassword2Box.Show(); maPassword2FT.Show(); maPassword2ED.Show(); } if( (mnExtras & SHOWEXTRAS_CONFIRM2 ) ) { maConfirm2FT.Show(); maConfirm2ED.Show(); } boost::shared_ptr xLayout = boost::dynamic_pointer_cast( getLayout() ); SetSizePixel( xLayout->getOptimalSize( WINDOWSIZE_PREFERRED ) ); return ModalDialog::Execute(); }