diff options
Diffstat (limited to 'sfx2/source/dialog/filedlgimpl.hxx')
-rw-r--r-- | sfx2/source/dialog/filedlgimpl.hxx | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/sfx2/source/dialog/filedlgimpl.hxx b/sfx2/source/dialog/filedlgimpl.hxx new file mode 100644 index 000000000..e5910790c --- /dev/null +++ b/sfx2/source/dialog/filedlgimpl.hxx @@ -0,0 +1,220 @@ +/* -*- 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_SFX2_SOURCE_DIALOG_FILEDLGIMPL_HXX +#define INCLUDED_SFX2_SOURCE_DIALOG_FILEDLGIMPL_HXX + +#include <vcl/timer.hxx> +#include <vcl/idle.hxx> +#include <vcl/graph.hxx> +#include <cppuhelper/implbase.hxx> +#include <com/sun/star/beans/StringPair.hpp> +#include <com/sun/star/container/XNameAccess.hpp> +#include <com/sun/star/ui/dialogs/XFilePickerListener.hpp> +#include <com/sun/star/ui/dialogs/XDialogClosedListener.hpp> +#include <sfx2/fcontnr.hxx> +#include <sfx2/filedlghelper.hxx> + +class SfxFilterMatcher; +class GraphicFilter; +class FileDialogHelper; +struct ImplSVEvent; + +namespace sfx2 +{ + class FileDialogHelper_Impl : + public ::cppu::WeakImplHelper< + css::ui::dialogs::XFilePickerListener, + css::ui::dialogs::XDialogClosedListener > + { + friend class FileDialogHelper; + + css::uno::Reference < css::ui::dialogs::XFilePicker3 > mxFileDlg; + css::uno::Reference < css::container::XNameAccess > mxFilterCFG; + + std::vector< css::beans::StringPair > maFilters; + + SfxFilterMatcher* mpMatcher; + std::unique_ptr<GraphicFilter> mpGraphicFilter; + FileDialogHelper* mpAntiImpl; + weld::Window* mpFrameWeld; + + ::std::vector< OUString > mlLastURLs; + + OUString maPath; + OUString maFileName; + OUString maCurFilter; + OUString maSelectFilter; + OUString maButtonLabel; + + Idle maPreviewIdle; + Graphic maGraphic; + + const short m_nDialogType; + + SfxFilterFlags m_nMustFlags; + SfxFilterFlags m_nDontFlags; + + ImplSVEvent * mnPostUserEventId; + + FileDialogHelper::Context meContext; + + bool mbHasPassword : 1; + bool mbIsPwdEnabled : 1; + bool m_bHaveFilterOptions : 1; + bool mbHasVersions : 1; + bool mbHasAutoExt : 1; + bool mbHasPreview : 1; + bool mbShowPreview : 1; + bool mbIsSaveDlg : 1; + bool mbExport : 1; + + bool mbDeleteMatcher : 1; + bool mbInsert : 1; + bool mbSystemPicker : 1; + bool mbAsyncPicker : 1; + bool mbPwdCheckBoxState : 1; + bool mbSelection : 1; + bool mbSelectionEnabled : 1; + bool mbHasSelectionBox : 1; + bool mbSelectionFltrEnabled : 1; + + private: + void addFilters( const OUString& rFactory, + SfxFilterFlags nMust, + SfxFilterFlags nDont ); + void addFilter( const OUString& rFilterName, + const OUString& rExtension ); + void addGraphicFilter(); + void enablePasswordBox( bool bInit ); + void updateFilterOptionsBox(); + void updateExportButton(); + void updateSelectionBox(); + void updateVersions(); + void updatePreviewState( bool _bUpdatePreviewWindow ); + void dispose(); + + void loadConfig(); + void saveConfig(); + + std::shared_ptr<const SfxFilter> getCurentSfxFilter(); + bool updateExtendedControl( sal_Int16 _nExtendedControlId, bool _bEnable ); + + ErrCode getGraphic( const OUString& rURL, Graphic& rGraphic ) const; + void setDefaultValues(); + + void preExecute(); + void postExecute( sal_Int16 _nResult ); + sal_Int16 implDoExecute(); + void implStartExecute(); + + void setControlHelpIds( const sal_Int16* _pControlId, const char** _pHelpId ); + + bool CheckFilterOptionsCapability( const std::shared_ptr<const SfxFilter>& _pFilter ); + + bool isInOpenMode() const; + OUString getCurrentFilterUIName() const; + + void LoadLastUsedFilter( const OUString& _rContextIdentifier ); + void SaveLastUsedFilter(); + + void implInitializeFileName( ); + + void verifyPath( ); + + void implGetAndCacheFiles( const css::uno::Reference< XInterface >& xPicker , + std::vector<OUString>& rpURLList ); + + DECL_LINK( TimeOutHdl_Impl, Timer *, void); + DECL_LINK( InitControls, void*, void ); + + public: + // XFilePickerListener methods + virtual void SAL_CALL fileSelectionChanged( const css::ui::dialogs::FilePickerEvent& aEvent ) override; + virtual void SAL_CALL directoryChanged( const css::ui::dialogs::FilePickerEvent& aEvent ) override; + virtual OUString SAL_CALL helpRequested( const css::ui::dialogs::FilePickerEvent& aEvent ) override; + virtual void SAL_CALL controlStateChanged( const css::ui::dialogs::FilePickerEvent& aEvent ) override; + virtual void SAL_CALL dialogSizeChanged() override; + + // XDialogClosedListener methods + virtual void SAL_CALL dialogClosed( const css::ui::dialogs::DialogClosedEvent& _rEvent ) override; + + // XEventListener methods + virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override; + + // handle XFilePickerListener events + void handleFileSelectionChanged(); + void handleDirectoryChanged(); + static OUString handleHelpRequested( const css::ui::dialogs::FilePickerEvent& aEvent ); + void handleControlStateChanged( const css::ui::dialogs::FilePickerEvent& aEvent ); + void handleDialogSizeChanged(); + + // Own methods + FileDialogHelper_Impl( + FileDialogHelper* _pAntiImpl, + const sal_Int16 nDialogType, + FileDialogFlags nFlags, + sal_Int16 nDialog, + weld::Window* pFrameWeld, + const OUString& sStandardDir = OUString(), + const css::uno::Sequence< OUString >& rDenyList = css::uno::Sequence< OUString >() + ); + virtual ~FileDialogHelper_Impl() override; + + ErrCode execute( std::vector<OUString>& rpURLList, + std::optional<SfxAllItemSet>& rpSet, + OUString& rFilter ); + ErrCode execute(); + + void setFilter( const OUString& rFilter ); + + /** sets the directory which should be browsed + + <p>If the given path does not point to a valid (existent and accessible) folder, the request + is silently dropped</p> + */ + void displayFolder( const OUString& rPath ); + void setFileName( const OUString& _rFile ); + + OUString getPath() const; + OUString getFilter() const; + void getRealFilter( OUString& _rFilter ) const; + + ErrCode getGraphic( Graphic& rGraphic ) const; + void createMatcher( const OUString& rFactory ); + + bool isShowFilterExtensionEnabled() const; + void addFilterPair( const OUString& rFilter, + const OUString& rFilterWithExtension ); + OUString getFilterName( std::u16string_view rFilterWithExtension ) const; + OUString getFilterWithExtension( std::u16string_view rFilter ) const; + + void SetContext( FileDialogHelper::Context _eNewContext ); + OUString getInitPath( std::u16string_view _rFallback, const sal_Int32 _nFallbackToken ); + + bool isAsyncFilePicker() const { return mbAsyncPicker; } + bool isPasswordEnabled() const { return mbIsPwdEnabled; } + + css::uno::Reference<css::awt::XWindow> GetFrameInterface(); + }; + +} // end of namespace sfx2 + +#endif // INCLUDED_SFX2_SOURCE_DIALOG_FILEDLGIMPL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |