summaryrefslogtreecommitdiffstats
path: root/vcl/unx/kde4/KDE4FilePicker.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/unx/kde4/KDE4FilePicker.cxx')
-rw-r--r--vcl/unx/kde4/KDE4FilePicker.cxx823
1 files changed, 0 insertions, 823 deletions
diff --git a/vcl/unx/kde4/KDE4FilePicker.cxx b/vcl/unx/kde4/KDE4FilePicker.cxx
deleted file mode 100644
index 5454344b949d..000000000000
--- a/vcl/unx/kde4/KDE4FilePicker.cxx
+++ /dev/null
@@ -1,823 +0,0 @@
-/* -*- 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 .
- */
-
-#include "KDE4FilePicker.hxx"
-
-#include <com/sun/star/lang/DisposedException.hpp>
-#include <com/sun/star/lang/IllegalArgumentException.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <cppuhelper/interfacecontainer.h>
-#include <cppuhelper/supportsservice.hxx>
-#include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
-#include <com/sun/star/ui/dialogs/CommonFilePickerElementIds.hpp>
-#include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp>
-#include <com/sun/star/ui/dialogs/ControlActions.hpp>
-#include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
-
-#include <fpicker/strings.hrc>
-#include <vcl/svapp.hxx>
-#include <vcl/sysdata.hxx>
-#include <vcl/syswin.hxx>
-
-#include <osl/file.h>
-#include <sal/log.hxx>
-
-#include "FPServiceInfo.hxx"
-#include "VCLKDEApplication.hxx"
-
-#include <kfiledialog.h>
-#include <kwindowsystem.h>
-#include <kapplication.h>
-#include <kfilefiltercombo.h>
-#include <kfilewidget.h>
-#include <kdiroperator.h>
-#include <kservicetypetrader.h>
-#include <kmessagebox.h>
-
-#include <QtGui/QClipboard>
-#include <QtGui/QWidget>
-#include <QtGui/QCheckBox>
-#include <QtGui/QGridLayout>
-
-#undef Region
-
-#include <unx/geninst.h>
-
-#include <strings.hrc>
-
-// The dialog should check whether LO also supports the protocol
-// provided by KIO, and KFileWidget::dirOperator() is only 4.3+ .
-// Moreover it's only in this somewhat internal KFileWidget class,
-// which may not necessarily be what KFileDialog::fileWidget() returns,
-// but that's hopefully not a problem in practice.
-#if KDE_VERSION_MAJOR == 4 && KDE_VERSION_MINOR >= 2
-#define ALLOW_REMOTE_URLS 1
-#else
-#define ALLOW_REMOTE_URLS 0
-#endif
-
-// helper functions
-
-#include <QtCore/QDebug>
-
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::ui::dialogs;
-using namespace ::com::sun::star::ui::dialogs::TemplateDescription;
-using namespace ::com::sun::star::ui::dialogs::ExtendedFilePickerElementIds;
-using namespace ::com::sun::star::ui::dialogs::CommonFilePickerElementIds;
-using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::uno;
-
-namespace
-{
- uno::Sequence<OUString> FilePicker_getSupportedServiceNames()
- {
- uno::Sequence<OUString> aRet(3);
- aRet[0] = "com.sun.star.ui.dialogs.FilePicker";
- aRet[1] = "com.sun.star.ui.dialogs.SystemFilePicker";
- aRet[2] = "com.sun.star.ui.dialogs.KDE4FilePicker";
- return aRet;
- }
-}
-
-static OUString toOUString(const QString& s)
-{
- // QString stores UTF16, just like OUString
- return OUString(reinterpret_cast<const sal_Unicode*>(s.data()), s.length());
-}
-
-static QString toQString(const OUString& s)
-{
- return QString::fromUtf16(
- reinterpret_cast<ushort const *>(s.getStr()), s.getLength());
-}
-
-// KDE4FilePicker
-
-KDE4FilePicker::KDE4FilePicker( const uno::Reference<uno::XComponentContext>& )
- : KDE4FilePicker_Base(_helperMutex)
- , allowRemoteUrls( false )
-{
- _extraControls = new QWidget();
- _layout = new QGridLayout(_extraControls);
-
- _dialog = new KFileDialog(KUrl("~"), QString(""), nullptr, _extraControls);
-#if ALLOW_REMOTE_URLS
- if( KFileWidget* fileWidget = dynamic_cast< KFileWidget* >( _dialog->fileWidget()))
- {
- allowRemoteUrls = true;
- // Use finishedLoading signal rather than e.g. urlEntered, because if there's a problem
- // such as the URL being mistyped, there's no way to prevent two message boxes about it,
- // one from us and one from KDE code.
- connect( fileWidget->dirOperator(), SIGNAL( finishedLoading()), SLOT( checkProtocol()));
- }
-#endif
-
- setMultiSelectionMode( false );
-
- // XExecutableDialog functions
- connect( this, SIGNAL( setTitleSignal( const OUString & ) ),
- this, SLOT( setTitleSlot( const OUString & ) ), Qt::BlockingQueuedConnection );
- connect( this, SIGNAL( executeSignal() ),
- this, SLOT( executeSlot() ), Qt::BlockingQueuedConnection );
-
- // XFilePicker functions
- connect( this, SIGNAL( setMultiSelectionModeSignal( bool ) ),
- this, SLOT( setMultiSelectionModeSlot( bool ) ), Qt::BlockingQueuedConnection );
- connect( this, SIGNAL( setDefaultNameSignal( const OUString & ) ),
- this, SLOT( setDefaultNameSlot( const OUString & ) ), Qt::BlockingQueuedConnection );
- connect( this, SIGNAL( setDisplayDirectorySignal( const OUString & ) ),
- this, SLOT( setDisplayDirectorySlot( const OUString & ) ), Qt::BlockingQueuedConnection );
- connect( this, SIGNAL( getDisplayDirectorySignal() ),
- this, SLOT( getDisplayDirectorySlot() ), Qt::BlockingQueuedConnection );
- connect( this, SIGNAL( getFilesSignal() ),
- this, SLOT( getFilesSlot() ), Qt::BlockingQueuedConnection );
-
- // XFilterManager functions
- connect( this, SIGNAL( appendFilterSignal( const OUString &, const OUString & ) ),
- this, SLOT( appendFilterSlot( const OUString &, const OUString & ) ), Qt::BlockingQueuedConnection );
- connect( this, SIGNAL( setCurrentFilterSignal( const OUString & ) ),
- this, SLOT( setCurrentFilterSlot( const OUString & ) ), Qt::BlockingQueuedConnection );
- connect( this, SIGNAL( getCurrentFilterSignal() ),
- this, SLOT( getCurrentFilterSlot() ), Qt::BlockingQueuedConnection );
-
- // XFilterGroupManager functions
- connect( this, SIGNAL( appendFilterGroupSignal( const OUString &, const css::uno::Sequence< css::beans::StringPair > & ) ),
- this, SLOT( appendFilterGroupSlot( const OUString &, const css::uno::Sequence< css::beans::StringPair > & ) ), Qt::BlockingQueuedConnection );
-
- // XFilePickerControlAccess functions
- connect( this, SIGNAL( setValueSignal( sal_Int16, sal_Int16, const css::uno::Any & ) ),
- this, SLOT( setValueSlot( sal_Int16, sal_Int16, const css::uno::Any & ) ), Qt::BlockingQueuedConnection );
- connect( this, SIGNAL( getValueSignal( sal_Int16, sal_Int16 ) ),
- this, SLOT( getValueSlot( sal_Int16, sal_Int16 ) ), Qt::BlockingQueuedConnection );
- connect( this, SIGNAL( enableControlSignal( sal_Int16, bool ) ),
- this, SLOT( enableControlSlot( sal_Int16, bool ) ), Qt::BlockingQueuedConnection );
- connect( this, SIGNAL( setLabelSignal( sal_Int16, const OUString & ) ),
- this, SLOT( setLabelSlot( sal_Int16, const OUString & ) ), Qt::BlockingQueuedConnection );
- connect( this, SIGNAL( getLabelSignal( sal_Int16 ) ),
- this, SLOT( getLabelSlot( sal_Int16 ) ), Qt::BlockingQueuedConnection );
-
- // XFilePicker2 functions
- connect( this, SIGNAL( getSelectedFilesSignal() ),
- this, SLOT( getSelectedFilesSlot() ), Qt::BlockingQueuedConnection );
-
- // XInitialization
- connect( this, SIGNAL( initializeSignal( const css::uno::Sequence< css::uno::Any > & ) ),
- this, SLOT( initializeSlot( const css::uno::Sequence< css::uno::Any > & ) ), Qt::BlockingQueuedConnection );
-
- // Destructor proxy
- connect( this, SIGNAL( cleanupProxySignal() ), this, SLOT( cleanupProxy() ), Qt::BlockingQueuedConnection );
-
- connect( this, SIGNAL( checkProtocolSignal() ), this, SLOT( checkProtocol() ), Qt::BlockingQueuedConnection );
-
- // XFilePickerListener notifications
- connect( _dialog, SIGNAL( filterChanged(const QString&) ), this, SLOT( filterChanged(const QString&) ));
- connect( _dialog, SIGNAL( selectionChanged() ), this, SLOT( selectionChanged() ));
-}
-
-KDE4FilePicker::~KDE4FilePicker()
-{
- cleanupProxy();
-}
-
-void KDE4FilePicker::cleanupProxy()
-{
- if( qApp->thread() != QThread::currentThread() ) {
- SolarMutexReleaser aReleaser;
- return Q_EMIT cleanupProxySignal();
- }
- delete _dialog;
-}
-
-void SAL_CALL KDE4FilePicker::addFilePickerListener( const uno::Reference<XFilePickerListener>& xListener )
-{
- SolarMutexGuard aGuard;
- m_xListener = xListener;
-}
-
-void SAL_CALL KDE4FilePicker::removeFilePickerListener( const uno::Reference<XFilePickerListener>& )
-{
- SolarMutexGuard aGuard;
- m_xListener.clear();
-}
-
-void SAL_CALL KDE4FilePicker::setTitle( const OUString &title )
-{
- if( qApp->thread() != QThread::currentThread() ) {
- SolarMutexReleaser aReleaser;
- return Q_EMIT setTitleSignal( title );
- }
-
- _dialog->setCaption(toQString(title));
-}
-
-sal_Int16 SAL_CALL KDE4FilePicker::execute()
-{
- if( qApp->thread() != QThread::currentThread() ) {
- SolarMutexReleaser aReleaser;
- return Q_EMIT executeSignal();
- }
-
- //get the window id of the main OO window to set it for the dialog as a parent
- vcl::Window *pParentWin = Application::GetDefDialogParent();
- if ( pParentWin )
- {
- const SystemEnvData* pSysData = pParentWin->GetSystemData();
- if ( pSysData )
- {
- KWindowSystem::setMainWindow( _dialog, pSysData->aWindow); // unx only
- }
- }
-
- _dialog->clearFilter();
- _dialog->setFilter(_filter);
-
- if(!_currentFilter.isNull())
- _dialog->filterWidget()->setCurrentItem(_currentFilter);
-
- _dialog->filterWidget()->setEditable(false);
-
- VCLKDEApplication::preDialogSetup();
- //block and wait for user input
- int result = _dialog->exec();
- VCLKDEApplication::postDialogCleanup();
- if( result == KFileDialog::Accepted )
- return ExecutableDialogResults::OK;
-
- return ExecutableDialogResults::CANCEL;
-}
-
-void SAL_CALL KDE4FilePicker::setMultiSelectionMode( sal_Bool multiSelect )
-{
- if( qApp->thread() != QThread::currentThread() ) {
- SolarMutexReleaser aReleaser;
- return Q_EMIT setMultiSelectionModeSignal( multiSelect );
- }
-
- if( allowRemoteUrls )
- {
- if (multiSelect)
- _dialog->setMode(KFile::Files);
- else
- _dialog->setMode(KFile::File);
- }
- else
- {
- if (multiSelect)
- _dialog->setMode(KFile::Files | KFile::LocalOnly);
- else
- _dialog->setMode(KFile::File | KFile::LocalOnly);
- }
-}
-
-void SAL_CALL KDE4FilePicker::setDefaultName( const OUString &name )
-{
- if( qApp->thread() != QThread::currentThread() ) {
- SolarMutexReleaser aReleaser;
- return Q_EMIT setDefaultNameSignal( name );
- }
-
- const QString url = toQString(name);
- _dialog->setSelection(url);
-}
-
-void SAL_CALL KDE4FilePicker::setDisplayDirectory( const OUString &dir )
-{
- if( qApp->thread() != QThread::currentThread() ) {
- SolarMutexReleaser aReleaser;
- return Q_EMIT setDisplayDirectorySignal( dir );
- }
-
- const QString url = toQString(dir);
- _dialog->setUrl(KUrl(url));
-}
-
-OUString SAL_CALL KDE4FilePicker::getDisplayDirectory()
-{
- if( qApp->thread() != QThread::currentThread() ) {
- SolarMutexReleaser aReleaser;
- return Q_EMIT getDisplayDirectorySignal();
- }
-
- QString dir = _dialog->baseUrl().url();
- return toOUString(dir);
-}
-
-uno::Sequence< OUString > SAL_CALL KDE4FilePicker::getFiles()
-{
- if( qApp->thread() != QThread::currentThread() ) {
- SolarMutexReleaser aReleaser;
- return Q_EMIT getFilesSignal();
- }
- uno::Sequence< OUString > seq = getSelectedFiles();
- if (seq.getLength() > 1)
- seq.realloc(1);
- return seq;
-}
-
-uno::Sequence< OUString > SAL_CALL KDE4FilePicker::getSelectedFiles()
-{
- if( qApp->thread() != QThread::currentThread() ) {
- SolarMutexReleaser aReleaser;
- return Q_EMIT getSelectedFilesSignal();
- }
- KUrl::List urls = _dialog->selectedUrls();
- uno::Sequence< OUString > seq( urls.size());
- int i = 0;
- foreach( const KUrl& url, urls )
- seq[ i++ ]= toOUString( url.url());
- return seq;
-}
-
-void SAL_CALL KDE4FilePicker::appendFilter( const OUString &title, const OUString &filter )
-{
- if( qApp->thread() != QThread::currentThread() ) {
- SolarMutexReleaser aReleaser;
- return Q_EMIT appendFilterSignal( title, filter );
- }
-
- QString t = toQString(title);
- QString f = toQString(filter);
-
- if (!_filter.isNull())
- _filter.append("\n");
-
- // '/' need to be escaped else they are assumed to be mime types by kfiledialog
- //see the docs
- t.replace("/", "\\/");
-
- // openoffice gives us filters separated by ';' qt dialogs just want space separated
- f.replace(";", " ");
-
- // make sure "*.*" is not used as "all files"
- f.replace("*.*", "*");
-
- _filter.append(QString("%1|%2").arg(f).arg(t));
-}
-
-void SAL_CALL KDE4FilePicker::setCurrentFilter( const OUString &title )
-{
- if( qApp->thread() != QThread::currentThread() ) {
- SolarMutexReleaser aReleaser;
- return Q_EMIT setCurrentFilterSignal( title );
- }
-
- _currentFilter = toQString(title);
-}
-
-OUString SAL_CALL KDE4FilePicker::getCurrentFilter()
-{
- if( qApp->thread() != QThread::currentThread() ) {
- SolarMutexReleaser aReleaser;
- return Q_EMIT getCurrentFilterSignal();
- }
-
- // _dialog->currentFilter() wouldn't quite work, because it returns only e.g. "*.doc",
- // without the description, and there may be several filters with the same pattern
- QString filter = _dialog->filterWidget()->currentText();
- filter = filter.mid( filter.indexOf( '|' ) + 1 ); // convert from the pattern|description format if needed
- filter.replace( "\\/", "/" );
-
- //default if not found
- if (filter.isNull())
- filter = "ODF Text Document (.odt)";
-
- return toOUString(filter);
-}
-
-void SAL_CALL KDE4FilePicker::appendFilterGroup( const OUString& rGroupTitle, const uno::Sequence<beans::StringPair>& filters)
-{
- if( qApp->thread() != QThread::currentThread() ) {
- SolarMutexReleaser aReleaser;
- return Q_EMIT appendFilterGroupSignal( rGroupTitle, filters );
- }
-
- const sal_uInt16 length = filters.getLength();
- for (sal_uInt16 i = 0; i < length; ++i)
- {
- beans::StringPair aPair = filters[i];
- appendFilter( aPair.First, aPair.Second );
- }
-}
-
-void SAL_CALL KDE4FilePicker::setValue( sal_Int16 controlId, sal_Int16 nControlAction, const uno::Any &value )
-{
- if( qApp->thread() != QThread::currentThread() ) {
- SolarMutexReleaser aReleaser;
- return Q_EMIT setValueSignal( controlId, nControlAction, value );
- }
-
- if (_customWidgets.contains( controlId )) {
- QCheckBox* cb = dynamic_cast<QCheckBox*>( _customWidgets.value( controlId ));
- if (cb)
- cb->setChecked(value.get<bool>());
- }
- else
- SAL_WARN( "vcl", "set label on unknown control " << controlId );
-}
-
-uno::Any SAL_CALL KDE4FilePicker::getValue( sal_Int16 controlId, sal_Int16 nControlAction )
-{
- if (CHECKBOX_AUTOEXTENSION == controlId)
- // We ignore this one and rely on KFileDialog to provide the function.
- // Always return false, to pretend we do not support this, otherwise
- // LO core would try to be smart and cut the extension in some places,
- // interfering with KFileDialog's handling of it. KFileDialog also
- // saves the value of the setting, so LO core is not needed for that either.
- return uno::Any( false );
-
- if( qApp->thread() != QThread::currentThread() ) {
- SolarMutexReleaser aReleaser;
- return Q_EMIT getValueSignal( controlId, nControlAction );
- }
-
- uno::Any res(false);
- if (_customWidgets.contains( controlId )) {
- QCheckBox* cb = dynamic_cast<QCheckBox*>( _customWidgets.value( controlId ));
- if (cb)
- res <<= cb->isChecked();
- }
- else
- SAL_WARN( "vcl", "get value on unknown control " << controlId );
-
- return res;
-}
-
-void SAL_CALL KDE4FilePicker::enableControl( sal_Int16 controlId, sal_Bool enable )
-{
- if( qApp->thread() != QThread::currentThread() ) {
- SolarMutexReleaser aReleaser;
- return Q_EMIT enableControlSignal( controlId, enable );
- }
-
- if (_customWidgets.contains( controlId ))
- _customWidgets.value( controlId )->setEnabled( enable );
- else
- SAL_WARN( "vcl", "enable unknown control " << controlId );
-}
-
-void SAL_CALL KDE4FilePicker::setLabel( sal_Int16 controlId, const OUString &label )
-{
- if( qApp->thread() != QThread::currentThread() ) {
- SolarMutexReleaser aReleaser;
- return Q_EMIT setLabelSignal( controlId, label );
- }
-
- if (_customWidgets.contains( controlId )) {
- QCheckBox* cb = dynamic_cast<QCheckBox*>( _customWidgets.value( controlId ));
- if (cb)
- cb->setText( toQString(label) );
- }
- else
- SAL_WARN( "vcl", "set label on unknown control " << controlId );
-}
-
-OUString SAL_CALL KDE4FilePicker::getLabel(sal_Int16 controlId)
-{
- if( qApp->thread() != QThread::currentThread() ) {
- SolarMutexReleaser aReleaser;
- return Q_EMIT getLabelSignal( controlId );
- }
-
- QString label;
- if (_customWidgets.contains( controlId )) {
- QCheckBox* cb = dynamic_cast<QCheckBox*>( _customWidgets.value( controlId ));
- if (cb)
- label = cb->text();
- }
- else
- SAL_WARN( "vcl", "get label on unknown control " << controlId );
-
- return toOUString(label);
-}
-
-QString KDE4FilePicker::getResString(const char *pResId)
-{
- QString aResString;
-
- if (pResId == nullptr)
- return aResString;
-
- aResString = toQString(VclResId(pResId));
-
- return aResString.replace('~', '&');
-}
-
-void KDE4FilePicker::addCustomControl(sal_Int16 controlId)
-{
- QWidget* widget = nullptr;
- const char* resId = nullptr;
-
- switch (controlId)
- {
- case CHECKBOX_AUTOEXTENSION:
- resId = STR_FPICKER_AUTO_EXTENSION;
- break;
- case CHECKBOX_PASSWORD:
- resId = STR_FPICKER_PASSWORD;
- break;
- case CHECKBOX_GPGENCRYPTION:
- resId = STR_FPICKER_GPGENCRYPT;
- break;
- case CHECKBOX_FILTEROPTIONS:
- resId = STR_FPICKER_FILTER_OPTIONS;
- break;
- case CHECKBOX_READONLY:
- resId = STR_FPICKER_READONLY;
- break;
- case CHECKBOX_LINK:
- resId = STR_FPICKER_INSERT_AS_LINK;
- break;
- case CHECKBOX_PREVIEW:
- resId = STR_FPICKER_SHOW_PREVIEW;
- break;
- case CHECKBOX_SELECTION:
- resId = STR_FPICKER_SELECTION;
- break;
- case PUSHBUTTON_PLAY:
- resId = STR_FPICKER_PLAY;
- break;
- case LISTBOX_VERSION:
- resId = STR_FPICKER_VERSION;
- break;
- case LISTBOX_TEMPLATE:
- resId = STR_FPICKER_TEMPLATES;
- break;
- case LISTBOX_IMAGE_TEMPLATE:
- resId = STR_FPICKER_IMAGE_TEMPLATE;
- break;
- case LISTBOX_IMAGE_ANCHOR:
- resId = STR_FPICKER_IMAGE_ANCHOR;
- break;
- case LISTBOX_VERSION_LABEL:
- case LISTBOX_TEMPLATE_LABEL:
- case LISTBOX_IMAGE_TEMPLATE_LABEL:
- case LISTBOX_IMAGE_ANCHOR_LABEL:
- case LISTBOX_FILTER_SELECTOR:
- break;
- }
-
- switch (controlId)
- {
- case CHECKBOX_AUTOEXTENSION:
- case CHECKBOX_PASSWORD:
- case CHECKBOX_GPGENCRYPTION:
- case CHECKBOX_FILTEROPTIONS:
- case CHECKBOX_READONLY:
- case CHECKBOX_LINK:
- case CHECKBOX_PREVIEW:
- case CHECKBOX_SELECTION:
- {
- widget = new QCheckBox(getResString(resId), _extraControls);
-
- // the checkbox is created even for CHECKBOX_AUTOEXTENSION to simplify
- // code, but the checkbox is hidden and ignored
- if( controlId == CHECKBOX_AUTOEXTENSION )
- widget->hide();
-
- break;
- }
- case PUSHBUTTON_PLAY:
- case LISTBOX_VERSION:
- case LISTBOX_TEMPLATE:
- case LISTBOX_IMAGE_TEMPLATE:
- case LISTBOX_IMAGE_ANCHOR:
- case LISTBOX_VERSION_LABEL:
- case LISTBOX_TEMPLATE_LABEL:
- case LISTBOX_IMAGE_TEMPLATE_LABEL:
- case LISTBOX_IMAGE_ANCHOR_LABEL:
- case LISTBOX_FILTER_SELECTOR:
- break;
- }
-
- if (widget)
- {
- _layout->addWidget(widget);
- _customWidgets.insert(controlId, widget);
- }
-}
-
-void SAL_CALL KDE4FilePicker::initialize( const uno::Sequence<uno::Any> &args )
-{
- if( qApp->thread() != QThread::currentThread() ) {
- SolarMutexReleaser aReleaser;
- return Q_EMIT initializeSignal( args );
- }
-
- _filter.clear();
- _currentFilter.clear();
-
- // parameter checking
- uno::Any arg;
- if (args.getLength() == 0)
- {
- throw lang::IllegalArgumentException(
- "no arguments",
- static_cast< XFilePicker2* >( this ), 1 );
- }
-
- arg = args[0];
-
- if (( arg.getValueType() != cppu::UnoType<sal_Int16>::get()) &&
- ( arg.getValueType() != cppu::UnoType<sal_Int8>::get()))
- {
- throw lang::IllegalArgumentException(
- "invalid argument type",
- static_cast< XFilePicker2* >( this ), 1 );
- }
-
- sal_Int16 templateId = -1;
- arg >>= templateId;
-
- //default is opening
- KFileDialog::OperationMode operationMode = KFileDialog::Opening;
-
- switch ( templateId )
- {
- case FILEOPEN_SIMPLE:
- break;
-
- case FILESAVE_SIMPLE:
- operationMode = KFileDialog::Saving;
- break;
-
- case FILESAVE_AUTOEXTENSION:
- operationMode = KFileDialog::Saving;
- addCustomControl( CHECKBOX_AUTOEXTENSION );
- break;
-
- case FILESAVE_AUTOEXTENSION_PASSWORD:
- {
- operationMode = KFileDialog::Saving;
- addCustomControl( CHECKBOX_PASSWORD );
- addCustomControl( CHECKBOX_GPGENCRYPTION );
- break;
- }
- case FILESAVE_AUTOEXTENSION_PASSWORD_FILTEROPTIONS:
- {
- operationMode = KFileDialog::Saving;
- addCustomControl( CHECKBOX_AUTOEXTENSION );
- addCustomControl( CHECKBOX_PASSWORD );
- addCustomControl( CHECKBOX_GPGENCRYPTION );
- addCustomControl( CHECKBOX_FILTEROPTIONS );
- break;
- }
- case FILESAVE_AUTOEXTENSION_SELECTION:
- operationMode = KFileDialog::Saving;
- addCustomControl( CHECKBOX_AUTOEXTENSION );
- addCustomControl( CHECKBOX_SELECTION );
- break;
-
- case FILESAVE_AUTOEXTENSION_TEMPLATE:
- operationMode = KFileDialog::Saving;
- addCustomControl( CHECKBOX_AUTOEXTENSION );
- addCustomControl( LISTBOX_TEMPLATE );
- break;
-
- case FILEOPEN_LINK_PREVIEW_IMAGE_TEMPLATE:
- addCustomControl( CHECKBOX_LINK );
- addCustomControl( CHECKBOX_PREVIEW );
- addCustomControl( LISTBOX_IMAGE_TEMPLATE );
- break;
-
- case FILEOPEN_LINK_PREVIEW_IMAGE_ANCHOR:
- addCustomControl( CHECKBOX_LINK );
- addCustomControl( CHECKBOX_PREVIEW );
- addCustomControl( LISTBOX_IMAGE_ANCHOR );
- break;
-
- case FILEOPEN_PLAY:
- addCustomControl( PUSHBUTTON_PLAY );
- break;
-
- case FILEOPEN_LINK_PLAY:
- addCustomControl( CHECKBOX_LINK );
- addCustomControl( PUSHBUTTON_PLAY );
- break;
-
- case FILEOPEN_READONLY_VERSION:
- addCustomControl( CHECKBOX_READONLY );
- addCustomControl( LISTBOX_VERSION );
- break;
-
- case FILEOPEN_LINK_PREVIEW:
- addCustomControl( CHECKBOX_LINK );
- addCustomControl( CHECKBOX_PREVIEW );
- break;
-
- case FILEOPEN_PREVIEW:
- addCustomControl( CHECKBOX_PREVIEW );
- break;
-
- default:
- throw lang::IllegalArgumentException(
- "Unknown template",
- static_cast< XFilePicker2* >( this ),
- 1 );
- }
-
- _dialog->setOperationMode( operationMode );
-
- const char *resId = nullptr;
- switch (_dialog->operationMode())
- {
- case KFileDialog::Opening:
- resId = STR_FPICKER_OPEN;
- break;
- case KFileDialog::Saving:
- resId = STR_FPICKER_SAVE;
- _dialog->setConfirmOverwrite( true );
- break;
- default:
- break;
- }
-
- _dialog->setCaption(getResString(resId));
-}
-
-void SAL_CALL KDE4FilePicker::cancel()
-{
-
-}
-
-void KDE4FilePicker::disposing( const lang::EventObject &rEvent )
-{
- uno::Reference<XFilePickerListener> xFilePickerListener( rEvent.Source, uno::UNO_QUERY );
-
- if ( xFilePickerListener.is() )
- {
- removeFilePickerListener( xFilePickerListener );
- }
-}
-
-OUString SAL_CALL KDE4FilePicker::getImplementationName()
-{
- return OUString( FILE_PICKER_IMPL_NAME );
-}
-
-sal_Bool SAL_CALL KDE4FilePicker::supportsService( const OUString& ServiceName )
-{
- return cppu::supportsService(this, ServiceName);
-}
-
-uno::Sequence< OUString > SAL_CALL KDE4FilePicker::getSupportedServiceNames()
-{
- return FilePicker_getSupportedServiceNames();
-}
-
-void KDE4FilePicker::checkProtocol()
-{
- if( qApp->thread() != QThread::currentThread() ) {
- SolarMutexReleaser aReleaser;
- return Q_EMIT checkProtocolSignal();
- }
-
- // There's no libreoffice.desktop :(, so find a matching one.
- KService::List services = KServiceTypeTrader::self()->query( "Application", "Exec =~ 'libreoffice %U'" );
- QStringList protocols;
- if( !services.isEmpty())
- protocols = services[ 0 ]->property( "X-KDE-Protocols" ).toStringList();
- if( protocols.isEmpty()) // incorrect (developer?) installation ?
- protocols << "file" << "http";
- if( !protocols.contains( _dialog->baseUrl().protocol()) && !protocols.contains( "KIO" ))
- KMessageBox::error( _dialog, KIO::buildErrorString( KIO::ERR_UNSUPPORTED_PROTOCOL, _dialog->baseUrl().protocol()));
-}
-
-void KDE4FilePicker::filterChanged(const QString &)
-{
- FilePickerEvent aEvent;
- aEvent.ElementId = LISTBOX_FILTER;
- SAL_INFO( "vcl", "filter changed" );
- if (m_xListener.is())
- m_xListener->controlStateChanged( aEvent );
-}
-
-void KDE4FilePicker::selectionChanged()
-{
- FilePickerEvent aEvent;
- SAL_INFO( "vcl", "file selection changed" );
- if (m_xListener.is())
- m_xListener->fileSelectionChanged( aEvent );
-}
-
-#include <KDE4FilePicker.moc>
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */