summaryrefslogtreecommitdiff
path: root/svtools
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2019-10-04 13:23:55 +0100
committerCaolán McNamara <caolanm@redhat.com>2019-10-05 16:06:59 +0200
commit76c5f33e65e9a36c94c46f1ed0b6d33721d21cfb (patch)
tree35efc002c6f8e300b6fb7b408f5727cf999361a8 /svtools
parent108d1b7c62bba7220f0e61bba8bb04ccc545bc63 (diff)
move file picker only code to fpicker
Change-Id: I47cc2cb7db396a06a2abeffe4a5d40a039f21c58 Reviewed-on: https://gerrit.libreoffice.org/80222 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'svtools')
-rw-r--r--svtools/Library_svt.mk6
-rw-r--r--svtools/inc/bitmaps.hlst1
-rw-r--r--svtools/source/contnr/contentenumeration.cxx330
-rw-r--r--svtools/source/contnr/contentenumeration.hxx240
-rw-r--r--svtools/source/contnr/fileview.cxx1962
-rw-r--r--svtools/source/contnr/foldertree.cxx170
-rw-r--r--svtools/source/contnr/iconview.cxx233
-rw-r--r--svtools/source/contnr/iconviewimpl.cxx662
-rw-r--r--svtools/source/contnr/querydelete.cxx35
-rw-r--r--svtools/source/control/inettbc.cxx26
-rw-r--r--svtools/source/inc/iconviewimpl.hxx68
11 files changed, 61 insertions, 3672 deletions
diff --git a/svtools/Library_svt.mk b/svtools/Library_svt.mk
index 9bc158bed49a..5eefaf54d144 100644
--- a/svtools/Library_svt.mk
+++ b/svtools/Library_svt.mk
@@ -88,11 +88,7 @@ $(eval $(call gb_Library_add_exception_objects,svt,\
svtools/source/config/optionsdrawinglayer \
svtools/source/config/printoptions \
svtools/source/contnr/DocumentInfoPreview \
- svtools/source/contnr/contentenumeration \
- svtools/source/contnr/fileview \
- svtools/source/contnr/foldertree \
- svtools/source/contnr/iconview \
- svtools/source/contnr/iconviewimpl \
+ svtools/source/contnr/querydelete \
svtools/source/contnr/simptabl \
svtools/source/contnr/templwin \
svtools/source/control/accessibleruler \
diff --git a/svtools/inc/bitmaps.hlst b/svtools/inc/bitmaps.hlst
index c991817439e1..9d2e9feb4afb 100644
--- a/svtools/inc/bitmaps.hlst
+++ b/svtools/inc/bitmaps.hlst
@@ -103,7 +103,6 @@
#define BMP_EXTENSION_LC "res/lx03256.png"
#define BMP_PLUGIN "res/plugin.png"
#define RID_BMP_FOLDER "svtools/res/folder.png"
-#define RID_BMP_FOLDER_OPEN "res/folderop.png"
#define BMP_CURRENT "svtools/res/ed01.png"
#define BMP_MODIFIED "svtools/res/ed02.png"
#define BMP_NEW "svtools/res/ed03.png"
diff --git a/svtools/source/contnr/contentenumeration.cxx b/svtools/source/contnr/contentenumeration.cxx
deleted file mode 100644
index 2ca057036a64..000000000000
--- a/svtools/source/contnr/contentenumeration.cxx
+++ /dev/null
@@ -1,330 +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 "contentenumeration.hxx"
-#include <svtools/imagemgr.hxx>
-
-#include <com/sun/star/sdbc/XResultSet.hpp>
-#include <com/sun/star/sdbc/XRow.hpp>
-#include <com/sun/star/ucb/CommandAbortedException.hpp>
-#include <com/sun/star/ucb/XDynamicResultSet.hpp>
-#include <com/sun/star/ucb/XContentAccess.hpp>
-#include <com/sun/star/util/DateTime.hpp>
-#include <com/sun/star/document/DocumentProperties.hpp>
-#include <comphelper/processfactory.hxx>
-#include <comphelper/sequence.hxx>
-#include <vcl/svapp.hxx>
-#include <osl/mutex.hxx>
-#include <sal/log.hxx>
-#include <osl/diagnose.h>
-#include <tools/diagnose_ex.h>
-#include <tools/urlobj.hxx>
-
-namespace svt
-{
-
-
-#define ROW_TITLE 1
-#define ROW_SIZE 2
-#define ROW_DATE_MOD 3
-#define ROW_DATE_CREATE 4
-#define ROW_IS_FOLDER 5
-#define ROW_TARGET_URL 6
-#define ROW_IS_HIDDEN 7
-#define ROW_IS_VOLUME 8
-#define ROW_IS_REMOTE 9
-#define ROW_IS_REMOVABLE 10
-#define ROW_IS_FLOPPY 11
-#define ROW_IS_COMPACTDISC 12
-
- using ::com::sun::star::uno::Reference;
- using ::com::sun::star::uno::Sequence;
- using ::com::sun::star::uno::Exception;
- using ::com::sun::star::uno::UNO_QUERY;
- using ::com::sun::star::util::DateTime;
- using ::com::sun::star::sdbc::XResultSet;
- using ::com::sun::star::sdbc::XRow;
- using ::com::sun::star::ucb::XDynamicResultSet;
- using ::com::sun::star::ucb::CommandAbortedException;
- using ::com::sun::star::ucb::XContentAccess;
- using ::com::sun::star::ucb::XCommandEnvironment;
- using ::com::sun::star::beans::PropertyValue;
- using ::com::sun::star::document::DocumentProperties;
- using ::ucbhelper::ResultSetInclude;
- using ::ucbhelper::INCLUDE_FOLDERS_AND_DOCUMENTS;
-
-
- //= FileViewContentEnumerator
-
-
- FileViewContentEnumerator::FileViewContentEnumerator(
- const Reference< XCommandEnvironment >& _rxCommandEnv,
- ContentData& _rContentToFill, ::osl::Mutex& _rContentMutex )
- :Thread ( "FileViewContentEnumerator" )
- ,m_rContent ( _rContentToFill )
- ,m_rContentMutex ( _rContentMutex )
- ,m_xCommandEnv ( _rxCommandEnv )
- ,m_pResultHandler ( nullptr )
- ,m_bCancelled ( false )
- ,m_rBlackList ( css::uno::Sequence< OUString >() )
- {
- }
-
-
- FileViewContentEnumerator::~FileViewContentEnumerator()
- {
- }
-
-
- void FileViewContentEnumerator::cancel()
- {
- ::osl::MutexGuard aGuard( m_aMutex );
- m_bCancelled = true;
- m_pResultHandler = nullptr;
- m_aFolder.aContent = ::ucbhelper::Content();
- m_aFolder.sURL.clear();
- }
-
-
- EnumerationResult FileViewContentEnumerator::enumerateFolderContentSync(
- const FolderDescriptor& _rFolder,
- const css::uno::Sequence< OUString >& rBlackList )
- {
- {
- ::osl::MutexGuard aGuard( m_aMutex );
- m_aFolder = _rFolder;
- m_pResultHandler = nullptr;
- m_rBlackList = rBlackList;
- }
- return enumerateFolderContent();
- }
-
-
- void FileViewContentEnumerator::enumerateFolderContent(
- const FolderDescriptor& _rFolder, IEnumerationResultHandler* _pResultHandler )
- {
- ::osl::MutexGuard aGuard( m_aMutex );
- m_aFolder = _rFolder;
- m_pResultHandler = _pResultHandler;
-
- OSL_ENSURE( m_aFolder.aContent.get().is() || !m_aFolder.sURL.isEmpty(),
- "FileViewContentEnumerator::enumerateFolderContent: invalid folder descriptor!" );
-
- launch();
- //TODO: a protocol is missing how to join with the launched thread
- // before exit(3), to ensure the thread is no longer relying on any
- // infrastructure while that infrastructure is being shut down in
- // atexit handlers
- }
-
-
- EnumerationResult FileViewContentEnumerator::enumerateFolderContent()
- {
- EnumerationResult eResult = EnumerationResult::ERROR;
- try
- {
-
- Reference< XResultSet > xResultSet;
- Sequence< OUString > aProps(12);
-
- aProps[0] = "Title";
- aProps[1] = "Size";
- aProps[2] = "DateModified";
- aProps[3] = "DateCreated";
- aProps[4] = "IsFolder";
- aProps[5] = "TargetURL";
- aProps[6] = "IsHidden";
- aProps[7] = "IsVolume";
- aProps[8] = "IsRemote";
- aProps[9] = "IsRemoveable";
- aProps[10] = "IsFloppy";
- aProps[11] = "IsCompactDisc";
-
- Reference< XCommandEnvironment > xEnvironment;
- try
- {
- FolderDescriptor aFolder;
- {
- ::osl::MutexGuard aGuard( m_aMutex );
- aFolder = m_aFolder;
- xEnvironment = m_xCommandEnv;
- }
- if ( !aFolder.aContent.get().is() )
- {
- aFolder.aContent = ::ucbhelper::Content( aFolder.sURL, xEnvironment, comphelper::getProcessComponentContext() );
- {
- ::osl::MutexGuard aGuard( m_aMutex );
- m_aFolder.aContent = aFolder.aContent;
- }
- }
-
- Reference< XDynamicResultSet > xDynResultSet = aFolder.aContent.createDynamicCursor( aProps, INCLUDE_FOLDERS_AND_DOCUMENTS );
-
- if ( xDynResultSet.is() )
- xResultSet = xDynResultSet->getStaticResultSet();
- }
- catch( CommandAbortedException& )
- {
- SAL_WARN( "svtools.contnr", "createCursor: CommandAbortedException" );
- }
- catch( Exception& )
- {
- }
-
- if ( xResultSet.is() )
- {
- Reference< XRow > xRow( xResultSet, UNO_QUERY );
- Reference< XContentAccess > xContentAccess( xResultSet, UNO_QUERY );
-
- try
- {
- DateTime aDT;
-
- bool bCancelled = false;
- while ( !bCancelled && xResultSet->next() )
- {
- bool bIsHidden = xRow->getBoolean( ROW_IS_HIDDEN );
- // don't show hidden files
- if ( !bIsHidden || xRow->wasNull() )
- {
- aDT = xRow->getTimestamp( ROW_DATE_MOD );
- bool bContainsDate = !xRow->wasNull();
- if ( !bContainsDate )
- {
- aDT = xRow->getTimestamp( ROW_DATE_CREATE );
- bContainsDate = !xRow->wasNull();
- }
-
- OUString aContentURL = xContentAccess->queryContentIdentifierString();
- OUString aTargetURL = xRow->getString( ROW_TARGET_URL );
- bool bHasTargetURL = !xRow->wasNull() && !aTargetURL.isEmpty();
-
- OUString sRealURL = bHasTargetURL ? aTargetURL : aContentURL;
-
- // check for restrictions
- {
- ::osl::MutexGuard aGuard( m_aMutex );
- if ( /* m_rBlackList.hasElements() && */ URLOnBlackList ( sRealURL ) )
- continue;
- }
-
- std::unique_ptr<SortingData_Impl> pData(new SortingData_Impl);
- pData->maTargetURL = sRealURL;
-
- pData->mbIsFolder = xRow->getBoolean( ROW_IS_FOLDER ) && !xRow->wasNull();
- pData->mbIsVolume = xRow->getBoolean( ROW_IS_VOLUME ) && !xRow->wasNull();
- pData->mbIsRemote = xRow->getBoolean( ROW_IS_REMOTE ) && !xRow->wasNull();
- pData->mbIsRemoveable = xRow->getBoolean( ROW_IS_REMOVABLE ) && !xRow->wasNull();
- pData->mbIsFloppy = xRow->getBoolean( ROW_IS_FLOPPY ) && !xRow->wasNull();
- pData->mbIsCompactDisc = xRow->getBoolean( ROW_IS_COMPACTDISC ) && !xRow->wasNull();
- pData->SetNewTitle( xRow->getString( ROW_TITLE ) );
- pData->maSize = xRow->getLong( ROW_SIZE );
-
- if ( bHasTargetURL &&
- INetURLObject( aContentURL ).GetProtocol() == INetProtocol::VndSunStarHier )
- {
- ::ucbhelper::Content aCnt( aTargetURL, xEnvironment, comphelper::getProcessComponentContext() );
- try
- {
- aCnt.getPropertyValue("Size") >>= pData->maSize;
- aCnt.getPropertyValue("DateModified") >>= aDT;
- }
- catch (...) {}
- }
-
- if ( bContainsDate )
- {
- pData->maModDate = ::DateTime( aDT );
- }
-
- if ( pData->mbIsFolder )
- {
- SolarMutexGuard aGuard;
- ::svtools::VolumeInfo aVolInfo( pData->mbIsVolume, pData->mbIsRemote,
- pData->mbIsRemoveable, pData->mbIsFloppy,
- pData->mbIsCompactDisc );
- pData->maType = SvFileInformationManager::GetFolderDescription( aVolInfo );
- }
- else
- pData->maType = SvFileInformationManager::GetFileDescription(
- INetURLObject( pData->maTargetURL ) );
-
- {
- ::osl::MutexGuard aGuard( m_rContentMutex );
- m_rContent.push_back( std::move(pData) );
- }
- }
-
- {
- ::osl::MutexGuard aGuard( m_aMutex );
- bCancelled = m_bCancelled;
- }
- }
- eResult = EnumerationResult::SUCCESS;
- }
- catch( Exception const & )
- {
- TOOLS_WARN_EXCEPTION( "svtools.contnr", "FileViewContentEnumerator::enumerateFolderContent: caught an exception while enumerating");
- }
- }
- }
- catch( Exception const & )
- {
- TOOLS_WARN_EXCEPTION( "svtools.contnr", "FileViewContentEnumerator::enumerateFolderContent" );
- }
-
- IEnumerationResultHandler* pHandler = nullptr;
- {
- ::osl::MutexGuard aGuard( m_aMutex );
- pHandler = m_pResultHandler;
- if ( m_bCancelled )
- return EnumerationResult::ERROR;
- }
-
- {
- ::osl::MutexGuard aGuard( m_rContentMutex );
- if ( eResult != EnumerationResult::SUCCESS )
- // clear any "intermediate" and unfinished result
- m_rContent.clear();
- }
-
- if ( pHandler )
- pHandler->enumerationDone( eResult );
- return eResult;
- }
-
-
- bool FileViewContentEnumerator::URLOnBlackList ( const OUString& sRealURL )
- {
- OUString entryName = sRealURL.copy( sRealURL.lastIndexOf( '/' ) + 1 );
-
- return comphelper::findValue(m_rBlackList, entryName) != -1;
- }
-
-
- void FileViewContentEnumerator::execute()
- {
- enumerateFolderContent();
- }
-
-
-} // namespace svt
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/source/contnr/contentenumeration.hxx b/svtools/source/contnr/contentenumeration.hxx
deleted file mode 100644
index 0e6c529e65b3..000000000000
--- a/svtools/source/contnr/contentenumeration.hxx
+++ /dev/null
@@ -1,240 +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 .
- */
-
-#ifndef INCLUDED_SVTOOLS_SOURCE_CONTNR_CONTENTENUMERATION_HXX
-#define INCLUDED_SVTOOLS_SOURCE_CONTNR_CONTENTENUMERATION_HXX
-
-#include <com/sun/star/ucb/XCommandEnvironment.hpp>
-#include <salhelper/thread.hxx>
-#include <ucbhelper/content.hxx>
-#include <rtl/ustring.hxx>
-#include <tools/datetime.hxx>
-#include <vcl/image.hxx>
-
-
-namespace svt
-{
-
-
- //= SortingData_Impl
-
- struct SortingData_Impl
- {
- private:
- OUString maFilename; // only filename in upper case - for compare purposes
- OUString maTitle; // -> be careful when changing maTitle to update maFilename only when new
- OUString maLowerTitle;
-
-
- public:
- OUString maType;
- OUString maTargetURL;
- OUString maDisplayText;
- DateTime maModDate;
- Image maImage;
- sal_Int64 maSize;
- bool mbIsFolder;
- bool mbIsVolume;
- bool mbIsRemote;
- bool mbIsRemoveable;
- bool mbIsFloppy;
- bool mbIsCompactDisc;
-
- inline SortingData_Impl();
- inline const OUString& GetTitle() const;
- inline const OUString& GetLowerTitle() const;
- inline const OUString& GetFileName() const;
- inline void SetNewTitle( const OUString& rNewTitle ); // new maTitle is set -> maFilename is set to same!
-
- private:
- inline void SetTitles( const OUString& rNewTitle );
- };
-
- inline SortingData_Impl::SortingData_Impl() :
- maModDate ( DateTime::EMPTY ),
- maSize ( 0 ),
- mbIsFolder ( false ),
- mbIsVolume ( false ),
- mbIsRemote ( false ),
- mbIsRemoveable ( false ),
- mbIsFloppy ( false ),
- mbIsCompactDisc ( false )
- {
- }
-
- inline const OUString& SortingData_Impl::GetTitle() const
- {
- return maTitle;
- }
-
- inline const OUString& SortingData_Impl::GetLowerTitle() const
- {
- return maLowerTitle;
- }
-
- inline const OUString& SortingData_Impl::GetFileName() const
- {
- return maFilename;
- }
-
- inline void SortingData_Impl::SetNewTitle( const OUString& rNewTitle )
- {
- SetTitles( rNewTitle );
- maFilename = rNewTitle.toAsciiUpperCase();
- }
-
- inline void SortingData_Impl::SetTitles( const OUString& rNewTitle )
- {
- maTitle = rNewTitle;
- maLowerTitle = rNewTitle.toAsciiLowerCase();
- }
-
-
- //= EnumerationResult
-
- enum class EnumerationResult
- {
- SUCCESS, /// the enumeration was successful
- ERROR, /// the enumeration was unsuccessful
- };
-
-
- //= FolderDescriptor
-
- struct FolderDescriptor
- {
- /** a content object describing the folder. Can be <NULL/>, in this case <member>sURL</member>
- is relevant.
- */
- ::ucbhelper::Content aContent;
- /** the URL of a folder. Will be ignored if <member>aContent</member> is not <NULL/>.
- */
- OUString sURL;
-
- FolderDescriptor() { }
-
- explicit FolderDescriptor( const ::ucbhelper::Content& _rContent )
- :aContent( _rContent )
- {
- }
-
- explicit FolderDescriptor( const OUString& _rURL )
- :sURL( _rURL )
- {
- }
- };
-
-
- //= IEnumerationResultHandler
-
- class IEnumerationResultHandler
- {
- public:
- virtual void enumerationDone( EnumerationResult _eResult ) = 0;
-
- protected:
- ~IEnumerationResultHandler() {}
- };
-
-
- //= FileViewContentEnumerator
-
- class FileViewContentEnumerator: public salhelper::Thread
- {
- public:
- typedef ::std::vector< std::unique_ptr<SortingData_Impl> > ContentData;
-
- private:
- ContentData& m_rContent;
- ::osl::Mutex& m_rContentMutex;
-
- mutable ::osl::Mutex m_aMutex;
-
- FolderDescriptor m_aFolder;
- css::uno::Reference< css::ucb::XCommandEnvironment >
- m_xCommandEnv;
- IEnumerationResultHandler* m_pResultHandler;
- bool m_bCancelled;
-
- css::uno::Sequence< OUString > m_rBlackList;
-
- bool URLOnBlackList ( const OUString& sRealURL );
-
- public:
- /** constructs an enumerator instance
-
- @param _rContentToFill
- the structure which is to be filled with the found content
- @param _rContentMutex
- the mutex which protects the access to <arg>_rContentToFill</arg>
- @param _pTranslator
- an instance which should be used to translate content titles. May be <NULL/>
- */
- FileViewContentEnumerator(
- const css::uno::Reference< css::ucb::XCommandEnvironment >& _rxCommandEnv,
- ContentData& _rContentToFill,
- ::osl::Mutex& _rContentMutex
- );
-
- /** enumerates the content of a given folder
-
- @param _rFolder
- the folder whose content is to be enumerated
- @param _pFilter
- a filter to apply to the found contents
- @param _pResultHandler
- an instance which should handle the results of the enumeration
- */
- void enumerateFolderContent(
- const FolderDescriptor& _rFolder,
- IEnumerationResultHandler* _pResultHandler
- );
-
- /** enumerates the content of a given folder synchronously
- */
- EnumerationResult enumerateFolderContentSync(
- const FolderDescriptor& _rFolder,
- const css::uno::Sequence< OUString >& rBlackList
- );
-
- /** cancels the running operation.
-
- Note that "cancel" may mean that the operation is running, but its result
- is simply disregarded later on.
- */
- void cancel();
-
- protected:
- virtual ~FileViewContentEnumerator() override;
-
- private:
- EnumerationResult enumerateFolderContent();
-
- // Thread overridables
- virtual void execute() override;
-
- };
-
-
-} // namespace svt
-
-
-#endif // INCLUDED_SVTOOLS_SOURCE_CONTNR_CONTENTENUMERATION_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/source/contnr/fileview.cxx b/svtools/source/contnr/fileview.cxx
deleted file mode 100644
index 51b28daa7954..000000000000
--- a/svtools/source/contnr/fileview.cxx
+++ /dev/null
@@ -1,1962 +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 <vcl/treelistbox.hxx>
-#include <svtools/iconview.hxx>
-#include <sal/config.h>
-#include <sal/log.hxx>
-#include <osl/diagnose.h>
-#include <vcl/treelistentry.hxx>
-#include <svtools/fileview.hxx>
-#include <svtools/svtresid.hxx>
-#include <svtools/imagemgr.hxx>
-#include <vcl/event.hxx>
-#include <vcl/headbar.hxx>
-#include <vcl/svtabbx.hxx>
-#include <svtools/strings.hrc>
-#include <bitmaps.hlst>
-#include <toolkit/helper/vclunohelper.hxx>
-#include "contentenumeration.hxx"
-#include <vcl/AccessibleBrowseBoxObjType.hxx>
-#include <com/sun/star/task/InteractionHandler.hpp>
-#include <com/sun/star/ucb/XProgressHandler.hpp>
-#include <com/sun/star/ucb/XContent.hpp>
-#include <com/sun/star/container/XChild.hpp>
-#include <com/sun/star/ucb/CommandAbortedException.hpp>
-#include <vcl/waitobj.hxx>
-#include <vcl/settings.hxx>
-#include <com/sun/star/ucb/XCommandInfo.hpp>
-#include <com/sun/star/beans/XPropertySetInfo.hpp>
-#include <com/sun/star/beans/PropertyAttribute.hpp>
-
-#include <algorithm>
-#include <vector>
-#include <tools/urlobj.hxx>
-#include <comphelper/processfactory.hxx>
-#include <comphelper/string.hxx>
-#include <ucbhelper/content.hxx>
-#include <ucbhelper/commandenvironment.hxx>
-#include <rtl/math.hxx>
-#include <osl/mutex.hxx>
-#include <osl/conditn.hxx>
-#include <salhelper/timer.hxx>
-#include <vcl/svapp.hxx>
-#include <vcl/dialog.hxx>
-#include <unotools/collatorwrapper.hxx>
-#include <unotools/localedatawrapper.hxx>
-#include <unotools/intlwrapper.hxx>
-#include <unotools/syslocale.hxx>
-#include <svl/urlfilter.hxx>
-#include <o3tl/typed_flags_set.hxx>
-#include <memory>
-
-using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::task;
-using namespace ::com::sun::star::ucb;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::io;
-using namespace ::com::sun::star::beans;
-using namespace ::comphelper;
-using ::svt::SortingData_Impl;
-using ::svt::FolderDescriptor;
-
-#define ALL_FILES_FILTER "*.*"
-
-#define COLUMN_TITLE 1
-#define COLUMN_TYPE 2
-#define COLUMN_SIZE 3
-#define COLUMN_DATE 4
-
-#define ROW_HEIGHT 17 // the height of a row has to be a little higher than the bitmap
-#define QUICK_SEARCH_TIMEOUT 1500 // time in mSec before the quicksearch string will be reset
-
-enum class FileViewFlags
-{
- NONE = 0x00,
- ONLYFOLDER = 0x01,
- MULTISELECTION = 0x02,
- SHOW_TYPE = 0x04,
- SHOW_NONE = 0x20,
-};
-namespace o3tl
-{
- template<> struct typed_flags<FileViewFlags> : is_typed_flags<FileViewFlags, 0x27> {};
-}
-
-namespace
-{
-
- //= CallbackTimer
-
- class CallbackTimer : public ::salhelper::Timer
- {
- protected:
- SvtFileView_Impl* const m_pTimeoutHandler;
-
- public:
- explicit CallbackTimer( SvtFileView_Impl* _pHandler ) : m_pTimeoutHandler( _pHandler ) { }
-
- protected:
- virtual void SAL_CALL onShot() override;
- };
-
-
-}
-
-
-void FilterMatch::createWildCardFilterList(const OUString& _rFilterList,::std::vector< WildCard >& _rFilters)
-{
- if( _rFilterList.getLength() )
- {
- // filter is given
- sal_Int32 nIndex = 0;
- OUString sToken;
- do
- {
- sToken = _rFilterList.getToken( 0, ';', nIndex );
- if ( !sToken.isEmpty() )
- {
- _rFilters.emplace_back( sToken.toAsciiUpperCase() );
- }
- }
- while ( nIndex >= 0 );
- }
- else
- {
- // no filter is given -> match all
- _rFilters.emplace_back("*" );
- }
-}
-
-class ViewTabListBox_Impl : public SvHeaderTabListBox
-{
-private:
- Reference< XCommandEnvironment > mxCmdEnv;
- std::unique_ptr<VclBuilder> mxBuilder;
- VclPtr<PopupMenu> mxMenu;
-
- ::osl::Mutex maMutex;
- VclPtr<HeaderBar> mpHeaderBar;
- SvtFileView_Impl* mpParent;
- Timer maResetQuickSearch;
- OUString maQuickSearchText;
- OUString const msAccessibleDescText;
- OUString const msFolder;
- OUString const msFile;
- sal_uInt32 mnSearchIndex;
- bool mbResizeDisabled : 1;
- bool mbAutoResize : 1;
- bool mbEnableDelete : 1;
- bool const mbShowHeader;
-
- void DeleteEntries();
- void DoQuickSearch( sal_Unicode rChar );
- bool Kill( const OUString& rURL );
-
-protected:
- virtual bool DoubleClickHdl() override;
- virtual OUString GetAccessibleObjectDescription( ::vcl::AccessibleBrowseBoxObjType _eType, sal_Int32 _nPos = -1 ) const override;
-
-public:
- ViewTabListBox_Impl( vcl::Window* pParentWin, SvtFileView_Impl* pParent, FileViewFlags nFlags );
- virtual ~ViewTabListBox_Impl() override;
- virtual void dispose() override;
-
- virtual void Resize() override;
- virtual void KeyInput( const KeyEvent& rKEvt ) override;
- virtual bool EditedEntry( SvTreeListEntry* pEntry, const OUString& rNewText ) override;
-
- void ClearAll();
- HeaderBar* GetHeaderBar() const { return mpHeaderBar; }
-
- void EnableAutoResize() { mbAutoResize = true; }
- void EnableDelete( bool bEnable ) { mbEnableDelete = bEnable; }
-
- const Reference< XCommandEnvironment >& GetCommandEnvironment() const { return mxCmdEnv; }
-
- DECL_LINK(ResetQuickSearch_Impl, Timer *, void);
-
- virtual VclPtr<PopupMenu> CreateContextMenu() override;
- virtual void ExecuteContextMenuAction( sal_uInt16 nSelectedPopentry ) override;
-};
-
-
-//= SvtFileView_Impl
-
-
-class SvtFileView_Impl :public ::svt::IEnumerationResultHandler
-{
-protected:
- VclPtr<SvtFileView> mpAntiImpl;
- Link<SvTreeListBox*,void> m_aSelectHandler;
-
- ::rtl::Reference< ::svt::FileViewContentEnumerator >
- m_xContentEnumerator;
- Link<void*,void> m_aCurrentAsyncActionHandler;
- ::osl::Condition m_aAsyncActionFinished;
- ::rtl::Reference< ::salhelper::Timer > m_xCancelAsyncTimer;
- ::svt::EnumerationResult m_eAsyncActionResult;
- bool m_bRunningAsyncAction;
- bool m_bAsyncActionCancelled;
-
-public:
-
- ::std::vector< std::unique_ptr<SortingData_Impl> > maContent;
- ::osl::Mutex maMutex;
-
- VclPtr<SvTreeListBox> mpCurView;
- VclPtr<ViewTabListBox_Impl> mpView;
- VclPtr<IconView> mpIconView;
- sal_uInt16 mnSortColumn;
- bool mbAscending : 1;
- bool const mbOnlyFolder : 1;
- sal_Int16 mnSuspendSelectCallback : 1;
- bool mbIsFirstResort : 1;
-
- IntlWrapper const aIntlWrapper;
-
- OUString maViewURL;
- OUString maCurrentFilter;
- Image const maFolderImage;
- Link<SvtFileView*,void> maOpenDoneLink;
- Reference< XCommandEnvironment > mxCmdEnv;
-
- SvtFileView_Impl( SvtFileView* pAntiImpl, Reference < XCommandEnvironment > const & xEnv,
- FileViewFlags nFlags,
- bool bOnlyFolder );
- virtual ~SvtFileView_Impl();
-
- void Clear();
-
- FileViewResult GetFolderContent_Impl(
- const OUString& rFolder,
- const FileViewAsyncAction* pAsyncDescriptor,
- const css::uno::Sequence< OUString >& rBlackList );
-
- FileViewResult GetFolderContent_Impl(
- const FolderDescriptor& _rFolder,
- const FileViewAsyncAction* pAsyncDescriptor,
- const css::uno::Sequence< OUString >& rBlackList );
- void FilterFolderContent_Impl( const OUString &rFilter );
- void CancelRunningAsyncAction();
-
- void OpenFolder_Impl();
- static void ReplaceTabWithString( OUString& aValue );
- void CreateDisplayText_Impl();
- void SortFolderContent_Impl();
-
- void EntryRemoved( const OUString& rURL );
- void EntryRenamed( OUString& rURL,
- const OUString& rName );
- OUString FolderInserted( const OUString& rURL,
- const OUString& rTitle );
-
- sal_uLong GetEntryPos( const OUString& rURL );
-
- void SetViewMode( FileViewMode eMode );
-
- inline void EnableDelete( bool bEnable );
-
- void Resort_Impl( sal_Int16 nColumn, bool bAscending );
- bool SearchNextEntry( sal_uInt32 &nIndex,
- const OUString& rTitle,
- bool bWrapAround );
-
- void SetSelectHandler( const Link<SvTreeListBox*,void>& _rHdl );
-
- void InitSelection();
- void ResetCursor();
-
- inline void EndEditing();
-
- void onTimeout();
-
-protected:
- DECL_LINK( SelectionMultiplexer, SvTreeListBox*, void );
-
- // IEnumerationResultHandler overridables
- virtual void enumerationDone( ::svt::EnumerationResult eResult ) override;
- void implEnumerationSuccess();
-};
-
-inline void SvtFileView_Impl::EnableDelete( bool bEnable )
-{
- mpView->EnableDelete( bEnable );
-}
-
-inline void SvtFileView_Impl::EndEditing()
-{
- if ( mpCurView->IsEditingActive() )
- mpCurView->EndEditing();
-}
-
-namespace
-{
- // functions -------------------------------------------------------------
-
- OUString CreateExactSizeText( sal_Int64 nSize )
- {
- double fSize( static_cast<double>(nSize) );
- int nDec;
-
- long nMega = 1024 * 1024;
- long nGiga = nMega * 1024;
-
- OUString aUnitStr(' ');
-
- if ( nSize < 10000 )
- {
- aUnitStr += SvtResId(STR_SVT_BYTES );
- nDec = 0;
- }
- else if ( nSize < nMega )
- {
- fSize /= 1024;
- aUnitStr += SvtResId(STR_SVT_KB);
- nDec = 1;
- }
- else if ( nSize < nGiga )
- {
- fSize /= nMega;
- aUnitStr += SvtResId(STR_SVT_MB);
- nDec = 2;
- }
- else
- {
- fSize /= nGiga;
- aUnitStr += SvtResId(STR_SVT_GB);
- nDec = 3;
- }
-
- OUString aSizeStr( ::rtl::math::doubleToUString( fSize,
- rtl_math_StringFormat_F, nDec,
- SvtSysLocale().GetLocaleData().getNumDecimalSep()[0]) );
- aSizeStr += aUnitStr;
-
- return aSizeStr;
- }
-}
-
-ViewTabListBox_Impl::ViewTabListBox_Impl( vcl::Window* pParentWin,
- SvtFileView_Impl* pParent,
- FileViewFlags nFlags ) :
-
- SvHeaderTabListBox( pParentWin, WB_TABSTOP ),
-
- mpHeaderBar ( nullptr ),
- mpParent ( pParent ),
- msAccessibleDescText( SvtResId(STR_SVT_ACC_DESC_FILEVIEW) ),
- msFolder ( SvtResId(STR_SVT_ACC_DESC_FOLDER) ),
- msFile ( SvtResId(STR_SVT_ACC_DESC_FILE) ),
- mnSearchIndex ( 0 ),
- mbResizeDisabled ( false ),
- mbAutoResize ( false ),
- mbEnableDelete ( false ),
- mbShowHeader ( !(nFlags & FileViewFlags::SHOW_NONE) )
-{
- Size aBoxSize = pParentWin->GetSizePixel();
- mpHeaderBar = VclPtr<HeaderBar>::Create( pParentWin, WB_BUTTONSTYLE | WB_BOTTOMBORDER );
- mpHeaderBar->SetPosSizePixel( Point( 0, 0 ), mpHeaderBar->CalcWindowSizePixel() );
-
- HeaderBarItemBits nBits = HeaderBarItemBits::LEFT | HeaderBarItemBits::CLICKABLE;
-
- long aTabPositions[] = { 20, 180, 320, 400, 600 };
- SetTabs(SAL_N_ELEMENTS(aTabPositions), aTabPositions, MapUnit::MapPixel);
- SetTabJustify(2, SvTabJustify::AdjustRight); // column "Size"
-
- mpHeaderBar->InsertItem(COLUMN_TITLE, SvtResId(STR_SVT_FILEVIEW_COLUMN_TITLE), 180, nBits | HeaderBarItemBits::UPARROW);
- if (nFlags & FileViewFlags::SHOW_TYPE)
- {
- mpHeaderBar->InsertItem(COLUMN_TYPE, SvtResId(STR_SVT_FILEVIEW_COLUMN_TYPE), 140, nBits);
- }
- mpHeaderBar->InsertItem(COLUMN_SIZE, SvtResId(STR_SVT_FILEVIEW_COLUMN_SIZE), 80, nBits);
- mpHeaderBar->InsertItem(COLUMN_DATE, SvtResId(STR_SVT_FILEVIEW_COLUMN_DATE), 500, nBits);
-
- Size aHeadSize = mpHeaderBar->GetSizePixel();
- SetPosSizePixel( Point( 0, aHeadSize.Height() ),
- Size( aBoxSize.Width(), aBoxSize.Height() - aHeadSize.Height() ) );
- InitHeaderBar( mpHeaderBar );
- SetHighlightRange();
- SetEntryHeight( ROW_HEIGHT );
- if (nFlags & FileViewFlags::MULTISELECTION)
- SetSelectionMode( SelectionMode::Multiple );
-
- Show();
- if( mbShowHeader )
- mpHeaderBar->Show();
-
- maResetQuickSearch.SetTimeout( QUICK_SEARCH_TIMEOUT );
- maResetQuickSearch.SetInvokeHandler( LINK( this, ViewTabListBox_Impl, ResetQuickSearch_Impl ) );
-
- Reference< XComponentContext > xContext = ::comphelper::getProcessComponentContext();
- Reference< XInteractionHandler > xInteractionHandler(
- InteractionHandler::createWithParent(xContext, VCLUnoHelper::GetInterface(GetParentDialog())), UNO_QUERY_THROW );
-
- mxCmdEnv = new ::ucbhelper::CommandEnvironment( xInteractionHandler, Reference< XProgressHandler >() );
-
- EnableContextMenuHandling();
-}
-
-ViewTabListBox_Impl::~ViewTabListBox_Impl()
-{
- disposeOnce();
-}
-
-void ViewTabListBox_Impl::dispose()
-{
- maResetQuickSearch.Stop();
-
- mxMenu.disposeAndClear();
- mxBuilder.reset();
-
- mpHeaderBar.disposeAndClear();
- SvHeaderTabListBox::dispose();
-}
-
-IMPL_LINK_NOARG(ViewTabListBox_Impl, ResetQuickSearch_Impl, Timer *, void)
-{
- ::osl::MutexGuard aGuard( maMutex );
-
- maQuickSearchText.clear();
- mnSearchIndex = 0;
-}
-
-
-void ViewTabListBox_Impl::Resize()
-{
- SvTabListBox::Resize();
- Size aBoxSize = Control::GetParent()->GetOutputSizePixel();
-
- if ( mbResizeDisabled || !aBoxSize.Width() )
- return;
-
- Size aBarSize;
- if ( mbShowHeader )
- {
- aBarSize = mpHeaderBar->GetSizePixel();
- aBarSize.setWidth( mbAutoResize ? aBoxSize.Width() : GetSizePixel().Width() );
- mpHeaderBar->SetSizePixel( aBarSize );
- }
-
- if ( mbAutoResize )
- {
- mbResizeDisabled = true;
- SetPosSizePixel( Point( 0, aBarSize.Height() ),
- Size( aBoxSize.Width(), aBoxSize.Height() - aBarSize.Height() ) );
- mbResizeDisabled = false;
- }
-}
-
-
-void ViewTabListBox_Impl::KeyInput( const KeyEvent& rKEvt )
-{
- bool bHandled = false;
-
- const vcl::KeyCode& rKeyCode = rKEvt.GetKeyCode();
- if ( 0 == rKeyCode.GetModifier() )
- {
- if ( rKeyCode.GetCode() == KEY_RETURN )
- {
- ResetQuickSearch_Impl( nullptr );
- GetDoubleClickHdl().Call( this );
- bHandled = true;
- }
- else if ( ( rKeyCode.GetCode() == KEY_DELETE ) &&
- mbEnableDelete )
- {
- ResetQuickSearch_Impl( nullptr );
- DeleteEntries();
- bHandled = true;
- }
- else if ( ( rKEvt.GetKeyCode().GetGroup() == KEYGROUP_NUM ) ||
- ( rKEvt.GetKeyCode().GetGroup() == KEYGROUP_ALPHA ) )
- {
- DoQuickSearch( rKEvt.GetCharCode() );
- bHandled = true;
- }
- }
-
- if ( !bHandled )
- {
- ResetQuickSearch_Impl( nullptr );
- SvHeaderTabListBox::KeyInput( rKEvt );
- }
-}
-
-
-VclPtr<PopupMenu> ViewTabListBox_Impl::CreateContextMenu()
-{
- bool bEnableDelete = mbEnableDelete;
- bool bEnableRename = true;
-
- if ( bEnableDelete || bEnableRename )
- {
- sal_Int32 nSelectedEntries = GetSelectionCount();
- bEnableDelete &= nSelectedEntries > 0;
- bEnableRename &= nSelectedEntries == 1;
- }
-
- if ( bEnableDelete || bEnableRename )
- {
- SvTreeListEntry* pEntry = FirstSelected();
- while ( pEntry )
- {
- ::ucbhelper::Content aCnt;
- try
- {
- OUString aURL( static_cast< SvtContentEntry * >(
- pEntry->GetUserData() )->maURL );
- aCnt = ::ucbhelper::Content( aURL, mxCmdEnv, comphelper::getProcessComponentContext() );
- }
- catch( Exception const & )
- {
- bEnableDelete = bEnableRename = false;
- }
-
- if ( bEnableDelete )
- {
- try
- {
- Reference< XCommandInfo > aCommands = aCnt.getCommands();
- if ( aCommands.is() )
- bEnableDelete = aCommands->hasCommandByName( "delete" );
- else
- bEnableDelete = false;
- }
- catch( Exception const & )
- {
- bEnableDelete = false;
- }
- }
-
- if ( bEnableRename )
- {
- try
- {
- Reference< XPropertySetInfo > aProps = aCnt.getProperties();
- if ( aProps.is() )
- {
- Property aProp = aProps->getPropertyByName("Title");
- bEnableRename
- = !( aProp.Attributes & PropertyAttribute::READONLY );
- }
- else
- bEnableRename = false;
- }
- catch( Exception const & )
- {
- bEnableRename = false;
- }
- }
-
- pEntry = ( bEnableDelete || bEnableRename )
- ? NextSelected( pEntry )
- : nullptr;
- }
- }
-
- if ( bEnableDelete || bEnableRename )
- {
- mxMenu.disposeAndClear();
- mxBuilder.reset(new VclBuilder(nullptr, VclBuilderContainer::getUIRootDir(), "svt/ui/fileviewmenu.ui", ""));
- mxMenu.set(mxBuilder->get_menu("menu"));
- mxMenu->EnableItem(mxMenu->GetItemId("delete"), bEnableDelete);
- mxMenu->EnableItem(mxMenu->GetItemId("rename"), bEnableRename);
- mxMenu->RemoveDisabledEntries( true, true );
- return mxMenu;
- }
-
- return nullptr;
-}
-
-void ViewTabListBox_Impl::ExecuteContextMenuAction( sal_uInt16 nSelectedPopupEntry )
-{
- if (nSelectedPopupEntry == mxMenu->GetItemId("delete"))
- DeleteEntries();
- else if (nSelectedPopupEntry == mxMenu->GetItemId("rename"))
- EditEntry( FirstSelected() );
-}
-
-void ViewTabListBox_Impl::ClearAll()
-{
- for ( sal_uLong i = 0; i < GetEntryCount(); ++i )
- delete static_cast<SvtContentEntry*>(GetEntry(i)->GetUserData());
- Clear();
-}
-
-
-void ViewTabListBox_Impl::DeleteEntries()
-{
- short eResult = svtools::QUERYDELETE_YES;
- SvTreeListEntry* pEntry = FirstSelected();
- OUString aURL;
-
- while ( pEntry )
- {
- SvTreeListEntry *pCurEntry = pEntry;
- pEntry = NextSelected( pEntry );
-
- if ( pCurEntry->GetUserData() )
- aURL = static_cast<SvtContentEntry*>(pCurEntry->GetUserData())->maURL;
-
- if ( aURL.isEmpty() )
- continue;
-
- bool canDelete = true;
- try
- {
- ::ucbhelper::Content aCnt( aURL, mxCmdEnv, comphelper::getProcessComponentContext() );
- Reference< XCommandInfo > aCommands = aCnt.getCommands();
- if ( aCommands.is() )
- canDelete = aCommands->hasCommandByName( "delete" );
- else
- canDelete = false;
- }
- catch( Exception const & )
- {
- canDelete = false;
- }
-
- if (!canDelete)
- continue; // process next entry
-
- if ( eResult != svtools::QUERYDELETE_ALL )
- {
- INetURLObject aObj( aURL );
- svtools::QueryDeleteDlg_Impl aDlg(
- GetFrameWeld(), aObj.GetLastName(INetURLObject::DecodeMechanism::WithCharset));
-
- if ( GetSelectionCount() > 1 )
- aDlg.EnableAllButton();
-
- eResult = aDlg.run();
- }
-
- if ( ( eResult == svtools::QUERYDELETE_ALL ) ||
- ( eResult == svtools::QUERYDELETE_YES ) )
- {
- if ( Kill( aURL ) )
- {
- delete static_cast<SvtContentEntry*>(pCurEntry->GetUserData());
- GetModel()->Remove( pCurEntry );
- mpParent->EntryRemoved( aURL );
- }
- }
- }
-}
-
-
-bool ViewTabListBox_Impl::EditedEntry( SvTreeListEntry* pEntry,
- const OUString& rNewText )
-{
- bool bRet = false;
-
- OUString aURL;
- SvtContentEntry* pData = static_cast<SvtContentEntry*>(pEntry->GetUserData());
-
- if ( pData )
- aURL = pData->maURL;
-
- if ( aURL.isEmpty() )
- return bRet;
-
- try
- {
- OUString aPropName( "Title" );
- bool canRename = true;
- ::ucbhelper::Content aContent( aURL, mxCmdEnv, comphelper::getProcessComponentContext() );
-
- try
- {
- Reference< XPropertySetInfo > aProps = aContent.getProperties();
- if ( aProps.is() )
- {
- Property aProp = aProps->getPropertyByName( aPropName );
- canRename = !( aProp.Attributes & PropertyAttribute::READONLY );
- }
- else
- {
- canRename = false;
- }
- }
- catch ( Exception const & )
- {
- canRename = false;
- }
-
- if ( canRename )
- {
- Any aValue;
- aValue <<= rNewText;
- aContent.setPropertyValue( aPropName, aValue );
- mpParent->EntryRenamed( aURL, rNewText );
-
- if (pData)
- pData->maURL = aURL;
-
- pEntry->SetUserData( pData );
-
- bRet = true;
- }
- }
- catch( Exception const & )
- {
- }
-
- return bRet;
-}
-
-
-void ViewTabListBox_Impl::DoQuickSearch( sal_Unicode rChar )
-{
- ::osl::MutexGuard aGuard( maMutex );
-
- maResetQuickSearch.Stop();
-
- OUString aLastText = maQuickSearchText;
- sal_uInt32 aLastPos = mnSearchIndex;
-
- maQuickSearchText += OUString(rChar).toAsciiLowerCase();
-
- bool bFound = mpParent->SearchNextEntry( mnSearchIndex, maQuickSearchText, false );
-
- if ( !bFound && ( aLastText.getLength() == 1 ) &&
- ( aLastText == OUStringLiteral1(rChar) ) )
- {
- mnSearchIndex = aLastPos + 1;
- maQuickSearchText = aLastText;
- bFound = mpParent->SearchNextEntry( mnSearchIndex, maQuickSearchText, true );
- }
-
- if ( bFound )
- {
- SvTreeListEntry* pEntry = GetEntry( mnSearchIndex );
- if ( pEntry )
- {
- SelectAll( false );
- Select( pEntry );
- SetCurEntry( pEntry );
- MakeVisible( pEntry );
- }
- }
-
- maResetQuickSearch.Start();
-}
-
-
-bool ViewTabListBox_Impl::DoubleClickHdl()
-{
- SvHeaderTabListBox::DoubleClickHdl();
- return false;
- // this means "do no additional handling". Especially this means that the SvImpLBox does not
- // recognize that the entry at the double click position change after the handler call (which is
- // the case if in the handler, our content was replaced)
- // If it _would_ recognize this change, it would take this as a reason to select the entry, again
- // - which is not what in the case of content replace
- // (I really doubt that this behaviour of the SvImpLBox does make any sense at all, but
- // who knows ...)
-}
-
-OUString ViewTabListBox_Impl::GetAccessibleObjectDescription( ::vcl::AccessibleBrowseBoxObjType _eType, sal_Int32 _nPos ) const
-{
- OUString sRet = SvHeaderTabListBox::GetAccessibleObjectDescription( _eType, _nPos );
- if ( ::vcl::BBTYPE_TABLECELL == _eType )
- {
- sal_Int32 nRow = -1;
- const sal_uInt16 nColumnCount = GetColumnCount();
- if (nColumnCount > 0)
- nRow = _nPos / nColumnCount;
- SvTreeListEntry* pEntry = GetEntry( nRow );
- if ( pEntry )
- {
- SvtContentEntry* pData = static_cast<SvtContentEntry*>(pEntry->GetUserData());
- if ( pData )
- {
- const OUString sVar1( "%1" );
- const OUString sVar2( "%2" );
- OUString aText( msAccessibleDescText );
- aText = aText.replaceAll( sVar1, pData->mbIsFolder ? msFolder : msFile );
- aText = aText.replaceAll( sVar2, pData->maURL );
- sRet += aText;
- }
- }
- }
-
- return sRet;
-}
-
-
-bool ViewTabListBox_Impl::Kill( const OUString& rContent )
-{
- bool bRet = true;
-
- try
- {
- ::ucbhelper::Content aCnt( rContent, mxCmdEnv, comphelper::getProcessComponentContext() );
- aCnt.executeCommand( "delete", makeAny( true ) );
- }
- catch( css::ucb::CommandAbortedException const & )
- {
- SAL_INFO( "svtools.contnr", "CommandAbortedException" );
- bRet = false;
- }
- catch( Exception const & )
- {
- SAL_INFO( "svtools.contnr", "Any other exception" );
- bRet = false;
- }
-
- return bRet;
-}
-
-SvtFileView::SvtFileView( vcl::Window* pParent, WinBits nBits,
- bool bOnlyFolder, bool bMultiSelection, bool bShowType ) :
-
- Control( pParent, nBits )
-{
- FileViewFlags nFlags = FileViewFlags::NONE;
- if ( bOnlyFolder )
- nFlags |= FileViewFlags::ONLYFOLDER;
- if ( bMultiSelection )
- nFlags |= FileViewFlags::MULTISELECTION;
- if ( bShowType )
- nFlags |= FileViewFlags::SHOW_TYPE;
-
- Reference< XComponentContext > xContext = ::comphelper::getProcessComponentContext();
- Reference< XInteractionHandler > xInteractionHandler(
- InteractionHandler::createWithParent(xContext, VCLUnoHelper::GetInterface(GetParentDialog())), UNO_QUERY_THROW );
- Reference < XCommandEnvironment > xCmdEnv = new ::ucbhelper::CommandEnvironment( xInteractionHandler, Reference< XProgressHandler >() );
-
- mpImpl.reset( new SvtFileView_Impl( this, xCmdEnv, nFlags, bOnlyFolder ) );
- mpImpl->mpView->ForbidEmptyText();
-
- HeaderBar* pHeaderBar = mpImpl->mpView->GetHeaderBar();
- pHeaderBar->SetSelectHdl( LINK( this, SvtFileView, HeaderSelect_Impl ) );
- pHeaderBar->SetEndDragHdl( LINK( this, SvtFileView, HeaderEndDrag_Impl ) );
-}
-
-SvtFileView::~SvtFileView()
-{
- disposeOnce();
-}
-
-void SvtFileView::dispose()
-{
- mpImpl.reset();
- Control::dispose();
-}
-
-Size SvtFileView::GetOptimalSize() const
-{
- return LogicToPixel(Size(208, 50), MapMode(MapUnit::MapAppFont));
-}
-
-void SvtFileView::SetViewMode( FileViewMode eMode )
-{
- mpImpl->SetViewMode( eMode );
-}
-
-OUString SvtFileView::GetURL( SvTreeListEntry const * pEntry )
-{
- OUString aURL;
- if ( pEntry && pEntry->GetUserData() )
- aURL = static_cast<SvtContentEntry*>(pEntry->GetUserData())->maURL;
- return aURL;
-}
-
-
-OUString SvtFileView::GetCurrentURL() const
-{
- OUString aURL;
- SvTreeListEntry* pEntry = mpImpl->mpCurView->FirstSelected();
- if ( pEntry && pEntry->GetUserData() )
- aURL = static_cast<SvtContentEntry*>(pEntry->GetUserData())->maURL;
- return aURL;
-}
-
-
-void SvtFileView::CreatedFolder( const OUString& rUrl, const OUString& rNewFolder )
-{
- OUString sEntry = mpImpl->FolderInserted( rUrl, rNewFolder );
-
- SvTreeListEntry* pEntry = mpImpl->mpView->InsertEntry( sEntry, mpImpl->maFolderImage, mpImpl->maFolderImage );
- SvtContentEntry* pUserData = new SvtContentEntry( rUrl, true );
- pEntry->SetUserData( pUserData );
- mpImpl->mpView->MakeVisible( pEntry );
-
- SvTreeListEntry* pEntry2 = mpImpl->mpIconView->InsertEntry( sEntry.getToken( 0, '\t' ), mpImpl->maFolderImage, mpImpl->maFolderImage );
- SvtContentEntry* pUserData2 = new SvtContentEntry( rUrl, true );
- pEntry2->SetUserData( pUserData2 );
- mpImpl->mpIconView->MakeVisible( pEntry2 );
-}
-
-
-FileViewResult SvtFileView::PreviousLevel( const FileViewAsyncAction* pAsyncDescriptor )
-{
- FileViewResult eResult = eFailure;
-
- OUString sParentURL;
- if ( GetParentURL( sParentURL ) )
- eResult = Initialize( sParentURL, mpImpl->maCurrentFilter, pAsyncDescriptor, mpBlackList );
-
- return eResult;
-}
-
-
-bool SvtFileView::GetParentURL( OUString& rParentURL ) const
-{
- bool bRet = false;
- try
- {
- ::ucbhelper::Content aCnt( mpImpl->maViewURL, mpImpl->mxCmdEnv, comphelper::getProcessComponentContext() );
- Reference< XContent > xContent( aCnt.get() );
- Reference< css::container::XChild > xChild( xContent, UNO_QUERY );
- if ( xChild.is() )
- {
- Reference< XContent > xParent( xChild->getParent(), UNO_QUERY );
- if ( xParent.is() )
- {
- rParentURL = xParent->getIdentifier()->getContentIdentifier();
- bRet = !rParentURL.isEmpty() && rParentURL != mpImpl->maViewURL;
- }
- }
- }
- catch( Exception const & )
- {
- // perhaps an unknown url protocol (e.g. "private:newdoc")
- }
-
- return bRet;
-}
-
-
-const OString& SvtFileView::GetHelpId( ) const
-{
- return mpImpl->mpView->GetHelpId( );
-}
-
-
-void SvtFileView::SetHelpId( const OString& rHelpId )
-{
- mpImpl->mpView->SetHelpId( rHelpId );
-}
-
-
-void SvtFileView::SetSizePixel( const Size& rNewSize )
-{
- Control::SetSizePixel( rNewSize );
- mpImpl->mpView->SetSizePixel( rNewSize );
- mpImpl->mpIconView->SetSizePixel( rNewSize );
-}
-
-
-void SvtFileView::SetPosSizePixel( const Point& rNewPos, const Size& rNewSize )
-{
- SetPosPixel( rNewPos );
- SetSizePixel( rNewSize );
-}
-
-
-bool SvtFileView::Initialize( const css::uno::Reference< css::ucb::XContent>& _xContent )
-{
- WaitObject aWaitCursor( this );
-
- mpImpl->Clear();
- ::ucbhelper::Content aContent(_xContent, mpImpl->mxCmdEnv, comphelper::getProcessComponentContext() );
- FileViewResult eResult = mpImpl->GetFolderContent_Impl( FolderDescriptor( aContent ), nullptr, css::uno::Sequence< OUString >() );
- OSL_ENSURE( eResult != eStillRunning, "SvtFileView::Initialize: this was expected to be synchronous!" );
- if ( eResult != eSuccess )
- return false;
-
- mpImpl->FilterFolderContent_Impl( OUString() );
-
- mpImpl->SortFolderContent_Impl(); // possibly not necessary!!!!!!!!!!
- mpImpl->CreateDisplayText_Impl();
- mpImpl->OpenFolder_Impl();
-
- mpImpl->maOpenDoneLink.Call( this );
- return true;
-}
-
-
-FileViewResult SvtFileView::Initialize(
- const OUString& rURL,
- const OUString& rFilter,
- const FileViewAsyncAction* pAsyncDescriptor,
- const css::uno::Sequence< OUString >& rBlackList )
-{
- WaitObject aWaitCursor( this );
- mpBlackList = rBlackList;
-
- OUString sPushURL( mpImpl->maViewURL );
-
- mpImpl->maViewURL = rURL;
- FileViewResult eResult = ExecuteFilter( rFilter, pAsyncDescriptor );
- switch ( eResult )
- {
- case eFailure:
- case eTimeout:
- mpImpl->maViewURL = sPushURL;
- return eResult;
-
- case eStillRunning:
- OSL_ENSURE( pAsyncDescriptor, "SvtFileView::Initialize: we told it to read synchronously!" );
- [[fallthrough]];
- case eSuccess:
- return eResult;
- }
-
- OSL_FAIL( "SvtFileView::Initialize: unreachable!" );
- return eFailure;
-}
-
-FileViewResult SvtFileView::ExecuteFilter( const OUString& rFilter, const FileViewAsyncAction* pAsyncDescriptor )
-{
- mpImpl->maCurrentFilter = rFilter.toAsciiLowerCase();
-
- mpImpl->Clear();
- FileViewResult eResult = mpImpl->GetFolderContent_Impl( mpImpl->maViewURL, pAsyncDescriptor, mpBlackList );
- OSL_ENSURE( ( eResult != eStillRunning ) || pAsyncDescriptor, "SvtFileView::ExecuteFilter: we told it to read synchronously!" );
- return eResult;
-}
-
-void SvtFileView::CancelRunningAsyncAction()
-{
- mpImpl->CancelRunningAsyncAction();
-}
-
-void SvtFileView::SetNoSelection()
-{
- mpImpl->mpCurView->SelectAll( false );
-}
-
-
-void SvtFileView::GetFocus()
-{
- Control::GetFocus();
- if ( mpImpl && mpImpl->mpCurView )
- mpImpl->mpCurView->GrabFocus();
-}
-
-
-void SvtFileView::SetSelectHdl( const Link<SvTreeListBox*,void>& rHdl )
-{
- mpImpl->SetSelectHandler( rHdl );
-}
-
-
-void SvtFileView::SetDoubleClickHdl( const Link<SvTreeListBox*,bool>& rHdl )
-{
- mpImpl->mpView->SetDoubleClickHdl( rHdl );
- mpImpl->mpIconView->SetDoubleClickHdl( rHdl );
-}
-
-
-sal_uLong SvtFileView::GetSelectionCount() const
-{
- return mpImpl->mpCurView->GetSelectionCount();
-}
-
-
-SvTreeListEntry* SvtFileView::FirstSelected() const
-{
- return mpImpl->mpCurView->FirstSelected();
-}
-
-
-SvTreeListEntry* SvtFileView::NextSelected( SvTreeListEntry* pEntry ) const
-{
- return mpImpl->mpCurView->NextSelected( pEntry );
-}
-
-void SvtFileView::EnableAutoResize()
-{
- mpImpl->mpView->EnableAutoResize();
-}
-
-const OUString& SvtFileView::GetViewURL() const
-{
- return mpImpl->maViewURL;
-}
-
-void SvtFileView::SetOpenDoneHdl( const Link<SvtFileView*,void>& rHdl )
-{
- mpImpl->maOpenDoneLink = rHdl;
-}
-
-void SvtFileView::EnableDelete( bool bEnable )
-{
- mpImpl->EnableDelete( bEnable );
-}
-
-void SvtFileView::EndInplaceEditing()
-{
- return mpImpl->EndEditing();
-}
-
-IMPL_LINK( SvtFileView, HeaderSelect_Impl, HeaderBar*, pBar, void )
-{
- DBG_ASSERT( pBar, "no headerbar" );
- sal_uInt16 nItemID = pBar->GetCurItemId();
-
- HeaderBarItemBits nBits;
-
- // clear the arrow of the recently used column
- if ( nItemID != mpImpl->mnSortColumn )
- {
- if ( !nItemID )
- {
- // first call -> remove arrow from title column,
- // because another column is the sort column
- nItemID = mpImpl->mnSortColumn;
- mpImpl->mnSortColumn = COLUMN_TITLE;
- }
- nBits = pBar->GetItemBits( mpImpl->mnSortColumn );
- nBits &= ~HeaderBarItemBits( HeaderBarItemBits::UPARROW | HeaderBarItemBits::DOWNARROW );
- pBar->SetItemBits( mpImpl->mnSortColumn, nBits );
- }
-
- nBits = pBar->GetItemBits( nItemID );
-
- bool bUp = ( ( nBits & HeaderBarItemBits::UPARROW ) == HeaderBarItemBits::UPARROW );
-
- if ( bUp )
- {
- nBits &= ~HeaderBarItemBits::UPARROW;
- nBits |= HeaderBarItemBits::DOWNARROW;
- }
- else
- {
- nBits &= ~HeaderBarItemBits::DOWNARROW;
- nBits |= HeaderBarItemBits::UPARROW;
- }
-
- pBar->SetItemBits( nItemID, nBits );
- mpImpl->Resort_Impl( nItemID, !bUp );
-}
-
-
-IMPL_LINK( SvtFileView, HeaderEndDrag_Impl, HeaderBar*, pBar, void )
-{
- if ( pBar->IsItemMode() )
- return;
-
- Size aSize;
- sal_uInt16 nTabs = pBar->GetItemCount();
- long nTmpSize = 0;
-
- for ( sal_uInt16 i = 1; i <= nTabs; ++i )
- {
- long nWidth = pBar->GetItemSize(i);
- aSize.setWidth( nWidth + nTmpSize );
- nTmpSize += nWidth;
- mpImpl->mpView->SetTab( i, aSize.Width(), MapUnit::MapPixel );
- }
-}
-
-
-OUString SvtFileView::GetConfigString() const
-{
- OUString sRet;
- HeaderBar* pBar = mpImpl->mpView->GetHeaderBar();
- DBG_ASSERT( pBar, "invalid headerbar" );
-
- // sort order
- sRet += OUString::number( mpImpl->mnSortColumn ) + ";";
- HeaderBarItemBits nBits = pBar->GetItemBits( mpImpl->mnSortColumn );
- bool bUp = ( ( nBits & HeaderBarItemBits::UPARROW ) == HeaderBarItemBits::UPARROW );
- sRet += bUp ? OUString("1") : OUString("0");
- sRet += ";";
-
- sal_uInt16 nCount = pBar->GetItemCount();
- for ( sal_uInt16 i = 0; i < nCount; ++i )
- {
- sal_uInt16 nId = pBar->GetItemId(i);
- sRet += OUString::number( nId )
- + ";"
- + OUString::number( pBar->GetItemSize( nId ) )
- + ";";
- }
-
- sRet = comphelper::string::stripEnd(sRet, ';');
- return sRet;
-}
-
-::std::vector< SvtContentEntry > SvtFileView::GetContent()
-{
- ::std::vector< SvtContentEntry > aContent;
-
- for(auto const& elem : mpImpl->maContent)
- {
- SvtContentEntry aEntry( elem->maTargetURL, elem->mbIsFolder );
- aContent.push_back( aEntry );
- }
-
- return aContent;
-}
-
-void SvtFileView::SetConfigString( const OUString& rCfgStr )
-{
- HeaderBar* pBar = mpImpl->mpView->GetHeaderBar();
- DBG_ASSERT( pBar, "invalid headerbar" );
-
- sal_Int32 nIdx = 0;
- mpImpl->mnSortColumn = static_cast<sal_uInt16>(rCfgStr.getToken( 0, ';', nIdx ).toInt32());
- bool bUp = static_cast<bool>(static_cast<sal_uInt16>(rCfgStr.getToken( 0, ';', nIdx ).toInt32()));
- HeaderBarItemBits nBits = pBar->GetItemBits( mpImpl->mnSortColumn );
-
- if ( bUp )
- {
- nBits &= ~HeaderBarItemBits::UPARROW;
- nBits |= HeaderBarItemBits::DOWNARROW;
- }
- else
- {
- nBits &= ~HeaderBarItemBits::DOWNARROW;
- nBits |= HeaderBarItemBits::UPARROW;
- }
- pBar->SetItemBits( mpImpl->mnSortColumn, nBits );
-
- while ( nIdx != -1 )
- {
- sal_uInt16 nItemId = static_cast<sal_uInt16>(rCfgStr.getToken( 0, ';', nIdx ).toInt32());
- pBar->SetItemSize( nItemId, rCfgStr.getToken( 0, ';', nIdx ).toInt32() );
- }
-
- HeaderSelect_Impl( pBar );
- HeaderEndDrag_Impl( pBar );
-}
-
-
-void SvtFileView::StateChanged( StateChangedType nStateChange )
-{
- if ( nStateChange == StateChangedType::Enable )
- Invalidate();
- Control::StateChanged( nStateChange );
-}
-
-
-// class SvtFileView_Impl
-
-
-SvtFileView_Impl::SvtFileView_Impl( SvtFileView* pAntiImpl, Reference < XCommandEnvironment > const & xEnv, FileViewFlags nFlags, bool bOnlyFolder )
-
- :mpAntiImpl ( pAntiImpl )
- ,m_eAsyncActionResult ( ::svt::EnumerationResult::ERROR )
- ,m_bRunningAsyncAction ( false )
- ,m_bAsyncActionCancelled ( false )
- ,mnSortColumn ( COLUMN_TITLE )
- ,mbAscending ( true )
- ,mbOnlyFolder ( bOnlyFolder )
- ,mnSuspendSelectCallback ( 0 )
- ,mbIsFirstResort ( true )
- ,aIntlWrapper ( Application::GetSettings().GetLanguageTag() )
- ,maFolderImage (StockImage::Yes, RID_BMP_FOLDER)
- ,mxCmdEnv ( xEnv )
-
-{
- mpView = VclPtr<ViewTabListBox_Impl>::Create( mpAntiImpl, this, nFlags );
- mpCurView = mpView;
- mpIconView = VclPtr<IconView>::Create( mpAntiImpl, WB_TABSTOP );
- mpIconView->Hide();
- mpView->EnableCellFocus();
-}
-
-
-SvtFileView_Impl::~SvtFileView_Impl()
-{
- Clear();
- mpView.disposeAndClear();
- mpCurView.clear();
- mpIconView.disposeAndClear();
- mpAntiImpl.clear();
-}
-
-
-void SvtFileView_Impl::Clear()
-{
- ::osl::MutexGuard aGuard( maMutex );
-
- maContent.clear();
-}
-
-
-FileViewResult SvtFileView_Impl::GetFolderContent_Impl(
- const OUString& rFolder,
- const FileViewAsyncAction* pAsyncDescriptor,
- const css::uno::Sequence< OUString >& rBlackList )
-{
- ::osl::ClearableMutexGuard aGuard( maMutex );
- INetURLObject aFolderObj( rFolder );
- DBG_ASSERT( aFolderObj.GetProtocol() != INetProtocol::NotValid, "Invalid URL!" );
-
- FolderDescriptor aFolder( aFolderObj.GetMainURL( INetURLObject::DecodeMechanism::NONE ) );
-
- aGuard.clear();
- return GetFolderContent_Impl( aFolder, pAsyncDescriptor, rBlackList );
-}
-
-
-FileViewResult SvtFileView_Impl::GetFolderContent_Impl(
- const FolderDescriptor& _rFolder,
- const FileViewAsyncAction* pAsyncDescriptor,
- const css::uno::Sequence< OUString >& rBlackList )
-{
- DBG_TESTSOLARMUTEX();
- ::osl::ClearableMutexGuard aGuard( maMutex );
-
- OSL_ENSURE( !m_xContentEnumerator.is(), "SvtFileView_Impl::GetFolderContent_Impl: still running another enumeration!" );
- m_xContentEnumerator.set(new ::svt::FileViewContentEnumerator(
- mpView->GetCommandEnvironment(), maContent, maMutex));
- // TODO: should we cache and re-use this thread?
-
- if ( !pAsyncDescriptor )
- {
- ::svt::EnumerationResult eResult = m_xContentEnumerator->enumerateFolderContentSync( _rFolder, rBlackList );
- if ( ::svt::EnumerationResult::SUCCESS == eResult )
- {
- implEnumerationSuccess();
- m_xContentEnumerator.clear();
- return eSuccess;
- }
- m_xContentEnumerator.clear();
- return eFailure;
- }
-
- m_bRunningAsyncAction = true;
- m_bAsyncActionCancelled = false;
- m_eAsyncActionResult = ::svt::EnumerationResult::ERROR;
- m_aAsyncActionFinished.reset();
-
- // don't (yet) set m_aCurrentAsyncActionHandler to pTimeout->aFinishHandler.
- // By definition, this handler *only* gets called when the result cannot be obtained
- // during the minimum wait time, so it is only set below, when needed.
- m_aCurrentAsyncActionHandler = Link<void*,void>();
-
- // minimum time to wait
- std::unique_ptr< TimeValue > pTimeout( new TimeValue );
- sal_Int32 nMinTimeout = pAsyncDescriptor->nMinTimeout;
- OSL_ENSURE( nMinTimeout > 0, "SvtFileView_Impl::GetFolderContent_Impl: invalid minimum timeout!" );
- if ( nMinTimeout <= 0 )
- nMinTimeout = sal_Int32( 1000 );
- pTimeout->Seconds = nMinTimeout / 1000L;
- pTimeout->Nanosec = ( nMinTimeout % 1000L ) * 1000000L;
-
- m_xContentEnumerator->enumerateFolderContent( _rFolder, this );
-
- // wait until the enumeration is finished
- // for this, release our own mutex (which is used by the enumerator thread)
- aGuard.clear();
-
- ::osl::Condition::Result eResult = ::osl::Condition::result_ok;
- {
- // also release the SolarMutex. Not all code which is needed during the enumeration
- // is Solar-Thread-Safe, in particular there is some code which needs to access
- // string resources (and our resource system relies on the SolarMutex :()
- SolarMutexReleaser aSolarRelease;
-
- // now wait. Note that if we didn't get a pAsyncDescriptor, then this is an infinite wait.
- eResult = m_aAsyncActionFinished.wait( pTimeout.get() );
- }
-
- ::osl::MutexGuard aGuard2( maMutex );
- if ( ::osl::Condition::result_timeout == eResult )
- {
- // maximum time to wait
- OSL_ENSURE(!m_xCancelAsyncTimer,
- "SvtFileView_Impl::GetFolderContent_Impl: there's still a previous timer!");
- m_xCancelAsyncTimer.set(new CallbackTimer(this));
- sal_Int32 nMaxTimeout = pAsyncDescriptor->nMaxTimeout;
- OSL_ENSURE( nMaxTimeout > nMinTimeout,
- "SvtFileView_Impl::GetFolderContent_Impl: invalid maximum timeout!" );
- if ( nMaxTimeout <= nMinTimeout )
- nMaxTimeout = nMinTimeout + 5000;
- m_xCancelAsyncTimer->setRemainingTime( salhelper::TTimeValue( nMaxTimeout - nMinTimeout ) );
- // we already waited for nMinTimeout milliseconds, so take this into account
- m_xCancelAsyncTimer->start();
-
- m_aCurrentAsyncActionHandler = pAsyncDescriptor->aFinishHandler;
- DBG_ASSERT( m_aCurrentAsyncActionHandler.IsSet(), "SvtFileView_Impl::GetFolderContent_Impl: nobody interested when it's finished?" );
- mpView->ClearAll();
- mpIconView->ClearAll();
- return eStillRunning;
- }
-
- m_bRunningAsyncAction = false;
- switch ( m_eAsyncActionResult )
- {
- case ::svt::EnumerationResult::SUCCESS:
- return eSuccess;
-
- case ::svt::EnumerationResult::ERROR:
- return eFailure;
- }
-
- SAL_WARN( "svtools.contnr", "SvtFileView_Impl::GetFolderContent_Impl: unreachable!" );
- return eFailure;
-}
-
-
-void SvtFileView_Impl::FilterFolderContent_Impl( const OUString &rFilter )
-{
- if ( rFilter.isEmpty() || ( rFilter == ALL_FILES_FILTER ) )
- // when replacing names, there is always something to filter (no view of ".nametranslation.table")
- return;
-
- ::osl::MutexGuard aGuard( maMutex );
-
- if ( maContent.empty() )
- return;
-
- // collect the filter tokens
- ::std::vector< WildCard > aFilters;
- FilterMatch::createWildCardFilterList(rFilter,aFilters);
-
-
- // do the filtering
- maContent.erase(std::remove_if(maContent.begin(), maContent.end(),
- [&aFilters](const std::unique_ptr<SortingData_Impl>& rxContent) {
- if (rxContent->mbIsFolder)
- return false;
- // normalize the content title (we always match case-insensitive)
- // 91872 - 11.09.2001 - frank.schoenheit@sun.com
- OUString sCompareString = rxContent->GetFileName(); // filter works on file name, not on title!
- return std::none_of(aFilters.begin(), aFilters.end(), FilterMatch(sCompareString));
- }),
- maContent.end());
-}
-
-
-IMPL_LINK( SvtFileView_Impl, SelectionMultiplexer, SvTreeListBox*, _pSource, void )
-{
- if (!mnSuspendSelectCallback)
- m_aSelectHandler.Call( _pSource );
-}
-
-
-void SvtFileView_Impl::SetSelectHandler( const Link<SvTreeListBox*,void>& _rHdl )
-{
- m_aSelectHandler = _rHdl;
-
- Link<SvTreeListBox*,void> aMasterHandler;
- if ( m_aSelectHandler.IsSet() )
- aMasterHandler = LINK( this, SvtFileView_Impl, SelectionMultiplexer );
-
- mpView->SetSelectHdl( aMasterHandler );
- mpIconView->SetSelectHdl( aMasterHandler );
-}
-
-
-void SvtFileView_Impl::InitSelection()
-{
- mpCurView->SelectAll( false );
- SvTreeListEntry* pFirst = mpCurView->First();
- if ( pFirst )
- mpCurView->SetCursor( pFirst, true );
-}
-
-
-void SvtFileView_Impl::OpenFolder_Impl()
-{
- ::osl::MutexGuard aGuard( maMutex );
-
- mpView->SetUpdateMode( false );
- mpIconView->SetUpdateMode( false );
- mpView->ClearAll();
- mpIconView->ClearAll();
-
- for (auto const& elem : maContent)
- {
- if ( mbOnlyFolder && ! elem->mbIsFolder )
- continue;
-
- // insert entry and set user data
- SvTreeListEntry* pEntry = mpView->InsertEntry( elem->maDisplayText,
- elem->maImage,
- elem->maImage );
-
- SvTreeListEntry* pEntry2 = mpIconView->InsertEntry( elem->maDisplayText.getToken( 0, '\t' ),
- elem->maImage, elem->maImage );
-
- SvtContentEntry* pUserData = new SvtContentEntry( elem->maTargetURL,
- elem->mbIsFolder );
- SvtContentEntry* pUserData2 = new SvtContentEntry( elem->maTargetURL,
- elem->mbIsFolder );
-
- pEntry->SetUserData( pUserData );
- pEntry2->SetUserData( pUserData2 );
- }
-
- InitSelection();
-
- ++mnSuspendSelectCallback;
- mpView->SetUpdateMode( true );
- mpIconView->SetUpdateMode( true );
- --mnSuspendSelectCallback;
-
- ResetCursor();
-}
-
-
-void SvtFileView_Impl::ResetCursor()
-{
- // deselect
- SvTreeListEntry* pEntry = mpCurView->FirstSelected();
- if ( pEntry )
- mpCurView->Select( pEntry, false );
- // set cursor to the first entry
- mpCurView->SetCursor( mpCurView->First(), true );
- mpCurView->Update();
-}
-
-
-void SvtFileView_Impl::CancelRunningAsyncAction()
-{
- DBG_TESTSOLARMUTEX();
- ::osl::MutexGuard aGuard( maMutex );
- if ( !m_xContentEnumerator.is() )
- return;
-
- m_bAsyncActionCancelled = true;
- m_xContentEnumerator->cancel();
- m_bRunningAsyncAction = false;
-
- m_xContentEnumerator.clear();
- if ( m_xCancelAsyncTimer.is() && m_xCancelAsyncTimer->isTicking() )
- m_xCancelAsyncTimer->stop();
- m_xCancelAsyncTimer.clear();
-}
-
-
-void SvtFileView_Impl::onTimeout()
-{
- SolarMutexGuard aSolarGuard;
- ::osl::MutexGuard aGuard( maMutex );
- if ( !m_bRunningAsyncAction )
- // there might have been a race condition while we waited for the mutex
- return;
-
- CancelRunningAsyncAction();
-
- if ( m_aCurrentAsyncActionHandler.IsSet() )
- {
- Application::PostUserEvent( m_aCurrentAsyncActionHandler, reinterpret_cast< void* >( eTimeout ) );
- m_aCurrentAsyncActionHandler = Link<void*,void>();
- }
-}
-
-
-void SvtFileView_Impl::enumerationDone( ::svt::EnumerationResult eResult )
-{
- SolarMutexGuard aSolarGuard;
- ::osl::MutexGuard aGuard( maMutex );
-
- m_xContentEnumerator.clear();
- if ( m_xCancelAsyncTimer.is() && m_xCancelAsyncTimer->isTicking() )
- m_xCancelAsyncTimer->stop();
- m_xCancelAsyncTimer.clear();
-
- if ( m_bAsyncActionCancelled )
- // this is to prevent race conditions
- return;
-
- m_eAsyncActionResult = eResult;
- m_bRunningAsyncAction = false;
-
- m_aAsyncActionFinished.set();
-
- if ( svt::EnumerationResult::SUCCESS == eResult )
- implEnumerationSuccess();
-
- if ( m_aCurrentAsyncActionHandler.IsSet() )
- {
- Application::PostUserEvent( m_aCurrentAsyncActionHandler, reinterpret_cast< void* >( m_eAsyncActionResult ) );
- m_aCurrentAsyncActionHandler = Link<void*,void>();
- }
-}
-
-
-void SvtFileView_Impl::implEnumerationSuccess()
-{
- FilterFolderContent_Impl( maCurrentFilter );
- SortFolderContent_Impl();
- CreateDisplayText_Impl();
- OpenFolder_Impl();
- maOpenDoneLink.Call( mpAntiImpl );
-}
-
-
-void SvtFileView_Impl::ReplaceTabWithString( OUString& aValue )
-{
- OUString const aTab( "\t" );
- OUString const aTabString( "%09" );
- sal_Int32 iPos;
-
- while ( ( iPos = aValue.indexOf( aTab ) ) >= 0 )
- aValue = aValue.replaceAt( iPos, 1, aTabString );
-}
-
-
-void SvtFileView_Impl::CreateDisplayText_Impl()
-{
- ::osl::MutexGuard aGuard( maMutex );
-
- OUString const aTab( "\t" );
- OUString const aDateSep( ", " );
-
- for (auto const& elem : maContent)
- {
- // title, type, size, date
- OUString aValue = elem->GetTitle();
- ReplaceTabWithString( aValue );
- aValue += aTab + elem->maType + aTab;
- // folders don't have a size
- if ( ! elem->mbIsFolder )
- aValue += CreateExactSizeText( elem->maSize );
- aValue += aTab;
- // set the date, but volumes have no date
- if ( ! elem->mbIsFolder || ! elem->mbIsVolume )
- {
- SvtSysLocale aSysLocale;
- const LocaleDataWrapper& rLocaleData = aSysLocale.GetLocaleData();
- aValue += rLocaleData.getDate( elem->maModDate )
- + aDateSep
- + rLocaleData.getTime( elem->maModDate, false );
- }
- elem->maDisplayText = aValue;
-
- // detect image
- if ( elem->mbIsFolder )
- {
- ::svtools::VolumeInfo aVolInfo( elem->mbIsVolume, elem->mbIsRemote,
- elem->mbIsRemoveable, elem->mbIsFloppy,
- elem->mbIsCompactDisc );
- elem->maImage = SvFileInformationManager::GetFolderImage( aVolInfo );
- }
- else
- elem->maImage = SvFileInformationManager::GetFileImage( INetURLObject( elem->maTargetURL ) );
- }
-}
-
-void SvtFileView_Impl::Resort_Impl( sal_Int16 nColumn, bool bAscending )
-{
- // TODO: IconView ()
- ::osl::MutexGuard aGuard( maMutex );
-
- if ( ( nColumn == mnSortColumn ) &&
- ( bAscending == mbAscending ) )
- return;
-
- // reset the quick search index
- mpView->ResetQuickSearch_Impl( nullptr );
-
- OUString aEntryURL;
- SvTreeListEntry* pEntry = mpView->GetCurEntry();
- if ( pEntry && pEntry->GetUserData() )
- aEntryURL = static_cast<SvtContentEntry*>(pEntry->GetUserData())->maURL;
-
- mnSortColumn = nColumn;
- mbAscending = bAscending;
-
- SortFolderContent_Impl();
- OpenFolder_Impl();
-
- if ( !mbIsFirstResort )
- {
- sal_uLong nPos = GetEntryPos( aEntryURL );
- if ( nPos < mpView->GetEntryCount() )
- {
- pEntry = mpView->GetEntry( nPos );
-
- ++mnSuspendSelectCallback; // #i15668#
- mpView->SetCurEntry( pEntry );
- --mnSuspendSelectCallback;
- }
- }
- else
- mbIsFirstResort = false;
-}
-
-
-static bool gbAscending = true;
-static sal_Int16 gnColumn = COLUMN_TITLE;
-static const CollatorWrapper* pCollatorWrapper = nullptr;
-
-/* this function returns true, if aOne is less than aTwo
-*/
-static bool CompareSortingData_Impl( std::unique_ptr<SortingData_Impl> const & aOne, std::unique_ptr<SortingData_Impl> const & aTwo )
-{
- DBG_ASSERT( pCollatorWrapper, "*CompareSortingData_Impl(): Can't work this way!" );
-
- sal_Int32 nComp;
- bool bRet = false;
- bool bEqual = false;
-
- if ( aOne->mbIsFolder != aTwo->mbIsFolder )
- {
- bRet = aOne->mbIsFolder;
-
- // !!! pb: #100376# folder always on top
- if ( !gbAscending )
- bRet = !bRet;
- }
- else
- {
- switch ( gnColumn )
- {
- case COLUMN_TITLE:
- // compare case insensitive first
- nComp = pCollatorWrapper->compareString( aOne->GetLowerTitle(), aTwo->GetLowerTitle() );
-
- if ( nComp == 0 )
- nComp = pCollatorWrapper->compareString( aOne->GetTitle(), aTwo->GetTitle() );
-
- if ( nComp < 0 )
- bRet = true;
- else if ( nComp > 0 )
- bRet = false;
- else
- bEqual = true;
- break;
- case COLUMN_TYPE:
- nComp = pCollatorWrapper->compareString( aOne->maType, aTwo->maType );
- if ( nComp < 0 )
- bRet = true;
- else if ( nComp > 0 )
- bRet = false;
- else
- bEqual = true;
- break;
- case COLUMN_SIZE:
- if ( aOne->maSize < aTwo->maSize )
- bRet = true;
- else if ( aOne->maSize > aTwo->maSize )
- bRet = false;
- else
- bEqual = true;
- break;
- case COLUMN_DATE:
- if ( aOne->maModDate < aTwo->maModDate )
- bRet = true;
- else if ( aOne->maModDate > aTwo->maModDate )
- bRet = false;
- else
- bEqual = true;
- break;
- default:
- SAL_INFO( "svtools.contnr", "CompareSortingData_Impl: Compare unknown type!" );
- bRet = false;
- }
- }
-
- // when the two elements are equal, we must not return sal_True (which would
- // happen if we just return ! ( a < b ) when not sorting ascending )
- if ( bEqual )
- return false;
-
- return gbAscending ? bRet : !bRet;
-}
-
-
-void SvtFileView_Impl::SortFolderContent_Impl()
-{
- ::osl::MutexGuard aGuard( maMutex );
-
- if ( maContent.size() > 1 )
- {
- gbAscending = mbAscending;
- gnColumn = mnSortColumn;
- pCollatorWrapper = aIntlWrapper.getCaseCollator();
-
- std::stable_sort( maContent.begin(), maContent.end(), CompareSortingData_Impl );
-
- pCollatorWrapper = nullptr;
- }
-}
-
-
-void SvtFileView_Impl::EntryRemoved( const OUString& rURL )
-{
- ::osl::MutexGuard aGuard( maMutex );
-
- maContent.erase(std::find_if(maContent.begin(), maContent.end(),
- [&](const std::unique_ptr<SortingData_Impl> & data) { return data->maTargetURL == rURL; }));
-}
-
-
-void SvtFileView_Impl::EntryRenamed( OUString& rURL,
- const OUString& rTitle )
-{
- ::osl::MutexGuard aGuard( maMutex );
-
- auto aFoundElem = std::find_if(maContent.begin(), maContent.end(),
- [&](const std::unique_ptr<SortingData_Impl> & data) { return data->maTargetURL == rURL; });
- if (aFoundElem != maContent.end())
- {
- (*aFoundElem)->SetNewTitle( rTitle );
- OUString aDisplayText = (*aFoundElem)->maDisplayText;
- sal_Int32 nIndex = aDisplayText.indexOf( '\t' );
-
- if ( nIndex > 0 )
- (*aFoundElem)->maDisplayText = aDisplayText.replaceAt( 0, nIndex, rTitle );
-
- INetURLObject aURLObj( rURL );
- aURLObj.setName( rTitle, INetURLObject::EncodeMechanism::All );
-
- rURL = aURLObj.GetMainURL( INetURLObject::DecodeMechanism::NONE );
-
- (*aFoundElem)->maTargetURL = rURL;
- }
-}
-
-
-OUString SvtFileView_Impl::FolderInserted( const OUString& rURL, const OUString& rTitle )
-{
- ::osl::MutexGuard aGuard( maMutex );
-
- std::unique_ptr<SortingData_Impl> pData(new SortingData_Impl);
-
- pData->SetNewTitle( rTitle );
- pData->maSize = 0;
- pData->mbIsFolder = true;
- pData->maTargetURL = rURL;
-
- ::svtools::VolumeInfo aVolInfo;
- pData->maType = SvFileInformationManager::GetFolderDescription( aVolInfo );
- pData->maImage = SvFileInformationManager::GetFolderImage( aVolInfo );
-
- OUString aValue;
- OUString const aTab( "\t" );
- OUString const aDateSep( ", " );
-
- // title, type, size, date
- aValue = pData->GetTitle();
- ReplaceTabWithString( aValue );
- aValue += aTab + pData->maType + aTab +
- // folders don't have a size
- aTab;
- // set the date
- SvtSysLocale aSysLocale;
- const LocaleDataWrapper& rLocaleData = aSysLocale.GetLocaleData();
- aValue += rLocaleData.getDate( pData->maModDate )
- + aDateSep
- + rLocaleData.getTime( pData->maModDate );
-
- pData->maDisplayText = aValue;
- maContent.push_back( std::move(pData) );
-
- return aValue;
-}
-
-
-sal_uLong SvtFileView_Impl::GetEntryPos( const OUString& rURL )
-{
- ::osl::MutexGuard aGuard( maMutex );
-
- auto aFoundElem = std::find_if(maContent.begin(), maContent.end(),
- [&](const std::unique_ptr<SortingData_Impl> & data) { return data->maTargetURL == rURL; });
- return aFoundElem != maContent.end()?std::distance(maContent.begin(), aFoundElem):0;
-}
-
-
-void SvtFileView_Impl::SetViewMode( FileViewMode eMode )
-{
- switch ( eMode )
- {
- case eDetailedList:
- mpCurView = mpView;
- mpView->Show();
- mpView->GetHeaderBar()->Show();
- mpIconView->Hide();
- break;
-
- case eIcon:
- mpCurView = mpIconView;
- mpView->Hide();
- mpView->GetHeaderBar()->Hide();
- mpIconView->Show();
- break;
-
- default:
- mpCurView = mpView;
- mpView->Show();
- mpView->GetHeaderBar()->Show();
- mpIconView->Hide();
- };
-}
-
-
-bool SvtFileView_Impl::SearchNextEntry( sal_uInt32& nIndex, const OUString& rTitle, bool bWrapAround )
-{
- ::osl::MutexGuard aGuard( maMutex );
-
- sal_uInt32 nEnd = maContent.size();
- sal_uInt32 nStart = nIndex;
- while ( nIndex < nEnd )
- {
- SortingData_Impl* pData = maContent[ nIndex ].get();
- if ( pData->GetLowerTitle().startsWith( rTitle ) )
- return true;
- ++nIndex;
- }
-
- if ( bWrapAround )
- {
- nIndex = 0;
- while ( nIndex < nEnd && nIndex <= nStart )
- {
- SortingData_Impl* pData = maContent[ nIndex ].get();
- if ( pData->GetLowerTitle().startsWith( rTitle ) )
- return true;
- ++nIndex;
- }
- }
-
- return false;
-}
-
-
-namespace svtools {
-
-QueryDeleteDlg_Impl::QueryDeleteDlg_Impl(weld::Widget* pParent, const OUString& rName)
- : MessageDialogController(pParent, "svt/ui/querydeletedialog.ui", "QueryDeleteDialog")
- , m_xAllButton(m_xBuilder->weld_button("all"))
-{
- // display specified texts
- m_xDialog->set_secondary_text(m_xDialog->get_secondary_text().replaceFirst("%s", rName));
-}
-
-QueryDeleteDlg_Impl::~QueryDeleteDlg_Impl()
-{
-}
-
-}
-
-namespace {
- void SAL_CALL CallbackTimer::onShot()
- {
- OSL_ENSURE( m_pTimeoutHandler, "CallbackTimer::onShot: nobody interested in?" );
- SvtFileView_Impl* pHandler( m_pTimeoutHandler );
- if ( pHandler )
- pHandler->onTimeout();
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/source/contnr/foldertree.cxx b/svtools/source/contnr/foldertree.cxx
deleted file mode 100644
index b135b644fda6..000000000000
--- a/svtools/source/contnr/foldertree.cxx
+++ /dev/null
@@ -1,170 +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/.
- */
-
-#include <comphelper/processfactory.hxx>
-#include <svtools/foldertree.hxx>
-#include <toolkit/helper/vclunohelper.hxx>
-#include <tools/urlobj.hxx>
-#include <ucbhelper/commandenvironment.hxx>
-#include <vcl/dialog.hxx>
-#include <vcl/treelistentry.hxx>
-#include <vcl/ptrstyle.hxx>
-#include <com/sun/star/task/InteractionHandler.hpp>
-#include "contentenumeration.hxx"
-#include <bitmaps.hlst>
-
-using namespace ::com::sun::star::task;
-
-FolderTree::FolderTree( vcl::Window* pParent, WinBits nBits )
- : SvTreeListBox( pParent, nBits | WB_SORT | WB_TABSTOP )
-{
- Reference< XComponentContext > xContext = ::comphelper::getProcessComponentContext();
- Reference< XInteractionHandler > xInteractionHandler(
- InteractionHandler::createWithParent(xContext, VCLUnoHelper::GetInterface(GetParentDialog())), UNO_QUERY_THROW );
- m_xEnv = new ::ucbhelper::CommandEnvironment( xInteractionHandler, Reference< XProgressHandler >() );
-
- Image aFolderImage(StockImage::Yes, RID_BMP_FOLDER);
- Image aFolderExpandedImage(StockImage::Yes, RID_BMP_FOLDER_OPEN);
- SetDefaultCollapsedEntryBmp( aFolderImage );
- SetDefaultExpandedEntryBmp( aFolderExpandedImage );
-}
-
-void FolderTree::RequestingChildren( SvTreeListEntry* pEntry )
-{
- EnableChildPointerOverwrite( true );
- SetPointer( PointerStyle::Wait );
- Invalidate(InvalidateFlags::Update);
-
- FillTreeEntry( pEntry );
-
- SetPointer( PointerStyle::Arrow );
- EnableChildPointerOverwrite( false );
-}
-
-void FolderTree::FillTreeEntry( SvTreeListEntry* pEntry )
-{
- if( !pEntry )
- return;
-
- OUString* pURL = static_cast< OUString* >( pEntry->GetUserData() );
-
- if( pURL && m_sLastUpdatedDir != *pURL )
- {
- while (SvTreeListEntry* pChild = FirstChild(pEntry))
- {
- GetModel()->Remove(pChild);
- }
-
- ::std::vector< std::unique_ptr<SortingData_Impl> > aContent;
-
- ::rtl::Reference< ::svt::FileViewContentEnumerator >
- xContentEnumerator(new FileViewContentEnumerator(
- m_xEnv, aContent, m_aMutex));
-
- FolderDescriptor aFolder( *pURL );
-
- EnumerationResult eResult =
- xContentEnumerator->enumerateFolderContentSync( aFolder, m_aBlackList );
-
- if ( EnumerationResult::SUCCESS == eResult )
- {
- for(const auto & i : aContent)
- {
- if( i->mbIsFolder )
- {
- SvTreeListEntry* pNewEntry = InsertEntry( i->GetTitle(), pEntry, true );
-
- OUString* sData = new OUString( i->maTargetURL );
- pNewEntry->SetUserData( static_cast< void* >( sData ) );
- }
- }
- }
- }
- else
- {
- // this dir was updated recently
- // next time read this remote folder
- m_sLastUpdatedDir.clear();
- }
-}
-
-void FolderTree::FillTreeEntry( const OUString & rUrl, const ::std::vector< std::pair< OUString, OUString > >& rFolders )
-{
- SetTreePath( rUrl );
-
- SvTreeListEntry* pParent = GetCurEntry();
-
- if( !(pParent && !IsExpanded( pParent )) )
- return;
-
- while (SvTreeListEntry* pChild = FirstChild(pParent))
- {
- GetModel()->Remove(pChild);
- }
-
- for (auto const& folder : rFolders)
- {
- SvTreeListEntry* pNewEntry = InsertEntry( folder.first, pParent, true );
- OUString* sData = new OUString( folder.second );
- pNewEntry->SetUserData( static_cast< void* >( sData ) );
- }
-
- m_sLastUpdatedDir = rUrl;
- Expand( pParent );
-}
-
-void FolderTree::SetTreePath( OUString const & sUrl )
-{
- INetURLObject aUrl( sUrl );
- aUrl.setFinalSlash();
-
- OUString sPath = aUrl.GetURLPath( INetURLObject::DecodeMechanism::WithCharset );
-
- SvTreeListEntry* pEntry = First();
- bool end = false;
-
- while( pEntry && !end )
- {
- if( pEntry->GetUserData() )
- {
- OUString sNodeUrl = *static_cast< OUString* >( pEntry->GetUserData() );
-
- INetURLObject aUrlObj( sNodeUrl );
- aUrlObj.setFinalSlash();
-
- sNodeUrl = aUrlObj.GetURLPath( INetURLObject::DecodeMechanism::WithCharset );
-
- if( sPath == sNodeUrl )
- {
- Select( pEntry );
- end = true;
- }
- else if( sPath.startsWith( sNodeUrl ) )
- {
- if( !IsExpanded( pEntry ) )
- Expand( pEntry );
-
- pEntry = FirstChild( pEntry );
- }
- else
- {
- pEntry = pEntry->NextSibling();
- }
- }
- else
- break;
- }
-}
-
-void FolderTree::SetBlackList( const css::uno::Sequence< OUString >& rBlackList )
-{
- m_aBlackList = rBlackList;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/source/contnr/iconview.cxx b/svtools/source/contnr/iconview.cxx
deleted file mode 100644
index 4f94a21b87cf..000000000000
--- a/svtools/source/contnr/iconview.cxx
+++ /dev/null
@@ -1,233 +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 <svtools/iconview.hxx>
-#include <vcl/treelistentry.hxx>
-#include <vcl/viewdataentry.hxx>
-#include <svtools/fileview.hxx>
-#include <iconviewimpl.hxx>
-
-IconView::IconView( vcl::Window* pParent, WinBits nBits )
-: SvTreeListBox( pParent, nBits )
-{
- nColumns = 1;
- mbCenterAndClipText = true;
- SetEntryHeight( 100 );
- SetEntryWidth( 100 );
-
- pImpl.reset( new IconViewImpl( this, GetModel(), GetStyle() ) );
-}
-
-void IconView::Resize()
-{
- Size aBoxSize = Control::GetParent()->GetOutputSizePixel();
-
- if ( !aBoxSize.Width() )
- return;
-
- SetSizePixel( aBoxSize );
-
- nColumns = aBoxSize.Width() / nEntryWidth;
-
- SvTreeListBox::Resize();
-}
-
-tools::Rectangle IconView::GetFocusRect( SvTreeListEntry*, long nEntryPos )
-{
- Size aSize;
- aSize.setHeight( nEntryHeight );
- aSize.setWidth( nEntryWidth );
-
- Point aPos;
- aPos.setX( 0 );
- aPos.setY( 0 );
-
- tools::Rectangle aRect;
-
- short nCols = GetColumnsCount();
-
- if(nCols)
- {
- aPos.setY( ( nEntryPos / nCols ) * nEntryHeight );
- aPos.setX( ( nEntryPos % nCols ) * nEntryWidth );
- }
-
- aRect.SetPos( aPos );
- aRect.SetSize( aSize );
-
- return aRect;
-}
-
-void IconView::ClearAll()
-{
- for ( sal_uLong i = 0; i < GetEntryCount(); ++i )
- delete static_cast<SvtContentEntry*>(GetEntry(i)->GetUserData());
-
- Clear();
-}
-
-void IconView::PaintEntry(SvTreeListEntry& rEntry, long nX, long nY,
- vcl::RenderContext& rRenderContext)
-{
-
- tools::Rectangle aRect; // multi purpose
-
- PreparePaint(rRenderContext, rEntry);
-
- pImpl->UpdateContextBmpWidthMax(&rEntry);
-
- short nTempEntryHeight = GetEntryHeight();
- short nTempEntryWidth = GetEntryWidth();
-
- Point aEntryPos;
-
- Color aBackupTextColor(rRenderContext.GetTextColor());
- vcl::Font aBackupFont(rRenderContext.GetFont());
- Color aBackupColor = rRenderContext.GetFillColor();
-
- bool bCurFontIsSel = false;
- const WinBits nWindowStyle = GetStyle();
- const bool bHideSelection = (nWindowStyle & WB_HIDESELECTION) !=0 && !HasFocus();
- const StyleSettings& rSettings = rRenderContext.GetSettings().GetStyleSettings();
-
- vcl::Font aHighlightFont(rRenderContext.GetFont());
- const Color aHighlightTextColor(rSettings.GetHighlightTextColor());
- aHighlightFont.SetColor(aHighlightTextColor);
-
- Size aRectSize(nTempEntryWidth, nTempEntryHeight);
-
- SvViewDataEntry* pViewDataEntry = GetViewDataEntry( &rEntry );
-
- sal_uInt16 nItemCount = rEntry.ItemCount();
- sal_uInt16 nCurItem = 0;
- sal_uInt16 nIconItem = nItemCount;
-
- while (nCurItem < nItemCount)
- {
- SvLBoxItem* pItem = nCurItem < nItemCount ? &rEntry.GetItem(nCurItem) : nullptr;
- SvLBoxItemType nItemType = pItem->GetType();
-
- if (nItemType == SvLBoxItemType::ContextBmp)
- {
- nIconItem = nCurItem;
- nCurItem++;
- continue;
- }
-
- auto nItemHeight = SvLBoxItem::GetHeight(pViewDataEntry, nCurItem);
-
- aEntryPos.setX( nX );
- aEntryPos.setY( nY );
-
- // set background pattern/color
-
- Wallpaper aWallpaper = rRenderContext.GetBackground();
-
- if (pViewDataEntry->IsHighlighted())
- {
- Color aNewWallColor = rSettings.GetHighlightColor();
- // if the face color is bright then the deactivate color is also bright
- // -> so you can't see any deactivate selection
- if (bHideSelection && !rSettings.GetFaceColor().IsBright()
- && aWallpaper.GetColor().IsBright() != rSettings.GetDeactiveColor().IsBright())
- {
- aNewWallColor = rSettings.GetDeactiveColor();
- }
- // set font color to highlight
- if (!bCurFontIsSel)
- {
- rRenderContext.SetTextColor(aHighlightTextColor);
- rRenderContext.SetFont(aHighlightFont);
- bCurFontIsSel = true;
- }
- aWallpaper.SetColor(aNewWallColor);
- }
- else // no selection
- {
- if (bCurFontIsSel)
- {
- bCurFontIsSel = false;
- rRenderContext.SetTextColor(aBackupTextColor);
- rRenderContext.SetFont(aBackupFont);
- }
- else
- {
- aWallpaper.SetColor(rEntry.GetBackColor());
- }
- }
-
- // draw background
- if (!(nTreeFlags & SvTreeFlags::USESEL))
- {
- aRect.SetPos(aEntryPos);
- aRect.SetSize(aRectSize);
-
- Color aBackgroundColor = aWallpaper.GetColor();
- if (aBackgroundColor != COL_TRANSPARENT)
- {
- rRenderContext.SetFillColor(aBackgroundColor);
- // this case may occur for smaller horizontal resizes
- if (aRect.Left() < aRect.Right())
- rRenderContext.DrawRect(aRect);
- }
- }
-
- // center vertically
- aEntryPos.AdjustY((nTempEntryHeight - nItemHeight) / 2 );
-
- // draw item
- pViewDataEntry->SetPaintRectangle(aRect);
-
- aEntryPos.AdjustY(15 );
-
- pItem->Paint(aEntryPos, *this, rRenderContext, pViewDataEntry, rEntry);
-
- rRenderContext.SetFillColor(aBackupColor);
-
- nCurItem++;
- }
-
- // draw icon
- if(nIconItem != nItemCount && nIconItem < nItemCount)
- {
- SvLBoxItem* pItem = &rEntry.GetItem(nIconItem);
- auto nItemWidth = pItem->GetWidth(this, pViewDataEntry, nIconItem);
- auto nItemHeight = SvLBoxItem::GetHeight(pViewDataEntry, nIconItem);
-
- aEntryPos.setX( nX );
- aEntryPos.setY( nY );
-
- // center horizontally
- aEntryPos.AdjustX((nTempEntryWidth - nItemWidth) / 2 );
- // center vertically
- aEntryPos.AdjustY((nTempEntryHeight - nItemHeight) / 2 );
-
- aEntryPos.AdjustY( -10 );
-
- pItem->Paint(aEntryPos, *this, rRenderContext, pViewDataEntry, rEntry);
- }
-
- if (bCurFontIsSel)
- {
- rRenderContext.SetTextColor(aBackupTextColor);
- rRenderContext.SetFont(aBackupFont);
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/source/contnr/iconviewimpl.cxx b/svtools/source/contnr/iconviewimpl.cxx
deleted file mode 100644
index 14f3a65942f2..000000000000
--- a/svtools/source/contnr/iconviewimpl.cxx
+++ /dev/null
@@ -1,662 +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 <vcl/svapp.hxx>
-#include <svtools/iconview.hxx>
-#include <iconviewimpl.hxx>
-#include <tools/debug.hxx>
-
-IconViewImpl::IconViewImpl( SvTreeListBox* pTreeListBox, SvTreeList* pTreeList, WinBits nWinStyle )
-: SvImpLBox( pTreeListBox, pTreeList, nWinStyle )
-{
-}
-
-void IconViewImpl::CursorUp()
-{
- if (!m_pStartEntry)
- return;
-
- SvTreeListEntry* pPrevFirstToDraw = m_pStartEntry;
-
- for(short i = 0; i < m_pView->GetColumnsCount() && pPrevFirstToDraw; i++)
- pPrevFirstToDraw = m_pView->PrevVisible(pPrevFirstToDraw);
-
- if( !pPrevFirstToDraw )
- return;
-
- m_nFlags &= ~LBoxFlags::Filling;
- long nEntryHeight = m_pView->GetEntryHeight();
- ShowCursor( false );
- m_pView->Update();
- m_pStartEntry = pPrevFirstToDraw;
- tools::Rectangle aArea( GetVisibleArea() );
- aArea.AdjustBottom( -nEntryHeight );
- m_pView->Scroll( 0, nEntryHeight, aArea, ScrollFlags::NoChildren );
- m_pView->Update();
- ShowCursor( true );
- m_pView->NotifyScrolled();
-}
-
-void IconViewImpl::CursorDown()
-{
- if (!m_pStartEntry)
- return;
-
- SvTreeListEntry* pNextFirstToDraw = m_pStartEntry;
-
- for(short i = 0; i < m_pView->GetColumnsCount(); i++)
- pNextFirstToDraw = m_pView->NextVisible(pNextFirstToDraw);
-
- if( pNextFirstToDraw )
- {
- m_nFlags &= ~LBoxFlags::Filling;
- ShowCursor( false );
- m_pView->Update();
- m_pStartEntry = pNextFirstToDraw;
- tools::Rectangle aArea( GetVisibleArea() );
- m_pView->Scroll( 0, -(m_pView->GetEntryHeight()), aArea, ScrollFlags::NoChildren );
- m_pView->Update();
- ShowCursor( true );
- m_pView->NotifyScrolled();
- }
-}
-
-void IconViewImpl::PageDown( sal_uInt16 nDelta )
-{
- sal_uInt16 nRealDelta = nDelta * m_pView->GetColumnsCount();
-
- if( !nDelta )
- return;
-
- if (!m_pStartEntry)
- return;
-
- SvTreeListEntry* pNext = m_pView->NextVisible(m_pStartEntry, nRealDelta);
- if( pNext == m_pStartEntry )
- return;
-
- ShowCursor( false );
-
- m_nFlags &= ~LBoxFlags::Filling;
- m_pView->Update();
- m_pStartEntry = pNext;
-
- if( nRealDelta >= m_nVisibleCount )
- {
- m_pView->Invalidate( GetVisibleArea() );
- m_pView->Update();
- }
- else
- {
- tools::Rectangle aArea( GetVisibleArea() );
- long nScroll = m_pView->GetEntryHeight() * static_cast<long>(nRealDelta);
- nScroll = -nScroll;
- m_pView->Update();
- m_pView->Scroll( 0, nScroll, aArea, ScrollFlags::NoChildren );
- m_pView->Update();
- m_pView->NotifyScrolled();
- }
-
- ShowCursor( true );
-}
-
-void IconViewImpl::PageUp( sal_uInt16 nDelta )
-{
- sal_uInt16 nRealDelta = nDelta * m_pView->GetColumnsCount();
- if( !nDelta )
- return;
-
- if (!m_pStartEntry)
- return;
-
- SvTreeListEntry* pPrev = m_pView->PrevVisible(m_pStartEntry, nRealDelta);
- if( pPrev == m_pStartEntry )
- return;
-
- m_nFlags &= ~LBoxFlags::Filling;
- ShowCursor( false );
-
- m_pView->Update();
- m_pStartEntry = pPrev;
- if( nRealDelta >= m_nVisibleCount )
- {
- m_pView->Invalidate( GetVisibleArea() );
- m_pView->Update();
- }
- else
- {
- long nEntryHeight = m_pView->GetEntryHeight();
- tools::Rectangle aArea( GetVisibleArea() );
- m_pView->Update();
- m_pView->Scroll( 0, nEntryHeight*nRealDelta, aArea, ScrollFlags::NoChildren );
- m_pView->Update();
- m_pView->NotifyScrolled();
- }
-
- ShowCursor( true );
-}
-
-void IconViewImpl::KeyDown( bool bPageDown )
-{
- if( !m_aVerSBar->IsVisible() )
- return;
-
- long nDelta;
- if( bPageDown )
- nDelta = m_aVerSBar->GetPageSize();
- else
- nDelta = 1;
-
- long nThumbPos = m_aVerSBar->GetThumbPos();
-
- if( nDelta <= 0 )
- return;
-
- m_nFlags &= ~LBoxFlags::Filling;
- BeginScroll();
-
- m_aVerSBar->SetThumbPos( nThumbPos+nDelta );
- if( bPageDown )
- PageDown( static_cast<short>(nDelta) );
- else
- CursorDown();
-
- EndScroll();
-}
-
-void IconViewImpl::KeyUp( bool bPageUp )
-{
- if( !m_aVerSBar->IsVisible() )
- return;
-
- long nDelta;
- if( bPageUp )
- nDelta = m_aVerSBar->GetPageSize();
- else
- nDelta = 1;
-
- long nThumbPos = m_aVerSBar->GetThumbPos();
-
- if( nThumbPos < nDelta )
- nDelta = nThumbPos;
-
- if( nDelta < 0 )
- return;
-
- m_nFlags &= ~LBoxFlags::Filling;
- BeginScroll();
-
- m_aVerSBar->SetThumbPos( nThumbPos - nDelta );
- if( bPageUp )
- PageUp( static_cast<short>(nDelta) );
- else
- CursorUp();
-
- EndScroll();
-}
-
-long IconViewImpl::GetEntryLine( SvTreeListEntry* pEntry ) const
-{
- if(!m_pStartEntry )
- return -1; // invisible position
-
- long nFirstVisPos = m_pView->GetVisiblePos( m_pStartEntry );
- long nEntryVisPos = m_pView->GetVisiblePos( pEntry );
- nFirstVisPos = nEntryVisPos - nFirstVisPos;
-
- return nFirstVisPos;
-}
-
-Point IconViewImpl::GetEntryPosition( SvTreeListEntry* pEntry ) const
-{
- const int pos = m_pView->GetAbsPos( pEntry );
-
- return Point( ( pos % m_pView->GetColumnsCount() ) * m_pView->GetEntryWidth(),
- ( pos / m_pView->GetColumnsCount() ) * m_pView->GetEntryHeight() );
-}
-
-SvTreeListEntry* IconViewImpl::GetClickedEntry( const Point& rPoint ) const
-{
- DBG_ASSERT( m_pView->GetModel(), "IconViewImpl::GetClickedEntry: how can this ever happen?" );
- if ( !m_pView->GetModel() )
- return nullptr;
- if( m_pView->GetEntryCount() == 0 || !m_pStartEntry || !m_pView->GetEntryHeight() || !m_pView->GetEntryWidth())
- return nullptr;
-
- sal_uInt16 nY = static_cast<sal_uInt16>(rPoint.Y() / m_pView->GetEntryHeight() );
- sal_uInt16 nX = static_cast<sal_uInt16>(rPoint.X() / m_pView->GetEntryWidth() );
- sal_uInt16 nTemp = nY * m_pView->GetColumnsCount() + nX;
-
- SvTreeListEntry* pEntry = m_pView->NextVisible(m_pStartEntry, nTemp);
-
- return pEntry;
-}
-
-bool IconViewImpl::IsEntryInView( SvTreeListEntry* pEntry ) const
-{
- // parent collapsed
- if( !m_pView->IsEntryVisible(pEntry) )
- return false;
-
- long nY = GetEntryLine( pEntry ) / m_pView->GetColumnsCount() * m_pView->GetEntryHeight();
- if( nY < 0 )
- return false;
-
- long nMax = m_nVisibleCount / m_pView->GetColumnsCount() * m_pView->GetEntryHeight();
- if( nY >= nMax )
- return false;
-
- long nStart = GetEntryLine( pEntry ) - GetEntryLine( m_pStartEntry );
- return nStart >= 0;
-}
-
-void IconViewImpl::AdjustScrollBars( Size& rSize )
-{
- long nEntryHeight = m_pView->GetEntryHeight();
- if( !nEntryHeight )
- return;
-
- sal_uInt16 nResult = 0;
-
- Size aOSize( m_pView->Control::GetOutputSizePixel() );
-
- const WinBits nWindowStyle = m_pView->GetStyle();
- bool bVerSBar = ( nWindowStyle & WB_VSCROLL ) != 0;
-
- // number of entries that are not collapsed
- sal_uLong nTotalCount = m_pView->GetVisibleCount();
-
- // number of entries visible within the view
- m_nVisibleCount = aOSize.Height() / nEntryHeight * m_pView->GetColumnsCount();
-
- long nRows = ( nTotalCount / m_pView->GetColumnsCount() ) + 1;
-
- // do we need a vertical scrollbar?
- if( bVerSBar || nTotalCount > m_nVisibleCount )
- {
- nResult = 1;
- }
-
- PositionScrollBars( aOSize, nResult );
-
- // adapt Range, VisibleRange etc.
-
- // refresh output size, in case we have to scroll
- tools::Rectangle aRect;
- aRect.SetSize( aOSize );
- m_aSelEng.SetVisibleArea( aRect );
-
- // vertical scrollbar
- if( !m_bInVScrollHdl )
- {
- m_aVerSBar->SetPageSize( nTotalCount );
- m_aVerSBar->SetVisibleSize( nTotalCount - nRows );
- }
- else
- {
- m_nFlags |= LBoxFlags::EndScrollSetVisSize;
- }
-
- if( nResult & 0x0001 )
- m_aVerSBar->Show();
- else
- m_aVerSBar->Hide();
-
- rSize = aOSize;
-}
-
-// returns 0 if position is just past the last entry
-SvTreeListEntry* IconViewImpl::GetEntry( const Point& rPoint ) const
-{
- if( (m_pView->GetEntryCount() == 0) || !m_pStartEntry ||
- (rPoint.Y() > m_aOutputSize.Height())
- || !m_pView->GetEntryHeight()
- || !m_pView->GetEntryWidth())
- return nullptr;
-
- sal_uInt16 nClickedEntry = static_cast<sal_uInt16>(rPoint.Y() / m_pView->GetEntryHeight() * m_pView->GetColumnsCount() + rPoint.X() / m_pView->GetEntryWidth() );
- sal_uInt16 nTemp = nClickedEntry;
- SvTreeListEntry* pEntry = m_pView->NextVisible(m_pStartEntry, nTemp);
- if( nTemp != nClickedEntry )
- pEntry = nullptr;
- return pEntry;
-}
-
-void IconViewImpl::SyncVerThumb()
-{
- if( m_pStartEntry )
- {
- long nEntryPos = m_pView->GetVisiblePos( m_pStartEntry );
- m_aVerSBar->SetThumbPos( nEntryPos );
- }
- else
- m_aVerSBar->SetThumbPos( 0 );
-}
-
-void IconViewImpl::UpdateAll( bool bInvalidateCompleteView )
-{
- FindMostRight( nullptr );
- m_aVerSBar->SetRange( Range( 0, m_pView->GetVisibleCount() ) );
- SyncVerThumb();
- FillView();
- ShowVerSBar();
- if( m_bSimpleTravel && m_pCursor && m_pView->HasFocus() )
- m_pView->Select( m_pCursor );
- ShowCursor( true );
- if( bInvalidateCompleteView )
- m_pView->Invalidate();
- else
- m_pView->Invalidate( GetVisibleArea() );
-}
-
-void IconViewImpl::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect)
-{
- if (!m_pView->GetVisibleCount())
- return;
-
- m_nFlags |= LBoxFlags::InPaint;
-
- if (m_nFlags & LBoxFlags::Filling)
- {
- SvTreeListEntry* pFirst = m_pView->First();
- if (pFirst != m_pStartEntry)
- {
- ShowCursor(false);
- m_pStartEntry = m_pView->First();
- m_aVerSBar->SetThumbPos( 0 );
- StopUserEvent();
- ShowCursor(true);
- m_nCurUserEvent = Application::PostUserEvent(LINK(this, SvImpLBox, MyUserEvent),
- reinterpret_cast<void*>(1));
- return;
- }
- }
-
- if (!m_pStartEntry)
- {
- m_pStartEntry = m_pView->First();
- }
-
- long nRectHeight = rRect.GetHeight();
- long nRectWidth = rRect.GetWidth();
- long nEntryHeight = m_pView->GetEntryHeight();
- long nEntryWidth = m_pView->GetEntryWidth();
-
- // calculate area for the entries we want to draw
- sal_uInt16 nStartId = static_cast<sal_uInt16>(rRect.Top() / nEntryHeight * m_pView->GetColumnsCount() + (rRect.Left() / nEntryWidth));
- sal_uInt16 nCount = static_cast<sal_uInt16>(( nRectHeight / nEntryHeight + 1 ) * nRectWidth / nEntryWidth);
- nCount += 2; // don't miss an entry
-
- long nY = nStartId / m_pView->GetColumnsCount() * nEntryHeight;
- long nX = 0;
- SvTreeListEntry* pEntry = m_pStartEntry;
- while (nStartId && pEntry)
- {
- pEntry = m_pView->NextVisible(pEntry);
- nStartId--;
- }
-
- vcl::Region aClipRegion(GetClipRegionRect());
-
- if (!m_pCursor && !mbNoAutoCurEntry)
- {
- // do not select if multiselection or explicit set
- bool bNotSelect = (m_aSelEng.GetSelectionMode() == SelectionMode::Multiple ) || ((m_nStyle & WB_NOINITIALSELECTION) == WB_NOINITIALSELECTION);
- SetCursor(m_pStartEntry, bNotSelect);
- }
-
- for(sal_uInt16 n = 0; n< nCount && pEntry; n++)
- {
- static_cast<IconView*>(m_pView.get())->PaintEntry(*pEntry, nX, nY, rRenderContext);
- nX += nEntryWidth;
-
- if(nX + m_pView->GetEntryWidth() > nEntryWidth * m_pView->GetColumnsCount())
- {
- nY += nEntryHeight;
- nX = 0;
- }
- pEntry = m_pView->NextVisible(pEntry);
- }
-
- m_nFlags &= ~LBoxFlags::DeselectAll;
- rRenderContext.SetClipRegion();
- m_nFlags &= ~LBoxFlags::InPaint;
-}
-
-void IconViewImpl::InvalidateEntry( long nId ) const
-{
- if( m_nFlags & LBoxFlags::InPaint )
- return;
-
- tools::Rectangle aRect( GetVisibleArea() );
- long nMaxBottom = aRect.Bottom();
- aRect.SetTop( nId / m_pView->GetColumnsCount() * m_pView->GetEntryHeight() );
- aRect.SetBottom( aRect.Top() ); aRect.AdjustBottom(m_pView->GetEntryHeight() );
-
- if( aRect.Top() > nMaxBottom )
- return;
- if( aRect.Bottom() > nMaxBottom )
- aRect.SetBottom( nMaxBottom );
- m_pView->Invalidate( aRect );
-}
-
-bool IconViewImpl::KeyInput( const KeyEvent& rKEvt )
-{
- const vcl::KeyCode& rKeyCode = rKEvt.GetKeyCode();
-
- if( rKeyCode.IsMod2() )
- return false; // don't evaluate Alt key
-
- m_nFlags &= ~LBoxFlags::Filling;
-
- if( !m_pCursor )
- m_pCursor = m_pStartEntry;
- if( !m_pCursor )
- return false;
-
- sal_uInt16 aCode = rKeyCode.GetCode();
-
- bool bShift = rKeyCode.IsShift();
- bool bMod1 = rKeyCode.IsMod1();
-
- SvTreeListEntry* pNewCursor;
-
- bool bHandled = true;
-
- long i;
- long nColumns = m_pView->GetColumnsCount();
-
- switch( aCode )
- {
- case KEY_LEFT:
- if( !IsEntryInView( m_pCursor ) )
- MakeVisible( m_pCursor );
-
- pNewCursor = m_pCursor;
- do
- {
- pNewCursor = m_pView->PrevVisible(pNewCursor);
- } while( pNewCursor && !IsSelectable(pNewCursor) );
-
- // if there is no next entry, take the current one
- // this ensures that in case of _one_ entry in the list, this entry is selected when pressing
- // the cursor key
- if (!pNewCursor)
- pNewCursor = m_pCursor;
-
- m_aSelEng.CursorPosChanging( bShift, bMod1 );
- SetCursor( pNewCursor, bMod1 ); // no selection, when Ctrl is on
- if( !IsEntryInView( pNewCursor ) )
- KeyUp( false );
- break;
-
- case KEY_RIGHT:
- if( !IsEntryInView( m_pCursor ) )
- MakeVisible( m_pCursor );
-
- pNewCursor = m_pCursor;
- do
- {
- pNewCursor = m_pView->NextVisible(pNewCursor);
- } while( pNewCursor && !IsSelectable(pNewCursor) );
-
- // if there is no next entry, take the current one
- // this ensures that in case of _one_ entry in the list, this entry is selected when pressing
- // the cursor key
- if ( !pNewCursor && m_pCursor )
- pNewCursor = m_pCursor;
-
- if( pNewCursor )
- {
- m_aSelEng.CursorPosChanging( bShift, bMod1 );
- if( IsEntryInView( pNewCursor ) )
- SetCursor( pNewCursor, bMod1 ); // no selection, when Ctrl is on
- else
- {
- if( m_pCursor )
- m_pView->Select( m_pCursor, false );
- KeyDown( false );
- SetCursor( pNewCursor, bMod1 ); // no selection, when Ctrl is on
- }
- }
- else
- KeyDown( false ); // because scrollbar range might still
- // allow scrolling
- break;
-
- case KEY_UP:
- {
- if( !IsEntryInView( m_pCursor ) )
- MakeVisible( m_pCursor );
-
- pNewCursor = m_pCursor;
- for( i = 0; i < nColumns && pNewCursor; i++)
- {
- do
- {
- pNewCursor = m_pView->PrevVisible(pNewCursor);
- } while( pNewCursor && !IsSelectable(pNewCursor) );
- }
-
- // if there is no next entry, take the current one
- // this ensures that in case of _one_ entry in the list, this entry is selected when pressing
- // the cursor key
- if ( !pNewCursor && m_pCursor )
- pNewCursor = m_pCursor;
-
- if( pNewCursor )
- {
- m_aSelEng.CursorPosChanging( bShift, bMod1 );
- SetCursor( pNewCursor, bMod1 ); // no selection, when Ctrl is on
- if( !IsEntryInView( pNewCursor ) )
- KeyUp( false );
- }
- break;
- }
-
- case KEY_DOWN:
- {
- if( !IsEntryInView( m_pCursor ) )
- MakeVisible( m_pCursor );
-
- pNewCursor = m_pCursor;
- for( i = 0; i < nColumns && pNewCursor; i++)
- {
- do
- {
- pNewCursor = m_pView->NextVisible(pNewCursor);
- } while( pNewCursor && !IsSelectable(pNewCursor) );
- }
-
- // if there is no next entry, take the current one
- // this ensures that in case of _one_ entry in the list, this entry is selected when pressing
- // the cursor key
- if ( !pNewCursor && m_pCursor )
- pNewCursor = m_pCursor;
-
- if( pNewCursor )
- {
- m_aSelEng.CursorPosChanging( bShift, bMod1 );
- if( IsEntryInView( pNewCursor ) )
- SetCursor( pNewCursor, bMod1 ); // no selection, when Ctrl is on
- else
- {
- if( m_pCursor )
- m_pView->Select( m_pCursor, false );
- KeyDown( false );
- SetCursor( pNewCursor, bMod1 ); // no selection, when Ctrl is on
- }
- }
- else
- KeyDown( false ); // because scrollbar range might still
- // allow scrolling
- break;
- }
-
- case KEY_RETURN:
- {
- m_pView->aDoubleClickHdl.Call( m_pView );
- bHandled = true;
-
- break;
- }
-
- case KEY_END:
- {
- pNewCursor = m_pView->GetModel()->Last();
-
- while( pNewCursor && !IsSelectable(pNewCursor) )
- {
- pNewCursor = m_pView->PrevVisible(pNewCursor);
- }
-
- m_pStartEntry = pNewCursor;
-
- while( m_pStartEntry && m_pView->GetAbsPos( m_pStartEntry ) % m_pView->GetColumnsCount() != 0 )
- {
- m_pStartEntry = m_pView->PrevVisible(m_pStartEntry);
- }
-
- if( pNewCursor && pNewCursor != m_pCursor)
- {
-// SelAllDestrAnch( false );
- m_aSelEng.CursorPosChanging( bShift, bMod1 );
- SetCursor( pNewCursor );
- SyncVerThumb();
- }
-
- bHandled = true;
-
- break;
- }
-
- default:
- {
- bHandled = false;
- break;
- }
- }
-
- if(!bHandled)
- return SvImpLBox::KeyInput( rKEvt );
-
- return true;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/source/contnr/querydelete.cxx b/svtools/source/contnr/querydelete.cxx
new file mode 100644
index 000000000000..334d75eac300
--- /dev/null
+++ b/svtools/source/contnr/querydelete.cxx
@@ -0,0 +1,35 @@
+/* -*- 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 <svtools/querydelete.hxx>
+
+namespace svtools
+{
+QueryDeleteDlg_Impl::QueryDeleteDlg_Impl(weld::Widget* pParent, const OUString& rName)
+ : MessageDialogController(pParent, "svt/ui/querydeletedialog.ui", "QueryDeleteDialog")
+ , m_xAllButton(m_xBuilder->weld_button("all"))
+{
+ // display specified texts
+ m_xDialog->set_secondary_text(m_xDialog->get_secondary_text().replaceFirst("%s", rName));
+}
+
+QueryDeleteDlg_Impl::~QueryDeleteDlg_Impl() {}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/source/control/inettbc.cxx b/svtools/source/control/inettbc.cxx
index 7f1a940f1981..2b359eb06509 100644
--- a/svtools/source/control/inettbc.cxx
+++ b/svtools/source/control/inettbc.cxx
@@ -53,7 +53,7 @@
#include <ucbhelper/content.hxx>
#include <unotools/ucbhelper.hxx>
#include <svtools/asynclink.hxx>
-#include <svl/urlfilter.hxx>
+#include <svtools/urlfilter.hxx>
#include <vector>
#include <algorithm>
@@ -2202,4 +2202,28 @@ void URLBox::SetFilter(const OUString& _sFilter)
FilterMatch::createWildCardFilterList(_sFilter,pImpl->m_aFilters);
}
+void FilterMatch::createWildCardFilterList(const OUString& _rFilterList,::std::vector< WildCard >& _rFilters)
+{
+ if( _rFilterList.getLength() )
+ {
+ // filter is given
+ sal_Int32 nIndex = 0;
+ OUString sToken;
+ do
+ {
+ sToken = _rFilterList.getToken( 0, ';', nIndex );
+ if ( !sToken.isEmpty() )
+ {
+ _rFilters.emplace_back( sToken.toAsciiUpperCase() );
+ }
+ }
+ while ( nIndex >= 0 );
+ }
+ else
+ {
+ // no filter is given -> match all
+ _rFilters.emplace_back("*" );
+ }
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/source/inc/iconviewimpl.hxx b/svtools/source/inc/iconviewimpl.hxx
deleted file mode 100644
index df11f5952426..000000000000
--- a/svtools/source/inc/iconviewimpl.hxx
+++ /dev/null
@@ -1,68 +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 .
- */
-
-#ifndef INCLUDED_VCL_SOURCE_INC_ICONVIEWIMPL_HXX
-#define INCLUDED_VCL_SOURCE_INC_ICONVIEWIMPL_HXX
-
-#include <vcl/svimpbox.hxx>
-
-class SvTreeListBox;
-class Point;
-
-class IconViewImpl : public SvImpLBox
-{
-public:
- IconViewImpl( SvTreeListBox* pTreeListBox, SvTreeList* pTreeList, WinBits nWinStyle );
-
- void KeyDown( bool bPageDown ) override;
-
- void KeyUp( bool bPageUp ) override;
-
- Point GetEntryPosition( SvTreeListEntry* pEntry ) const override;
-
- SvTreeListEntry* GetClickedEntry( const Point& rPoint ) const override;
-
- bool IsEntryInView( SvTreeListEntry* pEntry ) const override;
-
- void Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect ) override;
-
- // returns 0 if position is just past the last entry
- SvTreeListEntry* GetEntry( const Point& rPoint ) const override;
-
- void UpdateAll( bool bInvalidateCompleteView ) override;
-
- bool KeyInput( const KeyEvent& ) override;
-
- void InvalidateEntry( long nId ) const override;
-
-protected:
- long GetEntryLine( SvTreeListEntry* pEntry ) const override;
-
- void CursorUp() override;
- void CursorDown() override;
- void PageDown( sal_uInt16 nDelta ) override;
- void PageUp( sal_uInt16 nDelta ) override;
-
- void SyncVerThumb() override;
- void AdjustScrollBars( Size& rSize ) override;
-};
-
-#endif // INCLUDED_VCL_SOURCE_INC_ICONVIEWIMPL_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */