1facb16e7SArmin Le Grand /**************************************************************
2facb16e7SArmin Le Grand *
3facb16e7SArmin Le Grand * Licensed to the Apache Software Foundation (ASF) under one
4facb16e7SArmin Le Grand * or more contributor license agreements. See the NOTICE file
5facb16e7SArmin Le Grand * distributed with this work for additional information
6facb16e7SArmin Le Grand * regarding copyright ownership. The ASF licenses this file
7facb16e7SArmin Le Grand * to you under the Apache License, Version 2.0 (the
8facb16e7SArmin Le Grand * "License"); you may not use this file except in compliance
9facb16e7SArmin Le Grand * with the License. You may obtain a copy of the License at
10facb16e7SArmin Le Grand *
11facb16e7SArmin Le Grand * http://www.apache.org/licenses/LICENSE-2.0
12facb16e7SArmin Le Grand *
13facb16e7SArmin Le Grand * Unless required by applicable law or agreed to in writing,
14facb16e7SArmin Le Grand * software distributed under the License is distributed on an
15facb16e7SArmin Le Grand * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16facb16e7SArmin Le Grand * KIND, either express or implied. See the License for the
17facb16e7SArmin Le Grand * specific language governing permissions and limitations
18facb16e7SArmin Le Grand * under the License.
19facb16e7SArmin Le Grand *
20facb16e7SArmin Le Grand *************************************************************/
21facb16e7SArmin Le Grand
22*8e9b0a85Smseidel
23*8e9b0a85Smseidel
24facb16e7SArmin Le Grand #include "precompiled_sc.hxx"
25facb16e7SArmin Le Grand
26facb16e7SArmin Le Grand #include <CellLineStyleValueSet.hxx>
27facb16e7SArmin Le Grand #include <i18npool/mslangid.hxx>
28facb16e7SArmin Le Grand
29facb16e7SArmin Le Grand namespace sc { namespace sidebar {
30facb16e7SArmin Le Grand
CellLineStyleValueSet(Window * pParent,const ResId & rResId)31facb16e7SArmin Le Grand CellLineStyleValueSet::CellLineStyleValueSet( Window* pParent, const ResId& rResId)
32facb16e7SArmin Le Grand : ValueSet( pParent, rResId ),
33facb16e7SArmin Le Grand pVDev(NULL),
34facb16e7SArmin Le Grand nSelItem(0),
35facb16e7SArmin Le Grand bCusEnable(false)
36facb16e7SArmin Le Grand {
37facb16e7SArmin Le Grand strUnit = new XubString[9];
38facb16e7SArmin Le Grand SetColCount( 1 );
39facb16e7SArmin Le Grand SetLineCount( 9);
40facb16e7SArmin Le Grand }
41facb16e7SArmin Le Grand
~CellLineStyleValueSet()42facb16e7SArmin Le Grand CellLineStyleValueSet::~CellLineStyleValueSet()
43facb16e7SArmin Le Grand {
44facb16e7SArmin Le Grand delete pVDev;
45facb16e7SArmin Le Grand delete[] strUnit;
46facb16e7SArmin Le Grand }
47facb16e7SArmin Le Grand
SetUnit(XubString * str)48facb16e7SArmin Le Grand void CellLineStyleValueSet::SetUnit(XubString* str)
49facb16e7SArmin Le Grand {
50facb16e7SArmin Le Grand for(int i = 0; i < 9; i++)
51facb16e7SArmin Le Grand {
52facb16e7SArmin Le Grand strUnit[i] = str[i];
53facb16e7SArmin Le Grand }
54facb16e7SArmin Le Grand }
55facb16e7SArmin Le Grand
SetSelItem(sal_uInt16 nSel)56facb16e7SArmin Le Grand void CellLineStyleValueSet::SetSelItem(sal_uInt16 nSel)
57facb16e7SArmin Le Grand {
58facb16e7SArmin Le Grand nSelItem = nSel;
59facb16e7SArmin Le Grand if(nSel == 0)
60facb16e7SArmin Le Grand {
61facb16e7SArmin Le Grand SelectItem(1);
62facb16e7SArmin Le Grand SetNoSelection();
63facb16e7SArmin Le Grand }
64facb16e7SArmin Le Grand else
65facb16e7SArmin Le Grand {
66facb16e7SArmin Le Grand SelectItem(nSelItem);
67facb16e7SArmin Le Grand GrabFocus();
68facb16e7SArmin Le Grand }
69facb16e7SArmin Le Grand }
70facb16e7SArmin Le Grand
GetSelItem()71facb16e7SArmin Le Grand sal_uInt16 CellLineStyleValueSet::GetSelItem()
72facb16e7SArmin Le Grand {
73facb16e7SArmin Le Grand return nSelItem;
74facb16e7SArmin Le Grand }
75facb16e7SArmin Le Grand
SetImage(Image img)76facb16e7SArmin Le Grand void CellLineStyleValueSet::SetImage(Image img)
77facb16e7SArmin Le Grand {
78facb16e7SArmin Le Grand imgCus = img;
79facb16e7SArmin Le Grand }
80facb16e7SArmin Le Grand
SetCusEnable(bool bEnable)81facb16e7SArmin Le Grand void CellLineStyleValueSet::SetCusEnable(bool bEnable)
82facb16e7SArmin Le Grand {
83facb16e7SArmin Le Grand bCusEnable = bEnable;
84facb16e7SArmin Le Grand }
85facb16e7SArmin Le Grand
UserDraw(const UserDrawEvent & rUDEvt)86facb16e7SArmin Le Grand void CellLineStyleValueSet::UserDraw( const UserDrawEvent& rUDEvt )
87facb16e7SArmin Le Grand {
88facb16e7SArmin Le Grand Rectangle aRect = rUDEvt.GetRect();
89facb16e7SArmin Le Grand OutputDevice* pDev = rUDEvt.GetDevice();
90facb16e7SArmin Le Grand sal_uInt16 nItemId = rUDEvt.GetItemId();
91facb16e7SArmin Le Grand
92facb16e7SArmin Le Grand long nRectHeight = aRect.GetHeight();
93facb16e7SArmin Le Grand long nRectWidth = aRect.GetWidth();
94facb16e7SArmin Le Grand Point aBLPos = aRect.TopLeft();
95facb16e7SArmin Le Grand
96facb16e7SArmin Le Grand Font aOldFont = pDev->GetFont();
97facb16e7SArmin Le Grand Color aOldColor = pDev->GetLineColor();
98facb16e7SArmin Le Grand Color aOldFillColor = pDev->GetFillColor();
99facb16e7SArmin Le Grand
100facb16e7SArmin Le Grand Font aFont(OutputDevice::GetDefaultFont(DEFAULTFONT_UI_SANS, MsLangId::getSystemLanguage(), DEFAULTFONT_FLAGS_ONLYONE));
101facb16e7SArmin Le Grand Size aSize = aFont.GetSize();
102facb16e7SArmin Le Grand aSize.Height() = nRectHeight * 3 / 5;
103facb16e7SArmin Le Grand aFont.SetSize( aSize );
104facb16e7SArmin Le Grand
105facb16e7SArmin Le Grand Point aLineStart(aBLPos.X() + 5, aBLPos.Y() + ( nRectHeight - nItemId ) / 2);
106facb16e7SArmin Le Grand Point aLineEnd(aBLPos.X() + nRectWidth * 7 / 9 - 15, aBLPos.Y() + ( nRectHeight - nItemId ) / 2);
107facb16e7SArmin Le Grand long nTLX = aBLPos.X() + 5, nTLY = aBLPos.Y() + ( nRectHeight - nItemId )/2;
108facb16e7SArmin Le Grand long nTRX = aBLPos.X() + nRectWidth * 7 / 9 - 15, nTRY = aBLPos.Y() + ( nRectHeight - nItemId ) / 2;
109facb16e7SArmin Le Grand
110facb16e7SArmin Le Grand if( nSelItem == nItemId )
111facb16e7SArmin Le Grand {
112facb16e7SArmin Le Grand Color aBackColor(50,107,197);
113facb16e7SArmin Le Grand Rectangle aBackRect = aRect;
114facb16e7SArmin Le Grand aBackRect.Top() += 3;
115facb16e7SArmin Le Grand aBackRect.Bottom() -= 2;
116facb16e7SArmin Le Grand pDev->SetFillColor(aBackColor);
117facb16e7SArmin Le Grand pDev->DrawRect(aBackRect);
118facb16e7SArmin Le Grand }
119facb16e7SArmin Le Grand else
120facb16e7SArmin Le Grand {
121facb16e7SArmin Le Grand pDev->SetFillColor( COL_TRANSPARENT );
122facb16e7SArmin Le Grand pDev->DrawRect(aRect);
123facb16e7SArmin Le Grand }
124facb16e7SArmin Le Grand
125facb16e7SArmin Le Grand // draw text
126facb16e7SArmin Le Grand if(nSelItem == nItemId )
127facb16e7SArmin Le Grand aFont.SetColor(COL_WHITE);
128facb16e7SArmin Le Grand else
129facb16e7SArmin Le Grand aFont.SetColor(GetSettings().GetStyleSettings().GetFieldTextColor()); // high contrast
130facb16e7SArmin Le Grand
131facb16e7SArmin Le Grand pDev->SetFont(aFont);
132facb16e7SArmin Le Grand Point aStart(aBLPos.X() + nRectWidth * 7 / 9 - 5 , aBLPos.Y() + nRectHeight / 6);
133*8e9b0a85Smseidel pDev->DrawText(aStart, strUnit[ nItemId - 1 ]); // can't set TEXT_DRAW_ENDELLIPSIS here, or the text will disappear
134facb16e7SArmin Le Grand
135facb16e7SArmin Le Grand // draw line
136facb16e7SArmin Le Grand if( nSelItem == nItemId )
137facb16e7SArmin Le Grand {
138facb16e7SArmin Le Grand pDev->SetFillColor(COL_WHITE);
139facb16e7SArmin Le Grand pDev->SetLineColor(COL_WHITE);
140facb16e7SArmin Le Grand }
141facb16e7SArmin Le Grand else
142facb16e7SArmin Le Grand {
143facb16e7SArmin Le Grand pDev->SetFillColor(GetSettings().GetStyleSettings().GetFieldTextColor()); // high contrast
144facb16e7SArmin Le Grand pDev->SetLineColor(GetSettings().GetStyleSettings().GetFieldTextColor()); // high contrast
145facb16e7SArmin Le Grand }
146facb16e7SArmin Le Grand
147facb16e7SArmin Le Grand switch( nItemId )
148facb16e7SArmin Le Grand {
149facb16e7SArmin Le Grand case 1:
150facb16e7SArmin Le Grand case 2:
151facb16e7SArmin Le Grand case 3:
152facb16e7SArmin Le Grand case 4:
153facb16e7SArmin Le Grand pDev->DrawRect(Rectangle(nTLX, nTLY , nTRX, nTRY + nItemId * 2 - 1 ));
154facb16e7SArmin Le Grand break;
155facb16e7SArmin Le Grand case 5:
156facb16e7SArmin Le Grand pDev->DrawRect(Rectangle(nTLX, nTLY , nTRX, nTRY + 1 ));
157facb16e7SArmin Le Grand pDev->DrawRect(Rectangle(nTLX, nTLY + 3 , nTRX, nTRY + 4 ));
158facb16e7SArmin Le Grand break;
159facb16e7SArmin Le Grand case 6:
160facb16e7SArmin Le Grand pDev->DrawRect(Rectangle(nTLX, nTLY , nTRX, nTRY + 1 ));
161facb16e7SArmin Le Grand pDev->DrawRect(Rectangle(nTLX, nTLY + 5 , nTRX, nTRY + 6 ));
162facb16e7SArmin Le Grand break;
163facb16e7SArmin Le Grand case 7:
164facb16e7SArmin Le Grand pDev->DrawRect(Rectangle(nTLX, nTLY , nTRX, nTRY + 1 ));
165facb16e7SArmin Le Grand pDev->DrawRect(Rectangle(nTLX, nTLY + 3 , nTRX, nTRY + 6 ));
166facb16e7SArmin Le Grand break;
167facb16e7SArmin Le Grand case 8:
168facb16e7SArmin Le Grand pDev->DrawRect(Rectangle(nTLX, nTLY , nTRX, nTRY + 3 ));
169facb16e7SArmin Le Grand pDev->DrawRect(Rectangle(nTLX, nTLY + 5 , nTRX, nTRY + 6 ));
170facb16e7SArmin Le Grand break;
171facb16e7SArmin Le Grand case 9:
172facb16e7SArmin Le Grand pDev->DrawRect(Rectangle(nTLX, nTLY , nTRX, nTRY + 3 ));
173facb16e7SArmin Le Grand pDev->DrawRect(Rectangle(nTLX, nTLY + 5 , nTRX, nTRY + 8 ));
174facb16e7SArmin Le Grand break;
175facb16e7SArmin Le Grand }
176facb16e7SArmin Le Grand
177facb16e7SArmin Le Grand Invalidate( aRect );
178facb16e7SArmin Le Grand pDev->SetLineColor(aOldColor);
179facb16e7SArmin Le Grand pDev->SetFillColor(aOldFillColor);
180facb16e7SArmin Le Grand pDev->SetFont(aOldFont);
181facb16e7SArmin Le Grand
182facb16e7SArmin Le Grand }
183facb16e7SArmin Le Grand
184facb16e7SArmin Le Grand } } // end of namespace svx::sidebar
185facb16e7SArmin Le Grand
186*8e9b0a85Smseidel /* vim: set noet sw=4 ts=4: */
187