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