xref: /trunk/main/uui/source/masterpasscrtdlg.cxx (revision 859212d1)
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 #include <svtools/filedlg.hxx>
25 #include <vcl/msgbox.hxx>
26 
27 #ifndef UUI_IDS_HRC
28 #include <ids.hrc>
29 #endif
30 #ifndef UUI_MASTERPASSCRTDLG_HRC
31 #include <masterpasscrtdlg.hrc>
32 #endif
33 #include <masterpasscrtdlg.hxx>
34 
35 // MasterPasswordCreateDialog---------------------------------------------------
36 
37 // -----------------------------------------------------------------------
38 
IMPL_LINK(MasterPasswordCreateDialog,EditHdl_Impl,Edit *,EMPTYARG)39 IMPL_LINK( MasterPasswordCreateDialog, EditHdl_Impl, Edit *, EMPTYARG )
40 {
41 	aOKBtn.Enable( aEDMasterPasswordCrt.GetText().Len() >= nMinLen );
42 	return 0;
43 }
44 
45 // -----------------------------------------------------------------------
46 
IMPL_LINK(MasterPasswordCreateDialog,OKHdl_Impl,OKButton *,EMPTYARG)47 IMPL_LINK( MasterPasswordCreateDialog, OKHdl_Impl, OKButton *, EMPTYARG )
48 {
49 	// compare both passwords and show message box if there are not equal!!
50 	if( aEDMasterPasswordCrt.GetText() == aEDMasterPasswordRepeat.GetText() )
51 		EndDialog( RET_OK );
52 	else
53 	{
54 		String aErrorMsg( ResId( STR_ERROR_PASSWORDS_NOT_IDENTICAL, *pResourceMgr ));
55 		ErrorBox aErrorBox( this, WB_OK, aErrorMsg );
56 		aErrorBox.Execute();
57 		aEDMasterPasswordCrt.SetText( String() );
58 		aEDMasterPasswordRepeat.SetText( String() );
59 		aEDMasterPasswordCrt.GrabFocus();
60 	}
61 	return 1;
62 }
63 
64 // -----------------------------------------------------------------------
65 
MasterPasswordCreateDialog(Window * pParent,ResMgr * pResMgr)66 MasterPasswordCreateDialog::MasterPasswordCreateDialog
67 (
68 	Window*										pParent,
69 	ResMgr*										pResMgr
70 ) :
71 
72 	ModalDialog( pParent, ResId( DLG_UUI_MASTERPASSWORD_CRT, *pResMgr ) ),
73 
74     aFTInfoText             ( this, ResId( FT_INFOTEXT, *pResMgr ) ),
75     aFLInfoText             ( this, ResId( FL_INFOTEXT, *pResMgr ) ),
76 
77     aFTMasterPasswordCrt    ( this, ResId( FT_MASTERPASSWORD_CRT, *pResMgr ) ),
78     aEDMasterPasswordCrt    ( this, ResId( ED_MASTERPASSWORD_CRT, *pResMgr ) ),
79 	aFTMasterPasswordRepeat	( this, ResId( FT_MASTERPASSWORD_REPEAT, *pResMgr ) ),
80 	aEDMasterPasswordRepeat	( this, ResId( ED_MASTERPASSWORD_REPEAT, *pResMgr ) ),
81 
82     aFTCautionText          ( this, ResId( FT_CAUTIONTEXT, *pResMgr ) ),
83     aFLCautionText          ( this, ResId( FL_CAUTIONTEXT, *pResMgr ) ),
84 
85     aFTMasterPasswordWarning ( this, ResId( FT_MASTERPASSWORD_WARNING, *pResMgr ) ),
86     aFL ( this, ResId( FL_FIXED_LINE, *pResMgr ) ),
87     aOKBtn                  ( this, ResId( BTN_MASTERPASSCRT_OK, *pResMgr ) ),
88 	aCancelBtn				( this, ResId( BTN_MASTERPASSCRT_CANCEL, *pResMgr ) ),
89 	aHelpBtn				( this, ResId( BTN_MASTERPASSCRT_HELP, *pResMgr ) ),
90 
91     pResourceMgr            ( pResMgr ),
92     nMinLen                 ( 1 )
93 {
94 	FreeResource();
95 
96 	aOKBtn.Enable( sal_False );
97 	aOKBtn.SetClickHdl( LINK( this, MasterPasswordCreateDialog, OKHdl_Impl ) );
98 	aEDMasterPasswordCrt.SetModifyHdl( LINK( this, MasterPasswordCreateDialog, EditHdl_Impl ) );
99 
100     CalculateTextHeight();
101 
102     long nLableWidth = aFTMasterPasswordWarning.GetSizePixel().Width();
103     long nLabelHeight = aFTMasterPasswordWarning.GetSizePixel().Height();
104     long nTextWidth = aFTMasterPasswordWarning.GetCtrlTextWidth( aFTMasterPasswordWarning.GetText() );
105     long nTextHeight = aFTMasterPasswordWarning.GetTextHeight();
106 
107     Rectangle aLabelRect( aFTMasterPasswordWarning.GetPosPixel(), aFTMasterPasswordWarning.GetSizePixel() );
108     Rectangle aRect = aFTMasterPasswordWarning.GetTextRect( aLabelRect, aFTMasterPasswordWarning.GetText() );
109 
110     long nNewLabelHeight = 0;
111     if ( nTextWidth > 0 )
112     {
113         for( nNewLabelHeight = ( nTextWidth / nLableWidth + 1 ) * nTextHeight;
114             nNewLabelHeight < aRect.GetHeight();
115 	    nNewLabelHeight += nTextHeight ) {};
116     }
117 
118     long nDelta = nNewLabelHeight - nLabelHeight;
119     Size aNewDlgSize = GetSizePixel();
120     aNewDlgSize.Height() += nDelta;
121     SetSizePixel( aNewDlgSize );
122 
123     Size aNewWarningSize = aFTMasterPasswordWarning.GetSizePixel();
124     aNewWarningSize.Height() = nNewLabelHeight;
125     aFTMasterPasswordWarning.SetPosSizePixel( aFTMasterPasswordWarning.GetPosPixel(), aNewWarningSize );
126 
127     Window* pControls[] = { &aFL, &aOKBtn, &aCancelBtn, &aHelpBtn };
128     const sal_Int32 nCCount = sizeof( pControls ) / sizeof( pControls[0] );
129     for ( int i = 0; i < nCCount; ++i )
130     {
131         Point aNewPos =(*pControls[i]).GetPosPixel();
132         aNewPos.Y() += nDelta;
133         pControls[i]->SetPosSizePixel( aNewPos, pControls[i]->GetSizePixel() );
134     }
135 };
136 
CalculateTextHeight()137 void MasterPasswordCreateDialog::CalculateTextHeight()
138 {
139     Size aSize = aFTInfoText.GetSizePixel();
140     Size aMinSize = aFTInfoText.CalcMinimumSize( aSize.Width() );
141     long nDelta = 0;
142 
143     if ( aSize.Height() > aMinSize.Height() )
144     {
145         aFTInfoText.SetSizePixel( aMinSize );
146         nDelta = aSize.Height() - aMinSize.Height();
147         Window* pWins[] = { &aFLInfoText, &aFTMasterPasswordCrt, &aEDMasterPasswordCrt,
148                             &aFTMasterPasswordRepeat, &aEDMasterPasswordRepeat, &aFTCautionText,
149                             &aFLCautionText, &aOKBtn, &aCancelBtn, &aHelpBtn };
150         Window** pWindow = pWins;
151         const sal_Int32 nCount = sizeof( pWins ) / sizeof( pWins[0] );
152         for ( sal_Int32 i = 0; i < nCount; ++i, ++pWindow )
153         {
154             Point aNewPos = (*pWindow)->GetPosPixel();
155             aNewPos.Y() -= nDelta;
156             (*pWindow)->SetPosPixel( aNewPos );
157         }
158     }
159 
160     aSize = aFTCautionText.GetSizePixel();
161     aMinSize = aFTCautionText.CalcMinimumSize( aSize.Width() );
162 
163     if ( aSize.Height() > aMinSize.Height() )
164     {
165         aFTCautionText.SetSizePixel( aMinSize );
166         long nTemp = aSize.Height() - aMinSize.Height();
167         nDelta += nTemp;
168         Window* pWins[] = { &aFLCautionText, &aOKBtn, &aCancelBtn, &aHelpBtn };
169         Window** pWindow = pWins;
170         const sal_Int32 nCount = sizeof( pWins ) / sizeof( pWins[0] );
171         for ( sal_Int32 i = 0; i < nCount; ++i, ++pWindow )
172         {
173             Point aNewPos = (*pWindow)->GetPosPixel();
174             aNewPos.Y() -= nTemp;
175             (*pWindow)->SetPosPixel( aNewPos );
176         }
177     }
178 
179     if ( nDelta > 0 )
180     {
181         Size aDlgSize = GetOutputSizePixel();
182         aDlgSize.Height() -= nDelta;
183         SetSizePixel( aDlgSize );
184     }
185 }
186 
187