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