xref: /trunk/main/sfx2/source/explorer/nochaos.cxx (revision d119d52d)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sfx2.hxx"
26 
27 #include <svl/itempool.hxx>
28 #include <svl/poolitem.hxx>
29 #include <svl/stritem.hxx>
30 #include <nochaos.hxx>
31 #include <sfx2/sfxuno.hxx>
32 
33 
34 #define WID_CHAOS_START 500
35 //=========================================================================
36 //
37 // class CntStaticPoolDefaults_Impl
38 //
39 //=========================================================================
40 
41 class CntItemPool;
42 
43 class CntStaticPoolDefaults_Impl
44 {
45 	sal_uInt32		  m_nItems;
46 	SfxPoolItem** m_ppDefaults;
47 	SfxItemInfo*  m_pItemInfos;
48 
49 private:
50 	// Forbidden and not implemented...
51 	CntStaticPoolDefaults_Impl( const CntStaticPoolDefaults_Impl& );
52     CntStaticPoolDefaults_Impl&	operator=( const CntStaticPoolDefaults_Impl& );
53 
54 	inline void Insert( SfxPoolItem* pItem, sal_uInt16 nSID, sal_uInt16 nFlags );
55 
56 public:
57 	CntStaticPoolDefaults_Impl( CntItemPool* pPool );
58 	~CntStaticPoolDefaults_Impl();
59 
GetDefaults() const60 	SfxPoolItem** 	   GetDefaults() const  { return m_ppDefaults; }
GetItemInfos() const61 	const SfxItemInfo* GetItemInfos() const { return m_pItemInfos; }
62 };
63 
64 //----------------------------------------------------------------------------
65 
66 //=========================================================================
67 
68 class CntItemPool: public SfxItemPool
69 {
70 	static CntItemPool* _pThePool;
71 	sal_uInt16              _nRefs;
72 
73 protected:
74 			 CntItemPool();
75 	virtual ~CntItemPool();
76 
77 public:
78 	static CntItemPool* Acquire();
79 	static sal_uInt16 		Release();
80 };
81 
82 //----------------------------------------------------------------------------
83 
84 //----------------------------------------------------------------------------
85 // static
GetItemPool()86 SfxItemPool* NoChaos::GetItemPool()
87 {
88 	// Get and hold CHAOS item pool.
89 	return CntItemPool::Acquire();
90 }
91 
92 //----------------------------------------------------------------------------
93 // static
ReleaseItemPool()94 sal_uInt16 NoChaos::ReleaseItemPool()
95 {
96 	// Release CHAOS item pool.
97 	return CntItemPool::Release();
98 }
99 
100 //=========================================================================
101 //
102 //	CntItemPool implementation
103 //
104 //=========================================================================
105 
106 static CntStaticPoolDefaults_Impl* pPoolDefs_Impl = NULL;
107 
108 // static member!
109 CntItemPool* CntItemPool::_pThePool = NULL;
110 
111 //-------------------------------------------------------------------------
CntItemPool()112 CntItemPool::CntItemPool()
113 : SfxItemPool( DEFINE_CONST_UNICODE("chaos"), WID_CHAOS_START, WID_CHAOS_START, NULL ),
114   _nRefs( 0 )
115 {
116     SetFileFormatVersion( SOFFICE_FILEFORMAT_50 );
117 
118 	FreezeIdRanges();
119 
120 	// Create static defaults.
121 	pPoolDefs_Impl = new CntStaticPoolDefaults_Impl( this );
122 
123 	// Set item infos.
124 	SetItemInfos( pPoolDefs_Impl->GetItemInfos() );
125 
126 	// Set static pool default items.
127 	SetDefaults( pPoolDefs_Impl->GetDefaults() );
128 }
129 
130 //-------------------------------------------------------------------------
131 //virtual
~CntItemPool()132 CntItemPool::~CntItemPool()
133 {
134 	// Release static pool default items.
135 	ReleaseDefaults( sal_False );
136 }
137 
138 //-------------------------------------------------------------------------
139 // static
Acquire()140 CntItemPool* CntItemPool::Acquire()
141 {
142 	if ( !_pThePool )
143 		_pThePool = new CntItemPool;
144 
145 	_pThePool->_nRefs++;
146 
147 	return _pThePool;
148 }
149 
150 //-------------------------------------------------------------------------
151 // static
Release()152 sal_uInt16 CntItemPool::Release()
153 {
154 	if ( !_pThePool )
155 		return 0;
156 
157 	sal_uInt16& nRefs = _pThePool->_nRefs;
158 
159 	if ( nRefs )
160 		--nRefs;
161 
162 	if ( !nRefs )
163 	{
164 		DELETEZ( _pThePool );
165 		DELETEZ( pPoolDefs_Impl );
166 		return 0;
167 	}
168 
169 	return nRefs;
170 }
171 
172 //=========================================================================
173 //
174 // CntStaticPoolDefaults_Impl implementation.
175 //
176 //=========================================================================
177 
Insert(SfxPoolItem * pItem,sal_uInt16 nSID,sal_uInt16 nFlags)178 inline void CntStaticPoolDefaults_Impl::Insert(
179 	 	SfxPoolItem* pItem, 		/* Static Pool Default Item */
180      	sal_uInt16 nSID, sal_uInt16 nFlags  /* Item Info */	)
181 {
182 	sal_uInt16 nPos = pItem->Which() - WID_CHAOS_START;
183 
184 	m_ppDefaults[ nPos ]         = pItem;
185 	m_pItemInfos[ nPos ]._nSID   = nSID;
186 	m_pItemInfos[ nPos ]._nFlags = nFlags;
187 }
188 
189 //-------------------------------------------------------------------------
~CntStaticPoolDefaults_Impl()190 CntStaticPoolDefaults_Impl::~CntStaticPoolDefaults_Impl()
191 {
192 	for ( sal_uInt32 n = 0; n < m_nItems; ++n )
193 		delete m_ppDefaults[ n ];
194 
195 	delete [] m_ppDefaults;
196 	delete [] m_pItemInfos;
197 }
198 
199 //-------------------------------------------------------------------------
CntStaticPoolDefaults_Impl(CntItemPool *)200 CntStaticPoolDefaults_Impl::CntStaticPoolDefaults_Impl( CntItemPool* /*pPool*/ )
201 : m_nItems( 1 ),
202   m_ppDefaults( new SfxPoolItem* [ m_nItems ] ),
203   m_pItemInfos( new SfxItemInfo  [ m_nItems ] )
204 {
205     rtl_zeroMemory( m_ppDefaults, sizeof( SfxPoolItem* ) * m_nItems );
206     rtl_zeroMemory( m_pItemInfos, sizeof( SfxItemInfo ) * m_nItems );
207 	Insert(
208 		new	SfxStringItem( WID_CHAOS_START, String() ),
209 		0,
210 		SFX_ITEM_POOLABLE );
211 }
212