1
0
Fork 0
libreoffice/ucb/source/ucp/hierarchy/hierarchydata.hxx
Daniel Baumann 8e63e14cf6
Adding upstream version 4:25.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 16:20:04 +02:00

134 lines
4.3 KiB
C++

/* -*- 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: */