summaryrefslogtreecommitdiff
path: root/uui
diff options
context:
space:
mode:
authorThomas Lange [tl] <tl@openoffice.org>2010-09-06 10:02:33 +0200
committerThomas Lange [tl] <tl@openoffice.org>2010-09-06 10:02:33 +0200
commite70c93b5e54fab6a4eeb979fb9188a310b32c28e (patch)
tree4f05cfc54469a5784867af67b8d63abc751d852d /uui
parent6d1adcc602a92f31d5341cafa3cbfbc647b24733 (diff)
cws tl82: #i114160# SimplePasswordRequest and respective dialog
Diffstat (limited to 'uui')
-rw-r--r--uui/source/iahndl-authentication.cxx46
-rwxr-xr-x[-rw-r--r--]uui/source/ids.hrc3
-rwxr-xr-x[-rw-r--r--]uui/source/passworddlg.cxx126
-rwxr-xr-x[-rw-r--r--]uui/source/passworddlg.hrc18
-rwxr-xr-x[-rw-r--r--]uui/source/passworddlg.hxx10
-rwxr-xr-x[-rw-r--r--]uui/source/passworddlg.src76
-rwxr-xr-xuui/source/passworderrs.src5
7 files changed, 216 insertions, 68 deletions
diff --git a/uui/source/iahndl-authentication.cxx b/uui/source/iahndl-authentication.cxx
index 6d65eb67055e..d3ebed5fc630 100644
--- a/uui/source/iahndl-authentication.cxx
+++ b/uui/source/iahndl-authentication.cxx
@@ -519,7 +519,8 @@ executePasswordDialog(
task::PasswordRequestMode nMode,
::rtl::OUString aDocName,
bool bMSCryptoMode,
- bool bIsPasswordToModify )
+ bool bIsPasswordToModify,
+ bool bIsSimplePasswordRequest )
SAL_THROW((uno::RuntimeException))
{
try
@@ -530,21 +531,36 @@ executePasswordDialog(
ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
if( nMode == task::PasswordRequestMode_PASSWORD_CREATE )
{
- const sal_uInt16 nMaxPasswdLen = bMSCryptoMode ? 15 : 0; // 0 -> allow any length
+ if (bIsSimplePasswordRequest)
+ {
+ std::auto_ptr< PasswordDialog > pDialog(
+ new PasswordDialog( pParent, nMode, xManager.get(), aDocName,
+ bIsPasswordToModify, bIsSimplePasswordRequest ) );
+ pDialog->SetMinLen(0);
+
+ rInfo.SetResult( pDialog->Execute() == RET_OK ? ERRCODE_BUTTON_OK : ERRCODE_BUTTON_CANCEL );
+ rInfo.SetPassword( pDialog->GetPassword() );
+ }
+ else
+ {
+ const sal_uInt16 nMaxPasswdLen = bMSCryptoMode ? 15 : 0; // 0 -> allow any length
- VclAbstractDialogFactory * pFact = VclAbstractDialogFactory::Create();
- AbstractPasswordToOpenModifyDialog *pTmp = pFact->CreatePasswordToOpenModifyDialog( pParent, 0, nMaxPasswdLen, bIsPasswordToModify );
- std::auto_ptr< AbstractPasswordToOpenModifyDialog > pDialog( pTmp );
+ VclAbstractDialogFactory * pFact = VclAbstractDialogFactory::Create();
+ AbstractPasswordToOpenModifyDialog *pTmp = pFact->CreatePasswordToOpenModifyDialog( pParent, 0, nMaxPasswdLen, bIsPasswordToModify );
+ std::auto_ptr< AbstractPasswordToOpenModifyDialog > pDialog( pTmp );
- rInfo.SetResult( pDialog->Execute() == RET_OK ? ERRCODE_BUTTON_OK : ERRCODE_BUTTON_CANCEL );
- rInfo.SetPassword( pDialog->GetPasswordToOpen() );
- rInfo.SetPasswordToModify( pDialog->GetPasswordToModify() );
- rInfo.SetRecommendToOpenReadonly( pDialog->IsRecommendToOpenReadonly() );
+ rInfo.SetResult( pDialog->Execute() == RET_OK ? ERRCODE_BUTTON_OK : ERRCODE_BUTTON_CANCEL );
+ rInfo.SetPassword( pDialog->GetPasswordToOpen() );
+ rInfo.SetPasswordToModify( pDialog->GetPasswordToModify() );
+ rInfo.SetRecommendToOpenReadonly( pDialog->IsRecommendToOpenReadonly() );
+ }
}
- else
+ else // enter password or reenter password
{
std::auto_ptr< PasswordDialog > pDialog(
- new PasswordDialog( pParent, nMode, xManager.get(), aDocName, bIsPasswordToModify ) );
+ new PasswordDialog( pParent, nMode, xManager.get(), aDocName,
+ bIsPasswordToModify, bIsSimplePasswordRequest ) );
+ pDialog->SetMinLen(0);
rInfo.SetResult( pDialog->Execute() == RET_OK ? ERRCODE_BUTTON_OK : ERRCODE_BUTTON_CANCEL );
rInfo.SetPassword( bIsPasswordToModify ? String() : pDialog->GetPassword() );
@@ -567,7 +583,8 @@ handlePasswordRequest_(
rContinuations,
::rtl::OUString aDocumentName,
bool bMSCryptoMode,
- bool bIsPasswordToModify )
+ bool bIsPasswordToModify,
+ bool bIsSimplePasswordRequest = false )
SAL_THROW((uno::RuntimeException))
{
uno::Reference< task::XInteractionRetry > xRetry;
@@ -582,7 +599,7 @@ handlePasswordRequest_(
LoginErrorInfo aInfo;
executePasswordDialog( pParent, aInfo, nMode,
- aDocumentName, bMSCryptoMode, bIsPasswordToModify );
+ aDocumentName, bMSCryptoMode, bIsPasswordToModify, bIsSimplePasswordRequest );
switch (aInfo.GetResult())
{
@@ -742,7 +759,8 @@ UUIInteractionHelper::handlePasswordRequest(
rRequest->getContinuations(),
rtl::OUString(),
false /* bool bMSCryptoMode */,
- false /* bool bIsPasswordToModify */);
+ false /* bool bIsPasswordToModify */,
+ true /* bool bIsSimplePasswordRequest */ );
return true;
}
diff --git a/uui/source/ids.hrc b/uui/source/ids.hrc
index 9be81479ef59..f9c9e2fd2d15 100644..100755
--- a/uui/source/ids.hrc
+++ b/uui/source/ids.hrc
@@ -56,6 +56,7 @@
#define RID_UUI_ERRHDL (RID_UUI_START + 20)
#define DLG_UUI_MASTERPASSWORD_CRT (RID_UUI_START + 21)
#define DLG_UUI_PASSWORD (RID_UUI_START + 22)
+#define STR_ERROR_SIMPLE_PASSWORD_WRONG (RID_UUI_START + 23)
#define STR_ERROR_PASSWORD_TO_OPEN_WRONG (RID_UUI_START + 24)
#define STR_ERROR_PASSWORD_TO_MODIFY_WRONG (RID_UUI_START + 25)
#define DLG_UUI_UNKNOWNAUTH (RID_UUI_START + 26)
@@ -93,6 +94,8 @@
#define STR_RENAME_OR_REPLACE (RID_UUI_START + 58)
#define STR_NAME_CLASH_RENAME_ONLY (RID_UUI_START + 59)
#define STR_SAME_NAME_USED (RID_UUI_START + 60)
+#define STR_ENTER_SIMPLE_PASSWORD (RID_UUI_START + 61)
+#define STR_CONFIRM_SIMPLE_PASSWORD (RID_UUI_START + 62)
#define ERRCODE_UUI_IO_ABORT (ERRCODE_AREA_UUI + 0)
#define ERRCODE_UUI_IO_ACCESSDENIED (ERRCODE_AREA_UUI + 1)
diff --git a/uui/source/passworddlg.cxx b/uui/source/passworddlg.cxx
index c89184f54bc1..348d2f833e15 100644..100755
--- a/uui/source/passworddlg.cxx
+++ b/uui/source/passworddlg.cxx
@@ -25,67 +25,119 @@
*
************************************************************************/
+#include "passworddlg.hxx"
+#include "passworddlg.hrc"
+#include "ids.hrc"
+
#include <svtools/filedlg.hxx>
#include <vcl/msgbox.hxx>
-#ifndef UUI_IDS_HRC
-#include <ids.hrc>
-#endif
-#ifndef UUI_PASSWORDDLG_HRC
-#include <passworddlg.hrc>
-#endif
-#include <passworddlg.hxx>
-// PasswordDialog---------------------------------------------------------
+using namespace ::com::sun::star;
+
// -----------------------------------------------------------------------
-IMPL_LINK( PasswordDialog, OKHdl_Impl, OKButton *, EMPTYARG )
+static void lcl_Move( Window &rWin, long nOffset )
{
- EndDialog( RET_OK );
- return 1;
+ Point aTmp( rWin.GetPosPixel() );
+ aTmp.Y() += nOffset;
+ rWin.SetPosPixel( aTmp );
}
// -----------------------------------------------------------------------
PasswordDialog::PasswordDialog(
Window* _pParent,
- ::com::sun::star::task::PasswordRequestMode nDlgMode,
+ task::PasswordRequestMode nDlgMode,
ResMgr * pResMgr,
rtl::OUString& aDocURL,
- bool bOpenToModify )
+ bool bOpenToModify,
+ bool bIsSimplePasswordRequest )
:ModalDialog( _pParent, ResId( DLG_UUI_PASSWORD, *pResMgr ) )
,aFTPassword( this, ResId( FT_PASSWORD, *pResMgr ))
,aEDPassword( this, ResId( ED_PASSWORD, *pResMgr ))
+ ,aFTConfirmPassword( this, ResId( FT_CONFIRM_PASSWORD, *pResMgr ))
+ ,aEDConfirmPassword( this, ResId( ED_CONFIRM_PASSWORD, *pResMgr ))
,aOKBtn ( this, ResId( BTN_PASSWORD_OK, *pResMgr ))
,aCancelBtn ( this, ResId( BTN_PASSWORD_CANCEL, *pResMgr ))
,aHelpBtn ( this, ResId( BTN_PASSWORD_HELP, *pResMgr ))
,aFixedLine1( this, ResId( FL_FIXED_LINE_1, *pResMgr ))
+ ,nMinLen(1)
+ ,aPasswdMismatch( ResId( STR_PASSWORD_MISMATCH, *pResMgr ))
,nDialogMode( nDlgMode )
,pResourceMgr ( pResMgr )
{
- if( nDialogMode == ::com::sun::star::task::PasswordRequestMode_PASSWORD_REENTER )
+ if( nDialogMode == task::PasswordRequestMode_PASSWORD_REENTER )
{
- USHORT nErrStrId = bOpenToModify ? STR_ERROR_PASSWORD_TO_MODIFY_WRONG : STR_ERROR_PASSWORD_TO_OPEN_WRONG;
+ const USHORT nOpenToModifyErrStrId = bOpenToModify ? STR_ERROR_PASSWORD_TO_MODIFY_WRONG : STR_ERROR_PASSWORD_TO_OPEN_WRONG;
+ const USHORT nErrStrId = bIsSimplePasswordRequest ? STR_ERROR_SIMPLE_PASSWORD_WRONG : nOpenToModifyErrStrId;
String aErrorMsg( ResId( nErrStrId, *pResourceMgr ));
- ErrorBox aErrorBox( _pParent, WB_OK, aErrorMsg );
+ ErrorBox aErrorBox( this, WB_OK, aErrorMsg );
aErrorBox.Execute();
}
+ // default settings for enter password or reenter passwd...
+ String aTitle( ResId( STR_TITLE_ENTER_PASSWORD, *pResourceMgr ) );
+ aFTConfirmPassword.Hide();
+ aEDConfirmPassword.Hide();
+ aFTConfirmPassword.Enable( FALSE );
+ aEDConfirmPassword.Enable( FALSE );
+
+ // settings for create password
+ if (nDialogMode == task::PasswordRequestMode_PASSWORD_CREATE)
+ {
+ aTitle = String( ResId( STR_TITLE_CREATE_PASSWORD, *pResourceMgr ) );
+
+ aFTConfirmPassword.SetText( String( ResId( STR_CONFIRM_SIMPLE_PASSWORD, *pResourceMgr ) ) );
+
+ aFTConfirmPassword.Show();
+ aEDConfirmPassword.Show();
+ aFTConfirmPassword.Enable( TRUE );
+ aEDConfirmPassword.Enable( TRUE );
+ }
+ else
+ {
+ // shrink dialog by size of hidden controls and move rest up accordingly
+
+ long nDelta = aFixedLine1.GetPosPixel().Y() - aFTConfirmPassword.GetPosPixel().Y();
+
+ lcl_Move( aFixedLine1, -nDelta );
+ lcl_Move( aOKBtn, -nDelta );
+ lcl_Move( aCancelBtn, -nDelta );
+ lcl_Move( aHelpBtn, -nDelta );
+
+ Size aNewDlgSize = GetSizePixel();
+ aNewDlgSize.Height() -= nDelta;
+ SetSizePixel( aNewDlgSize );
+ }
+
+ SetText( aTitle );
+
USHORT nStrId = bOpenToModify ? STR_ENTER_PASSWORD_TO_MODIFY : STR_ENTER_PASSWORD_TO_OPEN;
aFTPassword.SetText( String( ResId( nStrId, *pResourceMgr ) ) );
+ aFTPassword.SetText( aFTPassword.GetText() + aDocURL );
+ if (bIsSimplePasswordRequest)
+ {
+ DBG_ASSERT( aDocURL.getLength() == 0, "A simple password request should not have a document URL! Use document password request instead." );
+ aFTPassword.SetText( String( ResId( STR_ENTER_SIMPLE_PASSWORD, *pResourceMgr ) ) );
+ }
FreeResource();
- aFTPassword.SetText( aFTPassword.GetText() + aDocURL );
-
aOKBtn.SetClickHdl( LINK( this, PasswordDialog, OKHdl_Impl ) );
- long nLabelWidth = aFTPassword.GetSizePixel().Width();
- long nLabelHeight = aFTPassword.GetSizePixel().Height();
- long nTextWidth = aFTPassword.GetCtrlTextWidth( aFTPassword.GetText() );
- long nTextHeight = aFTPassword.GetTextHeight();
+
+ //
+ // move controls down by extra height needed for aFTPassword
+ // (usually only needed if a URL was provided)
+ //
+
+ long nLabelWidth = aFTPassword.GetSizePixel().Width();
+ long nLabelHeight = aFTPassword.GetSizePixel().Height();
+ long nTextWidth = aFTPassword.GetCtrlTextWidth( aFTPassword.GetText() );
+ long nTextHeight = aFTPassword.GetTextHeight();
Rectangle aLabelRect( aFTPassword.GetPosPixel(), aFTPassword.GetSizePixel() );
Rectangle aRect = aFTPassword.GetTextRect( aLabelRect, aFTPassword.GetText() );
@@ -105,13 +157,31 @@ PasswordDialog::PasswordDialog(
aNewLabelSize.Height() = nNewLabelHeight;
aFTPassword.SetPosSizePixel( aFTPassword.GetPosPixel(), aNewLabelSize );
- Window* pControls[] = { &aEDPassword, &aFixedLine1, &aOKBtn, &aCancelBtn, &aHelpBtn };
- const sal_Int32 nCCount = sizeof( pControls ) / sizeof( pControls[0] );
- for ( int i = 0; i < nCCount; ++i )
+ lcl_Move( aEDPassword, nDelta );
+ lcl_Move( aFTConfirmPassword, nDelta );
+ lcl_Move( aEDConfirmPassword, nDelta );
+ lcl_Move( aFixedLine1, nDelta );
+ lcl_Move( aOKBtn, nDelta );
+ lcl_Move( aCancelBtn, nDelta );
+ lcl_Move( aHelpBtn, nDelta );
+}
+
+
+IMPL_LINK( PasswordDialog, OKHdl_Impl, OKButton *, EMPTYARG )
+{
+ bool bEDPasswdValid = aEDPassword.GetText().Len() >= nMinLen;
+ bool bPasswdMismatch = aEDConfirmPassword.GetText() != aEDPassword.GetText();
+ bool bValid = (!aEDConfirmPassword.IsVisible() && bEDPasswdValid) ||
+ (aEDConfirmPassword.IsVisible() && bEDPasswdValid && !bPasswdMismatch);
+
+ if (aEDConfirmPassword.IsVisible() && bPasswdMismatch)
{
- Point aNewPos =(*pControls[i]).GetPosPixel();
- aNewPos.Y() += nDelta;
- pControls[i]->SetPosSizePixel( aNewPos, pControls[i]->GetSizePixel() );
+ ErrorBox aErrorBox( this, WB_OK, aPasswdMismatch );
+ aErrorBox.Execute();
}
+ else if (bValid)
+ EndDialog( RET_OK );
+ return 1;
}
+
diff --git a/uui/source/passworddlg.hrc b/uui/source/passworddlg.hrc
index ad7517b7a62b..e9a8bb5b5b04 100644..100755
--- a/uui/source/passworddlg.hrc
+++ b/uui/source/passworddlg.hrc
@@ -29,12 +29,18 @@
#define PASSWORDDLG_HRC
// local identifiers
-#define BTN_PASSWORD_OK 1
-#define ED_PASSWORD 2
-#define FT_PASSWORD 3
-#define FL_FIXED_LINE_1 4
-#define BTN_PASSWORD_HELP 5
-#define BTN_PASSWORD_CANCEL 6
+#define BTN_PASSWORD_OK 1
+#define ED_PASSWORD 2
+#define FT_PASSWORD 3
+#define FT_CONFIRM_PASSWORD 4
+#define ED_CONFIRM_PASSWORD 5
+#define FL_FIXED_LINE_1 6
+#define BTN_PASSWORD_HELP 7
+#define BTN_PASSWORD_CANCEL 8
+
+#define STR_TITLE_CREATE_PASSWORD 9
+#define STR_TITLE_ENTER_PASSWORD 10
+#define STR_PASSWORD_MISMATCH 11
#endif // PASSWORDDLG_HRC
diff --git a/uui/source/passworddlg.hxx b/uui/source/passworddlg.hxx
index fe5fe7f2ef84..b94dbab82444 100644..100755
--- a/uui/source/passworddlg.hxx
+++ b/uui/source/passworddlg.hxx
@@ -37,21 +37,28 @@
#include <vcl/fixed.hxx>
//============================================================================
+
class PasswordDialog : public ModalDialog
{
FixedText aFTPassword;
Edit aEDPassword;
+ FixedText aFTConfirmPassword;
+ Edit aEDConfirmPassword;
OKButton aOKBtn;
CancelButton aCancelBtn;
HelpButton aHelpBtn;
FixedLine aFixedLine1;
+ USHORT nMinLen;
+ String aPasswdMismatch;
DECL_LINK( OKHdl_Impl, OKButton * );
public:
- PasswordDialog( Window* pParent, ::com::sun::star::task::PasswordRequestMode nDlgMode, ResMgr * pResMgr, ::rtl::OUString& aDocURL, bool bOpenToModify = false );
+ PasswordDialog( Window* pParent, ::com::sun::star::task::PasswordRequestMode nDlgMode, ResMgr * pResMgr, ::rtl::OUString& aDocURL,
+ bool bOpenToModify = false, bool bIsSimplePasswordRequest = false );
+ void SetMinLen( USHORT nMin ) { nMinLen = nMin; }
String GetPassword() const { return aEDPassword.GetText(); }
private:
@@ -60,3 +67,4 @@ private:
};
#endif // PASSWORDDLG_HXX
+
diff --git a/uui/source/passworddlg.src b/uui/source/passworddlg.src
index 33767057e1bd..52f8fbfac134 100644..100755
--- a/uui/source/passworddlg.src
+++ b/uui/source/passworddlg.src
@@ -41,48 +41,61 @@ ModalDialog DLG_UUI_PASSWORD
Moveable = TRUE ;
OutputSize = TRUE ;
SVLook = TRUE ;
- Size = MAP_APPFONT( 145, 91 );
- Text [ en-US ] = "Enter password";
+ Size = MAP_APPFONT( 165, 95 );
FixedText FT_PASSWORD
{
- Pos = MAP_APPFONT( 3, 4 );
- Size = MAP_APPFONT( 139, 28 );
+ Pos = MAP_APPFONT( 3, 6 );
+ Size = MAP_APPFONT( 159, 8 );
WordBreak = TRUE;
};
Edit ED_PASSWORD
{
- Pos = MAP_APPFONT( 3, 51 );
- Size = MAP_APPFONT( 139, 13 );
+ Pos = MAP_APPFONT( 3, 17 );
+ Size = MAP_APPFONT( 159, 12 );
Border = TRUE ;
PassWord = TRUE ;
};
- FixedLine FL_FIXED_LINE_1
+ FixedText FT_CONFIRM_PASSWORD
{
- Pos = MAP_APPFONT( 0, 66 );
- Size = MAP_APPFONT( 145, 6 );
+ Pos = MAP_APPFONT( 3, 34 );
+ Size = MAP_APPFONT( 159, 8 );
+ WordBreak = TRUE;
};
- OKButton BTN_PASSWORD_OK
+ Edit ED_CONFIRM_PASSWORD
{
- Pos = MAP_APPFONT( 27, 72 );
- Size = MAP_APPFONT( 37, 15 );
- DefButton = TRUE ;
- DefButton = TRUE;
+ Pos = MAP_APPFONT( 3, 45 );
+ Size = MAP_APPFONT( 159, 12 );
+ Border = TRUE ;
+ PassWord = TRUE ;
};
- CancelButton BTN_PASSWORD_CANCEL
+ FixedLine FL_FIXED_LINE_1
{
- Pos = MAP_APPFONT( 66, 72 );
- Size = MAP_APPFONT( 37, 15 );
+ Pos = MAP_APPFONT( 0, 63 );
+ Size = MAP_APPFONT( 165, 8 );
};
HelpButton BTN_PASSWORD_HELP
{
- Pos = MAP_APPFONT( 105, 72 );
- Size = MAP_APPFONT( 37, 15 );
+ Pos = MAP_APPFONT( 3, 76 );
+ Size = MAP_APPFONT( 50, 14 );
+ };
+
+ OKButton BTN_PASSWORD_OK
+ {
+ Pos = MAP_APPFONT( 59, 76 );
+ Size = MAP_APPFONT( 50, 14 );
+ DefButton = TRUE ;
+ };
+
+ CancelButton BTN_PASSWORD_CANCEL
+ {
+ Pos = MAP_APPFONT( 112, 76 );
+ Size = MAP_APPFONT( 50, 14 );
};
String STR_ENTER_PASSWORD_TO_OPEN
@@ -94,5 +107,30 @@ ModalDialog DLG_UUI_PASSWORD
{
Text [ en-US ] = "Enter password to modify file: \n";
};
+
+ String STR_ENTER_SIMPLE_PASSWORD
+ {
+ Text [ en-US ] = "Enter password: ";
+ };
+
+ String STR_CONFIRM_SIMPLE_PASSWORD
+ {
+ Text [ en-US ] = "Confirm password: ";
+ };
+
+ String STR_TITLE_CREATE_PASSWORD
+ {
+ Text [ en-US ] = "Set Password";
+ };
+
+ String STR_TITLE_ENTER_PASSWORD
+ {
+ Text [ en-US ] = "Enter Password";
+ };
+
+ String STR_PASSWORD_MISMATCH
+ {
+ Text [ en-US ] = "The confirmation password did not match the password. Set the password again by entering the same password in both boxes." ;
+ };
};
diff --git a/uui/source/passworderrs.src b/uui/source/passworderrs.src
index 1ff0f7a70b46..73741d35df2e 100755
--- a/uui/source/passworderrs.src
+++ b/uui/source/passworderrs.src
@@ -46,6 +46,11 @@ String STR_ERROR_MASTERPASSWORD_WRONG
Text [ en-US ] = "Caution: If you forget the master password, you will be unable to access any of the information protected by it. Passwords are case-sensitive.";
};
+String STR_ERROR_SIMPLE_PASSWORD_WRONG
+{
+ Text [ en-US ] = "The password is incorrect.";
+};
+
String STR_ERROR_PASSWORDS_NOT_IDENTICAL
{
Text [ en-US ] = "The password confirmation does not match.";