1*2055df08SOliver-Rainer Wittmann /************************************************************** 2*2055df08SOliver-Rainer Wittmann * 3*2055df08SOliver-Rainer Wittmann * Licensed to the Apache Software Foundation (ASF) under one 4*2055df08SOliver-Rainer Wittmann * or more contributor license agreements. See the NOTICE file 5*2055df08SOliver-Rainer Wittmann * distributed with this work for additional information 6*2055df08SOliver-Rainer Wittmann * regarding copyright ownership. The ASF licenses this file 7*2055df08SOliver-Rainer Wittmann * to you under the Apache License, Version 2.0 (the 8*2055df08SOliver-Rainer Wittmann * "License"); you may not use this file except in compliance 9*2055df08SOliver-Rainer Wittmann * with the License. You may obtain a copy of the License at 10*2055df08SOliver-Rainer Wittmann * 11*2055df08SOliver-Rainer Wittmann * http://www.apache.org/licenses/LICENSE-2.0 12*2055df08SOliver-Rainer Wittmann * 13*2055df08SOliver-Rainer Wittmann * Unless required by applicable law or agreed to in writing, 14*2055df08SOliver-Rainer Wittmann * software distributed under the License is distributed on an 15*2055df08SOliver-Rainer Wittmann * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*2055df08SOliver-Rainer Wittmann * KIND, either express or implied. See the License for the 17*2055df08SOliver-Rainer Wittmann * specific language governing permissions and limitations 18*2055df08SOliver-Rainer Wittmann * under the License. 19*2055df08SOliver-Rainer Wittmann * 20*2055df08SOliver-Rainer Wittmann *************************************************************/ 21*2055df08SOliver-Rainer Wittmann 22*2055df08SOliver-Rainer Wittmann #include "svx/sidebar/ValueSetWithTextControl.hxx" 23*2055df08SOliver-Rainer Wittmann 24*2055df08SOliver-Rainer Wittmann #include <sfx2/sidebar/Theme.hxx> 25*2055df08SOliver-Rainer Wittmann 26*2055df08SOliver-Rainer Wittmann #include <i18npool/mslangid.hxx> 27*2055df08SOliver-Rainer Wittmann 28*2055df08SOliver-Rainer Wittmann namespace svx { namespace sidebar { 29*2055df08SOliver-Rainer Wittmann 30*2055df08SOliver-Rainer Wittmann ValueSetWithTextControl::ValueSetWithTextControl( 31*2055df08SOliver-Rainer Wittmann const tControlType eControlType, 32*2055df08SOliver-Rainer Wittmann Window* pParent, 33*2055df08SOliver-Rainer Wittmann const ResId& rResId) 34*2055df08SOliver-Rainer Wittmann : ValueSet( pParent, rResId ) 35*2055df08SOliver-Rainer Wittmann , meControlType( eControlType ) 36*2055df08SOliver-Rainer Wittmann , maItems() 37*2055df08SOliver-Rainer Wittmann { 38*2055df08SOliver-Rainer Wittmann SetColCount( 1 ); 39*2055df08SOliver-Rainer Wittmann } 40*2055df08SOliver-Rainer Wittmann 41*2055df08SOliver-Rainer Wittmann ValueSetWithTextControl::~ValueSetWithTextControl(void) 42*2055df08SOliver-Rainer Wittmann { 43*2055df08SOliver-Rainer Wittmann } 44*2055df08SOliver-Rainer Wittmann 45*2055df08SOliver-Rainer Wittmann void ValueSetWithTextControl::AddItem( 46*2055df08SOliver-Rainer Wittmann const Image& rItemImage, 47*2055df08SOliver-Rainer Wittmann const Image* pSelectedItemImage, 48*2055df08SOliver-Rainer Wittmann const XubString& rItemText, 49*2055df08SOliver-Rainer Wittmann const XubString* pItemHelpText ) 50*2055df08SOliver-Rainer Wittmann { 51*2055df08SOliver-Rainer Wittmann if ( meControlType != IMAGE_TEXT ) 52*2055df08SOliver-Rainer Wittmann { 53*2055df08SOliver-Rainer Wittmann return; 54*2055df08SOliver-Rainer Wittmann } 55*2055df08SOliver-Rainer Wittmann 56*2055df08SOliver-Rainer Wittmann ValueSetWithTextItem aItem; 57*2055df08SOliver-Rainer Wittmann aItem.maItemImage = rItemImage; 58*2055df08SOliver-Rainer Wittmann aItem.maSelectedItemImage = (pSelectedItemImage != 0) 59*2055df08SOliver-Rainer Wittmann ? *pSelectedItemImage 60*2055df08SOliver-Rainer Wittmann : rItemImage; 61*2055df08SOliver-Rainer Wittmann aItem.maItemText = rItemText; 62*2055df08SOliver-Rainer Wittmann 63*2055df08SOliver-Rainer Wittmann maItems.push_back( aItem ); 64*2055df08SOliver-Rainer Wittmann 65*2055df08SOliver-Rainer Wittmann InsertItem( maItems.size() ); 66*2055df08SOliver-Rainer Wittmann SetItemText( maItems.size(), 67*2055df08SOliver-Rainer Wittmann (pItemHelpText != 0) ? *pItemHelpText : rItemText ); 68*2055df08SOliver-Rainer Wittmann } 69*2055df08SOliver-Rainer Wittmann 70*2055df08SOliver-Rainer Wittmann void ValueSetWithTextControl::AddItem( 71*2055df08SOliver-Rainer Wittmann const XubString& rItemText, 72*2055df08SOliver-Rainer Wittmann const XubString& rItemText2, 73*2055df08SOliver-Rainer Wittmann const XubString* pItemHelpText ) 74*2055df08SOliver-Rainer Wittmann { 75*2055df08SOliver-Rainer Wittmann if ( meControlType != TEXT_TEXT ) 76*2055df08SOliver-Rainer Wittmann { 77*2055df08SOliver-Rainer Wittmann return; 78*2055df08SOliver-Rainer Wittmann } 79*2055df08SOliver-Rainer Wittmann 80*2055df08SOliver-Rainer Wittmann ValueSetWithTextItem aItem; 81*2055df08SOliver-Rainer Wittmann aItem.maItemText = rItemText; 82*2055df08SOliver-Rainer Wittmann aItem.maItemText2 = rItemText2; 83*2055df08SOliver-Rainer Wittmann 84*2055df08SOliver-Rainer Wittmann maItems.push_back( aItem ); 85*2055df08SOliver-Rainer Wittmann 86*2055df08SOliver-Rainer Wittmann InsertItem( maItems.size() ); 87*2055df08SOliver-Rainer Wittmann SetItemText( maItems.size(), 88*2055df08SOliver-Rainer Wittmann (pItemHelpText != 0) ? *pItemHelpText : rItemText ); 89*2055df08SOliver-Rainer Wittmann } 90*2055df08SOliver-Rainer Wittmann 91*2055df08SOliver-Rainer Wittmann void ValueSetWithTextControl::UserDraw( const UserDrawEvent& rUDEvt ) 92*2055df08SOliver-Rainer Wittmann { 93*2055df08SOliver-Rainer Wittmann const Rectangle aRect = rUDEvt.GetRect(); 94*2055df08SOliver-Rainer Wittmann OutputDevice* pDev = rUDEvt.GetDevice(); 95*2055df08SOliver-Rainer Wittmann pDev->Push( PUSH_ALL ); 96*2055df08SOliver-Rainer Wittmann const sal_uInt16 nItemId = rUDEvt.GetItemId(); 97*2055df08SOliver-Rainer Wittmann 98*2055df08SOliver-Rainer Wittmann const long nRectHeight = aRect.GetHeight(); 99*2055df08SOliver-Rainer Wittmann const Point aBLPos = aRect.TopLeft(); 100*2055df08SOliver-Rainer Wittmann 101*2055df08SOliver-Rainer Wittmann Font aFont(OutputDevice::GetDefaultFont(DEFAULTFONT_UI_SANS, MsLangId::getSystemLanguage(), DEFAULTFONT_FLAGS_ONLYONE)); 102*2055df08SOliver-Rainer Wittmann { 103*2055df08SOliver-Rainer Wittmann Size aSize = aFont.GetSize(); 104*2055df08SOliver-Rainer Wittmann aSize.Height() = (nRectHeight*4)/9; 105*2055df08SOliver-Rainer Wittmann aFont.SetSize( aSize ); 106*2055df08SOliver-Rainer Wittmann } 107*2055df08SOliver-Rainer Wittmann 108*2055df08SOliver-Rainer Wittmann { 109*2055df08SOliver-Rainer Wittmann //draw backgroud 110*2055df08SOliver-Rainer Wittmann if ( GetSelectItemId() == nItemId ) 111*2055df08SOliver-Rainer Wittmann { 112*2055df08SOliver-Rainer Wittmann Rectangle aBackRect = aRect; 113*2055df08SOliver-Rainer Wittmann aBackRect.Top() += 3; 114*2055df08SOliver-Rainer Wittmann aBackRect.Bottom() -= 2; 115*2055df08SOliver-Rainer Wittmann pDev->SetFillColor( sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Color_Highlight ) ); 116*2055df08SOliver-Rainer Wittmann pDev->DrawRect(aBackRect); 117*2055df08SOliver-Rainer Wittmann } 118*2055df08SOliver-Rainer Wittmann else 119*2055df08SOliver-Rainer Wittmann { 120*2055df08SOliver-Rainer Wittmann pDev->SetFillColor( COL_TRANSPARENT ); 121*2055df08SOliver-Rainer Wittmann pDev->DrawRect(aRect); 122*2055df08SOliver-Rainer Wittmann } 123*2055df08SOliver-Rainer Wittmann 124*2055df08SOliver-Rainer Wittmann //draw image + text resp. text + text 125*2055df08SOliver-Rainer Wittmann Image* pImage = 0; 126*2055df08SOliver-Rainer Wittmann if ( GetSelectItemId() == nItemId ) 127*2055df08SOliver-Rainer Wittmann { 128*2055df08SOliver-Rainer Wittmann aFont.SetColor( sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Color_HighlightText ) ); 129*2055df08SOliver-Rainer Wittmann pImage = &maItems[nItemId-1].maSelectedItemImage; 130*2055df08SOliver-Rainer Wittmann } 131*2055df08SOliver-Rainer Wittmann else 132*2055df08SOliver-Rainer Wittmann { 133*2055df08SOliver-Rainer Wittmann aFont.SetColor( GetSettings().GetStyleSettings().GetFieldTextColor() ); 134*2055df08SOliver-Rainer Wittmann pImage = &maItems[nItemId-1].maItemImage; 135*2055df08SOliver-Rainer Wittmann } 136*2055df08SOliver-Rainer Wittmann 137*2055df08SOliver-Rainer Wittmann Rectangle aStrRect = aRect; 138*2055df08SOliver-Rainer Wittmann aStrRect.Top() += nRectHeight/4; 139*2055df08SOliver-Rainer Wittmann aStrRect.Bottom() -= nRectHeight/4; 140*2055df08SOliver-Rainer Wittmann 141*2055df08SOliver-Rainer Wittmann switch ( meControlType ) 142*2055df08SOliver-Rainer Wittmann { 143*2055df08SOliver-Rainer Wittmann case IMAGE_TEXT: 144*2055df08SOliver-Rainer Wittmann { 145*2055df08SOliver-Rainer Wittmann Point aImgStart( 146*2055df08SOliver-Rainer Wittmann aBLPos.X() + 4, 147*2055df08SOliver-Rainer Wittmann aBLPos.Y() + ( ( nRectHeight - pImage->GetSizePixel().Height() ) / 2 ) ); 148*2055df08SOliver-Rainer Wittmann pDev->DrawImage( aImgStart, *pImage ); 149*2055df08SOliver-Rainer Wittmann 150*2055df08SOliver-Rainer Wittmann aStrRect.Left() += pImage->GetSizePixel().Width() + 12; 151*2055df08SOliver-Rainer Wittmann pDev->SetFont(aFont); 152*2055df08SOliver-Rainer Wittmann pDev->DrawText(aStrRect, maItems[nItemId-1].maItemText, TEXT_DRAW_ENDELLIPSIS); 153*2055df08SOliver-Rainer Wittmann } 154*2055df08SOliver-Rainer Wittmann break; 155*2055df08SOliver-Rainer Wittmann case TEXT_TEXT: 156*2055df08SOliver-Rainer Wittmann { 157*2055df08SOliver-Rainer Wittmann const long nRectWidth = aRect.GetWidth(); 158*2055df08SOliver-Rainer Wittmann aStrRect.Left() += 8; 159*2055df08SOliver-Rainer Wittmann aStrRect.Right() -= (nRectWidth*2)/3; 160*2055df08SOliver-Rainer Wittmann pDev->SetFont(aFont); 161*2055df08SOliver-Rainer Wittmann pDev->DrawText(aStrRect, maItems[nItemId-1].maItemText, TEXT_DRAW_ENDELLIPSIS); 162*2055df08SOliver-Rainer Wittmann aStrRect.Left() += nRectWidth/3; 163*2055df08SOliver-Rainer Wittmann aStrRect.Right() += (nRectWidth*2)/3; 164*2055df08SOliver-Rainer Wittmann pDev->DrawText(aStrRect, maItems[nItemId-1].maItemText2, TEXT_DRAW_ENDELLIPSIS); 165*2055df08SOliver-Rainer Wittmann } 166*2055df08SOliver-Rainer Wittmann break; 167*2055df08SOliver-Rainer Wittmann } 168*2055df08SOliver-Rainer Wittmann } 169*2055df08SOliver-Rainer Wittmann 170*2055df08SOliver-Rainer Wittmann Invalidate( aRect ); 171*2055df08SOliver-Rainer Wittmann pDev->Pop(); 172*2055df08SOliver-Rainer Wittmann } 173*2055df08SOliver-Rainer Wittmann 174*2055df08SOliver-Rainer Wittmann } } // end of namespace svx::sidebar 175