xref: /trunk/main/svx/source/sidebar/graphic/GraphicPropertyPanel.cxx (revision ca62e2c2083b5d0995f1245bad6c2edfb455fbec)
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     mpBindings(pBindings)
89 {
90     Initialize();
91     FreeResource();
92 }
93 
94 //////////////////////////////////////////////////////////////////////////////
95 
96 GraphicPropertyPanel::~GraphicPropertyPanel()
97 {
98 }
99 
100 //////////////////////////////////////////////////////////////////////////////
101 
102 void GraphicPropertyPanel::Initialize()
103 {
104     mpFtBrightness->SetBackground(Wallpaper());
105     mpFtContrast->SetBackground(Wallpaper());
106     mpFtColorMode->SetBackground(Wallpaper());
107     mpFtTrans->SetBackground(Wallpaper());
108 
109     mpMtrBrightness->SetModifyHdl( LINK( this, GraphicPropertyPanel, ModifyBrightnessHdl ) );
110     mpMtrBrightness->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Brightness")));    //wj acc
111     mpMtrContrast->SetModifyHdl( LINK( this, GraphicPropertyPanel, ModifyContrastHdl ) );
112     mpMtrContrast->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Contrast")));    //wj acc
113     mpMtrTrans->SetModifyHdl( LINK( this, GraphicPropertyPanel, ModifyTransHdl ) );
114     mpMtrTrans->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Transparency")));   //wj acc
115 
116     mpLBColorMode->InsertEntry( msNormal, maImgNormal );
117     mpLBColorMode->InsertEntry( msGray, maImgGray );
118     mpLBColorMode->InsertEntry( msBW, maImgBW );
119     mpLBColorMode->InsertEntry( msWater, maImgWater );
120     mpLBColorMode->SetSelectHdl( LINK( this, GraphicPropertyPanel, ClickColorModeHdl ));
121     mpLBColorMode->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Color mode")));  //wj acc
122 
123     mpMtrRed->SetModifyHdl( LINK( this, GraphicPropertyPanel, RedHdl ) );
124     mpMtrGreen->SetModifyHdl( LINK( this, GraphicPropertyPanel, GreenHdl ) );
125     mpMtrBlue->SetModifyHdl( LINK( this, GraphicPropertyPanel, BlueHdl ) );
126     mpMtrGamma->SetModifyHdl( LINK( this, GraphicPropertyPanel, GammaHdl ) );
127     mpMtrRed->SetAccessibleName(mpMtrRed->GetQuickHelpText());  //wj acc
128     mpMtrGreen->SetAccessibleName(mpMtrGreen->GetQuickHelpText());  //wj acc
129     mpMtrBlue->SetAccessibleName(mpMtrBlue->GetQuickHelpText());        //wj acc
130     mpMtrGamma->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Gamma value")));    //wj acc
131 
132     mpMtrRed->SetAccessibleRelationLabeledBy(mpMtrRed.get());
133     mpMtrGreen->SetAccessibleRelationLabeledBy(mpMtrGreen.get());
134     mpMtrBlue->SetAccessibleRelationLabeledBy(mpMtrBlue.get());
135     mpMtrGamma->SetAccessibleRelationLabeledBy(mpMtrGamma.get());
136     mpMtrBrightness->SetAccessibleRelationLabeledBy(mpFtBrightness.get());  //7874
137     mpMtrContrast->SetAccessibleRelationLabeledBy(mpFtContrast.get());  //7874
138     mpMtrTrans->SetAccessibleRelationLabeledBy(mpFtTrans.get());    //7874
139     mpLBColorMode->SetAccessibleRelationLabeledBy(mpFtColorMode.get()); //7874
140 }
141 
142 //////////////////////////////////////////////////////////////////////////////
143 
144 IMPL_LINK( GraphicPropertyPanel, ModifyBrightnessHdl, void *, EMPTYARG )
145 {
146     sal_Int16 nBright = mpMtrBrightness->GetValue();
147     SfxInt16Item aBrightItem( SID_ATTR_GRAF_LUMINANCE, nBright );
148     GetBindings()->GetDispatcher()->Execute(
149         SID_ATTR_GRAF_LUMINANCE, SFX_CALLMODE_RECORD, &aBrightItem, 0L);
150     return 0L;
151 }
152 
153 //////////////////////////////////////////////////////////////////////////////
154 
155 IMPL_LINK( GraphicPropertyPanel, ModifyContrastHdl, void *, EMPTYARG )
156 {
157     sal_Int16 nContrast = mpMtrContrast->GetValue();
158     SfxInt16Item aContrastItem( SID_ATTR_GRAF_CONTRAST, nContrast );
159     GetBindings()->GetDispatcher()->Execute(
160         SID_ATTR_GRAF_CONTRAST, SFX_CALLMODE_RECORD, &aContrastItem, 0L);
161     return 0L;
162 }
163 
164 //////////////////////////////////////////////////////////////////////////////
165 
166 IMPL_LINK( GraphicPropertyPanel, ModifyTransHdl, void *, EMPTYARG )
167 {
168     sal_Int16 nTrans = mpMtrTrans->GetValue();
169     SfxInt16Item aTransItem( SID_ATTR_GRAF_TRANSPARENCE, nTrans );
170     GetBindings()->GetDispatcher()->Execute(
171         SID_ATTR_GRAF_TRANSPARENCE, SFX_CALLMODE_RECORD, &aTransItem, 0L);
172     return 0L;
173 }
174 
175 //////////////////////////////////////////////////////////////////////////////
176 
177 IMPL_LINK( GraphicPropertyPanel, ClickColorModeHdl, ToolBox *, /* pBox */)
178 {
179     sal_Int16 nTrans = mpLBColorMode->GetSelectEntryPos();
180     SfxInt16Item aTransItem( SID_ATTR_GRAF_MODE, nTrans );
181     GetBindings()->GetDispatcher()->Execute(
182         SID_ATTR_GRAF_MODE, SFX_CALLMODE_RECORD, &aTransItem, 0L);
183     return 0L;
184 }
185 
186 //////////////////////////////////////////////////////////////////////////////
187 
188 IMPL_LINK( GraphicPropertyPanel, RedHdl, void*, EMPTYARG )
189 {
190     sal_Int16 nRed = mpMtrRed->GetValue();
191     SfxInt16Item aRedItem( SID_ATTR_GRAF_RED, nRed );
192     GetBindings()->GetDispatcher()->Execute(
193         SID_ATTR_GRAF_RED, SFX_CALLMODE_RECORD, &aRedItem, 0L);
194     return 0L;
195 }
196 
197 //////////////////////////////////////////////////////////////////////////////
198 
199 IMPL_LINK( GraphicPropertyPanel, GreenHdl, void*, EMPTYARG )
200 {
201     sal_Int16 nGreen = mpMtrGreen->GetValue();
202     SfxInt16Item aGreenItem( SID_ATTR_GRAF_GREEN, nGreen );
203     GetBindings()->GetDispatcher()->Execute(
204         SID_ATTR_GRAF_GREEN, SFX_CALLMODE_RECORD, &aGreenItem, 0L);
205     return 0L;
206 }
207 
208 //////////////////////////////////////////////////////////////////////////////
209 
210 IMPL_LINK(GraphicPropertyPanel, BlueHdl, void *, EMPTYARG)
211 {
212     sal_Int16 nBlue = mpMtrBlue->GetValue();
213     SfxInt16Item aBlueItem( SID_ATTR_GRAF_BLUE, nBlue );
214     GetBindings()->GetDispatcher()->Execute(
215         SID_ATTR_GRAF_BLUE, SFX_CALLMODE_RECORD, &aBlueItem, 0L);
216     return 0L;
217 }
218 
219 //////////////////////////////////////////////////////////////////////////////
220 
221 IMPL_LINK(GraphicPropertyPanel, GammaHdl, void *, EMPTYARG)
222 {
223     sal_Int32 nGamma = mpMtrGamma->GetValue();
224     SfxInt32Item nGammaItem( SID_ATTR_GRAF_GAMMA, nGamma );
225     GetBindings()->GetDispatcher()->Execute(
226         SID_ATTR_GRAF_GAMMA, SFX_CALLMODE_RECORD, &nGammaItem, 0L);
227     return 0L;
228 }
229 
230 //////////////////////////////////////////////////////////////////////////////
231 
232 void GraphicPropertyPanel::SetupIcons(void)
233 {
234     if(Theme::GetBoolean(Theme::Bool_UseSymphonyIcons))
235     {
236         // todo
237     }
238     else
239     {
240         // todo
241     }
242 }
243 
244 //////////////////////////////////////////////////////////////////////////////
245 
246 GraphicPropertyPanel* GraphicPropertyPanel::Create (
247     Window* pParent,
248     const cssu::Reference<css::frame::XFrame>& rxFrame,
249     SfxBindings* pBindings)
250 {
251     if (pParent == NULL)
252         throw lang::IllegalArgumentException(A2S("no parent Window given to GraphicPropertyPanel::Create"), NULL, 0);
253     if ( ! rxFrame.is())
254         throw lang::IllegalArgumentException(A2S("no XFrame given to GraphicPropertyPanel::Create"), NULL, 1);
255     if (pBindings == NULL)
256         throw lang::IllegalArgumentException(A2S("no SfxBindings given to GraphicPropertyPanel::Create"), NULL, 2);
257 
258     return new GraphicPropertyPanel(
259         pParent,
260         rxFrame,
261         pBindings);
262 }
263 
264 //////////////////////////////////////////////////////////////////////////////
265 
266 void GraphicPropertyPanel::DataChanged(
267     const DataChangedEvent& rEvent)
268 {
269     (void)rEvent;
270 
271     SetupIcons();
272 }
273 
274 //////////////////////////////////////////////////////////////////////////////
275 
276 void GraphicPropertyPanel::NotifyItemUpdate(
277     sal_uInt16 nSID,
278     SfxItemState eState,
279     const SfxPoolItem* pState,
280     const bool bIsEnabled)
281 {
282     (void)bIsEnabled;
283 
284     switch( nSID )
285     {
286     case SID_ATTR_GRAF_LUMINANCE:
287         if( eState >= SFX_ITEM_AVAILABLE)
288         {
289             mpMtrBrightness->Enable();
290             const SfxInt16Item* pItem = dynamic_cast< const SfxInt16Item* >(pState);
291 
292             if(pItem)
293             {
294                 sal_Int64 nBright = pItem->GetValue();
295                 mpMtrBrightness->SetValue(nBright);
296             }
297         }
298         else if( eState == SFX_ITEM_DISABLED )
299             mpMtrBrightness->Disable();
300         else
301         {
302             mpMtrBrightness->Enable();
303             mpMtrBrightness->SetText( String());
304         }
305         break;
306     case SID_ATTR_GRAF_CONTRAST:
307         if( eState >= SFX_ITEM_AVAILABLE)
308         {
309             mpMtrContrast->Enable();
310             const SfxInt16Item* pItem = dynamic_cast< const SfxInt16Item* >(pState);
311 
312             if(pItem)
313             {
314                 sal_Int64 nContrast = pItem->GetValue();
315                 mpMtrContrast->SetValue(nContrast);
316             }
317         }
318         else if( eState == SFX_ITEM_DISABLED )
319             mpMtrContrast->Disable();
320         else
321         {
322             mpMtrContrast->Enable();
323             mpMtrContrast->SetText( String());
324         }
325         break;
326     case SID_ATTR_GRAF_TRANSPARENCE:
327         if( eState >= SFX_ITEM_AVAILABLE)
328         {
329             mpMtrTrans->Enable();
330             const SfxUInt16Item* pItem = dynamic_cast< const SfxUInt16Item* >(pState);
331 
332             if(pItem)
333             {
334                 sal_Int64 nTrans = pItem->GetValue();
335                 mpMtrTrans->SetValue(nTrans);
336             }
337         }
338         else if( eState == SFX_ITEM_DISABLED )
339             mpMtrTrans->Disable();
340         else
341         {
342             mpMtrTrans->Enable();
343             mpMtrTrans->SetText( String());
344         }
345         break;
346     case SID_ATTR_GRAF_MODE:
347         if( eState >= SFX_ITEM_AVAILABLE)
348         {
349             mpLBColorMode->Enable();
350             const SfxUInt16Item* pItem = dynamic_cast< const SfxUInt16Item* >(pState);
351 
352             if(pItem)
353             {
354                 sal_Int64 nTrans = pItem->GetValue();
355                 mpLBColorMode->SelectEntryPos(nTrans);
356             }
357         }
358         else if( eState == SFX_ITEM_DISABLED )
359             mpLBColorMode->Disable();
360         else
361         {
362             mpLBColorMode->Enable();
363             mpLBColorMode->SetNoSelection();
364         }
365         break;
366     case SID_ATTR_GRAF_RED:
367         if( eState >= SFX_ITEM_AVAILABLE)
368         {
369             mpMtrRed->Enable();
370             const SfxInt16Item* pItem = dynamic_cast< const SfxInt16Item* >(pState);
371 
372             if(pItem)
373             {
374                 sal_Int64 nRed = pItem->GetValue();
375                 mpMtrRed->SetValue( nRed );
376             }
377         }
378         else if( eState == SFX_ITEM_DISABLED )
379             mpMtrRed->Disable();
380         else
381         {
382             mpMtrRed->Enable();
383             mpMtrRed->SetText( String());
384         }
385         break;
386     case SID_ATTR_GRAF_GREEN:
387         if( eState >= SFX_ITEM_AVAILABLE)
388         {
389             mpMtrGreen->Enable();
390             const SfxInt16Item* pItem = dynamic_cast< const SfxInt16Item* >(pState);
391 
392             if(pItem)
393             {
394                 sal_Int64 nGreen = pItem->GetValue();
395                 mpMtrGreen->SetValue( nGreen );
396             }
397         }
398         else if( eState == SFX_ITEM_DISABLED )
399             mpMtrGreen->Disable();
400         else
401         {
402             mpMtrGreen->Enable();
403             mpMtrGreen->SetText( String());
404         }
405         break;
406     case SID_ATTR_GRAF_BLUE:
407         if( eState >= SFX_ITEM_AVAILABLE)
408         {
409             mpMtrBlue->Enable();
410             const SfxInt16Item* pItem = dynamic_cast< const SfxInt16Item* >(pState);
411 
412             if(pItem)
413             {
414                 sal_Int64 nBlue = pItem->GetValue();
415                 mpMtrBlue->SetValue( nBlue );
416             }
417         }
418         else if( eState == SFX_ITEM_DISABLED )
419             mpMtrBlue->Disable();
420         else
421         {
422             mpMtrBlue->Enable();
423             mpMtrBlue->SetText( String());
424         }
425         break;
426     case SID_ATTR_GRAF_GAMMA:
427         if( eState >= SFX_ITEM_AVAILABLE)
428         {
429             mpMtrGamma->Enable();
430             const SfxUInt32Item* pItem = dynamic_cast< const SfxUInt32Item* >(pState);
431 
432             if(pItem)
433             {
434                 sal_Int64 nGamma = pItem->GetValue();
435                 mpMtrGamma->SetValue( nGamma );
436             }
437         }
438         else if( eState == SFX_ITEM_DISABLED )
439             mpMtrGamma->Disable();
440         else
441         {
442             mpMtrGamma->Enable();
443             mpMtrGamma->SetText( String());
444         }
445         break;
446     }
447 }
448 
449 
450 
451 
452 //////////////////////////////////////////////////////////////////////////////
453 
454 SfxBindings* GraphicPropertyPanel::GetBindings()
455 {
456     return mpBindings;
457 }
458 
459 //////////////////////////////////////////////////////////////////////////////
460 // namespace close
461 
462 }} // end of namespace ::svx::sidebar
463 
464 //////////////////////////////////////////////////////////////////////////////
465 // eof
466