diff options
author | Dirk Voelzke <dv@openoffice.org> | 2010-06-25 15:18:20 +0200 |
---|---|---|
committer | Dirk Voelzke <dv@openoffice.org> | 2010-06-25 15:18:20 +0200 |
commit | 1404c71e271169299640a1d1b6fb7e46407792b7 (patch) | |
tree | cd14d07cf01a745a324d84eeaf2a5ce38605324f | |
parent | f8e7afbac976ca862a801b9648fd95b2107757b2 (diff) |
dv19#i29340# Implmented handler for NameClashResolveRequests
-rwxr-xr-x[-rw-r--r--] | uui/source/iahndl.cxx | 77 | ||||
-rwxr-xr-x[-rw-r--r--] | uui/source/ids.hrc | 5 | ||||
-rwxr-xr-x[-rw-r--r--] | uui/source/makefile.mk | 2 | ||||
-rwxr-xr-x | uui/source/nameclashdlg.cxx | 102 | ||||
-rwxr-xr-x | uui/source/nameclashdlg.hrc | 41 | ||||
-rwxr-xr-x | uui/source/nameclashdlg.hxx | 63 | ||||
-rwxr-xr-x | uui/source/nameclashdlg.src | 113 |
7 files changed, 354 insertions, 49 deletions
diff --git a/uui/source/iahndl.cxx b/uui/source/iahndl.cxx index e883bd60848d..ee233f5ac9de 100644..100755 --- a/uui/source/iahndl.cxx +++ b/uui/source/iahndl.cxx @@ -89,6 +89,7 @@ #include "newerverwarn.hxx" #include "iahndl.hxx" +#include "nameclashdlg.hxx" /** === begin UNO using === **/ using ::com::sun::star::uno::Sequence; @@ -867,14 +868,13 @@ UUIInteractionHelper::handleRequest_impl( if ( handleCertificateValidationRequest( rRequest ) ) return true; -// @@@ Todo #i29340#: activate! -// ucb::NameClashResolveRequest aNameClashResolveRequest; -// if (aAnyRequest >>= aNameClashResolveRequest) -// { -// handleNameClashResolveRequest(aNameClashResolveRequest, -// rRequest->getContinuations()); -// return true; -// } + ucb::NameClashResolveRequest aNameClashResolveRequest; + if (aAnyRequest >>= aNameClashResolveRequest) + { + handleNameClashResolveRequest(aNameClashResolveRequest, + rRequest->getContinuations()); + return true; + } if ( handleMasterPasswordRequest( rRequest ) ) return true; @@ -1187,32 +1187,22 @@ executeMessageBox( return aResult; } -enum NameClashResolveDialogResult { ABORT, RENAME, OVERWRITE }; - -NameClashResolveDialogResult -executeNameClashResolveDialog( - Window * /*pParent*/, - rtl::OUString const & /*rTargetFolderURL*/, - rtl::OUString const & /*rClashingName*/, - rtl::OUString & /*rProposedNewName*/) +NameClashResolveDialogResult executeSimpleNameClashResolveDialog( Window *pParent, + rtl::OUString const & rTargetFolderURL, + rtl::OUString const & rClashingName, + rtl::OUString & rProposedNewName, + bool bAllowOverwrite ) { - // @@@ Todo DV: execute overwrite-rename dialog, deliver result - OSL_ENSURE( false, - "executeNameClashResolveDialog not yet implemented!" ); - return ABORT; -} + std::auto_ptr< ResMgr > xManager( ResMgr::CreateResMgr( CREATEVERSIONRESMGR_NAME( uui ) ) ); + if ( !xManager.get() ) + return ABORT; -NameClashResolveDialogResult -executeSimpleNameClashResolveDialog( - Window * /*pParent*/, - rtl::OUString const & /*rTargetFolderURL*/, - rtl::OUString const & /*rClashingName*/, - rtl::OUString & /*rProposedNewName*/) -{ - // @@@ Todo DV: execute rename-only dialog, deliver result - OSL_ENSURE( false, - "executeSimpleNameClashResolveDialog not yet implemented!" ); - return ABORT; + NameClashDialog aDialog( pParent, xManager.get(), rTargetFolderURL, + rClashingName, rProposedNewName, bAllowOverwrite ); + + NameClashResolveDialogResult eResult = (NameClashResolveDialogResult) aDialog.Execute(); + rProposedNewName = aDialog.getNewName(); + return eResult; } } // namespace @@ -1246,18 +1236,12 @@ UUIInteractionHelper::handleNameClashResolveRequest( NameClashResolveDialogResult eResult = ABORT; rtl::OUString aProposedNewName( rRequest.ProposedNewName ); - if ( xReplaceExistingData.is() ) - eResult = executeNameClashResolveDialog( - getParentProperty(), - rRequest.TargetFolderURL, - rRequest.ClashingName, - aProposedNewName); - else - eResult = executeSimpleNameClashResolveDialog( - getParentProperty(), - rRequest.TargetFolderURL, - rRequest.ClashingName, - aProposedNewName); + + eResult = executeSimpleNameClashResolveDialog( getParentProperty(), + rRequest.TargetFolderURL, + rRequest.ClashingName, + aProposedNewName, + xReplaceExistingData.is() ); switch ( eResult ) { @@ -1277,11 +1261,6 @@ UUIInteractionHelper::handleNameClashResolveRequest( "No ReplaceExistingData continuation available!" ); xReplaceExistingData->select(); break; - - default: - OSL_ENSURE( false, "Unknown NameClashResolveDialogResult value. " - "Interaction Request not handled!" ); - break; } } diff --git a/uui/source/ids.hrc b/uui/source/ids.hrc index 9bf5856bc270..42d06bd63850 100644..100755 --- a/uui/source/ids.hrc +++ b/uui/source/ids.hrc @@ -48,6 +48,7 @@ #define DLG_FILTER_SELECT (RID_UUI_START + 10) // RID_UUI_START + 11 moved to ERRCODE_UUI_WRONGMEDIUM #define DLG_UUI_MASTERPASSWORD (RID_UUI_START + 12) +#define DLG_SIMPLE_NAME_CLASH (RID_UUI_START + 13) #define STR_ERROR_PASSWORDS_NOT_IDENTICAL (RID_UUI_START + 13) #define STR_ERROR_MASTERPASSWORD_WRONG (RID_UUI_START + 14) // RID_UUI_START + 15, 16, 17 are misused by syncaccess/source/ui/resids.hrc @@ -86,6 +87,9 @@ #define STR_ALREADYOPEN_SAVE_BTN (RID_UUI_START + 52) #define RID_DLG_NEWER_VERSION_WARNING (RID_UUI_START + 53) #define STR_WARNING_INCOMPLETE_ENCRYPTION_TITLE (RID_UUI_START + 54) +#define STR_RENAME_OR_REPLACE (RID_UUI_START + 55) +#define STR_NAME_CLASH_RENAME_ONLY (RID_UUI_START + 56) +#define STR_SAME_NAME_USED (RID_UUI_START + 57) #define ERRCODE_UUI_IO_ABORT (ERRCODE_AREA_UUI + 0) #define ERRCODE_UUI_IO_ACCESSDENIED (ERRCODE_AREA_UUI + 1) @@ -178,6 +182,7 @@ #define HID_DLG_SSLWARN_UUI (HID_UUI_START+8) #define HID_XMLSECDLG_MACROWARN (HID_UUI_START+9) #define HID_DLG_NEWERVERSIONWARNING (HID_UUI_START+10) +#define HID_DLG_SIMPLE_NAME_CLASH (HID_UUI_START+11) // HID_UUI_END (aka HID_CHAOS_NEW_DATABASE) is reserved in // sfx2/util/hidother.src diff --git a/uui/source/makefile.mk b/uui/source/makefile.mk index 5c20e593046a..ebe61b2c570e 100644..100755 --- a/uui/source/makefile.mk +++ b/uui/source/makefile.mk @@ -60,6 +60,7 @@ SLOFILES = \ $(SLO)$/lockfailed.obj \ $(SLO)$/trylater.obj \ $(SLO)$/newerverwarn.obj \ + $(SLO)$/nameclashdlg.obj \ $(SLO)$/passwordcontainer.obj SRS1NAME=$(TARGET) @@ -81,6 +82,7 @@ SRC1FILES = \ alreadyopen.src\ lockfailed.src\ trylater.src\ + nameclashdlg.src\ newerverwarn.src .INCLUDE: target.mk diff --git a/uui/source/nameclashdlg.cxx b/uui/source/nameclashdlg.cxx new file mode 100755 index 000000000000..dd4566e45b30 --- /dev/null +++ b/uui/source/nameclashdlg.cxx @@ -0,0 +1,102 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#include "vcl/msgbox.hxx" + +#include "ids.hrc" +#include "nameclashdlg.hrc" +#include "nameclashdlg.hxx" + +// NameClashDialog --------------------------------------------------------- + +IMPL_LINK( NameClashDialog, ButtonHdl_Impl, PushButton *, pBtn ) +{ + long nRet = (long) ABORT; + if ( &maBtnRename == pBtn ) + { + nRet = (long) RENAME; + rtl::OUString aNewName = maEDNewName.GetText(); + if ( ( aNewName == maNewName ) || !aNewName.getLength() ) + { + ErrorBox aError( NULL, WB_OK, maSameName ); + aError.Execute(); + return 1; + } + maNewName = aNewName; + } + else if ( &maBtnOverwrite == pBtn ) + nRet = (long) OVERWRITE; + + EndDialog( nRet ); + + return 1; +} + +// ----------------------------------------------------------------------- +NameClashDialog::NameClashDialog( Window* pParent, ResMgr* pResMgr, + rtl::OUString const & rTargetFolderURL, + rtl::OUString const & rClashingName, + rtl::OUString const & rProposedNewName, + bool bAllowOverwrite ) + : ModalDialog( pParent, ResId( DLG_SIMPLE_NAME_CLASH, *pResMgr ) ), + maFTMessage ( this, ResId( FT_FILE_EXISTS_WARNING, *pResMgr ) ), + maEDNewName ( this, ResId( EDIT_NEW_NAME, *pResMgr ) ), + maBtnOverwrite ( this, ResId( BTN_OVERWRITE, *pResMgr ) ), + maBtnRename ( this, ResId( BTN_RENAME, *pResMgr ) ), + maBtnCancel ( this, ResId( BTN_CANCEL, *pResMgr ) ), + maBtnHelp ( this, ResId( BTN_HELP, *pResMgr ) ), + maNewName ( rClashingName ) +{ + FreeResource(); + + Link aLink( LINK( this, NameClashDialog, ButtonHdl_Impl ) ); + maBtnOverwrite.SetClickHdl( aLink ); + maBtnRename.SetClickHdl( aLink ); + maBtnCancel.SetClickHdl( aLink ); + + String aInfo; + if ( bAllowOverwrite ) + { + aInfo = String( ResId( STR_RENAME_OR_REPLACE, *pResMgr ) ); + } + else + { + aInfo = String( ResId( STR_NAME_CLASH_RENAME_ONLY, *pResMgr ) ); + maBtnOverwrite.Hide(); + } + + maSameName = String ( ResId( STR_SAME_NAME_USED, *pResMgr ) ); + + aInfo.SearchAndReplaceAscii( "%NAME", rClashingName ); + aInfo.SearchAndReplaceAscii( "%FOLDER", rTargetFolderURL ); + maFTMessage.SetText( aInfo ); + if ( rProposedNewName.getLength() ) + maEDNewName.SetText( rProposedNewName ); + else + maEDNewName.SetText( rClashingName ); +} + diff --git a/uui/source/nameclashdlg.hrc b/uui/source/nameclashdlg.hrc new file mode 100755 index 000000000000..1bfdc01de5ab --- /dev/null +++ b/uui/source/nameclashdlg.hrc @@ -0,0 +1,41 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef UUI_NAMECLASHDLG_HRC +#define UUI_NAMECLASHDLG_HRC + +//============================================================================ + +#define FT_FILE_EXISTS_WARNING 20 +#define EDIT_NEW_NAME 21 +#define BTN_OVERWRITE 22 +#define BTN_RENAME 23 +#define BTN_CANCEL 24 +#define BTN_HELP 25 + +#endif // UUI_NAMECLASHDLG_HRC + diff --git a/uui/source/nameclashdlg.hxx b/uui/source/nameclashdlg.hxx new file mode 100755 index 000000000000..1e234008a229 --- /dev/null +++ b/uui/source/nameclashdlg.hxx @@ -0,0 +1,63 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef UUI_NAMECLASHDLG_HXX +#define UUI_NAMECLASHDLG_HXX + +#include "vcl/button.hxx" +#include "vcl/dialog.hxx" +#include "vcl/fixed.hxx" +#include "vcl/edit.hxx" + +//============================================================================ + +enum NameClashResolveDialogResult { ABORT, RENAME, OVERWRITE }; + +class NameClashDialog : public ModalDialog +{ + FixedText maFTMessage; + Edit maEDNewName; + PushButton maBtnOverwrite; + PushButton maBtnRename; + CancelButton maBtnCancel; + HelpButton maBtnHelp; + rtl::OUString maSameName; + rtl::OUString maNewName; + + DECL_LINK( ButtonHdl_Impl, PushButton * ); + +public: + NameClashDialog( Window* pParent, ResMgr* pResMgr, + rtl::OUString const & rTargetFolderURL, + rtl::OUString const & rClashingName, + rtl::OUString const & rProposedNewName, + bool bAllowOverwrite ); + rtl::OUString getNewName() const { return maNewName; } +}; + +#endif // UUI_COOKIEDG_HXX + diff --git a/uui/source/nameclashdlg.src b/uui/source/nameclashdlg.src new file mode 100755 index 000000000000..de8cdb8e716d --- /dev/null +++ b/uui/source/nameclashdlg.src @@ -0,0 +1,113 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#define __RSC + +#ifndef UUI_IDS_HRC +#include "ids.hrc" +#endif + +#ifndef UUI_NAMECLASHDLG_HRC +#include "nameclashdlg.hrc" +#endif + +#define DLG_WIDTH 250 +#define DLG_HEIGTH 75 +#define BORDER_OFFSET 6 +#define EDIT_HEIGTH 12 +#define BTN_WIDTH 50 +#define BTN_HEIGTH 14 + +ModalDialog DLG_SIMPLE_NAME_CLASH +{ + HelpId = HID_DLG_SIMPLE_NAME_CLASH ; + OutputSize = TRUE ; + SVLook = TRUE ; + Size = MAP_APPFONT ( DLG_WIDTH , DLG_HEIGTH ) ; + Moveable = TRUE ; + Text [ en-US ] = "File Exists" ; + + FixedText FT_FILE_EXISTS_WARNING + { + Pos = MAP_APPFONT ( BORDER_OFFSET, BORDER_OFFSET ) ; + Size = MAP_APPFONT ( DLG_WIDTH - 2*BORDER_OFFSET, DLG_HEIGTH - EDIT_HEIGTH - BTN_HEIGTH - 4*BORDER_OFFSET ) ; + WordBreak = TRUE ; + }; + + Edit EDIT_NEW_NAME + { + Border = TRUE ; + Pos = MAP_APPFONT ( BORDER_OFFSET, DLG_HEIGTH - EDIT_HEIGTH - BTN_HEIGTH - 2*BORDER_OFFSET ) ; + Size = MAP_APPFONT ( DLG_WIDTH - 2*BORDER_OFFSET , EDIT_HEIGTH ) ; + }; + + PushButton BTN_OVERWRITE + { + Pos = MAP_APPFONT ( DLG_WIDTH - 3*(BTN_WIDTH + BORDER_OFFSET) , DLG_HEIGTH - BTN_HEIGTH - BORDER_OFFSET ) ; + Size = MAP_APPFONT ( BTN_WIDTH, BTN_HEIGTH ) ; + TabStop = TRUE ; + Text [ en-US ] = "Replace" ; + }; + + PushButton BTN_RENAME + { + Pos = MAP_APPFONT ( DLG_WIDTH - 2*(BTN_WIDTH + BORDER_OFFSET) , DLG_HEIGTH - BTN_HEIGTH - BORDER_OFFSET ) ; + Size = MAP_APPFONT ( BTN_WIDTH, BTN_HEIGTH ) ; + TabStop = TRUE ; + Text [ en-US ] = "Rename" ; + DefButton = TRUE ; + }; + + CancelButton BTN_CANCEL + { + Pos = MAP_APPFONT ( DLG_WIDTH - BTN_WIDTH - BORDER_OFFSET, DLG_HEIGTH - BTN_HEIGTH - BORDER_OFFSET ) ; + Size = MAP_APPFONT ( BTN_WIDTH, BTN_HEIGTH ) ; + TabStop = TRUE ; + }; + + HelpButton BTN_HELP + { + Pos = MAP_APPFONT ( BORDER_OFFSET, DLG_HEIGTH - BTN_HEIGTH - BORDER_OFFSET ) ; + Size = MAP_APPFONT ( BTN_WIDTH, BTN_HEIGTH ) ; + TabStop = TRUE ; + }; +}; + +String STR_RENAME_OR_REPLACE +{ + Text = "A file with the name \"%NAME\" already exists in the location \"%FOLDER\".\nChoose Replace to overwrite the existing file or provide a new name."; +}; + +String STR_NAME_CLASH_RENAME_ONLY +{ + Text = "A file with the name \"%NAME\" already exists in the location \"%FOLDER\".\nPlease enter a new name."; +}; + +String STR_SAME_NAME_USED +{ + Text = "Please provide a different file name!"; +}; |