xref: /AOO41X/main/uui/source/logindlg.cxx (revision 859212d11457d0fe6c8750969b32b9412d9ba923)
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 #include "logindlg.hxx"
27 
28 #ifndef UUI_LOGINDLG_HRC
29 #include "logindlg.hrc"
30 #endif
31 #ifndef UUI_IDS_HRC
32 #include "ids.hrc"
33 #endif
34 #include <tools/resid.hxx>
35 
36 #ifdef UNX
37 #include <limits.h>
38 #define _MAX_PATH PATH_MAX
39 #endif
40 
41 // LoginDialog -------------------------------------------------------
42 
43 //............................................................................
44 //............................................................................
45 
lcl_Move(Window & rWin,long nOffset)46 static void lcl_Move( Window &rWin, long nOffset )
47 {
48     Point aTmp( rWin.GetPosPixel() );
49     aTmp.Y() -= nOffset;
50     rWin.SetPosPixel( aTmp );
51 }
52 
53 
HideControls_Impl(sal_uInt16 nFlags)54 void LoginDialog::HideControls_Impl( sal_uInt16 nFlags )
55 {
56     bool bPathHide = sal_False;
57     bool bErrorHide = sal_False;
58     bool bAccountHide = sal_False;
59     bool bUseSysCredsHide = sal_False;
60 
61     if ( ( nFlags & LF_NO_PATH ) == LF_NO_PATH )
62     {
63         aPathFT.Hide();
64         aPathED.Hide();
65         aPathBtn.Hide();
66         bPathHide = sal_True;
67     }
68     else if ( ( nFlags & LF_PATH_READONLY ) == LF_PATH_READONLY )
69     {
70         aPathED.Enable( sal_False );
71         aPathBtn.Enable( sal_False );
72     }
73 
74     if ( ( nFlags & LF_NO_USERNAME ) == LF_NO_USERNAME )
75     {
76         aNameFT.Hide();
77         aNameED.Hide();
78     }
79     else if ( ( nFlags & LF_USERNAME_READONLY ) == LF_USERNAME_READONLY )
80     {
81         aNameED.Enable( sal_False );
82     }
83 
84     if ( ( nFlags & LF_NO_PASSWORD ) == LF_NO_PASSWORD )
85     {
86         aPasswordFT.Hide();
87         aPasswordED.Hide();
88     }
89 
90     if ( ( nFlags & LF_NO_SAVEPASSWORD ) == LF_NO_SAVEPASSWORD )
91         aSavePasswdBtn.Hide();
92 
93     if ( ( nFlags & LF_NO_ERRORTEXT ) == LF_NO_ERRORTEXT )
94     {
95         aErrorInfo.Hide();
96         aErrorFT.Hide();
97         aLogin1FL.Hide();
98         bErrorHide = sal_True;
99     }
100 
101     if ( ( nFlags & LF_NO_ACCOUNT ) == LF_NO_ACCOUNT )
102     {
103         aAccountFT.Hide();
104         aAccountED.Hide();
105         bAccountHide = sal_True;
106     }
107 
108     if ( ( nFlags & LF_NO_USESYSCREDS ) == LF_NO_USESYSCREDS )
109     {
110         aUseSysCredsCB.Hide();
111         bUseSysCredsHide = sal_True;
112     }
113 
114     if ( bErrorHide )
115     {
116         long nOffset = aRequestInfo.GetPosPixel().Y() -
117                        aErrorFT.GetPosPixel().Y();
118         lcl_Move( aRequestInfo, nOffset );
119         lcl_Move( aLogin2FL, nOffset );
120         lcl_Move( aPathFT, nOffset );
121         lcl_Move( aPathED, nOffset );
122         lcl_Move( aPathBtn, nOffset );
123         lcl_Move( aNameFT, nOffset );
124         lcl_Move( aNameED, nOffset );
125         lcl_Move( aPasswordFT, nOffset );
126         lcl_Move( aPasswordED, nOffset );
127         lcl_Move( aAccountFT, nOffset );
128         lcl_Move( aAccountED, nOffset );
129         lcl_Move( aSavePasswdBtn, nOffset );
130         lcl_Move( aUseSysCredsCB, nOffset );
131         lcl_Move( aButtonsFL, nOffset );
132         lcl_Move( aOKBtn, nOffset );
133         lcl_Move( aCancelBtn, nOffset );
134         lcl_Move( aHelpBtn, nOffset );
135 
136         Size aNewSiz = GetSizePixel();
137         aNewSiz.Height() -= nOffset;
138         SetSizePixel( aNewSiz );
139     }
140 
141     if ( bPathHide )
142     {
143         long nOffset = aNameED.GetPosPixel().Y() -
144                        aPathED.GetPosPixel().Y();
145         lcl_Move( aNameFT, nOffset );
146         lcl_Move( aNameED, nOffset );
147         lcl_Move( aPasswordFT, nOffset );
148         lcl_Move( aPasswordED, nOffset );
149         lcl_Move( aAccountFT, nOffset );
150         lcl_Move( aAccountED, nOffset );
151         lcl_Move( aSavePasswdBtn, nOffset );
152         lcl_Move( aUseSysCredsCB, nOffset );
153         lcl_Move( aButtonsFL, nOffset );
154         lcl_Move( aOKBtn, nOffset );
155         lcl_Move( aCancelBtn, nOffset );
156         lcl_Move( aHelpBtn, nOffset );
157 
158         Size aNewSz = GetSizePixel();
159         aNewSz.Height() -= nOffset;
160         SetSizePixel( aNewSz );
161     }
162 
163     if ( bAccountHide )
164     {
165         long nOffset = aAccountED.GetPosPixel().Y() -
166                        aPasswordED.GetPosPixel().Y();
167         lcl_Move( aSavePasswdBtn, nOffset );
168         lcl_Move( aUseSysCredsCB, nOffset );
169         lcl_Move( aButtonsFL, nOffset );
170         lcl_Move( aOKBtn, nOffset );
171         lcl_Move( aCancelBtn, nOffset );
172         lcl_Move( aHelpBtn, nOffset );
173 
174         Size aNewSz = GetSizePixel();
175         aNewSz.Height() -= nOffset;
176         SetSizePixel( aNewSz );
177     }
178 
179     if ( bUseSysCredsHide )
180     {
181         long nOffset = aUseSysCredsCB.GetPosPixel().Y() -
182                        aSavePasswdBtn.GetPosPixel().Y();
183         lcl_Move( aButtonsFL, nOffset );
184         lcl_Move( aOKBtn, nOffset );
185         lcl_Move( aCancelBtn, nOffset );
186         lcl_Move( aHelpBtn, nOffset );
187 
188         Size aNewSz = GetSizePixel();
189         aNewSz.Height() -= nOffset;
190         SetSizePixel( aNewSz );
191     }
192 };
193 
194 // -----------------------------------------------------------------------
EnableUseSysCredsControls_Impl(sal_Bool bUseSysCredsEnabled)195 void LoginDialog::EnableUseSysCredsControls_Impl( sal_Bool bUseSysCredsEnabled )
196 {
197     aErrorInfo.Enable( !bUseSysCredsEnabled );
198     aErrorFT.Enable( !bUseSysCredsEnabled );
199     aRequestInfo.Enable( !bUseSysCredsEnabled );
200     aPathFT.Enable( !bUseSysCredsEnabled );
201     aPathED.Enable( !bUseSysCredsEnabled );
202     aPathBtn.Enable( !bUseSysCredsEnabled );
203     aNameFT.Enable( !bUseSysCredsEnabled );
204     aNameED.Enable( !bUseSysCredsEnabled );
205     aPasswordFT.Enable( !bUseSysCredsEnabled );
206     aPasswordED.Enable( !bUseSysCredsEnabled );
207     aAccountFT.Enable( !bUseSysCredsEnabled );
208     aAccountED.Enable( !bUseSysCredsEnabled );
209 }
210 
211 // -----------------------------------------------------------------------
212 
IMPL_LINK(LoginDialog,OKHdl_Impl,OKButton *,EMPTYARG)213 IMPL_LINK( LoginDialog, OKHdl_Impl, OKButton *, EMPTYARG )
214 {
215     // trim the strings
216     aNameED.SetText( aNameED.GetText().EraseLeadingChars().
217         EraseTrailingChars() );
218     aPasswordED.SetText( aPasswordED.GetText().EraseLeadingChars().
219         EraseTrailingChars() );
220     EndDialog( RET_OK );
221     return 1;
222 }
223 
224 // -----------------------------------------------------------------------
225 
IMPL_LINK(LoginDialog,PathHdl_Impl,PushButton *,EMPTYARG)226 IMPL_LINK( LoginDialog, PathHdl_Impl, PushButton *, EMPTYARG )
227 {
228     PathDialog* pDlg = new PathDialog( this, WB_3DLOOK );
229     pDlg->SetPath( aPathED.GetText() );
230 
231     if ( pDlg->Execute() == RET_OK )
232         aPathED.SetText( pDlg->GetPath() );
233 
234     delete pDlg;
235     return 1;
236 }
237 
238 // -----------------------------------------------------------------------
239 
IMPL_LINK(LoginDialog,UseSysCredsHdl_Impl,CheckBox *,EMPTYARG)240 IMPL_LINK( LoginDialog, UseSysCredsHdl_Impl, CheckBox *, EMPTYARG )
241 {
242     EnableUseSysCredsControls_Impl( aUseSysCredsCB.IsChecked() );
243     return 1;
244 }
245 
246 // -----------------------------------------------------------------------
247 
LoginDialog(Window * pParent,sal_uInt16 nFlags,const String & rServer,const String * pRealm,ResMgr * pResMgr)248 LoginDialog::LoginDialog
249 (
250     Window* pParent,
251     sal_uInt16 nFlags,
252     const String& rServer,
253     const String* pRealm,
254     ResMgr* pResMgr
255 ) :
256 
257     ModalDialog( pParent, ResId( DLG_UUI_LOGIN, *pResMgr ) ),
258 
259     aErrorFT        ( this, ResId( FT_LOGIN_ERROR, *pResMgr ) ),
260     aErrorInfo      ( this, ResId( FT_INFO_LOGIN_ERROR, *pResMgr ) ),
261     aLogin1FL       ( this, ResId( FL_LOGIN_1, *pResMgr ) ),
262     aRequestInfo    ( this, ResId( FT_INFO_LOGIN_REQUEST, *pResMgr ) ),
263     aLogin2FL       ( this, ResId( FL_LOGIN_2, *pResMgr ) ),
264     aPathFT         ( this, ResId( FT_LOGIN_PATH, *pResMgr ) ),
265     aPathED         ( this, ResId( ED_LOGIN_PATH, *pResMgr ) ),
266     aPathBtn        ( this, ResId( BTN_LOGIN_PATH, *pResMgr ) ),
267     aNameFT         ( this, ResId( FT_LOGIN_USERNAME, *pResMgr ) ),
268     aNameED         ( this, ResId( ED_LOGIN_USERNAME, *pResMgr ) ),
269     aPasswordFT     ( this, ResId( FT_LOGIN_PASSWORD, *pResMgr ) ),
270     aPasswordED     ( this, ResId( ED_LOGIN_PASSWORD, *pResMgr ) ),
271     aAccountFT      ( this, ResId( FT_LOGIN_ACCOUNT, *pResMgr ) ),
272     aAccountED      ( this, ResId( ED_LOGIN_ACCOUNT, *pResMgr ) ),
273     aSavePasswdBtn  ( this, ResId( CB_LOGIN_SAVEPASSWORD, *pResMgr ) ),
274     aUseSysCredsCB  ( this, ResId( CB_LOGIN_USESYSCREDS, *pResMgr ) ),
275     aButtonsFL      ( this, ResId( FL_BUTTONS, *pResMgr ) ),
276     aOKBtn          ( this, ResId( BTN_LOGIN_OK, *pResMgr ) ),
277     aCancelBtn      ( this, ResId( BTN_LOGIN_CANCEL, *pResMgr ) ),
278     aHelpBtn        ( this, ResId( BTN_LOGIN_HELP, *pResMgr ) )
279 
280 {
281     UniString aRequest;
282     if ((nFlags & LF_NO_ACCOUNT) != 0 && pRealm && pRealm->Len() != 0)
283     {
284         aRequest = ResId(STR_LOGIN_REALM, *pResMgr);
285         aRequest.SearchAndReplaceAscii("%2", *pRealm);
286     }
287     else
288         aRequest = aRequestInfo.GetText();
289 
290     if ( !( ( nFlags & LF_NO_USESYSCREDS ) == LF_NO_USESYSCREDS ) )
291       EnableUseSysCredsControls_Impl( aUseSysCredsCB.IsChecked() );
292 
293     aRequest.SearchAndReplaceAscii("%1", rServer);
294     aRequestInfo.SetText(aRequest);
295 
296     FreeResource();
297 
298     aPathED.SetMaxTextLen( _MAX_PATH );
299     aNameED.SetMaxTextLen( _MAX_PATH );
300 
301     aOKBtn.SetClickHdl( LINK( this, LoginDialog, OKHdl_Impl ) );
302     aPathBtn.SetClickHdl( LINK( this, LoginDialog, PathHdl_Impl ) );
303     aUseSysCredsCB.SetClickHdl( LINK( this, LoginDialog, UseSysCredsHdl_Impl ) );
304 
305     HideControls_Impl( nFlags );
306 };
307 
308 // -----------------------------------------------------------------------
309 
~LoginDialog()310 LoginDialog::~LoginDialog()
311 {
312 }
313 
314 // -----------------------------------------------------------------------
315 
SetUseSystemCredentials(sal_Bool bUse)316 void LoginDialog::SetUseSystemCredentials( sal_Bool bUse )
317 {
318     if ( aUseSysCredsCB.IsVisible() )
319     {
320         aUseSysCredsCB.Check( bUse );
321         EnableUseSysCredsControls_Impl( bUse );
322     }
323 }
324 
325 // -----------------------------------------------------------------------
326 
ClearPassword()327 void LoginDialog::ClearPassword()
328 {
329     aPasswordED.SetText( String() );
330 
331     if ( 0 == aNameED.GetText().Len() )
332         aNameED.GrabFocus();
333     else
334         aPasswordED.GrabFocus();
335 };
336 
337 // -----------------------------------------------------------------------
338 
ClearAccount()339 void LoginDialog::ClearAccount()
340 {
341     aAccountED.SetText( String() );
342     aAccountED.GrabFocus();
343 };
344 
345 //............................................................................
346 //............................................................................
347