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