20#include <config_features.h>
22#include <com/sun/star/media/XPlayer.hpp>
23#include <com/sun/star/lang/IllegalArgumentException.hpp>
24#include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp>
25#include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
26#include <com/sun/star/ui/dialogs/XFilePicker3.hpp>
27#include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp>
28#include <com/sun/star/ui/dialogs/FilePickerEvent.hpp>
30#include <osl/diagnose.h>
45 css::uno::Reference< css::ui::dialogs::XFilePickerControlAccess >
mxControlAccess;
47 css::uno::Reference< css::media::XPlayer >
mxPlayer;
60 virtual void ControlStateChanged(
const css::ui::dialogs::FilePickerEvent& aEvent )
override;
69 case css::ui::dialogs::ExtendedFilePickerElementIds::PUSHBUTTON_PLAY:
84 mnPlaySoundEvent =
nullptr;
88 if (mxPlayer->isPlaying())
93#if HAVE_FEATURE_AVMEDIA
98 mxControlAccess->setLabel( css::ui::dialogs::ExtendedFilePickerElementIds::PUSHBUTTON_PLAY,
100 mbLabelPlaying =
false;
102 catch(
const css::lang::IllegalArgumentException&)
105 OSL_FAIL(
"Cannot access play button" );
112 if ( !aUrl.isEmpty() )
118 maUpdateIdle.Start();
120 catch (
const css::uno::Exception&)
129 mxControlAccess->setLabel( css::ui::dialogs::ExtendedFilePickerElementIds::PUSHBUTTON_PLAY,
131 mbLabelPlaying =
true;
133 catch (
const css::lang::IllegalArgumentException&)
136 OSL_FAIL(
"Cannot access play button" );
149 if (mxPlayer.is() && mxPlayer->isPlaying() &&
150 mxPlayer->getMediaTime() < mxPlayer->getDuration())
152 maUpdateIdle.Start();
156 if( !mxControlAccess.is() )
161 mxControlAccess->setLabel( css::ui::dialogs::ExtendedFilePickerElementIds::PUSHBUTTON_PLAY,
163 mbLabelPlaying =
false;
165 catch (
const css::lang::IllegalArgumentException&)
168 OSL_FAIL(
"Cannot access play button" );
174 : FileDialogHelper(css::ui::dialogs::TemplateDescription::FILEOPEN_LINK_PLAY,
FileDialogFlags::
NONE, pParent)
175 , mnPlaySoundEvent(nullptr)
176 , mbLabelPlaying(false)
177 , maUpdateIdle(
"SdFileDialog_Imp maUpdateIdle" )
181 css::uno::Reference < css::ui::dialogs::XFilePicker3 > xFileDlg =
GetFilePicker();
191 mxControlAccess->setLabel( css::ui::dialogs::ExtendedFilePickerElementIds::PUSHBUTTON_PLAY,
194 catch (
const css::lang::IllegalArgumentException&)
197 OSL_FAIL(
"Cannot set play button label" );
214 OUString aDescr =
SdResId(STR_ALL_FILES);
215 mpImpl->AddFilter( aDescr,
"*.*");
221 mpImpl->AddFilter( aDescr,
"*.au;*.snd");
222 aDescr =
SdResId(STR_VOC_FILE);
223 mpImpl->AddFilter( aDescr,
"*.voc");
224 aDescr =
SdResId(STR_WAV_FILE);
225 mpImpl->AddFilter( aDescr,
"*.wav");
226 aDescr =
SdResId(STR_AIFF_FILE);
227 mpImpl->AddFilter( aDescr,
"*.aiff");
228 aDescr =
SdResId(STR_SVX_FILE);
229 mpImpl->AddFilter( aDescr,
"*.svx");
231 aDescr =
SdResId(STR_WAV_FILE);
232 mpImpl->AddFilter( aDescr,
"*.wav;*.mp3;*.ogg" );
233 aDescr =
SdResId(STR_MIDI_FILE);
234 mpImpl->AddFilter( aDescr,
"*.mid" );
254 mpImpl->SetDisplayDirectory( rPath );
260 bool bInsertAsLinkSelected =
false;
261 css::uno::Reference<css::ui::dialogs::XFilePicker3>
const xFilePicker(
mpImpl->GetFilePicker());
262 css::uno::Reference<css::ui::dialogs::XFilePickerControlAccess>
const xControlAccess(xFilePicker, css::uno::UNO_QUERY_THROW);
263 xControlAccess->getValue(css::ui::dialogs::ExtendedFilePickerElementIds::CHECKBOX_LINK, 0) >>= bInsertAsLinkSelected;
264 return bInsertAsLinkSelected;
static ImplSVEvent * PostUserEvent(const Link< void *, void > &rLink, void *pCaller=nullptr, bool bReferenceLink=false)
static void RemoveUserEvent(ImplSVEvent *nUserEvent)
ImplSVEvent * mnPlaySoundEvent
DECL_LINK(PlayMusicHdl, void *, void)
css::uno::Reference< css::ui::dialogs::XFilePickerControlAccess > mxControlAccess
css::uno::Reference< css::media::XPlayer > mxPlayer
DECL_LINK(IsMusicStoppedHdl, Timer *, void)
virtual void ControlStateChanged(const css::ui::dialogs::FilePickerEvent &aEvent) override
SdFileDialog_Imp(weld::Window *pParent)
virtual ~SdFileDialog_Imp() override
The class SdOpenSoundFileDialog wraps the FileDialogHelper, displaying the FILEOPEN_PLAY dialog templ...
const std::unique_ptr< SdFileDialog_Imp > mpImpl
void SetPath(const OUString &rPath)
bool IsInsertAsLinkSelected() const
SdOpenSoundFileDialog(const SdOpenSoundFileDialog &)=delete
void SetInvokeHandler(const Link< Timer *, void > &rLink)
const css::uno::Reference< css::ui::dialogs::XFilePicker3 > & GetFilePicker() const
IMPL_LINK_NOARG(SdFileDialog_Imp, PlayMusicHdl, void *, void)
#define LINK(Instance, Class, Member)
OUString SdResId(TranslateId aId)