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