summaryrefslogtreecommitdiffstats
path: root/item/source/base/ItemBase.cxx
blob: 08dcc25ab8eb00a1aa490bf7ebcb2d83396c2467 (plain)
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
/* -*- 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 <item/base/ItemBase.hxx>
#include <item/base/ItemAdministrator.hxx>
#include <item/base/ItemControlBlock.hxx>
#include <cassert>

///////////////////////////////////////////////////////////////////////////////
// derived items from : public SfxPoolItem -> 123
// derived from these not yet evaluated. do on demand...
/*

class SbxItem : public SfxPoolItem
-> basctl::Item::Sbx
-> SID_BASICIDE_ARG_SBX
-> Done!
-> Now moved to use ::ItemSet and new ExecuteList2, no more SlotSet

class SfxInt16Item
-> Item::CntInt16
-> SID_ATTR_TRANSFORM_ANCHOR -> need own type to replace in ItemSet -> Item::TransformAnchor
-> replace using TransformAnchor and ItemSet -> done!

defs from sfx2\sdi\sfxitems.sdi may be a good hint which items to convert first (?)
these are:
    item void       SfxVoidItem;
    item BOOL       SfxBoolItem;
    item INT32      SfxUInt16Item;
    item INT16      SfxInt16Item;
    item INT32      SfxUInt32Item;
    item INT32      SfxInt32Item;
    item String     SfxStringItem;
    item BYTE       SfxByteItem;
    item INT16      SfxEnumItem;

    item String     SfxObjectItem;          //! Dummy
    item String     SfxTemplateItem;        //! Dummy
    item String     SfxMacroInfoItem;       //! Dummy
    item String     SfxImageItem;           //! Dummy
    item String     SfxObjectShellItem      //! Dummy
    item String     SfxUnoAnyItem           //! Dummy
    item String     SfxUnoFrameItem         //! Dummy
    item String     SfxWatermarkItem        //! Dummy

    item Point SfxPointItem;
    item Rectangle SfxRectangleItem;
    item DocInfo SfxDocumentInfoItem;
    item SvxSearch SvxSearchItem;
    item SvxSize SvxSizeItem;
    item SfxScriptOrganizer SfxScriptOrganizerItem;
    item String     SvxClipboardFormatItem;    //! Dummy
    item SvxZoom SvxZoomItem;

class SvxChartColorTableItem : public SfxPoolItem
-> only uses SID_SCH_EDITOPTIONS, currently has non-static members, but no need for them
-> change this in master first
SID_SCH_EDITOPTIONS uses SfxItemPool from SfxShell::GetPool(), so maybe use
SfxShell::SetPool and debug/break to check who/how and what kind of pool is to be set/used
in that cases
Uses
    const SfxPoolItem* SfxItemSet::Put( const SfxPoolItem& rItem, sal_uInt16 nWhich )
which sets the item, adds it to the SfxItemPool using
                    const SfxPoolItem& rNew = m_pPool->Put( rItem, nWhich );
and does trigger ::Changed broadcasts based on SfxItemPool::IsWhich (nId <= SFX_WHICH_MAX, SFX_WHICH_MAX = 4999)
Uses
    const SfxPoolItem& SfxItemPool::Put( const SfxPoolItem& rItem, sal_uInt16 nWhich )
that checks
    bool bSID = IsSlot(nWhich);
and if yes - so for all SlotItems - (nId > SFX_WHICH_MAX, , SFX_WHICH_MAX = 4999) just
- clones the item using SfxPoolItem *pPoolItem = rItem.Clone(pImpl->mpMaster);
- adds the item using AddRef( *pPoolItem );
These Items are NOT added to the ItemLists in The SfxItemPool(!), only to the SfxItemSet
using the SfxItemPool::Put call, only their RefCount keeps them alive.
Nonetheless these SlotItems STILL depend on the SfxItem-RANGES defined in the SfxItemSet
-> SLOT ITEMS do NOT get POOLED (IsItemPoolable/IsPooledItem/...)
-> SLOT ITEMS can be put in *any* ItemPool - due to not using the pooling mechanism

class DriverPoolingSettingsItem final : public SfxPoolItem
class DatabaseMapItem final : public SfxPoolItem
class DbuTypeCollectionItem : public SfxPoolItem
class OptionalBoolItem : public SfxPoolItem
class OStringListItem : public SfxPoolItem
class AVMEDIA_DLLPUBLIC MediaItem : public SfxPoolItem
class EDITENG_DLLPUBLIC SvxBoxItem : public SfxPoolItem
class EDITENG_DLLPUBLIC SvxBoxInfoItem : public SfxPoolItem
class EDITENG_DLLPUBLIC SvxBrushItem : public SfxPoolItem
class EDITENG_DLLPUBLIC SvxBulletItem : public SfxPoolItem
class EDITENG_DLLPUBLIC SvxColorItem : public SfxPoolItem
class EDITENG_DLLPUBLIC SvxFontHeightItem : public SfxPoolItem
class EDITENG_DLLPUBLIC SvxFieldItem : public SfxPoolItem
class EDITENG_DLLPUBLIC SvxFontListItem : public SfxPoolItem
class EDITENG_DLLPUBLIC SvxFontItem : public SfxPoolItem
class EDITENG_DLLPUBLIC SvxHyphenZoneItem : public SfxPoolItem
class EDITENG_DLLPUBLIC SvxLineItem : public SfxPoolItem
class EDITENG_DLLPUBLIC SvxLRSpaceItem : public SfxPoolItem
class EDITENG_DLLPUBLIC SvxNumBulletItem : public SfxPoolItem
class EDITENG_DLLPUBLIC SfxHyphenRegionItem: public SfxPoolItem
class EDITENG_DLLPUBLIC SvxProtectItem : public SfxPoolItem
class EDITENG_DLLPUBLIC SvxSizeItem : public SfxPoolItem
class EDITENG_DLLPUBLIC SvxTabStopItem : public SfxPoolItem
class EDITENG_DLLPUBLIC SvxTwoLinesItem : public SfxPoolItem
class EDITENG_DLLPUBLIC SvxULSpaceItem : public SfxPoolItem
class EDITENG_DLLPUBLIC SvXMLAttrContainerItem: public SfxPoolItem
class SFX2_DLLPUBLIC SfxLinkItem : public SfxPoolItem
class SFX2_DLLPUBLIC SfxEventNamesItem : public SfxPoolItem
class SFX2_DLLPUBLIC SfxFrameItem: public SfxPoolItem
class SFX2_DLLPUBLIC SfxUnoAnyItem : public SfxPoolItem
class SFX2_DLLPUBLIC SfxUnoFrameItem : public SfxPoolItem
class SFX2_DLLPUBLIC SfxMacroInfoItem: public SfxPoolItem
class SFX2_DLLPUBLIC SfxObjectItem: public SfxPoolItem
class SFX2_DLLPUBLIC SfxObjectShellItem: public SfxPoolItem
class SFX2_DLLPUBLIC SfxViewFrameItem: public SfxPoolItem
class SFX2_DLLPUBLIC SfxWatermarkItem: public SfxPoolItem
class SVL_DLLPUBLIC SfxEnumItemInterface: public SfxPoolItem
class SVL_DLLPUBLIC CntByteItem: public SfxPoolItem
class SVL_DLLPUBLIC CntUInt16Item: public SfxPoolItem
class SVL_DLLPUBLIC CntInt32Item: public SfxPoolItem
class SVL_DLLPUBLIC CntUInt32Item: public SfxPoolItem
class SVL_DLLPUBLIC CntUnencodedStringItem: public SfxPoolItem
class SVL_DLLPUBLIC SfxFlagItem: public SfxPoolItem
class SVL_DLLPUBLIC SfxGlobalNameItem: public SfxPoolItem
class SVL_DLLPUBLIC SfxGrabBagItem : public SfxPoolItem
class SVL_DLLPUBLIC SfxIntegerListItem : public SfxPoolItem
class SVL_DLLPUBLIC SfxInt64Item : public SfxPoolItem
class SVL_DLLPUBLIC SfxInt16Item: public SfxPoolItem
class SVL_DLLPUBLIC SfxLockBytesItem : public SfxPoolItem
class SVL_DLLPUBLIC SvxMacroItem: public SfxPoolItem
class SVL_DLLPUBLIC SfxVoidItem final: public SfxPoolItem
class SVL_DLLPUBLIC SfxSetItem: public SfxPoolItem
class SVL_DLLPUBLIC SfxPointItem: public SfxPoolItem
class SVL_DLLPUBLIC SfxRectangleItem: public SfxPoolItem
class SVL_DLLPUBLIC SfxRangeItem : public SfxPoolItem
class SVL_DLLPUBLIC SfxStringListItem : public SfxPoolItem
class SVL_DLLPUBLIC SfxVisibilityItem: public SfxPoolItem
class SVX_DLLPUBLIC AffineMatrixItem : public SfxPoolItem
class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxMarginItem: public SfxPoolItem
class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxDoubleItem : public SfxPoolItem
class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxClipboardFormatItem : public SfxPoolItem
class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxColorListItem: public SfxPoolItem
class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxGradientListItem : public SfxPoolItem
class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxHatchListItem : public SfxPoolItem
class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxBitmapListItem : public SfxPoolItem
class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxPatternListItem : public SfxPoolItem
class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxDashListItem : public SfxPoolItem
class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxLineEndListItem : public SfxPoolItem
class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxB3DVectorItem : public SfxPoolItem
class SVX_DLLPUBLIC SvxGalleryItem : public SfxPoolItem
class SVX_DLLPUBLIC SvxHyperlinkItem : public SfxPoolItem
class SVX_DLLPUBLIC SvxNumberInfoItem : public SfxPoolItem
class SVX_DLLPUBLIC OfaPtrItem : public SfxPoolItem
class OfaRefItem : public SfxPoolItem
class SVX_DLLPUBLIC SvxGridItem : public SvxOptionsGrid, public SfxPoolItem
class SVX_DLLPUBLIC SvxPageItem: public SfxPoolItem
class SVX_DLLPUBLIC SvxLongLRSpaceItem : public SfxPoolItem
class SVX_DLLPUBLIC SvxLongULSpaceItem : public SfxPoolItem
class SVX_DLLPUBLIC SvxPagePosSizeItem : public SfxPoolItem
class SVX_DLLPUBLIC SvxColumnItem : public SfxPoolItem
class SVX_DLLPUBLIC SvxObjectItem : public SfxPoolItem
class SVX_DLLPUBLIC SdrCustomShapeGeometryItem : public SfxPoolItem
class SVX_DLLPUBLIC SvxSmartTagItem : public SfxPoolItem
class SVX_DLLPUBLIC SvxGraphicItem: public SfxPoolItem
class SdrFractionItem: public SfxPoolItem {
class SC_DLLPUBLIC ScPageHFItem : public SfxPoolItem
class SC_DLLPUBLIC ScPageScaleToItem : public SfxPoolItem
class ScCondFormatItem : public SfxPoolItem
class SC_DLLPUBLIC ScTpDefaultsItem : public SfxPoolItem
class SC_DLLPUBLIC ScTpCalcItem : public SfxPoolItem
class SC_DLLPUBLIC ScTpFormulaItem : public SfxPoolItem
class SC_DLLPUBLIC ScTpPrintItem : public SfxPoolItem
class SC_DLLPUBLIC ScTpViewItem : public SfxPoolItem
class ScCondFormatDlgItem : public SfxPoolItem
class ScInputStatusItem : public SfxPoolItem
class SC_DLLPUBLIC ScSortItem : public SfxPoolItem
class SC_DLLPUBLIC ScQueryItem : public SfxPoolItem
class SC_DLLPUBLIC ScSubTotalItem : public SfxPoolItem
class SC_DLLPUBLIC ScUserListItem : public SfxPoolItem
class ScConsolidateItem : public SfxPoolItem
class ScPivotItem : public SfxPoolItem
class ScSolveItem : public SfxPoolItem
class ScTabOpItem : public SfxPoolItem
class SD_DLLPUBLIC SdOptionsLayoutItem : public SfxPoolItem
class SD_DLLPUBLIC SdOptionsMiscItem : public SfxPoolItem
class SD_DLLPUBLIC SdOptionsSnapItem : public SfxPoolItem
class SD_DLLPUBLIC SdOptionsPrintItem : public SfxPoolItem
class SW_DLLPUBLIC SwCondCollItem : public SfxPoolItem
class SwMsgPoolItem : public SfxPoolItem
class SW_DLLPUBLIC SwTextGridItem : public SfxPoolItem
class SW_DLLPUBLIC SwDocDisplayItem : public SfxPoolItem
class SW_DLLPUBLIC SwElemItem : public SfxPoolItem
class SW_DLLPUBLIC SwAddPrinterItem : public SfxPoolItem, public SwPrintData
class SW_DLLPUBLIC SwShadowCursorItem : public SfxPoolItem
class SW_DLLPUBLIC SwTestItem : public SfxPoolItem
class SW_DLLPUBLIC SwEnvItem : public SfxPoolItem
class SW_DLLPUBLIC SwLabItem : public SfxPoolItem
class SW_DLLPUBLIC SwWrtShellItem: public SfxPoolItem
class SW_DLLPUBLIC SwPageFootnoteInfoItem : public SfxPoolItem
class SW_DLLPUBLIC SwPtrItem : public SfxPoolItem
class SW_DLLPUBLIC SwUINumRuleItem : public SfxPoolItem
class SW_DLLPUBLIC SwPaMItem : public SfxPoolItem
*/
///////////////////////////////////////////////////////////////////////////////

namespace Item
{
    ItemControlBlock& ItemBase::GetStaticItemControlBlock()
    {
        assert(false && "ItemBase::GetItemControlBlock call not allowed (!)");
        static ItemControlBlock aItemControlBlock(
            std::shared_ptr<ItemAdministrator>(),
            std::shared_ptr<const ItemBase>(),
            [](){ return nullptr; });

        return aItemControlBlock;
    }

    ItemControlBlock& ItemBase::GetItemControlBlock() const
    {
        return ItemBase::GetStaticItemControlBlock();
    }

    ItemBase::ItemBase()
    :   std::enable_shared_from_this<ItemBase>(),
        m_bAdministrated(false)
    {
    }

    void ItemBase::PutValues(const AnyIDArgs& rArgs)
    {
        for(const auto& arg : rArgs)
        {
            PutValue(arg.first, arg.second);
        }
    }

    void ItemBase::PutValue(const css::uno::Any& /*rVal*/, sal_uInt8 /*nMemberId*/)
    {
        // not intended to be used, error
        assert(false && "Error: Some instance tries to set an Any at an ::Item instance where this is not supported - implement ItemBase::PutValue method there (!)");
    }

    void ItemBase::implInstanceCleanup()
    {
        if(IsAdministrated())
        {
            GetItemControlBlock().GetItemAdministrator()->HintExpired(this);
        }
    }

    ItemBase::~ItemBase()
    {
    }

    bool ItemBase::operator==(const ItemBase& rCmp) const
    {
        // basic implementation compares pointers, no data available
        return this == &rCmp;
    }

    bool ItemBase::operator<(const ItemBase& rCmp) const
    {
        // basic implementation uses addresses of instances to
        // deliver a consistent result, but should *not* be used in
        // this form - it will not compare any data
        return this < &rCmp;
    }

    size_t ItemBase::GetUniqueKey() const
    {
        // basic implementation uses adress of instance as hash, to
        // deliver a consistent result, but should *not* be used in
        // this form - it will not compare any data
        return static_cast<size_t>(sal_uInt64(this));
    }

    bool ItemBase::IsDefault() const
    {
        // callback to ItemControlBlock
        return GetItemControlBlock().IsDefaultDDD(*this);
    }

    const std::shared_ptr<const ItemBase>& ItemBase::GetDefault() const
    {
        // callback to ItemControlBlock
        assert(GetItemControlBlock().GetDefaultItem() && "empty DefaultItem detected - not allowed (!)");
        return GetItemControlBlock().GetDefaultItem();
    }

    bool ItemBase::IsDefault(const std::shared_ptr<const ItemBase>& rCandidate)
    {
        return rCandidate && rCandidate->GetItemControlBlock().IsDefaultDDD(*rCandidate);
    }
} // end of namespace Item

///////////////////////////////////////////////////////////////////////////////

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */