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_sc.hxx"
25 
26 #include <CellLineStyleValueSet.hxx>
27 #include <i18npool/mslangid.hxx>
28 
29 namespace sc { namespace sidebar {
30 
CellLineStyleValueSet(Window * pParent,const ResId & rResId)31 CellLineStyleValueSet::CellLineStyleValueSet( Window* pParent, const ResId& rResId)
32 :	ValueSet( pParent, rResId ),
33 	pVDev(NULL),
34 	nSelItem(0),
35 	bCusEnable(false)
36 {
37 	strUnit = new XubString[9];
38 	SetColCount( 1 );
39 	SetLineCount( 9);
40 }
41 
~CellLineStyleValueSet()42 CellLineStyleValueSet::~CellLineStyleValueSet()
43 {
44 	delete pVDev;
45 	delete[] strUnit;
46 }
47 
SetUnit(XubString * str)48 void CellLineStyleValueSet::SetUnit(XubString* str)
49 {
50 	for(int i = 0; i < 9; i++)
51 	{
52 		strUnit[i] = str[i];
53 	}
54 }
55 
SetSelItem(sal_uInt16 nSel)56 void CellLineStyleValueSet::SetSelItem(sal_uInt16 nSel)
57 {
58 	nSelItem = nSel;
59 	if(nSel == 0)
60 	{
61 		SelectItem(1);
62 		SetNoSelection();
63 	}
64 	else
65 	{
66 		SelectItem(nSelItem);
67 		GrabFocus();
68 	}
69 }
70 
GetSelItem()71 sal_uInt16 CellLineStyleValueSet::GetSelItem()
72 {
73 	return nSelItem;
74 }
75 
SetImage(Image img)76 void CellLineStyleValueSet::SetImage(Image img)
77 {
78 	imgCus = img;
79 }
80 
SetCusEnable(bool bEnable)81 void CellLineStyleValueSet::SetCusEnable(bool bEnable)
82 {
83 	bCusEnable = bEnable;
84 }
85 
UserDraw(const UserDrawEvent & rUDEvt)86 void CellLineStyleValueSet::UserDraw( const UserDrawEvent& rUDEvt )
87 {
88 	Rectangle aRect = rUDEvt.GetRect();
89 	OutputDevice* pDev = rUDEvt.GetDevice();
90 	sal_uInt16	nItemId = rUDEvt.GetItemId();
91 
92 	long nRectHeight = aRect.GetHeight();
93 	long nRectWidth = aRect.GetWidth();
94 	Point aBLPos = aRect.TopLeft();
95 
96 	Font aOldFont = pDev->GetFont();
97 	Color aOldColor = pDev->GetLineColor();
98 	Color aOldFillColor = pDev->GetFillColor();
99 
100 	Font aFont(OutputDevice::GetDefaultFont(DEFAULTFONT_UI_SANS, MsLangId::getSystemLanguage(), DEFAULTFONT_FLAGS_ONLYONE));
101 	Size aSize = aFont.GetSize();
102 	aSize.Height() = nRectHeight * 3 / 5;
103 	aFont.SetSize( aSize );
104 
105 	Point aLineStart(aBLPos.X() + 5, aBLPos.Y() + ( nRectHeight - nItemId ) / 2);
106 	Point aLineEnd(aBLPos.X() + nRectWidth * 7 / 9 - 15, aBLPos.Y() + ( nRectHeight - nItemId ) / 2);
107 	long nTLX = aBLPos.X() + 5, nTLY = aBLPos.Y() + ( nRectHeight - nItemId )/2;
108 	long nTRX = aBLPos.X() + nRectWidth * 7 / 9 - 15, nTRY = aBLPos.Y() + ( nRectHeight - nItemId ) / 2;
109 
110 	if( nSelItem == nItemId )
111 	{
112 		Color aBackColor(50,107,197);
113 		Rectangle aBackRect = aRect;
114 		aBackRect.Top() += 3;
115 		aBackRect.Bottom() -= 2;
116 		pDev->SetFillColor(aBackColor);
117 		pDev->DrawRect(aBackRect);
118 	}
119 	else
120 	{
121 		pDev->SetFillColor( COL_TRANSPARENT );
122 		pDev->DrawRect(aRect);
123 	}
124 
125 	// draw text
126 	if(nSelItem == nItemId )
127 		aFont.SetColor(COL_WHITE);
128 	else
129 		aFont.SetColor(GetSettings().GetStyleSettings().GetFieldTextColor()); // high contrast
130 
131 	pDev->SetFont(aFont);
132 	Point aStart(aBLPos.X() + nRectWidth * 7 / 9 - 5 , aBLPos.Y() + nRectHeight / 6);
133 	pDev->DrawText(aStart, strUnit[ nItemId - 1 ]); // can't set TEXT_DRAW_ENDELLIPSIS here, or the text will disappear
134 
135 	// draw line
136 	if( nSelItem == nItemId )
137 	{
138 		pDev->SetFillColor(COL_WHITE);
139 		pDev->SetLineColor(COL_WHITE);
140 	}
141 	else
142 	{
143 		pDev->SetFillColor(GetSettings().GetStyleSettings().GetFieldTextColor()); // high contrast
144 		pDev->SetLineColor(GetSettings().GetStyleSettings().GetFieldTextColor()); // high contrast
145 	}
146 
147 	switch( nItemId )
148 	{
149 		case 1:
150 		case 2:
151 		case 3:
152 		case 4:
153 			pDev->DrawRect(Rectangle(nTLX, nTLY , nTRX, nTRY + nItemId * 2 - 1 ));
154 			break;
155 		case 5:
156 			pDev->DrawRect(Rectangle(nTLX, nTLY , nTRX, nTRY + 1 ));
157 			pDev->DrawRect(Rectangle(nTLX, nTLY + 3 , nTRX, nTRY + 4 ));
158 			break;
159 		case 6:
160 			pDev->DrawRect(Rectangle(nTLX, nTLY , nTRX, nTRY + 1 ));
161 			pDev->DrawRect(Rectangle(nTLX, nTLY + 5 , nTRX, nTRY + 6 ));
162 			break;
163 		case 7:
164 			pDev->DrawRect(Rectangle(nTLX, nTLY , nTRX, nTRY + 1 ));
165 			pDev->DrawRect(Rectangle(nTLX, nTLY + 3 , nTRX, nTRY + 6 ));
166 			break;
167 		case 8:
168 			pDev->DrawRect(Rectangle(nTLX, nTLY , nTRX, nTRY + 3 ));
169 			pDev->DrawRect(Rectangle(nTLX, nTLY + 5 , nTRX, nTRY + 6 ));
170 			break;
171 		case 9:
172 			pDev->DrawRect(Rectangle(nTLX, nTLY , nTRX, nTRY + 3 ));
173 			pDev->DrawRect(Rectangle(nTLX, nTLY + 5 , nTRX, nTRY + 8 ));
174 			break;
175 	}
176 
177 	Invalidate( aRect );
178 	pDev->SetLineColor(aOldColor);
179 	pDev->SetFillColor(aOldFillColor);
180 	pDev->SetFont(aOldFont);
181 
182 }
183 
184 } } // end of namespace svx::sidebar
185 
186 /* vim: set noet sw=4 ts=4: */
187