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