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 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 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 // ----------------------------------------------------------------------- 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 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 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 240 IMPL_LINK( LoginDialog, UseSysCredsHdl_Impl, CheckBox *, EMPTYARG ) 241 { 242 EnableUseSysCredsControls_Impl( aUseSysCredsCB.IsChecked() ); 243 return 1; 244 } 245 246 // ----------------------------------------------------------------------- 247 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 310 LoginDialog::~LoginDialog() 311 { 312 } 313 314 // ----------------------------------------------------------------------- 315 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 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 339 void LoginDialog::ClearAccount() 340 { 341 aAccountED.SetText( String() ); 342 aAccountED.GrabFocus(); 343 }; 344 345 //............................................................................ 346 //............................................................................ 347