1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
/* -*- 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_TREELISTENTRY_HXX
#define INCLUDED_VCL_TREELISTENTRY_HXX
#include <vcl/dllapi.h>
#include <tools/solar.h>
#include <tools/color.hxx>
#include <vcl/treelistbox.hxx>
#include <vcl/treelistentries.hxx>
#include <o3tl/typed_flags_set.hxx>
#include <optional>
#include <vector>
#include <memory>
// flags related to the model
enum class SvTLEntryFlags
{
NONE = 0x0000,
CHILDREN_ON_DEMAND = 0x0001,
DISABLE_DROP = 0x0002,
// is set if RequestingChildren has not set any children
NO_NODEBMP = 0x0004,
// entry had or has children
HAD_CHILDREN = 0x0010,
SEMITRANSPARENT = 0x8000, // draw semi-transparent entry bitmaps
};
namespace o3tl
{
template<> struct typed_flags<SvTLEntryFlags> : is_typed_flags<SvTLEntryFlags, 0x8017> {};
}
class VCL_DLLPUBLIC SvTreeListEntry
{
friend class SvTreeList;
friend class SvListView;
friend class SvTreeListBox;
typedef std::vector<std::unique_ptr<SvLBoxItem>> ItemsType;
SvTreeListEntry* pParent;
SvTreeListEntries m_Children;
sal_uLong nAbsPos;
sal_uLong nListPos;
sal_uInt32 mnExtraIndent;
ItemsType m_Items;
void* pUserData;
SvTLEntryFlags nEntryFlags;
Color maBackColor;
std::optional<Color> mxTextColor;
private:
void ClearChildren();
void SetListPositions();
void InvalidateChildrensListPositions();
SvTreeListEntry(const SvTreeListEntry& r) = delete;
void operator=(SvTreeListEntry const&) = delete;
public:
static const size_t ITEM_NOT_FOUND = SAL_MAX_SIZE;
SvTreeListEntry();
virtual ~SvTreeListEntry();
bool HasChildren() const;
bool HasChildListPos() const;
sal_uLong GetChildListPos() const;
SvTreeListEntries& GetChildEntries() { return m_Children; }
const SvTreeListEntries& GetChildEntries() const { return m_Children; }
void Clone(SvTreeListEntry* pSource);
size_t ItemCount() const;
// MAY ONLY BE CALLED IF THE ENTRY HAS NOT YET BEEN INSERTED INTO
// THE MODEL, AS OTHERWISE NO VIEW-DEPENDENT DATA ARE ALLOCATED
// FOR THE ITEM!
void AddItem(std::unique_ptr<SvLBoxItem> pItem);
void ReplaceItem(std::unique_ptr<SvLBoxItem> pNewItem, size_t nPos);
const SvLBoxItem& GetItem( size_t nPos ) const;
SvLBoxItem& GetItem( size_t nPos );
const SvLBoxItem* GetFirstItem(SvLBoxItemType eType) const;
SvLBoxItem* GetFirstItem(SvLBoxItemType eType);
size_t GetPos( const SvLBoxItem* pItem ) const;
void* GetUserData() const { return pUserData;}
void SetUserData( void* pPtr );
void EnableChildrenOnDemand( bool bEnable=true );
bool HasChildrenOnDemand() const;
SvTLEntryFlags GetFlags() const { return nEntryFlags;}
void SetFlags( SvTLEntryFlags nFlags );
void SetBackColor( const Color& rColor ) { maBackColor = rColor; }
const Color& GetBackColor() const { return maBackColor; }
void SetTextColor( std::optional<Color> xColor ) { mxTextColor = xColor; }
std::optional<Color> const & GetTextColor() const { return mxTextColor; }
void SetExtraIndent(sal_uInt32 nExtraIndent) { mnExtraIndent = nExtraIndent; }
sal_uInt32 GetExtraIndent() const { return mnExtraIndent; }
SvTreeListEntry* GetParent() const { return pParent; }
SvTreeListEntry* NextSibling() const;
SvTreeListEntry* PrevSibling() const;
SvTreeListEntry* LastSibling() const;
};
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|