From 2b89fc89d949d295b8c7d863d6fdb4b967445680 Mon Sep 17 00:00:00 2001 From: Samuel Mehrbrodt Date: Wed, 2 Nov 2016 10:26:23 +0100 Subject: Add helper for creating zip files Change-Id: I8b49b74622bf4d671d640e4cd06dc2da348ee222 Reviewed-on: https://gerrit.libreoffice.org/30478 Reviewed-by: Samuel Mehrbrodt Tested-by: Samuel Mehrbrodt --- include/unotools/ZipPackageHelper.hxx | 65 ++++++++++ svx/source/dialog/SafeModeDialog.cxx | 72 ++++++++++- unotools/Library_utl.mk | 1 + unotools/source/misc/ZipPackageHelper.cxx | 199 ++++++++++++++++++++++++++++++ 4 files changed, 333 insertions(+), 4 deletions(-) create mode 100644 include/unotools/ZipPackageHelper.hxx create mode 100644 unotools/source/misc/ZipPackageHelper.cxx diff --git a/include/unotools/ZipPackageHelper.hxx b/include/unotools/ZipPackageHelper.hxx new file mode 100644 index 000000000000..77c8b9178a8a --- /dev/null +++ b/include/unotools/ZipPackageHelper.hxx @@ -0,0 +1,65 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#ifndef INCLUDED_UNOTOOLS_ZIPPACKAGEHELPER_HXX +#define INCLUDED_UNOTOOLS_ZIPPACKAGEHELPER_HXX + +#include + +#include +#include +#include +#include +#include +#include + +namespace utl { + +class UNOTOOLS_DLLPUBLIC ZipPackageHelper +{ +public: + ZipPackageHelper( const css::uno::Reference< css::uno::XComponentContext >& rxContext, + const OUString& sPackageURL); + + void savePackage(); + + void addFile( css::uno::Reference< css::uno::XInterface >& xRootFolder, + const OUString& rSourceFile ) + throw( css::uno::Exception, std::exception ); + + css::uno::Reference< css::uno::XInterface > addFolder( css::uno::Reference< css::uno::XInterface >& xRootFolder, + const OUString& rName ) + throw( css::uno::Exception, std::exception ); + + void addFolderWithContent( css::uno::Reference< css::uno::XInterface >& xRootFolder, + const OUString& rDirURL ); + + css::uno::Reference< css::uno::XInterface >& getRootFolder(); + +private: + css::uno::Reference< css::uno::XComponentContext > mxContext; + css::uno::Reference< css::container::XHierarchicalNameAccess > mxHNameAccess; + css::uno::Reference< css::lang::XSingleServiceFactory > mxFactory; + css::uno::Reference< css::uno::XInterface > mxRootFolder; +}; + +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/source/dialog/SafeModeDialog.cxx b/svx/source/dialog/SafeModeDialog.cxx index e4c8b383f844..4640bfbfefa9 100644 --- a/svx/source/dialog/SafeModeDialog.cxx +++ b/svx/source/dialog/SafeModeDialog.cxx @@ -17,8 +17,11 @@ #include #include #include +#include #include #include +#include +#include #include #include @@ -79,14 +82,15 @@ SafeModeDialog::SafeModeDialog(vcl::Window* pParent) get(mpBugLink, "linkbutton_bugs"); get(mpUserProfileLink, "linkbutton_profile"); + get(mpBtnCreateZip, "btn_create_zip"); mpRadioRestore->SetClickHdl(LINK(this, SafeModeDialog, RadioBtnHdl)); mpRadioConfigure->SetClickHdl(LINK(this, SafeModeDialog, RadioBtnHdl)); mpRadioReset->SetClickHdl(LINK(this, SafeModeDialog, RadioBtnHdl)); - mpBtnContinue->SetClickHdl(LINK(this, SafeModeDialog, BtnHdl)); - mpBtnQuit->SetClickHdl(LINK(this, SafeModeDialog, BtnHdl)); - mpBtnRestart->SetClickHdl(LINK(this, SafeModeDialog, BtnHdl)); + mpBtnContinue->SetClickHdl(LINK(this, SafeModeDialog, DialogBtnHdl)); + mpBtnQuit->SetClickHdl(LINK(this, SafeModeDialog, DialogBtnHdl)); + mpBtnRestart->SetClickHdl(LINK(this, SafeModeDialog, DialogBtnHdl)); mpCBCheckProfilesafeConfig->SetToggleHdl(LINK(this, SafeModeDialog, CheckBoxHdl)); mpCBCheckProfilesafeExtensions->SetToggleHdl(LINK(this, SafeModeDialog, CheckBoxHdl)); @@ -98,6 +102,7 @@ SafeModeDialog::SafeModeDialog(vcl::Window* pParent) mpCBResetWholeUserProfile->SetToggleHdl(LINK(this, SafeModeDialog, CheckBoxHdl)); mpBugLink->SetClickHdl(LINK(this, SafeModeDialog, HandleHyperlink)); + mpBtnCreateZip->SetClickHdl(LINK(this, SafeModeDialog, CreateZipBtnHdl)); // Disable restart btn until some checkbox is active mpBtnRestart->Disable(); @@ -176,6 +181,7 @@ void SafeModeDialog::dispose() mpBugLink.clear(); mpUserProfileLink.clear(); + mpBtnCreateZip.clear(); Dialog::dispose(); } @@ -276,6 +282,8 @@ IMPL_LINK(SafeModeDialog, RadioBtnHdl, Button*, pBtn) mpBoxReset->Disable(); mpBoxConfigure->Disable(); } + + return 0; } void SafeModeDialog::openWebBrowser(const OUString & sURL, const OUString &sTitle) @@ -302,7 +310,7 @@ void SafeModeDialog::openWebBrowser(const OUString & sURL, const OUString &sTitl } -IMPL_LINK(SafeModeDialog, BtnHdl, Button*, pBtn) +IMPL_LINK(SafeModeDialog, DialogBtnHdl, Button*, pBtn) { if (pBtn == mpBtnContinue.get()) { @@ -318,6 +326,62 @@ IMPL_LINK(SafeModeDialog, BtnHdl, Button*, pBtn) Close(); applyChanges(); } + + return 0; +} + +namespace { + class ProfileExportedDialog : public ModalDialog + { + private: + DECL_LINK(OpenHdl, void *); + public: + explicit ProfileExportedDialog(); + }; + + ProfileExportedDialog::ProfileExportedDialog() + : ModalDialog(nullptr, "SafeModeQueryDialog", "svx/ui/profileexporteddialog.ui") + { + get