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 #include "precompiled_sw.hxx"
23
24 #include "WrapPropertyPanel.hxx"
25 #include "WrapPropertyPanel.hrc"
26 #include "PropertyPanel.hrc"
27
28 #include <cmdid.h>
29 #include <swtypes.hxx>
30
31 #include <sfx2/bindings.hxx>
32 #include <sfx2/dispatch.hxx>
33 #include <sfx2/sidebar/ControlFactory.hxx>
34 #include <sfx2/imagemgr.hxx>
35 #include <svl/eitem.hxx>
36 #include <vcl/svapp.hxx>
37
38 #include "com/sun/star/lang/IllegalArgumentException.hpp"
39
40 #define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString)))
41
42
43 namespace sw { namespace sidebar {
44
Create(Window * pParent,const::com::sun::star::uno::Reference<::com::sun::star::frame::XFrame> & rxFrame,SfxBindings * pBindings)45 WrapPropertyPanel* WrapPropertyPanel::Create (
46 Window* pParent,
47 const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxFrame,
48 SfxBindings* pBindings)
49 {
50 if (pParent == NULL)
51 throw ::com::sun::star::lang::IllegalArgumentException(A2S("no parent Window given to WrapPropertyPanel::Create"), NULL, 0);
52 if ( ! rxFrame.is())
53 throw ::com::sun::star::lang::IllegalArgumentException(A2S("no XFrame given to WrapPropertyPanel::Create"), NULL, 1);
54 if (pBindings == NULL)
55 throw ::com::sun::star::lang::IllegalArgumentException(A2S("no SfxBindings given to WrapPropertyPanel::Create"), NULL, 2);
56
57 return new WrapPropertyPanel(
58 pParent,
59 rxFrame,
60 pBindings);
61 }
62
63
WrapPropertyPanel(Window * pParent,const::com::sun::star::uno::Reference<::com::sun::star::frame::XFrame> & rxFrame,SfxBindings * pBindings)64 WrapPropertyPanel::WrapPropertyPanel(
65 Window* pParent,
66 const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxFrame,
67 SfxBindings* pBindings )
68 : Control(pParent, SW_RES(RID_PROPERTYPANEL_SWOBJWRAP_PAGE))
69 , mxFrame( rxFrame )
70 , mpBindings(pBindings)
71 // visible controls
72 , mpRBNoWrap( ::sfx2::sidebar::ControlFactory::CreateCustomImageRadionButton( this, SW_RES(RB_NO_WRAP) ) )
73 , mpRBWrapLeft( ::sfx2::sidebar::ControlFactory::CreateCustomImageRadionButton( this, SW_RES(RB_WRAP_LEFT) ) )
74 , mpRBWrapRight( ::sfx2::sidebar::ControlFactory::CreateCustomImageRadionButton( this, SW_RES(RB_WRAP_RIGHT) ) )
75 , mpRBWrapParallel( ::sfx2::sidebar::ControlFactory::CreateCustomImageRadionButton( this, SW_RES(RB_WRAP_PARALLEL) ) )
76 , mpRBWrapThrough( ::sfx2::sidebar::ControlFactory::CreateCustomImageRadionButton( this, SW_RES(RB_WRAP_THROUGH) ) )
77 , mpRBIdealWrap( ::sfx2::sidebar::ControlFactory::CreateCustomImageRadionButton( this, SW_RES(RB_WRAP_IDEAL) ) )
78 // resources
79 , aWrapIL(6,2)
80 , aWrapILH(6,2)
81 // controller items
82 , maSwNoWrapControl(FN_FRAME_NOWRAP, *pBindings, *this)
83 , maSwWrapLeftControl(FN_FRAME_WRAP, *pBindings, *this)
84 , maSwWrapRightControl(FN_FRAME_WRAP_RIGHT, *pBindings, *this)
85 , maSwWrapParallelControl(FN_FRAME_WRAP_LEFT, *pBindings, *this)
86 , maSwWrapThroughControl(FN_FRAME_WRAPTHRU, *pBindings, *this)
87 , maSwWrapIdealControl(FN_FRAME_WRAP_IDEAL, *pBindings, *this)
88 {
89 Initialize();
90 FreeResource();
91 }
92
93
~WrapPropertyPanel()94 WrapPropertyPanel::~WrapPropertyPanel()
95 {
96 }
97
98
Initialize()99 void WrapPropertyPanel::Initialize()
100 {
101 Link aLink = LINK(this, WrapPropertyPanel, WrapTypeHdl);
102 mpRBNoWrap->SetClickHdl(aLink);
103 mpRBWrapLeft->SetClickHdl(aLink);
104 mpRBWrapRight->SetClickHdl(aLink);
105 mpRBWrapParallel->SetClickHdl(aLink);
106 mpRBWrapThrough->SetClickHdl(aLink);
107 mpRBIdealWrap->SetClickHdl(aLink);
108
109 aWrapIL.AddImage( IMG_NONE,
110 ::GetImage( mxFrame, A2S(".uno:WrapOff"), sal_False, sal_False ) );
111 aWrapIL.AddImage( IMG_LEFT,
112 ::GetImage( mxFrame, A2S(".uno:WrapLeft"), sal_False, sal_False ) );
113 aWrapIL.AddImage( IMG_RIGHT,
114 ::GetImage( mxFrame, A2S(".uno:WrapRight"), sal_False, sal_False ) );
115 aWrapIL.AddImage( IMG_PARALLEL,
116 ::GetImage( mxFrame, A2S(".uno:WrapOn"), sal_False, sal_False ) );
117 aWrapIL.AddImage( IMG_THROUGH,
118 ::GetImage( mxFrame, A2S(".uno:WrapThrough"), sal_False, sal_False ) );
119 aWrapIL.AddImage( IMG_IDEAL,
120 ::GetImage( mxFrame, A2S(".uno:WrapIdeal"), sal_False, sal_False ) );
121
122 aWrapILH.AddImage( IMG_NONE,
123 ::GetImage( mxFrame, A2S(".uno:WrapOff"), sal_False, sal_True ) );
124 aWrapILH.AddImage( IMG_LEFT,
125 ::GetImage( mxFrame, A2S(".uno:WrapLeft"), sal_False, sal_True ) );
126 aWrapILH.AddImage( IMG_RIGHT,
127 ::GetImage( mxFrame, A2S(".uno:WrapRight"), sal_False, sal_True ) );
128 aWrapILH.AddImage( IMG_PARALLEL,
129 ::GetImage( mxFrame, A2S(".uno:WrapOn"), sal_False, sal_True ) );
130 aWrapILH.AddImage( IMG_THROUGH,
131 ::GetImage( mxFrame, A2S(".uno:WrapThrough"), sal_False, sal_True ) );
132 aWrapILH.AddImage( IMG_IDEAL,
133 ::GetImage( mxFrame, A2S(".uno:WrapIdeal"), sal_False, sal_True ) );
134
135 mpRBNoWrap->SetModeRadioImage( aWrapIL.GetImage(IMG_NONE) );
136 mpRBNoWrap->SetModeRadioImage( aWrapILH.GetImage(IMG_NONE) , BMP_COLOR_HIGHCONTRAST );
137 if ( Application::GetSettings().GetLayoutRTL() )
138 {
139 mpRBWrapLeft->SetModeRadioImage( aWrapIL.GetImage(IMG_RIGHT) );
140 mpRBWrapLeft->SetModeRadioImage( aWrapILH.GetImage(IMG_RIGHT) , BMP_COLOR_HIGHCONTRAST );
141 mpRBWrapRight->SetModeRadioImage( aWrapIL.GetImage(IMG_LEFT) );
142 mpRBWrapRight->SetModeRadioImage( aWrapILH.GetImage(IMG_LEFT) , BMP_COLOR_HIGHCONTRAST );
143 }
144 else
145 {
146 mpRBWrapLeft->SetModeRadioImage( aWrapIL.GetImage(IMG_LEFT) );
147 mpRBWrapLeft->SetModeRadioImage( aWrapILH.GetImage(IMG_LEFT) , BMP_COLOR_HIGHCONTRAST );
148 mpRBWrapRight->SetModeRadioImage( aWrapIL.GetImage(IMG_RIGHT) );
149 mpRBWrapRight->SetModeRadioImage( aWrapILH.GetImage(IMG_RIGHT) , BMP_COLOR_HIGHCONTRAST );
150 }
151 mpRBWrapParallel->SetModeRadioImage( aWrapIL.GetImage(IMG_PARALLEL) );
152 mpRBWrapParallel->SetModeRadioImage( aWrapILH.GetImage(IMG_PARALLEL) , BMP_COLOR_HIGHCONTRAST );
153 mpRBWrapThrough->SetModeRadioImage( aWrapIL.GetImage(IMG_THROUGH) );
154 mpRBWrapThrough->SetModeRadioImage( aWrapILH.GetImage(IMG_THROUGH) , BMP_COLOR_HIGHCONTRAST );
155 mpRBIdealWrap->SetModeRadioImage( aWrapIL.GetImage(IMG_IDEAL) );
156 mpRBIdealWrap->SetModeRadioImage( aWrapILH.GetImage(IMG_IDEAL) , BMP_COLOR_HIGHCONTRAST );
157
158 mpRBNoWrap->SetAccessibleName(mpRBNoWrap->GetQuickHelpText());
159 mpRBWrapLeft->SetAccessibleName(mpRBWrapLeft->GetQuickHelpText());
160 mpRBWrapRight->SetAccessibleName(mpRBWrapRight->GetQuickHelpText());
161 mpRBWrapParallel->SetAccessibleName(mpRBWrapParallel->GetQuickHelpText());
162 mpRBWrapThrough->SetAccessibleName(mpRBWrapThrough->GetQuickHelpText());
163 mpRBIdealWrap->SetAccessibleName(mpRBIdealWrap->GetQuickHelpText());
164
165 mpBindings->Update( FN_FRAME_NOWRAP );
166 mpBindings->Update( FN_FRAME_WRAP );
167 mpBindings->Update( FN_FRAME_WRAP_RIGHT );
168 mpBindings->Update( FN_FRAME_WRAP_LEFT );
169 mpBindings->Update( FN_FRAME_WRAPTHRU );
170 mpBindings->Update( FN_FRAME_WRAP_IDEAL );
171 }
172
173
IMPL_LINK(WrapPropertyPanel,WrapTypeHdl,void *,EMPTYARG)174 IMPL_LINK(WrapPropertyPanel, WrapTypeHdl, void *, EMPTYARG)
175 {
176 sal_uInt16 nSlot = 0;
177 if ( mpRBWrapLeft->IsChecked() )
178 {
179 nSlot = FN_FRAME_WRAP_LEFT;
180 }
181 else if( mpRBWrapRight->IsChecked() )
182 {
183 nSlot = FN_FRAME_WRAP_RIGHT;
184 }
185 else if ( mpRBWrapParallel->IsChecked() )
186 {
187 nSlot = FN_FRAME_WRAP;
188 }
189 else if( mpRBWrapThrough->IsChecked() )
190 {
191 nSlot = FN_FRAME_WRAPTHRU;
192 }
193 else if( mpRBIdealWrap->IsChecked() )
194 {
195 nSlot = FN_FRAME_WRAP_IDEAL;
196 }
197 else
198 {
199 nSlot = FN_FRAME_NOWRAP;
200 }
201 SfxBoolItem bStateItem( nSlot, sal_True );
202 mpBindings->GetDispatcher()->Execute( nSlot, SFX_CALLMODE_RECORD, &bStateItem, 0L );
203
204 return 0;
205 }
206
207
NotifyItemUpdate(const sal_uInt16 nSId,const SfxItemState eState,const SfxPoolItem * pState,const bool bIsEnabled)208 void WrapPropertyPanel::NotifyItemUpdate(
209 const sal_uInt16 nSId,
210 const SfxItemState eState,
211 const SfxPoolItem* pState,
212 const bool bIsEnabled)
213 {
214 (void)bIsEnabled;
215
216 if ( eState == SFX_ITEM_AVAILABLE &&
217 pState->ISA(SfxBoolItem) )
218 {
219 //Set Radio Button enable
220 mpRBNoWrap->Enable(true);
221 mpRBWrapLeft->Enable(true);
222 mpRBWrapRight->Enable(true);
223 mpRBWrapParallel->Enable(true);
224 mpRBWrapThrough->Enable(true);
225 mpRBIdealWrap->Enable(true);
226
227 const SfxBoolItem* pBoolItem = static_cast< const SfxBoolItem* >( pState );
228 switch( nSId )
229 {
230 case FN_FRAME_WRAP_RIGHT:
231 mpRBWrapRight->Check( pBoolItem->GetValue() );
232 break;
233 case FN_FRAME_WRAP_LEFT:
234 mpRBWrapLeft->Check( pBoolItem->GetValue() );
235 break;
236 case FN_FRAME_WRAPTHRU:
237 mpRBWrapThrough->Check( pBoolItem->GetValue() );
238 break;
239 case FN_FRAME_WRAP_IDEAL:
240 mpRBIdealWrap->Check( pBoolItem->GetValue() );
241 break;
242 case FN_FRAME_WRAP:
243 mpRBWrapParallel->Check( pBoolItem->GetValue() );
244 break;
245 case FN_FRAME_NOWRAP:
246 default:
247 mpRBNoWrap->Check( pBoolItem->GetValue() );
248 break;
249 }
250 }
251 else
252 {
253 mpRBNoWrap->Enable(false);
254 mpRBWrapLeft->Enable(false);
255 mpRBWrapRight->Enable(false);
256 mpRBWrapParallel->Enable(false);
257 mpRBWrapThrough->Enable(false);
258 mpRBIdealWrap->Enable(false);
259
260 mpRBNoWrap->Check( sal_False );
261 mpRBWrapLeft->Check( sal_False );
262 mpRBWrapRight->Check( sal_False );
263 mpRBWrapParallel->Check( sal_False );
264 mpRBWrapThrough->Check( sal_False );
265 mpRBIdealWrap->Check( sal_False );
266 }
267 }
268
269 } } // end of namespace ::sw::sidebar
270