/* -*- 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 .
*/
#pragma once
#include <rtl/ustring.hxx>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <mutex>
namespace com::sun::star {
namespace container {
class XHierarchicalNameAccess;
}
namespace util {
class XOfficeInstallationDirectories;
}
}
namespace hierarchy_ucp
{
class HierarchyEntryData
{
public :
enum Type { NONE, LINK, FOLDER };
HierarchyEntryData() : m_aType( NONE ) {}
explicit HierarchyEntryData( const Type & rType ) : m_aType( rType ) {}
const OUString & getName() const { return m_aName; }
void setName( const OUString & rName ) { m_aName = rName; }
const OUString & getTitle() const { return m_aTitle; }
void setTitle( const OUString & rTitle ) { m_aTitle = rTitle; }
const OUString & getTargetURL() const { return m_aTargetURL; }
void setTargetURL( const OUString & rURL ) { m_aTargetURL = rURL; }
Type getType() const
{ return ( m_aType != NONE ) ? m_aType
: m_aTargetURL.getLength()
? LINK
: FOLDER; }
void setType( const Type & rType ) { m_aType = rType; }
private :
OUString m_aName; // Name (language independent)
OUString m_aTitle; // Title (language dependent)
OUString m_aTargetURL; // Target URL ( links only )
Type m_aType; // Type
};
class HierarchyContentProvider;
class HierarchyUri;
class HierarchyEntry
{
OUString m_aServiceSpecifier;
OUString m_aName;
OUString m_aPath;
std::mutex m_aMutex;
css::uno::Reference< css::uno::XComponentContext > m_xContext;
css::uno::Reference< css::lang::XMultiServiceFactory > m_xConfigProvider;
css::uno::Reference< css::container::XHierarchicalNameAccess >
m_xRootReadAccess;
css::uno::Reference< css::util::XOfficeInstallationDirectories >
m_xOfficeInstDirs;
bool m_bTriedToGetRootReadAccess;
private :
static OUString createPathFromHierarchyURL( const HierarchyUri & rURI );
css::uno::Reference< css::container::XHierarchicalNameAccess >
getRootReadAccess();
public :
HierarchyEntry( css::uno::Reference< css::uno::XComponentContext > xContext,
HierarchyContentProvider* pProvider,
const OUString& rURL );
bool hasData();
bool getData( HierarchyEntryData& rData );
bool setData( const HierarchyEntryData& rData );
bool move( const OUString& rNewURL,
const HierarchyEntryData& rData );
bool remove();
// Iteration.
class iterator
{
friend class HierarchyEntry;
public :
iterator() : pos( -1 /* before first */ ) {};
const HierarchyEntryData& operator *();
private :
HierarchyEntryData entry;
css::uno::Reference< css::container::XHierarchicalNameAccess > dir;
css::uno::Reference< css::util::XOfficeInstallationDirectories > officeDirs;
css::uno::Sequence< OUString> names;
sal_Int32 pos;
};
bool first( iterator& it );
bool next ( iterator& it );
};
} // namespace hierarchy_ucp
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Messung V0.5 in Prozent C=85 H=94 G=89
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-10-11)
¤
*© Formatika GbR, Deutschland