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 <sfx2/sidebar/propertypanel.hrc>
23 #include <sfx2/sidebar/Theme.hxx>
24 #include <sfx2/sidebar/ControlFactory.hxx>
25 #include <GraphicPropertyPanel.hxx>
26 #include <GraphicPropertyPanel.hrc>
27 #include <svx/dialogs.hrc>
28 #include <svx/dialmgr.hxx>
29 #include <vcl/field.hxx>
30 #include <vcl/lstbox.hxx>
31 #include <svl/intitem.hxx>
32 #include <sfx2/bindings.hxx>
33 #include <sfx2/dispatch.hxx>
34 
35 using namespace css;
36 using namespace cssu;
37 using ::sfx2::sidebar::Theme;
38 
39 #define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString)))
40 
41 //////////////////////////////////////////////////////////////////////////////
42 // namespace open
43 
44 namespace svx { namespace sidebar {
45 
46 //////////////////////////////////////////////////////////////////////////////
47 
48 GraphicPropertyPanel::GraphicPropertyPanel(
49     Window* pParent,
50     const cssu::Reference<css::frame::XFrame>& rxFrame,
51     SfxBindings* pBindings)
52 :   Control(
53         pParent,
54         SVX_RES(RID_SIDEBAR_GRAPHIC_PANEL)),
55     mpFtBrightness(new FixedText(this, SVX_RES(FT_BRIGHTNESS))),
56     mpMtrBrightness(new MetricField(this, SVX_RES(MTR_BRIGHTNESS))),
57     mpFtContrast(new FixedText(this, SVX_RES(FT_CONTRAST))),
58     mpMtrContrast(new MetricField(this, SVX_RES(MTR_CONTRAST))),
59     mpFtColorMode(new FixedText(this, SVX_RES(FT_COLOR_MODE))),
60     mpLBColorMode(new ListBox(this, SVX_RES(LB_COLOR_MODE))),
61     mpFtTrans(new FixedText(this, SVX_RES(FT_TRANSPARENT))),
62     mpMtrTrans(new MetricField(this, SVX_RES(MTR_TRANSPARENT))),
63     mpMtrRed(new MetricField(this, SVX_RES(MF_RED))),
64     mpMtrGreen(new MetricField(this, SVX_RES(MF_GREEN))),
65     mpMtrBlue(new MetricField(this, SVX_RES(MF_BLUE))),
66     mpMtrGamma(new MetricField(this, SVX_RES(MF_GAMMA))),
67     maBrightControl(SID_ATTR_GRAF_LUMINANCE, *pBindings, *this),
68     maContrastControl(SID_ATTR_GRAF_CONTRAST, *pBindings, *this),
69     maTransparenceControl(SID_ATTR_GRAF_TRANSPARENCE, *pBindings, *this),
70     maRedControl(SID_ATTR_GRAF_RED, *pBindings, *this),
71     maGreenControl(SID_ATTR_GRAF_GREEN, *pBindings, *this),
72     maBlueControl(SID_ATTR_GRAF_BLUE, *pBindings, *this),
73     maGammaControl(SID_ATTR_GRAF_GAMMA, *pBindings, *this),
74     maModeControl(SID_ATTR_GRAF_MODE, *pBindings, *this),
75     maImgNormal(SVX_RES(IMG_NORMAL)),
76     maImgBW(SVX_RES(IMG_BW)),
77     maImgGray(SVX_RES(IMG_GRAY)),
78     maImgWater(SVX_RES(IMG_WATER)),
79     maImgRed(this, SVX_RES(IMG_RED)),
80     maImgGreen(this, SVX_RES(IMG_GREEN)),
81     maImgBlue(this, SVX_RES(IMG_BLUE)),
82     maImgGamma(this, SVX_RES(IMG_GAMMA)),
83     msNormal(SVX_RES(STR_NORMAL)),
84     msBW(SVX_RES(STR_BW)),
85     msGray(SVX_RES(STR_GRAY)),
86     msWater(SVX_RES(STR_WATER)),
87     mxFrame(rxFrame),
88     maContext(),
89     mpBindings(pBindings)
90 {
91     Initialize();
92     FreeResource();
93 }
94 
95 //////////////////////////////////////////////////////////////////////////////
96 
97 GraphicPropertyPanel::~GraphicPropertyPanel()
98 {
99 }
100 
101 //////////////////////////////////////////////////////////////////////////////
102 
103 void GraphicPropertyPanel::Initialize()
104 {
105 	mpMtrBrightness->SetModifyHdl( LINK( this, GraphicPropertyPanel, ModifyBrightnessHdl ) );
106 	mpMtrBrightness->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Brightness")));	//wj acc
107 	mpMtrContrast->SetModifyHdl( LINK( this, GraphicPropertyPanel, ModifyContrastHdl ) );
108 	mpMtrContrast->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Contrast")));	//wj acc
109 	mpMtrTrans->SetModifyHdl( LINK( this, GraphicPropertyPanel, ModifyTransHdl ) );
110 	mpMtrTrans->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Transparency")));	//wj acc
111 
112 	mpLBColorMode->InsertEntry( msNormal, maImgNormal );
113 	mpLBColorMode->InsertEntry( msGray, maImgGray );
114 	mpLBColorMode->InsertEntry( msBW, maImgBW );
115 	mpLBColorMode->InsertEntry( msWater, maImgWater );
116 	mpLBColorMode->SetSelectHdl( LINK( this, GraphicPropertyPanel, ClickColorModeHdl ));
117 	mpLBColorMode->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Color mode")));	//wj acc
118 
119 	mpMtrRed->SetModifyHdl( LINK( this, GraphicPropertyPanel, RedHdl ) );
120 	mpMtrGreen->SetModifyHdl( LINK( this, GraphicPropertyPanel, GreenHdl ) );
121 	mpMtrBlue->SetModifyHdl( LINK( this, GraphicPropertyPanel, BlueHdl ) );
122 	mpMtrGamma->SetModifyHdl( LINK( this, GraphicPropertyPanel, GammaHdl ) );
123 	mpMtrRed->SetAccessibleName(mpMtrRed->GetQuickHelpText());	//wj acc
124 	mpMtrGreen->SetAccessibleName(mpMtrGreen->GetQuickHelpText());	//wj acc
125 	mpMtrBlue->SetAccessibleName(mpMtrBlue->GetQuickHelpText());		//wj acc
126 	mpMtrGamma->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Gamma value")));	//wj acc
127 
128     mpMtrRed->SetAccessibleRelationLabeledBy(mpMtrRed.get());
129 	mpMtrGreen->SetAccessibleRelationLabeledBy(mpMtrGreen.get());
130 	mpMtrBlue->SetAccessibleRelationLabeledBy(mpMtrBlue.get());
131 	mpMtrGamma->SetAccessibleRelationLabeledBy(mpMtrGamma.get());
132 	mpMtrBrightness->SetAccessibleRelationLabeledBy(mpFtBrightness.get());	//7874
133 	mpMtrContrast->SetAccessibleRelationLabeledBy(mpFtContrast.get());	//7874
134 	mpMtrTrans->SetAccessibleRelationLabeledBy(mpFtTrans.get());	//7874
135 	mpLBColorMode->SetAccessibleRelationLabeledBy(mpFtColorMode.get());	//7874
136 }
137 
138 //////////////////////////////////////////////////////////////////////////////
139 
140 IMPL_LINK( GraphicPropertyPanel, ModifyBrightnessHdl, void *, EMPTYARG )
141 {
142 	sal_Int16 nBright = mpMtrBrightness->GetValue();
143 	SfxInt16Item aBrightItem( SID_ATTR_GRAF_LUMINANCE, nBright );
144 	GetBindings()->GetDispatcher()->Execute(
145 		SID_ATTR_GRAF_LUMINANCE, SFX_CALLMODE_RECORD, &aBrightItem, 0L);
146 	return 0L;
147 }
148 
149 //////////////////////////////////////////////////////////////////////////////
150 
151 IMPL_LINK( GraphicPropertyPanel, ModifyContrastHdl, void *, EMPTYARG )
152 {
153 	sal_Int16 nContrast = mpMtrContrast->GetValue();
154 	SfxInt16Item aContrastItem( SID_ATTR_GRAF_CONTRAST, nContrast );
155 	GetBindings()->GetDispatcher()->Execute(
156 		SID_ATTR_GRAF_CONTRAST, SFX_CALLMODE_RECORD, &aContrastItem, 0L);
157 	return 0L;
158 }
159 
160 //////////////////////////////////////////////////////////////////////////////
161 
162 IMPL_LINK( GraphicPropertyPanel, ModifyTransHdl, void *, EMPTYARG )
163 {
164 	sal_Int16 nTrans = mpMtrTrans->GetValue();
165 	SfxInt16Item aTransItem( SID_ATTR_GRAF_TRANSPARENCE, nTrans );
166 	GetBindings()->GetDispatcher()->Execute(
167 		SID_ATTR_GRAF_TRANSPARENCE, SFX_CALLMODE_RECORD, &aTransItem, 0L);
168 	return 0L;
169 }
170 
171 //////////////////////////////////////////////////////////////////////////////
172 
173 IMPL_LINK( GraphicPropertyPanel, ClickColorModeHdl, ToolBox *, pBox )
174 {
175 	sal_Int16 nTrans = mpLBColorMode->GetSelectEntryPos();
176 	SfxInt16Item aTransItem( SID_ATTR_GRAF_MODE, nTrans );
177 	GetBindings()->GetDispatcher()->Execute(
178 		SID_ATTR_GRAF_MODE, SFX_CALLMODE_RECORD, &aTransItem, 0L);
179 	return 0L;
180 }
181 
182 //////////////////////////////////////////////////////////////////////////////
183 
184 IMPL_LINK( GraphicPropertyPanel, RedHdl, void*, EMPTYARG )
185 {
186 	sal_Int16 nRed = mpMtrRed->GetValue();
187 	SfxInt16Item aRedItem( SID_ATTR_GRAF_RED, nRed );
188 	GetBindings()->GetDispatcher()->Execute(
189 		SID_ATTR_GRAF_RED, SFX_CALLMODE_RECORD, &aRedItem, 0L);
190 	return 0L;
191 }
192 
193 //////////////////////////////////////////////////////////////////////////////
194 
195 IMPL_LINK( GraphicPropertyPanel, GreenHdl, void*, EMPTYARG )
196 {
197 	sal_Int16 nGreen = mpMtrGreen->GetValue();
198 	SfxInt16Item aGreenItem( SID_ATTR_GRAF_GREEN, nGreen );
199 	GetBindings()->GetDispatcher()->Execute(
200 		SID_ATTR_GRAF_GREEN, SFX_CALLMODE_RECORD, &aGreenItem, 0L);
201 	return 0L;
202 }
203 
204 //////////////////////////////////////////////////////////////////////////////
205 
206 IMPL_LINK(GraphicPropertyPanel, BlueHdl, void *, EMPTYARG)
207 {
208 	sal_Int16 nBlue = mpMtrBlue->GetValue();
209 	SfxInt16Item aBlueItem( SID_ATTR_GRAF_BLUE, nBlue );
210 	GetBindings()->GetDispatcher()->Execute(
211 		SID_ATTR_GRAF_BLUE, SFX_CALLMODE_RECORD, &aBlueItem, 0L);
212 	return 0L;
213 }
214 
215 //////////////////////////////////////////////////////////////////////////////
216 
217 IMPL_LINK(GraphicPropertyPanel, GammaHdl, void *, EMPTYARG)
218 {
219 	sal_Int32 nGamma = mpMtrGamma->GetValue();
220 	SfxInt32Item nGammaItem( SID_ATTR_GRAF_GAMMA, nGamma );
221 	GetBindings()->GetDispatcher()->Execute(
222 		SID_ATTR_GRAF_GAMMA, SFX_CALLMODE_RECORD, &nGammaItem, 0L);
223 	return 0L;
224 }
225 
226 //////////////////////////////////////////////////////////////////////////////
227 
228 void GraphicPropertyPanel::SetupIcons(void)
229 {
230     if(Theme::GetBoolean(Theme::Bool_UseSymphonyIcons))
231     {
232         // todo
233     }
234     else
235     {
236         // todo
237     }
238 }
239 
240 //////////////////////////////////////////////////////////////////////////////
241 
242 GraphicPropertyPanel* GraphicPropertyPanel::Create (
243     Window* pParent,
244     const cssu::Reference<css::frame::XFrame>& rxFrame,
245     SfxBindings* pBindings)
246 {
247     if (pParent == NULL)
248         throw lang::IllegalArgumentException(A2S("no parent Window given to GraphicPropertyPanel::Create"), NULL, 0);
249     if ( ! rxFrame.is())
250         throw lang::IllegalArgumentException(A2S("no XFrame given to GraphicPropertyPanel::Create"), NULL, 1);
251     if (pBindings == NULL)
252         throw lang::IllegalArgumentException(A2S("no SfxBindings given to GraphicPropertyPanel::Create"), NULL, 2);
253 
254     return new GraphicPropertyPanel(
255         pParent,
256         rxFrame,
257         pBindings);
258 }
259 
260 //////////////////////////////////////////////////////////////////////////////
261 
262 void GraphicPropertyPanel::DataChanged(
263     const DataChangedEvent& rEvent)
264 {
265     (void)rEvent;
266 
267     SetupIcons();
268 }
269 
270 //////////////////////////////////////////////////////////////////////////////
271 
272 void GraphicPropertyPanel::HandleContextChange(
273     const ::sfx2::sidebar::EnumContext aContext)
274 {
275     if(maContext == aContext)
276     {
277         // Nothing to do.
278         return;
279     }
280 
281     maContext = aContext;
282 
283 
284 
285     // todo
286 }
287 
288 //////////////////////////////////////////////////////////////////////////////
289 
290 void GraphicPropertyPanel::NotifyItemUpdate(
291     sal_uInt16 nSID,
292     SfxItemState eState,
293     const SfxPoolItem* pState)
294 {
295 	switch( nSID )
296 	{
297 	case SID_ATTR_GRAF_LUMINANCE:
298 		if( eState >= SFX_ITEM_AVAILABLE)
299 		{
300 			mpMtrBrightness->Enable();
301             const SfxInt16Item* pItem = dynamic_cast< const SfxInt16Item* >(pState);
302 
303 			if(pItem)
304 			{
305 				sal_Int64 nBright = pItem->GetValue();
306 				mpMtrBrightness->SetValue(nBright);
307 			}
308 		}
309 		else if( eState == SFX_ITEM_DISABLED )
310 			mpMtrBrightness->Disable();
311 		else
312 		{
313 			mpMtrBrightness->Enable();
314 			mpMtrBrightness->SetText( String());
315 		}
316 		break;
317 	case SID_ATTR_GRAF_CONTRAST:
318 		if( eState >= SFX_ITEM_AVAILABLE)
319 		{
320 			mpMtrContrast->Enable();
321             const SfxInt16Item* pItem = dynamic_cast< const SfxInt16Item* >(pState);
322 
323             if(pItem)
324 			{
325 				sal_Int64 nContrast = pItem->GetValue();
326 				mpMtrContrast->SetValue(nContrast);
327 			}
328 		}
329 		else if( eState == SFX_ITEM_DISABLED )
330 			mpMtrContrast->Disable();
331 		else
332 		{
333 			mpMtrContrast->Enable();
334 			mpMtrContrast->SetText( String());
335 		}
336 		break;
337 	case SID_ATTR_GRAF_TRANSPARENCE:
338 		if( eState >= SFX_ITEM_AVAILABLE)
339 		{
340 			mpMtrTrans->Enable();
341             const SfxUInt16Item* pItem = dynamic_cast< const SfxUInt16Item* >(pState);
342 
343 			if(pItem)
344 			{
345 				sal_Int64 nTrans = pItem->GetValue();
346 				mpMtrTrans->SetValue(nTrans);
347 			}
348 		}
349 		else if( eState == SFX_ITEM_DISABLED )
350 			mpMtrTrans->Disable();
351 		else
352 		{
353 			mpMtrTrans->Enable();
354 			mpMtrTrans->SetText( String());
355 		}
356 		break;
357 	case SID_ATTR_GRAF_MODE:
358 		if( eState >= SFX_ITEM_AVAILABLE)
359 		{
360 			mpLBColorMode->Enable();
361             const SfxUInt16Item* pItem = dynamic_cast< const SfxUInt16Item* >(pState);
362 
363 			if(pItem)
364 			{
365 				sal_Int64 nTrans = pItem->GetValue();
366 				mpLBColorMode->SelectEntryPos(nTrans);
367 			}
368 		}
369 		else if( eState == SFX_ITEM_DISABLED )
370 			mpLBColorMode->Disable();
371 		else
372 		{
373 			mpLBColorMode->Enable();
374 			mpLBColorMode->SetNoSelection();
375 		}
376 		break;
377 	case SID_ATTR_GRAF_RED:
378 		if( eState >= SFX_ITEM_AVAILABLE)
379 		{
380 			mpMtrRed->Enable();
381             const SfxInt16Item* pItem = dynamic_cast< const SfxInt16Item* >(pState);
382 
383 			if(pItem)
384 			{
385 				sal_Int64 nRed = pItem->GetValue();
386 				mpMtrRed->SetValue( nRed );
387 			}
388 		}
389 		else if( eState == SFX_ITEM_DISABLED )
390 			mpMtrRed->Disable();
391 		else
392 		{
393 			mpMtrRed->Enable();
394 			mpMtrRed->SetText( String());
395 		}
396 		break;
397 	case SID_ATTR_GRAF_GREEN:
398 		if( eState >= SFX_ITEM_AVAILABLE)
399 		{
400 			mpMtrGreen->Enable();
401             const SfxInt16Item* pItem = dynamic_cast< const SfxInt16Item* >(pState);
402 
403 			if(pItem)
404 			{
405 				sal_Int64 nGreen = pItem->GetValue();
406 				mpMtrGreen->SetValue( nGreen );
407 			}
408 		}
409 		else if( eState == SFX_ITEM_DISABLED )
410 			mpMtrGreen->Disable();
411 		else
412 		{
413 			mpMtrGreen->Enable();
414 			mpMtrGreen->SetText( String());
415 		}
416 		break;
417 	case SID_ATTR_GRAF_BLUE:
418 		if( eState >= SFX_ITEM_AVAILABLE)
419 		{
420 			mpMtrBlue->Enable();
421             const SfxInt16Item* pItem = dynamic_cast< const SfxInt16Item* >(pState);
422 
423 			if(pItem)
424 			{
425 				sal_Int64 nBlue = pItem->GetValue();
426 				mpMtrBlue->SetValue( nBlue );
427 			}
428 		}
429 		else if( eState == SFX_ITEM_DISABLED )
430 			mpMtrBlue->Disable();
431 		else
432 		{
433 			mpMtrBlue->Enable();
434 			mpMtrBlue->SetText( String());
435 		}
436 		break;
437 	case SID_ATTR_GRAF_GAMMA:
438 		if( eState >= SFX_ITEM_AVAILABLE)
439 		{
440 			mpMtrGamma->Enable();
441             const SfxUInt32Item* pItem = dynamic_cast< const SfxUInt32Item* >(pState);
442 
443 			if(pItem)
444 			{
445 				sal_Int64 nGamma = pItem->GetValue();
446 				mpMtrGamma->SetValue( nGamma );
447 			}
448 		}
449 		else if( eState == SFX_ITEM_DISABLED )
450 			mpMtrGamma->Disable();
451 		else
452 		{
453 			mpMtrGamma->Enable();
454 			mpMtrGamma->SetText( String());
455 		}
456 		break;
457 	}
458 }
459 
460 //////////////////////////////////////////////////////////////////////////////
461 
462 SfxBindings* GraphicPropertyPanel::GetBindings()
463 {
464     return mpBindings;
465 }
466 
467 //////////////////////////////////////////////////////////////////////////////
468 // namespace close
469 
470 }} // end of namespace ::svx::sidebar
471 
472 //////////////////////////////////////////////////////////////////////////////
473 // eof
474