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