1*c718a697SOliver-Rainer Wittmann /************************************************************** 2*c718a697SOliver-Rainer Wittmann * 3*c718a697SOliver-Rainer Wittmann * Licensed to the Apache Software Foundation (ASF) under one 4*c718a697SOliver-Rainer Wittmann * or more contributor license agreements. See the NOTICE file 5*c718a697SOliver-Rainer Wittmann * distributed with this work for additional information 6*c718a697SOliver-Rainer Wittmann * regarding copyright ownership. The ASF licenses this file 7*c718a697SOliver-Rainer Wittmann * to you under the Apache License, Version 2.0 (the 8*c718a697SOliver-Rainer Wittmann * "License"); you may not use this file except in compliance 9*c718a697SOliver-Rainer Wittmann * with the License. You may obtain a copy of the License at 10*c718a697SOliver-Rainer Wittmann * 11*c718a697SOliver-Rainer Wittmann * http://www.apache.org/licenses/LICENSE-2.0 12*c718a697SOliver-Rainer Wittmann * 13*c718a697SOliver-Rainer Wittmann * Unless required by applicable law or agreed to in writing, 14*c718a697SOliver-Rainer Wittmann * software distributed under the License is distributed on an 15*c718a697SOliver-Rainer Wittmann * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*c718a697SOliver-Rainer Wittmann * KIND, either express or implied. See the License for the 17*c718a697SOliver-Rainer Wittmann * specific language governing permissions and limitations 18*c718a697SOliver-Rainer Wittmann * under the License. 19*c718a697SOliver-Rainer Wittmann * 20*c718a697SOliver-Rainer Wittmann *************************************************************/ 21*c718a697SOliver-Rainer Wittmann 22*c718a697SOliver-Rainer Wittmann #include "svx/sidebar/ValueSetWithTextControl.hxx" 232055df08SOliver-Rainer Wittmann 242055df08SOliver-Rainer Wittmann #include <sfx2/sidebar/Theme.hxx> 25*c718a697SOliver-Rainer Wittmann 262055df08SOliver-Rainer Wittmann #include <i18npool/mslangid.hxx> 27*c718a697SOliver-Rainer Wittmann 28*c718a697SOliver-Rainer Wittmann namespace svx { namespace sidebar { 29*c718a697SOliver-Rainer Wittmann 302055df08SOliver-Rainer Wittmann ValueSetWithTextControl::ValueSetWithTextControl( 312055df08SOliver-Rainer Wittmann const tControlType eControlType, 322055df08SOliver-Rainer Wittmann Window* pParent, 332055df08SOliver-Rainer Wittmann const ResId& rResId) 342055df08SOliver-Rainer Wittmann : ValueSet( pParent, rResId ) 352055df08SOliver-Rainer Wittmann , meControlType( eControlType ) 362055df08SOliver-Rainer Wittmann , maItems() 372055df08SOliver-Rainer Wittmann { 382055df08SOliver-Rainer Wittmann SetColCount( 1 ); 392055df08SOliver-Rainer Wittmann } 402055df08SOliver-Rainer Wittmann 412055df08SOliver-Rainer Wittmann ValueSetWithTextControl::~ValueSetWithTextControl(void) 422055df08SOliver-Rainer Wittmann { 432055df08SOliver-Rainer Wittmann } 442055df08SOliver-Rainer Wittmann 452055df08SOliver-Rainer Wittmann void ValueSetWithTextControl::AddItem( 462055df08SOliver-Rainer Wittmann const Image& rItemImage, 472055df08SOliver-Rainer Wittmann const Image* pSelectedItemImage, 482055df08SOliver-Rainer Wittmann const XubString& rItemText, 492055df08SOliver-Rainer Wittmann const XubString* pItemHelpText ) 502055df08SOliver-Rainer Wittmann { 512055df08SOliver-Rainer Wittmann if ( meControlType != IMAGE_TEXT ) 522055df08SOliver-Rainer Wittmann { 532055df08SOliver-Rainer Wittmann return; 542055df08SOliver-Rainer Wittmann } 552055df08SOliver-Rainer Wittmann 562055df08SOliver-Rainer Wittmann ValueSetWithTextItem aItem; 572055df08SOliver-Rainer Wittmann aItem.maItemImage = rItemImage; 582055df08SOliver-Rainer Wittmann aItem.maSelectedItemImage = (pSelectedItemImage != 0) 592055df08SOliver-Rainer Wittmann ? *pSelectedItemImage 602055df08SOliver-Rainer Wittmann : rItemImage; 612055df08SOliver-Rainer Wittmann aItem.maItemText = rItemText; 622055df08SOliver-Rainer Wittmann 632055df08SOliver-Rainer Wittmann maItems.push_back( aItem ); 642055df08SOliver-Rainer Wittmann 652055df08SOliver-Rainer Wittmann InsertItem( maItems.size() ); 662055df08SOliver-Rainer Wittmann SetItemText( maItems.size(), 672055df08SOliver-Rainer Wittmann (pItemHelpText != 0) ? *pItemHelpText : rItemText ); 682055df08SOliver-Rainer Wittmann } 692055df08SOliver-Rainer Wittmann 702055df08SOliver-Rainer Wittmann void ValueSetWithTextControl::AddItem( 712055df08SOliver-Rainer Wittmann const XubString& rItemText, 722055df08SOliver-Rainer Wittmann const XubString& rItemText2, 732055df08SOliver-Rainer Wittmann const XubString* pItemHelpText ) 742055df08SOliver-Rainer Wittmann { 752055df08SOliver-Rainer Wittmann if ( meControlType != TEXT_TEXT ) 762055df08SOliver-Rainer Wittmann { 772055df08SOliver-Rainer Wittmann return; 782055df08SOliver-Rainer Wittmann } 792055df08SOliver-Rainer Wittmann 802055df08SOliver-Rainer Wittmann ValueSetWithTextItem aItem; 812055df08SOliver-Rainer Wittmann aItem.maItemText = rItemText; 822055df08SOliver-Rainer Wittmann aItem.maItemText2 = rItemText2; 832055df08SOliver-Rainer Wittmann 842055df08SOliver-Rainer Wittmann maItems.push_back( aItem ); 852055df08SOliver-Rainer Wittmann 862055df08SOliver-Rainer Wittmann InsertItem( maItems.size() ); 872055df08SOliver-Rainer Wittmann SetItemText( maItems.size(), 882055df08SOliver-Rainer Wittmann (pItemHelpText != 0) ? *pItemHelpText : rItemText ); 892055df08SOliver-Rainer Wittmann } 902055df08SOliver-Rainer Wittmann 912055df08SOliver-Rainer Wittmann void ValueSetWithTextControl::UserDraw( const UserDrawEvent& rUDEvt ) 922055df08SOliver-Rainer Wittmann { 932055df08SOliver-Rainer Wittmann const Rectangle aRect = rUDEvt.GetRect(); 942055df08SOliver-Rainer Wittmann OutputDevice* pDev = rUDEvt.GetDevice(); 952055df08SOliver-Rainer Wittmann pDev->Push( PUSH_ALL ); 962055df08SOliver-Rainer Wittmann const sal_uInt16 nItemId = rUDEvt.GetItemId(); 972055df08SOliver-Rainer Wittmann 982055df08SOliver-Rainer Wittmann const long nRectHeight = aRect.GetHeight(); 992055df08SOliver-Rainer Wittmann const Point aBLPos = aRect.TopLeft(); 1002055df08SOliver-Rainer Wittmann 1012055df08SOliver-Rainer Wittmann Font aFont(OutputDevice::GetDefaultFont(DEFAULTFONT_UI_SANS, MsLangId::getSystemLanguage(), DEFAULTFONT_FLAGS_ONLYONE)); 1022055df08SOliver-Rainer Wittmann { 1032055df08SOliver-Rainer Wittmann Size aSize = aFont.GetSize(); 1042055df08SOliver-Rainer Wittmann aSize.Height() = (nRectHeight*4)/9; 1052055df08SOliver-Rainer Wittmann aFont.SetSize( aSize ); 1062055df08SOliver-Rainer Wittmann } 1072055df08SOliver-Rainer Wittmann 1082055df08SOliver-Rainer Wittmann { 1092055df08SOliver-Rainer Wittmann //draw backgroud 1102055df08SOliver-Rainer Wittmann if ( GetSelectItemId() == nItemId ) 1112055df08SOliver-Rainer Wittmann { 1122055df08SOliver-Rainer Wittmann Rectangle aBackRect = aRect; 1132055df08SOliver-Rainer Wittmann aBackRect.Top() += 3; 1142055df08SOliver-Rainer Wittmann aBackRect.Bottom() -= 2; 1152055df08SOliver-Rainer Wittmann pDev->SetFillColor( sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Color_Highlight ) ); 1162055df08SOliver-Rainer Wittmann pDev->DrawRect(aBackRect); 1172055df08SOliver-Rainer Wittmann } 1182055df08SOliver-Rainer Wittmann else 1192055df08SOliver-Rainer Wittmann { 1202055df08SOliver-Rainer Wittmann pDev->SetFillColor( COL_TRANSPARENT ); 1212055df08SOliver-Rainer Wittmann pDev->DrawRect(aRect); 1222055df08SOliver-Rainer Wittmann } 1232055df08SOliver-Rainer Wittmann 1242055df08SOliver-Rainer Wittmann //draw image + text resp. text + text 1252055df08SOliver-Rainer Wittmann Image* pImage = 0; 1262055df08SOliver-Rainer Wittmann if ( GetSelectItemId() == nItemId ) 1272055df08SOliver-Rainer Wittmann { 1282055df08SOliver-Rainer Wittmann aFont.SetColor( sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Color_HighlightText ) ); 1292055df08SOliver-Rainer Wittmann pImage = &maItems[nItemId-1].maSelectedItemImage; 1302055df08SOliver-Rainer Wittmann } 1312055df08SOliver-Rainer Wittmann else 1322055df08SOliver-Rainer Wittmann { 1332055df08SOliver-Rainer Wittmann aFont.SetColor( GetSettings().GetStyleSettings().GetFieldTextColor() ); 1342055df08SOliver-Rainer Wittmann pImage = &maItems[nItemId-1].maItemImage; 1352055df08SOliver-Rainer Wittmann } 1362055df08SOliver-Rainer Wittmann 1372055df08SOliver-Rainer Wittmann Rectangle aStrRect = aRect; 1382055df08SOliver-Rainer Wittmann aStrRect.Top() += nRectHeight/4; 1392055df08SOliver-Rainer Wittmann aStrRect.Bottom() -= nRectHeight/4; 1402055df08SOliver-Rainer Wittmann 1412055df08SOliver-Rainer Wittmann switch ( meControlType ) 1422055df08SOliver-Rainer Wittmann { 1432055df08SOliver-Rainer Wittmann case IMAGE_TEXT: 1442055df08SOliver-Rainer Wittmann { 1452055df08SOliver-Rainer Wittmann Point aImgStart( 1462055df08SOliver-Rainer Wittmann aBLPos.X() + 4, 1472055df08SOliver-Rainer Wittmann aBLPos.Y() + ( ( nRectHeight - pImage->GetSizePixel().Height() ) / 2 ) ); 1482055df08SOliver-Rainer Wittmann pDev->DrawImage( aImgStart, *pImage ); 1492055df08SOliver-Rainer Wittmann 1502055df08SOliver-Rainer Wittmann aStrRect.Left() += pImage->GetSizePixel().Width() + 12; 1512055df08SOliver-Rainer Wittmann pDev->SetFont(aFont); 1522055df08SOliver-Rainer Wittmann pDev->DrawText(aStrRect, maItems[nItemId-1].maItemText, TEXT_DRAW_ENDELLIPSIS); 1532055df08SOliver-Rainer Wittmann } 1542055df08SOliver-Rainer Wittmann break; 1552055df08SOliver-Rainer Wittmann case TEXT_TEXT: 1562055df08SOliver-Rainer Wittmann { 1572055df08SOliver-Rainer Wittmann const long nRectWidth = aRect.GetWidth(); 1582055df08SOliver-Rainer Wittmann aStrRect.Left() += 8; 1592055df08SOliver-Rainer Wittmann aStrRect.Right() -= (nRectWidth*2)/3; 1602055df08SOliver-Rainer Wittmann pDev->SetFont(aFont); 1612055df08SOliver-Rainer Wittmann pDev->DrawText(aStrRect, maItems[nItemId-1].maItemText, TEXT_DRAW_ENDELLIPSIS); 1622055df08SOliver-Rainer Wittmann aStrRect.Left() += nRectWidth/3; 1632055df08SOliver-Rainer Wittmann aStrRect.Right() += (nRectWidth*2)/3; 1642055df08SOliver-Rainer Wittmann pDev->DrawText(aStrRect, maItems[nItemId-1].maItemText2, TEXT_DRAW_ENDELLIPSIS); 1652055df08SOliver-Rainer Wittmann } 1662055df08SOliver-Rainer Wittmann break; 1672055df08SOliver-Rainer Wittmann } 1682055df08SOliver-Rainer Wittmann } 1692055df08SOliver-Rainer Wittmann 1702055df08SOliver-Rainer Wittmann Invalidate( aRect ); 1712055df08SOliver-Rainer Wittmann pDev->Pop(); 1722055df08SOliver-Rainer Wittmann } 173*c718a697SOliver-Rainer Wittmann 174*c718a697SOliver-Rainer Wittmann } } // end of namespace svx::sidebar 175