xref: /AOO41X/main/sc/source/ui/sidebar/CellBorderStyleControl.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 "precompiled_sc.hxx"
23 
24 #include <CellBorderStyleControl.hxx>
25 #include "sc.hrc"
26 #include "scresid.hxx"
27 #include <CellAppearancePropertyPanel.hrc>
28 #include <editeng/boxitem.hxx>
29 #include <editeng/bolnitem.hxx>
30 #include <CellAppearancePropertyPanel.hxx>
31 #include <sfx2/bindings.hxx>
32 #include <sfx2/dispatch.hxx>
33 #include <vcl/svapp.hxx>
34 
35 namespace sc { namespace sidebar {
36 
37 #define FRM_VALID_LEFT      0x01
38 #define FRM_VALID_RIGHT     0x02
39 #define FRM_VALID_TOP       0x04
40 #define FRM_VALID_BOTTOM    0x08
41 #define FRM_VALID_HINNER    0x10
42 #define FRM_VALID_VINNER    0x20
43 #define FRM_VALID_OUTER     0x0f
44 #define FRM_VALID_ALL       0xff
45 
CellBorderStyleControl(Window * pParent,CellAppearancePropertyPanel & rPanel)46 CellBorderStyleControl::CellBorderStyleControl(Window* pParent, CellAppearancePropertyPanel& rPanel)
47 :   svx::sidebar::PopupControl(pParent, ScResId(RID_POPUPPANEL_APPEARANCE_CELL_BORDERSTYLE)),
48     mrCellAppearancePropertyPanel(rPanel),
49     maTBBorder1(this, ScResId(TB_BORDER1)),
50     maTBBorder2(this, ScResId(TB_BORDER2)),
51     maTBBorder3(this, ScResId(TB_BORDER3)),
52     maFL1(this, ScResId(FL_1)),
53     maFL2(this, ScResId(FL_2)),
54     mpImageList(0),
55     mpImageListH(0)
56 {
57     Initialize();
58     FreeResource();
59 }
60 
~CellBorderStyleControl(void)61 CellBorderStyleControl::~CellBorderStyleControl(void)
62 {
63     delete[] mpImageList;
64     delete[] mpImageListH;
65 }
66 
Initialize()67 void CellBorderStyleControl::Initialize()
68 {
69     mpImageList = new Image[16];
70     mpImageList[0] = Image(ScResId(IMG_BORDER1));
71     mpImageList[1] = Image(ScResId(IMG_BORDER2));
72     mpImageList[2] = Image(ScResId(IMG_BORDER3));
73     mpImageList[3] = Image(ScResId(IMG_BORDER4));
74     mpImageList[4] = Image(ScResId(IMG_BORDER5));
75     mpImageList[5] = Image(ScResId(IMG_BORDER6));
76     mpImageList[6] = Image(ScResId(IMG_BORDER7));
77     mpImageList[7] = Image(ScResId(IMG_BORDER8));
78     mpImageList[8] = Image(ScResId(IMG_BORDER9));
79     mpImageList[9] = Image(ScResId(IMG_BORDER10));
80     mpImageList[10] = Image(ScResId(IMG_BORDER11));
81     mpImageList[11] = Image(ScResId(IMG_BORDER12));
82     mpImageList[12] = Image(ScResId(IMG_BORDER13));
83     mpImageList[13] = Image(ScResId(IMG_BORDER14));
84     mpImageList[14] = Image(ScResId(IMG_BORDER15));
85     mpImageList[15] = Image(ScResId(IMG_BORDER16));
86 
87     //high contrast
88     mpImageListH = new Image[16];
89     mpImageListH[0] = Image(ScResId(IMG_BORDER1_H));
90     mpImageListH[1] = Image(ScResId(IMG_BORDER2_H));
91     mpImageListH[2] = Image(ScResId(IMG_BORDER3_H));
92     mpImageListH[3] = Image(ScResId(IMG_BORDER4_H));
93     mpImageListH[4] = Image(ScResId(IMG_BORDER5_H));
94     mpImageListH[5] = Image(ScResId(IMG_BORDER6_H));
95     mpImageListH[6] = Image(ScResId(IMG_BORDER7_H));
96     mpImageListH[7] = Image(ScResId(IMG_BORDER8_H));
97     mpImageListH[8] = Image(ScResId(IMG_BORDER9_H));
98     mpImageListH[9] = Image(ScResId(IMG_BORDER10_H));
99     mpImageListH[10] = Image(ScResId(IMG_BORDER11_H));
100     mpImageListH[11] = Image(ScResId(IMG_BORDER12_H));
101     mpImageListH[12] = Image(ScResId(IMG_BORDER13_H));
102     mpImageListH[13] = Image(ScResId(IMG_BORDER14_H));
103     mpImageListH[14] = Image(ScResId(IMG_BORDER15_H));
104     mpImageListH[15] = Image(ScResId(IMG_BORDER16_H));
105 
106     maTBBorder1.SetItemImage(TBI_BORDER1_NONE, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[0] : mpImageList[0]);
107     maTBBorder1.SetItemImage(TBI_BORDER1_ALL, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[1] : mpImageList[1]);
108     maTBBorder1.SetItemImage(TBI_BORDER1_OUTER, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[2] : mpImageList[2]);
109     maTBBorder1.SetItemImage(TBI_BORDER1_OUTERBOLD, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[3] : mpImageList[3]);
110     maTBBorder1.SetBackground(Wallpaper());
111     maTBBorder1.SetPaintTransparent(true);
112     Size aTbxSize( maTBBorder1.CalcWindowSizePixel() );
113     maTBBorder1.SetOutputSizePixel( aTbxSize );
114     Link aLink  = LINK(this, CellBorderStyleControl, TB1SelectHdl);
115     maTBBorder1.SetSelectHdl ( aLink );
116 
117     maTBBorder2.SetLineCount(2);
118     maTBBorder2.InsertItem(TBI_BORDER2_LEFT, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[4] : mpImageList[4]);
119     maTBBorder2.InsertItem(TBI_BORDER2_RIGHT, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[5] : mpImageList[5]);
120     maTBBorder2.InsertItem(TBI_BORDER2_TOP, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[6] : mpImageList[6]);
121     maTBBorder2.InsertItem(TBI_BORDER2_BOT, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[7] : mpImageList[7]);
122     maTBBorder2.InsertBreak();
123     maTBBorder2.InsertItem(TBI_BORDER2_BLTR, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[8] : mpImageList[8]);
124     maTBBorder2.InsertItem(TBI_BORDER2_TLBR, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[9] : mpImageList[9]);
125     maTBBorder2.InsertItem(TBI_BORDER2_TOPBOT, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[10] : mpImageList[10]);
126     maTBBorder2.InsertItem(TBI_BORDER2_LEFTRIGHT, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[11] : mpImageList[11]);
127     maTBBorder2.SetBackground(Wallpaper());
128     maTBBorder2.SetPaintTransparent(true);
129     aTbxSize = maTBBorder2.CalcWindowSizePixel() ;
130     maTBBorder2.SetOutputSizePixel( aTbxSize );
131     maTBBorder2.SetHelpId(TBI_BORDER2_LEFT, HID_PROPERTYPANEL_SC_BORDER_TBI_LEFT);
132     maTBBorder2.SetHelpId(TBI_BORDER2_RIGHT, HID_PROPERTYPANEL_SC_BORDER_TBI_RIGHT);
133     maTBBorder2.SetHelpId(TBI_BORDER2_TOP, HID_PROPERTYPANEL_SC_BORDER_TBI_TOP);
134     maTBBorder2.SetHelpId(TBI_BORDER2_BOT, HID_PROPERTYPANEL_SC_BORDER_TBI_BOT);
135     maTBBorder2.SetHelpId(TBI_BORDER2_BLTR, HID_PROPERTYPANEL_SC_BORDER_TBI_BLTR);
136     maTBBorder2.SetHelpId(TBI_BORDER2_TLBR, HID_PROPERTYPANEL_SC_BORDER_TBI_TLBR);
137     maTBBorder2.SetHelpId(TBI_BORDER2_TOPBOT, HID_PROPERTYPANEL_SC_BORDER_TBI_TOPBOT);
138     maTBBorder2.SetHelpId(TBI_BORDER2_LEFTRIGHT, HID_PROPERTYPANEL_SC_BORDER_TBI_LEFTRIGHT);
139     maTBBorder2.SetItemText(TBI_BORDER2_LEFT, ScResId(STR_BORDER_1));
140     maTBBorder2.SetItemText(TBI_BORDER2_RIGHT, ScResId(STR_BORDER_2));
141     maTBBorder2.SetItemText(TBI_BORDER2_TOP, ScResId(STR_BORDER_3));
142     maTBBorder2.SetItemText(TBI_BORDER2_BOT, ScResId(STR_BORDER_4));
143     maTBBorder2.SetItemText(TBI_BORDER2_BLTR, ScResId(STR_BORDER_5));
144     maTBBorder2.SetItemText(TBI_BORDER2_TLBR, ScResId(STR_BORDER_6));
145     maTBBorder2.SetItemText(TBI_BORDER2_TOPBOT, ScResId(STR_BORDER_7));
146     maTBBorder2.SetItemText(TBI_BORDER2_LEFTRIGHT, ScResId(STR_BORDER_8));
147     aLink  = LINK(this, CellBorderStyleControl, TB2SelectHdl);
148     maTBBorder2.SetSelectHdl ( aLink );
149 
150     maTBBorder3.SetItemImage(TBI_BORDER3_S1, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[12] : mpImageList[12]);
151     maTBBorder3.SetItemImage(TBI_BORDER3_S2, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[13] : mpImageList[13]);
152     maTBBorder3.SetItemImage(TBI_BORDER3_S3, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[14] : mpImageList[14]);
153     maTBBorder3.SetItemImage(TBI_BORDER3_S4, GetDisplayBackground().GetColor().IsDark() ? mpImageListH[15] : mpImageList[15]);
154     maTBBorder3.SetBackground(Wallpaper());
155     maTBBorder3.SetPaintTransparent(true);
156     aTbxSize = maTBBorder3.CalcWindowSizePixel() ;
157     maTBBorder3.SetOutputSizePixel( aTbxSize );
158     aLink  = LINK(this, CellBorderStyleControl, TB3SelectHdl);
159     maTBBorder3.SetSelectHdl ( aLink );
160 }
161 
IMPL_LINK(CellBorderStyleControl,TB1SelectHdl,ToolBox *,pToolBox)162 IMPL_LINK(CellBorderStyleControl, TB1SelectHdl, ToolBox*, pToolBox)
163 {
164     sal_uInt16 nId = pToolBox->GetCurItemId();
165     ::Color             aColBlack( COL_BLACK );
166     SvxBoxItem          aBorderOuter( SID_ATTR_BORDER_OUTER );
167     SvxBoxInfoItem      aBorderInner( SID_ATTR_BORDER_INNER );
168     SvxBorderLine       theDefLine(NULL,1, 0, 0);
169     SvxBorderLine       *pLeft = 0, *pRight = 0, *pTop = 0, *pBottom = 0;
170     sal_uInt8 nValidFlags = 0;
171     switch ( nId )
172     {
173     case TBI_BORDER1_NONE:
174         {
175          nValidFlags |= FRM_VALID_ALL;
176         SvxLineItem     aLineItem1( SID_ATTR_BORDER_DIAG_BLTR );
177         SvxLineItem     aLineItem2( SID_ATTR_BORDER_DIAG_TLBR );
178         aLineItem1.SetLine( NULL );     //modify
179         aLineItem2.SetLine( NULL );     //modify
180         mrCellAppearancePropertyPanel.GetBindings()->GetDispatcher()->Execute(SID_ATTR_BORDER_DIAG_BLTR, SFX_CALLMODE_RECORD, &aLineItem1, 0L);
181         mrCellAppearancePropertyPanel.GetBindings()->GetDispatcher()->Execute(SID_ATTR_BORDER_DIAG_TLBR, SFX_CALLMODE_RECORD, &aLineItem2, 0L);
182         }
183         break;
184     case TBI_BORDER1_ALL:
185         pLeft = pRight = pTop = pBottom = &theDefLine;
186         aBorderInner.SetLine( &theDefLine, BOXINFO_LINE_HORI );
187         aBorderInner.SetLine( &theDefLine, BOXINFO_LINE_VERT );
188         nValidFlags |= FRM_VALID_ALL;
189         break;
190     case TBI_BORDER1_OUTER:
191         pLeft = pRight = pTop = pBottom = &theDefLine;
192         nValidFlags |= FRM_VALID_OUTER;
193         break;
194     case TBI_BORDER1_OUTERBOLD:
195         theDefLine.SetOutWidth(DEF_LINE_WIDTH_2);
196         pLeft = pRight = pTop = pBottom = &theDefLine;
197         nValidFlags |= FRM_VALID_OUTER;
198         break;
199     }
200 
201     aBorderOuter.SetLine( pLeft, BOX_LINE_LEFT );
202     aBorderOuter.SetLine( pRight, BOX_LINE_RIGHT );
203     aBorderOuter.SetLine( pTop, BOX_LINE_TOP );
204     aBorderOuter.SetLine( pBottom, BOX_LINE_BOTTOM );
205 
206     aBorderInner.SetValid( VALID_TOP,       0 != (nValidFlags&FRM_VALID_TOP ));
207     aBorderInner.SetValid( VALID_BOTTOM,    0 != (nValidFlags&FRM_VALID_BOTTOM ));
208     aBorderInner.SetValid( VALID_LEFT,      0 != (nValidFlags&FRM_VALID_LEFT));
209     aBorderInner.SetValid( VALID_RIGHT,     0 != (nValidFlags&FRM_VALID_RIGHT ));
210     aBorderInner.SetValid( VALID_HORI,      0 != (nValidFlags&FRM_VALID_HINNER ));
211     aBorderInner.SetValid( VALID_VERT,      0 != (nValidFlags&FRM_VALID_VINNER));
212     aBorderInner.SetValid( VALID_DISTANCE, true );
213     aBorderInner.SetValid( VALID_DISABLE, false );
214 
215     mrCellAppearancePropertyPanel.GetBindings()->GetDispatcher()->Execute(SID_ATTR_BORDER, SFX_CALLMODE_RECORD, &aBorderOuter, &aBorderInner, 0L);
216     mrCellAppearancePropertyPanel.EndCellBorderStylePopupMode();
217     return 0;
218 }
219 
IMPL_LINK(CellBorderStyleControl,TB2SelectHdl,ToolBox *,pToolBox)220 IMPL_LINK(CellBorderStyleControl, TB2SelectHdl, ToolBox *, pToolBox)
221 {
222     sal_uInt16 nId = pToolBox->GetCurItemId();
223 
224     if( nId != TBI_BORDER2_BLTR && nId != TBI_BORDER2_TLBR )
225     {
226         ::Color             aColBlack( COL_BLACK );
227         SvxBoxItem          aBorderOuter( SID_ATTR_BORDER_OUTER );
228         SvxBoxInfoItem      aBorderInner( SID_ATTR_BORDER_INNER );
229         SvxBorderLine       theDefLine(NULL, 1, 0, 0);
230         SvxBorderLine       *pLeft = 0,
231                             *pRight = 0,
232                             *pTop = 0,
233                             *pBottom = 0;
234         sal_uInt8               nValidFlags = 0;
235         switch ( nId )
236         {
237         case TBI_BORDER2_LEFT:
238             pLeft = &theDefLine;
239             nValidFlags |= FRM_VALID_LEFT;
240             break;
241         case TBI_BORDER2_RIGHT:
242             //
243             if(!Application::GetSettings().GetLayoutRTL())
244             {
245                 pRight = &theDefLine;
246                 nValidFlags |= FRM_VALID_RIGHT;
247             }
248             else
249             {
250                 pLeft = &theDefLine;
251                 nValidFlags |= FRM_VALID_LEFT;
252             }
253             break;
254         case TBI_BORDER2_TOP:
255             pTop = &theDefLine;
256             nValidFlags |= FRM_VALID_TOP;
257             break;
258         case TBI_BORDER2_BOT:
259             pBottom = &theDefLine;
260             nValidFlags |= FRM_VALID_BOTTOM;
261             break;
262         case TBI_BORDER2_TOPBOT:
263             pTop =  pBottom = &theDefLine;
264             nValidFlags |= FRM_VALID_BOTTOM|FRM_VALID_TOP;
265             break;
266         case TBI_BORDER2_LEFTRIGHT:
267             pLeft = pRight = &theDefLine;
268             nValidFlags |=  FRM_VALID_RIGHT|FRM_VALID_LEFT;
269             break;
270         }
271         aBorderOuter.SetLine( pLeft, BOX_LINE_LEFT );
272         aBorderOuter.SetLine( pRight, BOX_LINE_RIGHT );
273         aBorderOuter.SetLine( pTop, BOX_LINE_TOP );
274         aBorderOuter.SetLine( pBottom, BOX_LINE_BOTTOM );
275 
276         aBorderInner.SetValid( VALID_TOP,       0 != (nValidFlags&FRM_VALID_TOP ));
277         aBorderInner.SetValid( VALID_BOTTOM,    0 != (nValidFlags&FRM_VALID_BOTTOM ));
278         aBorderInner.SetValid( VALID_LEFT,      0 != (nValidFlags&FRM_VALID_LEFT));
279         aBorderInner.SetValid( VALID_RIGHT,     0 != (nValidFlags&FRM_VALID_RIGHT ));
280         aBorderInner.SetValid( VALID_HORI,      0 != (nValidFlags&FRM_VALID_HINNER ));
281         aBorderInner.SetValid( VALID_VERT,      0 != (nValidFlags&FRM_VALID_VINNER));
282         aBorderInner.SetValid( VALID_DISTANCE, true );
283         aBorderInner.SetValid( VALID_DISABLE, false );
284 
285         mrCellAppearancePropertyPanel.GetBindings()->GetDispatcher()->Execute(SID_ATTR_BORDER, SFX_CALLMODE_RECORD, &aBorderOuter, &aBorderInner, 0L);
286     }
287     else if(nId == TBI_BORDER2_BLTR)
288     {
289         SvxBorderLine aTmp( NULL, 1, 0, 0 );
290         SvxLineItem     aLineItem( SID_ATTR_BORDER_DIAG_BLTR );
291         aLineItem.SetLine( &aTmp );
292         mrCellAppearancePropertyPanel.GetBindings()->GetDispatcher()->Execute(SID_ATTR_BORDER_DIAG_BLTR, SFX_CALLMODE_RECORD, &aLineItem, 0L);
293     }
294     else if(nId == TBI_BORDER2_TLBR)
295     {
296         SvxBorderLine aTmp( NULL, 1, 0, 0 );
297         SvxLineItem     aLineItem( SID_ATTR_BORDER_DIAG_TLBR );
298         aLineItem.SetLine( &aTmp );
299         mrCellAppearancePropertyPanel.GetBindings()->GetDispatcher()->Execute(SID_ATTR_BORDER_DIAG_TLBR, SFX_CALLMODE_RECORD, &aLineItem, 0L);
300     }
301 
302     mrCellAppearancePropertyPanel.EndCellBorderStylePopupMode();
303     return 0;
304 }
305 
IMPL_LINK(CellBorderStyleControl,TB3SelectHdl,ToolBox *,pToolBox)306 IMPL_LINK(CellBorderStyleControl, TB3SelectHdl, ToolBox *, pToolBox)
307 {
308     sal_uInt16 nId = pToolBox->GetCurItemId();
309 
310     ::Color             aColBlack( COL_BLACK );
311     SvxBoxItem          aBorderOuter( SID_ATTR_BORDER_OUTER );
312     SvxBoxInfoItem      aBorderInner( SID_ATTR_BORDER_INNER );
313     SvxBorderLine       *pTop = 0 ,
314                         *pBottom = 0 ;
315     sal_uInt8               nValidFlags = 0;
316 
317     switch ( nId )
318     {
319     case TBI_BORDER3_S1:
320         pBottom = new SvxBorderLine(NULL, DEF_LINE_WIDTH_2, 0, 0);
321         nValidFlags |= FRM_VALID_BOTTOM;
322         break;
323     case TBI_BORDER3_S2:
324         pBottom = new SvxBorderLine(NULL, DEF_DOUBLE_LINE0_OUT, DEF_DOUBLE_LINE0_IN, DEF_DOUBLE_LINE0_DIST);
325         nValidFlags |= FRM_VALID_BOTTOM;
326         break;
327     case TBI_BORDER3_S3:
328         pBottom = new SvxBorderLine(NULL, DEF_LINE_WIDTH_2, 0, 0);
329         pTop = new SvxBorderLine(NULL, 1, 0, 0);
330         nValidFlags |= FRM_VALID_BOTTOM|FRM_VALID_TOP;
331         break;
332     case TBI_BORDER3_S4:
333         pBottom = new SvxBorderLine(NULL, DEF_DOUBLE_LINE0_OUT, DEF_DOUBLE_LINE0_IN, DEF_DOUBLE_LINE0_DIST);
334         pTop = new SvxBorderLine(NULL, 1, 0, 0);
335         nValidFlags |= FRM_VALID_BOTTOM|FRM_VALID_TOP;
336         break;
337     }
338 
339     aBorderOuter.SetLine( pTop, BOX_LINE_TOP );
340     aBorderOuter.SetLine( pBottom, BOX_LINE_BOTTOM );
341     aBorderOuter.SetLine( NULL, BOX_LINE_LEFT );
342     aBorderOuter.SetLine( NULL, BOX_LINE_RIGHT );
343 
344     aBorderInner.SetValid( VALID_TOP,       0 != (nValidFlags&FRM_VALID_TOP ));
345     aBorderInner.SetValid( VALID_BOTTOM,    0 != (nValidFlags&FRM_VALID_BOTTOM ));
346     aBorderInner.SetValid( VALID_LEFT,      0 != (nValidFlags&FRM_VALID_LEFT ));
347     aBorderInner.SetValid( VALID_RIGHT,     0 != (nValidFlags&FRM_VALID_RIGHT ));
348     aBorderInner.SetValid( VALID_HORI,      0 != (nValidFlags&FRM_VALID_HINNER ));
349     aBorderInner.SetValid( VALID_VERT,      0 != (nValidFlags&FRM_VALID_VINNER));
350     aBorderInner.SetValid( VALID_DISTANCE, true );
351     aBorderInner.SetValid( VALID_DISABLE, false );
352 
353     mrCellAppearancePropertyPanel.GetBindings()->GetDispatcher()->Execute(SID_ATTR_BORDER, SFX_CALLMODE_RECORD, &aBorderOuter, &aBorderInner, 0L);
354 
355     delete pTop;
356     delete pBottom;
357 
358     mrCellAppearancePropertyPanel.EndCellBorderStylePopupMode();
359     return 0;
360 }
361 
362 } } // end of namespace svx::sidebar
363 
364 // eof
365