31#include <com/sun/star/uno/Any.hxx>
32#include <com/sun/star/ui/dialogs/FilePickerEvent.hpp>
33#include <com/sun/star/ui/dialogs/FilePreviewImageFormats.hpp>
34#include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
35#include <com/sun/star/uno/Sequence.hxx>
36#include <com/sun/star/beans/NamedValue.hpp>
68 const OUString& getTitle()
const {
return m_sTitle; }
69 const OUString& getFilter()
const {
return m_sFilter; }
72 bool hasSubFilters( )
const;
79 const UnoFilterEntry* beginSubFilters()
const {
return m_aSubFilters.getConstArray(); }
80 const UnoFilterEntry* endSubFilters()
const {
return m_aSubFilters.getConstArray() + m_aSubFilters.getLength(); }
84FilterEntry::FilterEntry( OUString _aTitle,
const UnoFilterList& _rSubFilters )
86 ,m_aSubFilters( _rSubFilters )
91bool FilterEntry::hasSubFilters( )
const
93 return m_aSubFilters.hasElements();
97void FilterEntry::getSubFilters(
UnoFilterList& _rSubFilterList )
99 _rSubFilterList = m_aSubFilters;
123 : m_nElementID(
nId )
124 , m_nControlAction( 0 )
125 , m_bEnabled( false )
126 , m_bHasValue( false )
127 , m_bHasLabel( false )
128 , m_bHasEnabled( false )
138 bool isFileSet =
false;
153 m_xDlg->SetHasFilename(
true );
161 m_xDlg->SetHasFilename(
true );
178 if ( elem.m_bHasValue )
179 aAccess.
setValue( elem.m_nElementID, elem.m_nControlAction, elem.m_aValue );
180 if ( elem.m_bHasLabel )
181 aAccess.
setLabel( elem.m_nElementID, elem.m_aLabel );
182 if ( elem.m_bHasEnabled )
192 if ( elem.hasSubFilters() )
202 m_xDlg->AddFilter( elem.getTitle(), elem.getFilter() );
217 sal_Int16 nRet =
static_cast< sal_Int16
>(nResult);
218 css::ui::dialogs::DialogClosedEvent
aEvent( *
this, nRet );
235 else if (
m_nServiceType == TemplateDescription::FILESAVE_SIMPLE )
239 else if (
m_nServiceType == TemplateDescription::FILESAVE_AUTOEXTENSION )
243 else if (
m_nServiceType == TemplateDescription::FILESAVE_AUTOEXTENSION_PASSWORD )
247 else if (
m_nServiceType == TemplateDescription::FILESAVE_AUTOEXTENSION_PASSWORD_FILTEROPTIONS )
251 else if (
m_nServiceType == TemplateDescription::FILESAVE_AUTOEXTENSION_TEMPLATE )
255 else if (
m_nServiceType == TemplateDescription::FILESAVE_AUTOEXTENSION_SELECTION )
260 else if (
m_nServiceType == TemplateDescription::FILEOPEN_LINK_PREVIEW_IMAGE_TEMPLATE )
268 else if (
m_nServiceType == TemplateDescription::FILEOPEN_LINK_PLAY )
272 else if (
m_nServiceType == TemplateDescription::FILEOPEN_READONLY_VERSION )
276 else if (
m_nServiceType == TemplateDescription::FILEOPEN_LINK_PREVIEW )
280 else if (
m_nServiceType == TemplateDescription::FILEOPEN_LINK_PREVIEW_IMAGE_ANCHOR )
284 else if (
m_nServiceType == TemplateDescription::FILEOPEN_PREVIEW )
300 FilePickerEvent
aEvent( *
this, _nControlId );
317 SAL_WARN(
"fpicker.office",
"SvtFilePicker::notify(): Unknown event id!" );
325 struct FilterTitleMatch
328 const OUString& rTitle;
331 explicit FilterTitleMatch(
const OUString& _rTitle ) : rTitle( _rTitle ) { }
337 if ( !_rEntry.hasSubFilters() )
339 bMatch = ( _rEntry.getTitle() == rTitle );
344 _rEntry.beginSubFilters(),
345 _rEntry.endSubFilters(),
353 return _rEntry.First == rTitle;
368 FilterTitleMatch( rTitle )
382 const UnoFilterEntry* pEnd = pStart + _rGroupedFilters.getLength();
383 for ( ; pStart != pEnd; ++pStart )
387 bRet = pStart != pEnd;
409 :m_bMultiSelection ( false )
410 ,m_nServiceType ( TemplateDescription::FILEOPEN_SIMPLE )
420 m_xDlg->SetFileCallback(
this );
424 m_xDlg->EnableAutocompletion();
426 sal_Int16 nRet =
m_xDlg->run();
430 m_xDlg->SetFileCallback(
nullptr );
439 auto dialog = o3tl::make_shared<SvtFileDialog>(pParent, nBits);
469 return ::comphelper::concatSequences(
471 OCommonPicker::getTypes(),
483 OCommonPicker::setTitle( _rTitle );
488 return OCommonPicker::execute();
502 m_xDlg->EnableAutocompletion();
503 if (!
m_xDlg->PrepareExecute())
542 OUString aPath =
m_xDlg->GetPath();
548 if( !
m_xDlg->ContentIsFolder( aPath ) )
568 Sequence< OUString > aEmpty;
578 if (aFiles.getLength() > 1)
588 sal_Int16 nControlAction,
597 aAccess.
setValue( nElementID, nControlAction, rValue );
608 if ( ( elem.m_nElementID == nElementID ) &&
609 ( !elem.m_bHasValue || ( elem.m_nControlAction == nControlAction ) ) )
611 elem.setAction( nControlAction );
612 elem.setValue( rValue );
639 aAny = aAccess.
getValue( nElementID, nControlAction );
645 if ( ( elem.m_nElementID == nElementID ) &&
646 ( elem.m_bHasValue ) &&
647 ( elem.m_nControlAction == nControlAction ) )
649 aAny = elem.m_aValue;
667 aAccess.
setLabel( nLabelID, rValue );
678 if ( elem.m_nElementID == nLabelID )
680 elem.setLabel( rValue );
711 if ( elem.m_nElementID == nLabelID )
713 if ( elem.m_bHasLabel )
743 if ( elem.m_nElementID == nElementID )
745 elem.setEnabled( bEnable );
785 return { FilePreviewImageFormats::BITMAP };
798 sal_Int32 nWidth = 0;
801 nWidth =
m_xDlg->getAvailableWidth();
811 sal_Int32 nHeight = 0;
814 nHeight =
m_xDlg->getAvailableHeight();
864 bRet =
m_xDlg->getShowState();
874 const Sequence< StringPair >& aFilters )
882 throw IllegalArgumentException(
883 "filter name exists",
887 OUString sInitialCurrentFilter;
888 if ( aFilters.hasElements() )
889 sInitialCurrentFilter = aFilters[0].First;
901 const OUString& aFilter )
909 throw IllegalArgumentException();
925 throw IllegalArgumentException();
930 m_xDlg->SetCurFilter( aTitle );
952 Sequence< Any >
aArguments( _rArguments.getLength());
956 if ( _rArguments.hasElements() )
964 NamedValue emptyNamedValue;
965 pArguments[0] <<= emptyNamedValue;
969 for (
int i =
index;
i < _rArguments.getLength();
i++)
971 NamedValue namedValue;
972 pArguments[
i] = _rArguments[
i];
977 if ( namedValue.Name ==
"StandardDir" )
989 else if ( namedValue.Name ==
"DenyList" )
1004 if ( _rName ==
"TemplateDescription" )
1010 if ( _rName ==
"StandardDir" )
1016 if ( _rName ==
"DenyList" )
1023 return OCommonPicker::implHandleInitializationArgument( _rName, _rValue );
1033 return "com.sun.star.svtools.OfficeFilePicker";
1045 return {
"com.sun.star.ui.dialogs.OfficeFilePicker" };
1048extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
1050 css::uno::XComponentContext* , css::uno::Sequence<css::uno::Any>
const&)
1066 auto dialog = std::make_shared<RemoteFilesDialog>(pParent, nBits);
1085 return "com.sun.star.svtools.RemoteFilePicker";
1097 return {
"com.sun.star.ui.dialogs.RemoteFilePicker" };
1101extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
1103 css::uno::XComponentContext* , css::uno::Sequence<css::uno::Any>
const&)
::std::vector< FilterEntry > FilterList
css::uno::Sequence< UnoFilterEntry > UnoFilterList
css::beans::StringPair UnoFilterEntry
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * fpicker_SvtRemoteFilePicker_get_implementation(css::uno::XComponentContext *, css::uno::Sequence< css::uno::Any > const &)
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * fpicker_SvtFilePicker_get_implementation(css::uno::XComponentContext *, css::uno::Sequence< css::uno::Any > const &)
::std::vector< ElementEntry_Impl > ElementList
constexpr OUStringLiteral sServiceName
constexpr OUStringLiteral sStandardDir
OUString GetMainURL(DecodeMechanism eMechanism, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
bool insertName(std::u16string_view rTheName, bool bAppendFinalSlash=false, sal_Int32 nIndex=LAST_SEGMENT, EncodeMechanism eMechanism=EncodeMechanism::WasEncoded, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8)
virtual sal_Bool SAL_CALL getShowState() override
OUString m_aCurrentFilter
virtual css::uno::Any SAL_CALL getValue(sal_Int16 ElementID, sal_Int16 ControlAction) override
virtual OUString SAL_CALL getImplementationName() override
virtual void SAL_CALL appendFilter(const OUString &aTitle, const OUString &aFilter) override
virtual void SAL_CALL startExecuteModal(const css::uno::Reference< css::ui::dialogs::XDialogClosedListener > &xListener) override
virtual sal_Int32 SAL_CALL getTargetColorDepth() override
virtual sal_Bool SAL_CALL setShowState(sal_Bool bShowState) override
virtual void notify(sal_Int16 _nEventId, sal_Int16 _nControlId) override
virtual void SAL_CALL setCurrentFilter(const OUString &aTitle) override
virtual OUString SAL_CALL getDisplayDirectory() override
virtual void SAL_CALL enableControl(sal_Int16 ElementID, sal_Bool bEnable) override
virtual void SAL_CALL removeFilePickerListener(const css::uno::Reference< css::ui::dialogs::XFilePickerListener > &xListener) override
virtual void SAL_CALL initialize(const css::uno::Sequence< css::uno::Any > &aArguments) override
virtual OUString SAL_CALL getLabel(sal_Int16 ElementID) override
virtual sal_Int16 implExecutePicker() override
virtual sal_Int16 SAL_CALL execute() override
virtual std::shared_ptr< SvtFileDialog_Base > implCreateDialog(weld::Window *pParent) override
virtual void SAL_CALL setDialogTitle(const OUString &_rTitle) override
virtual sal_Int32 SAL_CALL getAvailableWidth() override
void ensureFilterList(const OUString &_rInitialCurrentFilter)
virtual void SAL_CALL setTitle(const OUString &_rTitle) override
virtual void SAL_CALL setDefaultName(const OUString &aName) override
bool FilterNameExists(const OUString &rTitle)
virtual OUString SAL_CALL getCurrentFilter() override
virtual void SAL_CALL setMultiSelectionMode(sal_Bool bMode) override
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
virtual css::uno::Sequence< OUString > SAL_CALL getSelectedFiles() override
std::unique_ptr< ElementList > m_pElemList
virtual sal_Int32 SAL_CALL getAvailableHeight() override
OUString m_aOldHideDirectory
virtual bool implHandleInitializationArgument(const OUString &_rName, const css::uno::Any &_rValue) override
handle a single argument from the XInitialization::initialize method
void DialogClosedHdl(sal_Int32 nResult)
virtual ~SvtFilePicker() override
css::uno::Reference< css::ui::dialogs::XFilePickerListener > m_xListener
virtual void SAL_CALL setImage(sal_Int16 aImageFormat, const css::uno::Any &aImage) override
css::uno::Reference< css::ui::dialogs::XDialogClosedListener > m_xDlgClosedListener
std::unique_ptr< FilterList > m_pFilterList
css::uno::Sequence< OUString > m_aDenyList
OUString m_aOldDisplayDirectory
PickerFlags getPickerFlags() const
virtual css::uno::Sequence< OUString > SAL_CALL getFiles() override
virtual void SAL_CALL setLabel(sal_Int16 ElementID, const OUString &aValue) override
virtual css::uno::Sequence< sal_Int16 > SAL_CALL getSupportedImageFormats() override
virtual void SAL_CALL setValue(sal_Int16 ElementID, sal_Int16 ControlAction, const css::uno::Any &value) override
virtual void SAL_CALL addFilePickerListener(const css::uno::Reference< css::ui::dialogs::XFilePickerListener > &xListener) override
virtual sal_Bool SAL_CALL supportsService(const OUString &sServiceName) override
virtual void SAL_CALL setDisplayDirectory(const OUString &aDirectory) override
virtual void SAL_CALL appendFilterGroup(const OUString &sGroupTitle, const css::uno::Sequence< css::beans::StringPair > &aFilters) override
virtual OUString SAL_CALL getImplementationName() override
virtual sal_Bool SAL_CALL supportsService(const OUString &sServiceName) override
virtual std::shared_ptr< SvtFileDialog_Base > implCreateDialog(weld::Window *pParent) override
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE
std::shared_ptr< SvtFileDialog_Base > m_xDlg
OUString m_aDisplayDirectory
implements the XControlAccess, XControlInformation and XFilePickerControlAccess for the file picker
void setValue(sal_Int16 nId, sal_Int16 nCtrlAction, const css::uno::Any &rValue)
void enableControl(sal_Int16 nId, bool bEnable)
css::uno::Any getValue(sal_Int16 nId, sal_Int16 nCtrlAction) const
void setLabel(sal_Int16 nId, const OUString &rValue)
OUString getLabel(sal_Int16 nId) const
static bool runAsync(const std::shared_ptr< DialogController > &rController, const std::function< void(sal_Int32)> &)
Sequence< FilterName > aSubFilters
#define FILE_SELECTION_CHANGED
#define CTRL_STATE_CHANGED
#define DIALOG_SIZE_CHANGED
#define DIRECTORY_CHANGED
Sequence< PropertyValue > aArguments
#define SAL_WARN(area, stream)
css::uno::Sequence< DstElementType > containerToSequence(const SrcType &i_Container)
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
IMPLEMENT_FORWARD_XTYPEPROVIDER2(ChildWindowPane, ChildWindowPaneInterfaceBase, Pane)
IMPLEMENT_FORWARD_XINTERFACE2(ChildWindowPane, ChildWindowPaneInterfaceBase, Pane)
IMPLEMENT_GET_IMPLEMENTATION_ID(DrawController)
ElementEntry_Impl(sal_Int16 nId)
void setAction(sal_Int16 nAction)
sal_Int16 m_nControlAction
void setLabel(const OUString &rVal)
void setEnabled(bool bEnabled)
void setValue(const Any &rVal)
#define IMPLEMENT_FORWARD_XINTERFACE3(classname, refcountbase, baseclass2, baseclass3)