xref: /AOO41X/main/sfx2/source/dialog/tplcitem.cxx (revision d119d52d53d0b2180f2ae51341d882123be2af2b)
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 ---------------------------------------------------------------
28 
29 #include <svl/intitem.hxx>
30 #include <vcl/svapp.hxx>
31 
32 #include <sfx2/templdlg.hxx>
33 #include <sfx2/bindings.hxx>
34 #include "sfx2/tplpitem.hxx"
35 #include "tplcitem.hxx"
36 #include "templdgi.hxx"
37 
38 #include <sfx2/sfx.hrc>
39 #include "dialog.hrc"
40 
41 // STATIC DATA -----------------------------------------------------------
42 
43 // Konstruktor
44 
SfxTemplateControllerItem(sal_uInt16 nSlotId,SfxCommonTemplateDialog_Impl & rDlg,SfxBindings & rBindings)45 SfxTemplateControllerItem::SfxTemplateControllerItem(
46         sal_uInt16 nSlotId,                 // ID
47         SfxCommonTemplateDialog_Impl &rDlg, // Controller-Instanz, dem dieses Item zugeordnet ist.
48         SfxBindings &rBindings):
49     SfxControllerItem(nSlotId, rBindings),
50     rTemplateDlg(rDlg),
51     nWaterCanState(0xff),
52     nUserEventId(0)
53 {
54 }
55 // -----------------------------------------------------------------------
~SfxTemplateControllerItem()56 SfxTemplateControllerItem::~SfxTemplateControllerItem()
57 {
58     if(nUserEventId)
59         Application::RemoveUserEvent(nUserEventId);
60 }
61 
62 // -----------------------------------------------------------------------
63 
64 // Benachrichtigung "uber Status"anderung; wird an den
65 // im Konstruktor "ubergebenen Controller propagiert
66 
StateChanged(sal_uInt16 nSID,SfxItemState eState,const SfxPoolItem * pItem)67 void SfxTemplateControllerItem::StateChanged( sal_uInt16 nSID, SfxItemState eState,
68                                               const SfxPoolItem* pItem )
69 {
70     switch(nSID)
71     {
72         case SID_STYLE_FAMILY1:
73         case SID_STYLE_FAMILY2:
74         case SID_STYLE_FAMILY3:
75         case SID_STYLE_FAMILY4:
76         case SID_STYLE_FAMILY5:
77         {
78             bool bAvailable = SFX_ITEM_AVAILABLE == eState;
79             if ( !bAvailable )
80                 rTemplateDlg.SetFamilyState(GetId(), 0);
81             else {
82                 const SfxTemplateItem *pStateItem = PTR_CAST(
83                     SfxTemplateItem, pItem);
84                 DBG_ASSERT(pStateItem != 0, "SfxTemplateItem erwartet");
85                 rTemplateDlg.SetFamilyState( GetId(), pStateItem );
86             }
87             sal_Bool bDisable = eState == SFX_ITEM_DISABLED;
88             // Familie Disablen
89             sal_uInt16 nFamily = 0;
90             switch( GetId())
91             {
92                 case SID_STYLE_FAMILY1:
93                     nFamily = 1; break;
94                 case SID_STYLE_FAMILY2:
95                     nFamily = 2; break;
96                 case SID_STYLE_FAMILY3:
97                     nFamily = 3; break;
98                 case SID_STYLE_FAMILY4:
99                     nFamily = 4; break;
100                 case SID_STYLE_FAMILY5:
101                     nFamily = 5; break;
102                 default: DBG_ERROR("unbekannte StyleFamily"); break;
103             }
104             rTemplateDlg.EnableFamilyItem( nFamily, !bDisable );
105             break;
106         }
107         case SID_STYLE_WATERCAN:
108         {
109             if ( eState == SFX_ITEM_DISABLED )
110                 nWaterCanState = 0xff;
111             else if( eState == SFX_ITEM_AVAILABLE )
112             {
113                 const SfxBoolItem *pStateItem = PTR_CAST(SfxBoolItem, pItem);
114                 DBG_ASSERT(pStateItem != 0, "BoolItem erwartet");
115                 nWaterCanState = pStateItem->GetValue() ? 1 : 0;
116             }
117             //not necessary if the last event is still on the way
118             if(!nUserEventId)
119                 nUserEventId = Application::PostUserEvent( STATIC_LINK(
120                             this, SfxTemplateControllerItem, SetWaterCanStateHdl_Impl ) );
121             break;
122         }
123         case SID_STYLE_EDIT:
124             rTemplateDlg.EnableEdit( SFX_ITEM_DISABLED != eState );
125             break;
126         case SID_STYLE_DELETE:
127             rTemplateDlg.EnableDel( SFX_ITEM_DISABLED != eState );
128             break;
129         case SID_STYLE_NEW_BY_EXAMPLE:
130 
131             rTemplateDlg.EnableExample_Impl(
132                 GetId(), SFX_ITEM_DISABLED != eState );
133             break;
134         case SID_STYLE_UPDATE_BY_EXAMPLE:
135         {
136             rTemplateDlg.EnableExample_Impl(
137                 GetId(), eState != SFX_ITEM_DISABLED );
138             // Das Select Disabled dann, falls enabled und Style Readonly
139 /*          String aStr = rTemplateDlg.GetSelectedEntry();
140             if( aStr.Len() ) rTemplateDlg.SelectStyle( aStr ); */
141             break;
142         }
143         case SID_STYLE_NEW:
144         {
145             rTemplateDlg.EnableNew( SFX_ITEM_DISABLED != eState );
146             break;
147         }
148         case SID_STYLE_DRAGHIERARCHIE:
149         {
150             rTemplateDlg.EnableTreeDrag( SFX_ITEM_DISABLED != eState );
151             break;
152         }
153         case SID_STYLE_FAMILY :
154         {
155             const SfxUInt16Item *pStateItem = PTR_CAST( SfxUInt16Item, pItem);
156             if (pStateItem)
157                 rTemplateDlg.SetFamily( pStateItem->GetValue() );
158             break;
159         }
160     }
161 }
162 /* -----------------------------05.09.2001 10:48------------------------------
163 
164  ---------------------------------------------------------------------------*/
IMPL_STATIC_LINK(SfxTemplateControllerItem,SetWaterCanStateHdl_Impl,SfxTemplateControllerItem *,EMPTYARG)165 IMPL_STATIC_LINK(SfxTemplateControllerItem, SetWaterCanStateHdl_Impl,
166                                     SfxTemplateControllerItem*, EMPTYARG)
167 {
168     pThis->nUserEventId = 0;
169     SfxBoolItem* pState = 0;
170     switch(pThis->nWaterCanState)
171     {
172         case 0 :
173         case 1 :
174             pState = new SfxBoolItem(SID_STYLE_WATERCAN, pThis->nWaterCanState ? sal_True : sal_False);
175         break;
176     }
177     pThis->rTemplateDlg.SetWaterCanState(pState);
178     delete pState;
179     return 0;
180 }
181 
182