1d119d52dSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3d119d52dSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4d119d52dSAndrew Rist * or more contributor license agreements. See the NOTICE file
5d119d52dSAndrew Rist * distributed with this work for additional information
6d119d52dSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7d119d52dSAndrew Rist * to you under the Apache License, Version 2.0 (the
8d119d52dSAndrew Rist * "License"); you may not use this file except in compliance
9d119d52dSAndrew Rist * with the License. You may obtain a copy of the License at
10d119d52dSAndrew Rist *
11d119d52dSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12d119d52dSAndrew Rist *
13d119d52dSAndrew Rist * Unless required by applicable law or agreed to in writing,
14d119d52dSAndrew Rist * software distributed under the License is distributed on an
15d119d52dSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16d119d52dSAndrew Rist * KIND, either express or implied. See the License for the
17d119d52dSAndrew Rist * specific language governing permissions and limitations
18d119d52dSAndrew Rist * under the License.
19d119d52dSAndrew Rist *
20d119d52dSAndrew Rist *************************************************************/
21d119d52dSAndrew Rist
22d119d52dSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sfx2.hxx"
26cdf0e10cSrcweir #include <svl/itempool.hxx>
27cdf0e10cSrcweir #ifndef GCC
28cdf0e10cSrcweir #endif
29cdf0e10cSrcweir
30cdf0e10cSrcweir #include <sfx2/ctrlitem.hxx>
31cdf0e10cSrcweir #include <sfx2/bindings.hxx>
32cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
33cdf0e10cSrcweir #include <sfx2/msgpool.hxx>
34cdf0e10cSrcweir #include "statcach.hxx"
35cdf0e10cSrcweir #include <sfx2/viewfrm.hxx>
36cdf0e10cSrcweir
37cdf0e10cSrcweir //====================================================================
38cdf0e10cSrcweir
39cdf0e10cSrcweir DBG_NAME(SfxControllerItem);
40cdf0e10cSrcweir
41cdf0e10cSrcweir //--------------------------------------------------------------------
42cdf0e10cSrcweir #ifdef DBG_UTIL
43cdf0e10cSrcweir
CheckConfigure_Impl(sal_uIntPtr nType)44cdf0e10cSrcweir void SfxControllerItem::CheckConfigure_Impl( sal_uIntPtr nType )
45cdf0e10cSrcweir {
46cdf0e10cSrcweir // echter Slot? (also kein Separator etc.)
47cdf0e10cSrcweir if ( !nId )
48cdf0e10cSrcweir return;
49cdf0e10cSrcweir
50cdf0e10cSrcweir // ist die Id "uberhaupt in 'nType' konfigurierbar?
51cdf0e10cSrcweir const SfxSlot *pSlot = SFX_SLOTPOOL().GetSlot(nId);
52cdf0e10cSrcweir DBG_ASSERTWARNING( pSlot, "SfxControllerItem: binding not existing slot" );
53cdf0e10cSrcweir if ( pSlot && !pSlot->IsMode(nType) )
54cdf0e10cSrcweir {
55cdf0e10cSrcweir DBG_WARNING( "SfxControllerItem: slot without ...Config-flag" );
56cdf0e10cSrcweir DbgOutf( "SfxControllerItem: Config-flag missing at SID %5d",
57cdf0e10cSrcweir pSlot->GetSlotId() );
58cdf0e10cSrcweir }
59cdf0e10cSrcweir }
60cdf0e10cSrcweir
61cdf0e10cSrcweir #endif
62cdf0e10cSrcweir
63cdf0e10cSrcweir //--------------------------------------------------------------------
64cdf0e10cSrcweir
65cdf0e10cSrcweir // returns the next registered SfxControllerItem with the same id
66cdf0e10cSrcweir
GetItemLink()67cdf0e10cSrcweir SfxControllerItem* SfxControllerItem::GetItemLink()
68cdf0e10cSrcweir {
69cdf0e10cSrcweir DBG_MEMTEST();
70cdf0e10cSrcweir DBG_CHKTHIS(SfxControllerItem, 0);
71cdf0e10cSrcweir return pNext == this ? 0 : pNext;
72cdf0e10cSrcweir }
73cdf0e10cSrcweir
74cdf0e10cSrcweir //--------------------------------------------------------------------
75cdf0e10cSrcweir
76cdf0e10cSrcweir // returns sal_True if this binding is really bound to a function
77cdf0e10cSrcweir
IsBound() const78cdf0e10cSrcweir sal_Bool SfxControllerItem::IsBound() const
79cdf0e10cSrcweir {
80cdf0e10cSrcweir DBG_MEMTEST();
81cdf0e10cSrcweir DBG_CHKTHIS(SfxControllerItem, 0);
82cdf0e10cSrcweir return pNext != this;
83cdf0e10cSrcweir }
84cdf0e10cSrcweir
85cdf0e10cSrcweir //--------------------------------------------------------------------
86cdf0e10cSrcweir
87cdf0e10cSrcweir // returns the associated function-id or 0 if none
88cdf0e10cSrcweir
89cdf0e10cSrcweir // sal_uInt16 SfxControllerItem::GetId() const;
90cdf0e10cSrcweir
91cdf0e10cSrcweir //====================================================================
92cdf0e10cSrcweir
93cdf0e10cSrcweir // registeres with the id at the bindings
94cdf0e10cSrcweir
Bind(sal_uInt16 nNewId,SfxBindings * pBindinx)95cdf0e10cSrcweir void SfxControllerItem::Bind( sal_uInt16 nNewId, SfxBindings *pBindinx )
96cdf0e10cSrcweir {
97cdf0e10cSrcweir DBG_MEMTEST();
98cdf0e10cSrcweir DBG_CHKTHIS(SfxControllerItem, 0);
99cdf0e10cSrcweir DBG_ASSERT(pBindings || pBindinx, "Keine Bindings");
100cdf0e10cSrcweir
101cdf0e10cSrcweir if ( IsBound() ) {
102cdf0e10cSrcweir DBG_ASSERT(pBindings, "Keine Bindings");
103cdf0e10cSrcweir pBindings->Release(*this);
104cdf0e10cSrcweir }
105cdf0e10cSrcweir
106cdf0e10cSrcweir nId = nNewId;
107cdf0e10cSrcweir pNext = 0;
108cdf0e10cSrcweir
109cdf0e10cSrcweir if (pBindinx)
110cdf0e10cSrcweir pBindings = pBindinx;
111cdf0e10cSrcweir pBindings->Register(*this);
112cdf0e10cSrcweir }
113cdf0e10cSrcweir
BindInternal_Impl(sal_uInt16 nNewId,SfxBindings * pBindinx)114cdf0e10cSrcweir void SfxControllerItem::BindInternal_Impl( sal_uInt16 nNewId, SfxBindings *pBindinx )
115cdf0e10cSrcweir {
116cdf0e10cSrcweir DBG_MEMTEST();
117cdf0e10cSrcweir DBG_CHKTHIS(SfxControllerItem, 0);
118cdf0e10cSrcweir DBG_ASSERT(pBindings || pBindinx, "Keine Bindings");
119cdf0e10cSrcweir
120cdf0e10cSrcweir if ( IsBound() ) {
121cdf0e10cSrcweir DBG_ASSERT(pBindings, "Keine Bindings");
122cdf0e10cSrcweir pBindings->Release(*this);
123cdf0e10cSrcweir }
124cdf0e10cSrcweir
125cdf0e10cSrcweir nId = nNewId;
126cdf0e10cSrcweir pNext = 0;
127cdf0e10cSrcweir
128cdf0e10cSrcweir if (pBindinx)
129cdf0e10cSrcweir pBindings = pBindinx;
130cdf0e10cSrcweir pBindings->RegisterInternal_Impl(*this);
131cdf0e10cSrcweir }
132cdf0e10cSrcweir
133cdf0e10cSrcweir
134cdf0e10cSrcweir //====================================================================
135cdf0e10cSrcweir
UnBind()136cdf0e10cSrcweir void SfxControllerItem::UnBind()
137cdf0e10cSrcweir
138cdf0e10cSrcweir /* [Beschreibung]
139cdf0e10cSrcweir
140cdf0e10cSrcweir "ost die Verbindung dieses SfxControllerItems mit der SfxBindings-Instanz,
141cdf0e10cSrcweir an der es zur Zeit gebunden ist. Ab diesem Zeitpunkt erh"alt es keine
142cdf0e10cSrcweir Statusbenachrichtigungen (<SfxControllerItem::StateChented()>) mehr.
143cdf0e10cSrcweir
144cdf0e10cSrcweir
145cdf0e10cSrcweir [Querverweise]
146cdf0e10cSrcweir
147cdf0e10cSrcweir <SfxControllerItem::ReBind()>
148cdf0e10cSrcweir <SfxControllerItem::ClearCache()>
149cdf0e10cSrcweir */
150cdf0e10cSrcweir {
151cdf0e10cSrcweir DBG_MEMTEST();
152cdf0e10cSrcweir DBG_CHKTHIS(SfxControllerItem, 0);
153cdf0e10cSrcweir DBG_ASSERT(pBindings, "Keine Bindings");
154cdf0e10cSrcweir DBG_ASSERT( IsBound(), "unbindings unbound SfxControllerItem" );
155cdf0e10cSrcweir
156cdf0e10cSrcweir pBindings->Release(*this);
157cdf0e10cSrcweir pNext = this;
158cdf0e10cSrcweir }
159cdf0e10cSrcweir
160cdf0e10cSrcweir //====================================================================
161cdf0e10cSrcweir
ReBind()162cdf0e10cSrcweir void SfxControllerItem::ReBind()
163cdf0e10cSrcweir
164cdf0e10cSrcweir /* [Beschreibung]
165cdf0e10cSrcweir
166cdf0e10cSrcweir Binded dieses SfxControllerItem wieder an die SfxBindings-Instanz,
167cdf0e10cSrcweir an der es zuletzt gebunden war. Ab diesem Zeitpunkt erh"alt es wieder
168cdf0e10cSrcweir Statusbenachrichtigungen (<SfxControllerItem::StateChented()>).
169cdf0e10cSrcweir
170cdf0e10cSrcweir
171cdf0e10cSrcweir [Querverweise]
172cdf0e10cSrcweir
173cdf0e10cSrcweir <SfxControllerItem::UnBind()>
174cdf0e10cSrcweir <SfxControllerItem::ClearCache()>
175cdf0e10cSrcweir */
176cdf0e10cSrcweir
177cdf0e10cSrcweir {
178cdf0e10cSrcweir DBG_MEMTEST();
179cdf0e10cSrcweir DBG_CHKTHIS(SfxControllerItem, 0);
180cdf0e10cSrcweir DBG_ASSERT(pBindings, "Keine Bindings");
181cdf0e10cSrcweir DBG_ASSERT( !IsBound(), "bindings rebound SfxControllerItem" );
182cdf0e10cSrcweir
183cdf0e10cSrcweir pBindings->Register(*this);
184cdf0e10cSrcweir }
185cdf0e10cSrcweir
186cdf0e10cSrcweir //====================================================================
187cdf0e10cSrcweir
UpdateSlot()188cdf0e10cSrcweir void SfxControllerItem::UpdateSlot()
189cdf0e10cSrcweir
190cdf0e10cSrcweir /* [Beschreibung]
191cdf0e10cSrcweir
192cdf0e10cSrcweir Holt den Status 'hart' neu.
193cdf0e10cSrcweir
194cdf0e10cSrcweir [Querverweise]
195cdf0e10cSrcweir
196cdf0e10cSrcweir <SfxControllerItem::ClearCache()>
197cdf0e10cSrcweir */
198cdf0e10cSrcweir
199cdf0e10cSrcweir {
200cdf0e10cSrcweir DBG_MEMTEST();
201cdf0e10cSrcweir DBG_CHKTHIS(SfxControllerItem, 0);
202cdf0e10cSrcweir DBG_ASSERT(pBindings, "Keine Bindings");
203cdf0e10cSrcweir
204cdf0e10cSrcweir pBindings->Update( GetId() );
205cdf0e10cSrcweir }
206cdf0e10cSrcweir
207cdf0e10cSrcweir //--------------------------------------------------------------------
208cdf0e10cSrcweir
ClearCache()209cdf0e10cSrcweir void SfxControllerItem::ClearCache()
210cdf0e10cSrcweir
211cdf0e10cSrcweir /* [Beschreibung]
212cdf0e10cSrcweir
213cdf0e10cSrcweir "oscht den Status-Cache f"ur dieses SfxControllerItem. D.h. beim
214cdf0e10cSrcweir n"achsten Status-Update wird das <SfxPoolItem> auf jeden Fall geschickt,
215cdf0e10cSrcweir auch wenn zuvor dasselbe geschickt wurde. Dies wird ben"otigt, wenn
216cdf0e10cSrcweir ein Controller umgeschaltet werden kann und sich diesen Status
217cdf0e10cSrcweir selbst merkt.
218cdf0e10cSrcweir
219cdf0e10cSrcweir
220cdf0e10cSrcweir [Beispiel]
221cdf0e10cSrcweir
222cdf0e10cSrcweir Der Kombi-Controller f"ur das Einstellen des Fl"achentyps und der
223cdf0e10cSrcweir konkreten Auspr"agung (Farbe blau oder Schraffur X) kann im Typ
224cdf0e10cSrcweir umgestellt werden, wird jedoch dann bei der n"achsten Selektion
225cdf0e10cSrcweir wieder benachrichtigt, auch wenn es dieselben Daten sind.
226cdf0e10cSrcweir
227cdf0e10cSrcweir
228cdf0e10cSrcweir [Querverweise]
229cdf0e10cSrcweir
230cdf0e10cSrcweir <SfxControllerItem::UnBind()>
231cdf0e10cSrcweir <SfxControllerItem::ReBind()>
232cdf0e10cSrcweir */
233cdf0e10cSrcweir
234cdf0e10cSrcweir
235cdf0e10cSrcweir {
236cdf0e10cSrcweir DBG_MEMTEST();
237cdf0e10cSrcweir DBG_CHKTHIS(SfxControllerItem, 0);
238cdf0e10cSrcweir DBG_ASSERT(pBindings, "Keine Bindings");
239cdf0e10cSrcweir
240cdf0e10cSrcweir pBindings->ClearCache_Impl( GetId() );
241cdf0e10cSrcweir }
242cdf0e10cSrcweir
243cdf0e10cSrcweir //--------------------------------------------------------------------
244cdf0e10cSrcweir
245cdf0e10cSrcweir // replaces the successor in the list of bindings of the same id
246cdf0e10cSrcweir
ChangeItemLink(SfxControllerItem * pNewLink)247cdf0e10cSrcweir SfxControllerItem* SfxControllerItem::ChangeItemLink( SfxControllerItem* pNewLink )
248cdf0e10cSrcweir {
249cdf0e10cSrcweir DBG_MEMTEST();
250cdf0e10cSrcweir DBG_CHKTHIS(SfxControllerItem, 0);
251cdf0e10cSrcweir SfxControllerItem* pOldLink = pNext;
252cdf0e10cSrcweir pNext = pNewLink;
253cdf0e10cSrcweir return pOldLink == this ? 0 : pOldLink;
254cdf0e10cSrcweir }
255cdf0e10cSrcweir
256cdf0e10cSrcweir //--------------------------------------------------------------------
257cdf0e10cSrcweir
258cdf0e10cSrcweir // changes the id of unbound functions (e.g. for sub-menu-ids)
259cdf0e10cSrcweir
SetId(sal_uInt16 nItemId)260cdf0e10cSrcweir void SfxControllerItem::SetId( sal_uInt16 nItemId )
261cdf0e10cSrcweir {
262cdf0e10cSrcweir DBG_MEMTEST();
263cdf0e10cSrcweir DBG_CHKTHIS(SfxControllerItem, 0);
264cdf0e10cSrcweir DBG_ASSERT( !IsBound(), "changing id of bound binding" );
265cdf0e10cSrcweir nId = nItemId;
266cdf0e10cSrcweir }
267cdf0e10cSrcweir
268cdf0e10cSrcweir //--------------------------------------------------------------------
269cdf0e10cSrcweir
270cdf0e10cSrcweir // creates a atomic item for a controller without registration
271cdf0e10cSrcweir
SfxControllerItem()272cdf0e10cSrcweir SfxControllerItem::SfxControllerItem():
273cdf0e10cSrcweir nId(0),
274cdf0e10cSrcweir pNext(this),
275cdf0e10cSrcweir pBindings(0)
276cdf0e10cSrcweir {
277cdf0e10cSrcweir DBG_MEMTEST();
278cdf0e10cSrcweir DBG_CTOR(SfxControllerItem, 0);
279cdf0e10cSrcweir }
280cdf0e10cSrcweir
281cdf0e10cSrcweir //--------------------------------------------------------------------
282cdf0e10cSrcweir
283cdf0e10cSrcweir // creates a representation of the function nId and registeres it
284cdf0e10cSrcweir
SfxControllerItem(sal_uInt16 nID,SfxBindings & rBindings)285cdf0e10cSrcweir SfxControllerItem::SfxControllerItem( sal_uInt16 nID, SfxBindings &rBindings ):
286cdf0e10cSrcweir nId(nID),
287cdf0e10cSrcweir pNext(this),
288cdf0e10cSrcweir pBindings(&rBindings)
289cdf0e10cSrcweir {
290cdf0e10cSrcweir DBG_MEMTEST();
291cdf0e10cSrcweir DBG_CTOR(SfxControllerItem, 0);
292cdf0e10cSrcweir Bind(nId, &rBindings);
293cdf0e10cSrcweir }
294cdf0e10cSrcweir
295cdf0e10cSrcweir //--------------------------------------------------------------------
296cdf0e10cSrcweir
297cdf0e10cSrcweir // unregisteres the item in the bindings
298cdf0e10cSrcweir
~SfxControllerItem()299cdf0e10cSrcweir SfxControllerItem::~SfxControllerItem()
300cdf0e10cSrcweir {
301cdf0e10cSrcweir DBG_MEMTEST();
302cdf0e10cSrcweir if ( IsBound() )
303cdf0e10cSrcweir pBindings->Release(*this);
304cdf0e10cSrcweir DBG_DTOR(SfxControllerItem, 0);
305cdf0e10cSrcweir }
306cdf0e10cSrcweir
307cdf0e10cSrcweir //--------------------------------------------------------------------
308cdf0e10cSrcweir
StateChanged(sal_uInt16,SfxItemState,const SfxPoolItem *)309cdf0e10cSrcweir void SfxControllerItem::StateChanged
310cdf0e10cSrcweir (
311cdf0e10cSrcweir sal_uInt16 , // <SID> des ausl"osenden Slot
312cdf0e10cSrcweir SfxItemState , // <SfxItemState> von 'pState'
313cdf0e10cSrcweir const SfxPoolItem* // Slot-Status, ggf. 0 oder IsInvalidItem()
314cdf0e10cSrcweir )
315cdf0e10cSrcweir
316cdf0e10cSrcweir /* [Beschreibung]
317cdf0e10cSrcweir
318cdf0e10cSrcweir Diese virtuelle Methode wird vom SFx gerufen, um <SfxControllerItem>s
319cdf0e10cSrcweir dar"uber zu benachrichtigen, da\s sich der Status des Slots 'nSID'
320cdf0e10cSrcweir ge"andert hat. Der neue Wert sowie der von diesem Wert ermittelte
321cdf0e10cSrcweir Status wird als 'pState' bzw. 'eState' mitgegeben.
322cdf0e10cSrcweir
323cdf0e10cSrcweir Der Status eines Slots kann sich "andern, wenn z.B. das MDI-Fenster
324cdf0e10cSrcweir gewechselt wird oder der Slot explizit mit <SfxBindings::Invalidate()>
325cdf0e10cSrcweir invalidiert wurde.
326cdf0e10cSrcweir
327cdf0e10cSrcweir Achtung! Die Methode wird nicht gerufen, wenn der Slot ung"ultig wurde,
328cdf0e10cSrcweir danach jedoch wieder denselben Wert angenommen hat.
329cdf0e10cSrcweir
330cdf0e10cSrcweir Diese Basisklasse braucht nicht gerufen zu werden, weitere Zwischenstufen
331cdf0e10cSrcweir jedoch (z.B. <SfxToolboxControl>) sollten gerufen werden.
332cdf0e10cSrcweir */
333cdf0e10cSrcweir
334cdf0e10cSrcweir {
335cdf0e10cSrcweir DBG_MEMTEST();
336cdf0e10cSrcweir DBG_CHKTHIS(SfxControllerItem, 0);
337cdf0e10cSrcweir }
338cdf0e10cSrcweir
339cdf0e10cSrcweir //--------------------------------------------------------------------
340cdf0e10cSrcweir
DeleteFloatingWindow()341cdf0e10cSrcweir void SfxControllerItem::DeleteFloatingWindow()
342cdf0e10cSrcweir {
343cdf0e10cSrcweir DBG_MEMTEST();
344cdf0e10cSrcweir DBG_CHKTHIS(SfxControllerItem, 0);
345cdf0e10cSrcweir }
346cdf0e10cSrcweir
347cdf0e10cSrcweir //--------------------------------------------------------------------
348cdf0e10cSrcweir
StateChanged(sal_uInt16 nSID,SfxItemState eState,const SfxPoolItem * pState)349cdf0e10cSrcweir void SfxStatusForwarder::StateChanged
350cdf0e10cSrcweir (
351cdf0e10cSrcweir sal_uInt16 nSID, // <SID> des ausl"osenden Slot
352cdf0e10cSrcweir SfxItemState eState, // <SfxItemState> von 'pState'
353cdf0e10cSrcweir const SfxPoolItem* pState // Slot-Status, ggf. 0 oder IsInvalidItem()
354cdf0e10cSrcweir )
355cdf0e10cSrcweir
356cdf0e10cSrcweir {
357cdf0e10cSrcweir pMaster->StateChanged( nSID, eState, pState );
358cdf0e10cSrcweir }
359cdf0e10cSrcweir
360cdf0e10cSrcweir //--------------------------------------------------------------------
361cdf0e10cSrcweir
SfxStatusForwarder(sal_uInt16 nSlotId,SfxControllerItem & rMaster)362cdf0e10cSrcweir SfxStatusForwarder::SfxStatusForwarder(
363cdf0e10cSrcweir sal_uInt16 nSlotId,
364cdf0e10cSrcweir SfxControllerItem& rMaster ):
365cdf0e10cSrcweir SfxControllerItem( nSlotId, rMaster.GetBindings() ),
366cdf0e10cSrcweir pMaster( &rMaster )
367cdf0e10cSrcweir {
368cdf0e10cSrcweir }
369cdf0e10cSrcweir
370cdf0e10cSrcweir //--------------------------------------------------------------------
371cdf0e10cSrcweir
GetItemState(const SfxPoolItem * pState)372cdf0e10cSrcweir SfxItemState SfxControllerItem::GetItemState
373cdf0e10cSrcweir (
374cdf0e10cSrcweir const SfxPoolItem* pState /* Pointer auf das <SfxPoolItem>, dessen
375cdf0e10cSrcweir Status erfragt werden soll. */
376cdf0e10cSrcweir )
377cdf0e10cSrcweir
378cdf0e10cSrcweir /* [Beschreibung]
379cdf0e10cSrcweir
380cdf0e10cSrcweir Statische Methode zum Ermitteln des Status des SfxPoolItem-Pointers,
381cdf0e10cSrcweir in der Methode <SfxControllerItem::StateChanged(const SfxPoolItem*)>
382cdf0e10cSrcweir zu verwenden.
383cdf0e10cSrcweir
384cdf0e10cSrcweir [R"uckgabewert]
385cdf0e10cSrcweir
386cdf0e10cSrcweir SfxItemState SFX_ITEM_UNKNOWN
387cdf0e10cSrcweir Enabled, aber keine weitere Statusinformation
388cdf0e10cSrcweir verf"ugbar. Typisch f"ur <Slot>s, die allenfalls
389cdf0e10cSrcweir zeitweise disabled sind, aber ihre Darstellung sonst
390cdf0e10cSrcweir nicht "andern.
391cdf0e10cSrcweir
392cdf0e10cSrcweir SFX_ITEM_DISABLED
393cdf0e10cSrcweir Disabled und keine weiter Statusinformation
394cdf0e10cSrcweir verf"ugbar. Alle anderen ggf. angezeigten Werte sollten
395cdf0e10cSrcweir auf den Default zur"uckgesetzt werden.
396cdf0e10cSrcweir
397cdf0e10cSrcweir SFX_ITEM_DONTCARE
398cdf0e10cSrcweir Enabled aber es waren nur uneindeutige Werte
399cdf0e10cSrcweir verf"ugbar (also keine, die abgefragt werden k"onnen).
400cdf0e10cSrcweir
401cdf0e10cSrcweir SFX_ITEM_AVAILABLE
402cdf0e10cSrcweir Enabled und mit verf"ugbarem Wert, der von 'pState'
403cdf0e10cSrcweir erfragbar ist. Der Typ ist dabei im gesamten
404cdf0e10cSrcweir Programm eindeutig und durch den Slot festgelegt.
405cdf0e10cSrcweir */
406cdf0e10cSrcweir
407cdf0e10cSrcweir {
408cdf0e10cSrcweir return !pState
409cdf0e10cSrcweir ? SFX_ITEM_DISABLED
410cdf0e10cSrcweir : IsInvalidItem(pState)
411cdf0e10cSrcweir ? SFX_ITEM_DONTCARE
412cdf0e10cSrcweir : pState->ISA(SfxVoidItem) && !pState->Which()
413cdf0e10cSrcweir ? SFX_ITEM_UNKNOWN
414cdf0e10cSrcweir : SFX_ITEM_AVAILABLE;
415cdf0e10cSrcweir }
416cdf0e10cSrcweir
417cdf0e10cSrcweir //--------------------------------------------------------------------
418cdf0e10cSrcweir
GetCoreMetric() const419cdf0e10cSrcweir SfxMapUnit SfxControllerItem::GetCoreMetric() const
420cdf0e10cSrcweir
421cdf0e10cSrcweir /* [Beschreibung]
422cdf0e10cSrcweir
423cdf0e10cSrcweir Holt vom zust"andigen Pool die Ma\seinheit ab, in der das Status-Item
424cdf0e10cSrcweir vorliegt.
425cdf0e10cSrcweir */
426cdf0e10cSrcweir
427cdf0e10cSrcweir {
428cdf0e10cSrcweir SfxStateCache *pCache = pBindings->GetStateCache( nId );
429cdf0e10cSrcweir SfxDispatcher *pDispat = pBindings->GetDispatcher_Impl();
430cdf0e10cSrcweir
431cdf0e10cSrcweir if ( !pDispat )
432cdf0e10cSrcweir {
433cdf0e10cSrcweir SfxViewFrame* pViewFrame = SfxViewFrame::Current();
434cdf0e10cSrcweir if ( !pViewFrame )
435cdf0e10cSrcweir SfxViewFrame::GetFirst();
436cdf0e10cSrcweir if ( pViewFrame )
437cdf0e10cSrcweir pDispat = pViewFrame->GetDispatcher();
438cdf0e10cSrcweir }
439cdf0e10cSrcweir
440cdf0e10cSrcweir if ( pDispat && pCache )
441cdf0e10cSrcweir {
442cdf0e10cSrcweir const SfxSlotServer *pServer = pCache->GetSlotServer( *pDispat );
443cdf0e10cSrcweir if ( pServer )
444cdf0e10cSrcweir {
445cdf0e10cSrcweir SfxShell *pSh = pDispat->GetShell( pServer->GetShellLevel() );
446cdf0e10cSrcweir SfxItemPool &rPool = pSh->GetPool();
447cdf0e10cSrcweir sal_uInt16 nWhich = rPool.GetWhich( nId );
448*6837c635SOliver-Rainer Wittmann
449*6837c635SOliver-Rainer Wittmann // invalidate slot and its message|slot server as 'global' information
450*6837c635SOliver-Rainer Wittmann // about the validated message|slot server is not made available
451*6837c635SOliver-Rainer Wittmann pCache->Invalidate( sal_True );
452*6837c635SOliver-Rainer Wittmann
453cdf0e10cSrcweir return rPool.GetMetric( nWhich );
454cdf0e10cSrcweir }
455cdf0e10cSrcweir }
456cdf0e10cSrcweir
457cdf0e10cSrcweir DBG_WARNING( "W1: Can not find ItemPool!" );
458cdf0e10cSrcweir return SFX_MAPUNIT_100TH_MM;
459cdf0e10cSrcweir }
460cdf0e10cSrcweir
461cdf0e10cSrcweir //------------------------------------------------------------------------
462cdf0e10cSrcweir
463cdf0e10cSrcweir #ifdef _MSC_VER
464cdf0e10cSrcweir #pragma optimize("g",off)
465cdf0e10cSrcweir #endif
466cdf0e10cSrcweir
467cdf0e10cSrcweir
468