27#include <osl/mutex.hxx>
37void fillSuffixList(
OUStringList& aSuffixList, std::u16string_view suffixString) {
40 std::u16string_view aToken =
o3tl::getToken( suffixString, u
';', nIndex );
41 aSuffixList.push_back(OUString(aToken.substr(1)));
42 }
while ( nIndex != std::u16string_view::npos );
49#pragma mark FilterEntry
51FilterEntry::FilterEntry(
const OUString& _rTitle,
const UnoFilterList& _rSubFilters )
53,m_aSubFilters( _rSubFilters )
58bool FilterEntry::hasSubFilters()
const
60 bool bReturn = ( 0 < m_aSubFilters.getLength() );
66sal_Int32 FilterEntry::getSubFilters(
UnoFilterList& _rSubFilterList )
68 _rSubFilterList = m_aSubFilters;
69 sal_Int32 nReturn = m_aSubFilters.getLength();
76isFilterString( std::u16string_view rFilterString, std::u16string_view pMatch )
79 std::u16string_view aToken;
80 bool bIsFilter =
true;
91 while(
nIndex != std::u16string_view::npos );
101 sal_Int32 nBracketEnd = -1;
102 OUString aRealName(aFilterName);
104 for( sal_Int32
i = aRealName.getLength() - 1;
i > 0;
i-- )
106 if( aFilterName[
i] ==
')' )
108 else if( aFilterName[
i] ==
'(' )
110 sal_Int32 nBracketLen = nBracketEnd -
i;
111 if( nBracketEnd <= 0 )
113 if(
isFilterString( aFilterName.subView(
i + 1, nBracketLen - 1 ),
u"*." ) )
114 aRealName = aRealName.replaceAt(
i, nBracketLen + 1,
u"" );
115 else if (bAllowNoStar)
118 aRealName = aRealName.replaceAt(
i, nBracketLen + 1,
u"" );
129 struct FilterTitleMatch
132 const OUString rTitle;
135 FilterTitleMatch(
const OUString& _rTitle ) : rTitle( _rTitle ) { }
141 if( !_rEntry.hasSubFilters() ) {
143 OUString title = _rEntry.getTitle();
144 bMatch = title.equals(rTitle);
149 bMatch = aShrunkName.equals(rTitle);
155 ::std::any_of(_rEntry.beginSubFilters(),
156 _rEntry.endSubFilters(),
165 bool retVal = aShrunkName.equals(rTitle);
172: m_pFilterList(nullptr)
173, m_pFilterNames(nullptr)
179 NSAutoreleasePool *pool = [NSAutoreleasePool
new];
205 FilterTitleMatch( rTitle ));
218 const UnoFilterEntry* pEnd = pStart + _rGroupedFilters.getLength();
219 for( ; pStart != pEnd; ++pStart )
222 FilterTitleMatch( pStart->First ) ) )
225 bRet = (pStart != pEnd);
268 throw css::lang::IllegalArgumentException();
276 fillSuffixList(suffixList, aFilterString);
300 OUString sInitialCurrentFilter;
301 if( aFilters.getLength() > 0)
302 sInitialCurrentFilter = aFilters[0].First;
306 if (bPrependSeparator) {
311 const css::beans::StringPair* pSubFilters = aFilters.getConstArray();
312 const css::beans::StringPair* pSubFiltersEnd = pSubFilters + aFilters.getLength();
313 for( ; pSubFilters != pSubFiltersEnd; ++pSubFilters ) {
321 SAL_WARN(
"fpicker",
"filter name is empty");
325 NSFileManager *
manager = [NSFileManager defaultManager];
326 NSDictionary* pAttribs = [
manager attributesOfItemAtPath: sFilename error: nil];
329 NSObject* pType = [pAttribs objectForKey: NSFileType];
330 if( pType && [pType isKindOfClass: [NSString
class]] )
332 NSString* pT =
static_cast<NSString*
>(pType);
333 if( [pT isEqualToString: NSFileTypeDirectory] ||
334 [pT isEqualToString: NSFileTypeSymbolicLink] )
341 SAL_WARN(
"fpicker",
"filter not found in list");
348 OUString
aName = [sFilename OUString];
349 for(OUStringList::iterator iter = suffixList.begin(); iter != suffixList.end(); ++iter) {
350 if (*iter ==
".*" ||
aName.endsWithIgnoreAsciiCase(*iter)) {
361 [pResolved autorelease];
382 m_pFilterNames->push_back([[NSString stringWithOUString:iter->getTitle()] retain]);
404 OUString aTitle = iter->getTitle();
426 OUString aTitle = iter->getTitle();
428 retVal = iter->getFilterSuffixList();
433 retVal = iter->getFilterSuffixList();
::std::vector< FilterEntry > FilterList
css::uno::Sequence< UnoFilterEntry > UnoFilterList
::std::list< OUString > OUStringList
css::beans::StringPair UnoFilterEntry
::std::list< NSString * > NSStringList
static bool isFilterString(std::u16string_view rFilterString, std::u16string_view pMatch)
static OUString shrinkFilterName(const OUString &aFilterName, bool bAllowNoStar=false)
NSString * resolveAlias(NSString *i_pSystemPath)
int getCurrentFilterIndex()
void SetCurFilter(const OUString &rFilter)
OUString getCurrentFilter()
void ensureFilterList(const OUString &_rInitialCurrentFilter)
bool filenameMatchesFilter(NSString *sFilename)
void appendFilter(const OUString &aTitle, std::u16string_view aFilter)
FilterList * m_pFilterList
OUString m_aCurrentFilter
FilterList * getFilterList()
bool FilterNameExists(const OUString &rTitle)
void appendFilterGroup(const css::uno::Sequence< css::beans::StringPair > &aFilters)
NSStringList * m_pFilterNames
OUStringList getCurrentFilterSuffixList()
void SetFilterAtIndex(unsigned index)
NSStringList * getFilterNames()
void setCurrentFilter(const OUString &aTitle)
rtl::Reference< ParseManager > manager
#define SAL_WARN(area, stream)
constexpr bool starts_with(std::basic_string_view< charT, traits > sv, std::basic_string_view< charT, traits > x) noexcept
std::basic_string_view< charT, traits > getToken(std::basic_string_view< charT, traits > sv, charT delimiter, std::size_t &position)