1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_chart2.hxx"
26 
27 #include "res_TextSeparator.hxx"
28 #include "ResourceIds.hrc"
29 #include "Strings.hrc"
30 #include "ResId.hxx"
31 #include "macros.hxx"
32 
33 #ifndef _SVT_CONTROLDIMS_HRC_
34 #include <svtools/controldims.hrc>
35 #endif
36 
37 //.............................................................................
38 namespace chart
39 {
40 //.............................................................................
41 
TextSeparatorResources(Window * pWindow)42 TextSeparatorResources::TextSeparatorResources( Window* pWindow )
43     : m_aFT_Separator( pWindow, pWindow->GetStyle() )
44 	, m_aLB_Separator( pWindow , SchResId( LB_TEXT_SEPARATOR ) )
45     , m_aEntryMap()
46     , m_nDefaultPos(0)
47 {
48     m_aFT_Separator.SetText( String( SchResId( STR_TEXT_SEPARATOR )) );
49     m_aFT_Separator.SetSizePixel( m_aFT_Separator.CalcMinimumSize() );
50 
51     m_aLB_Separator.SetDropDownLineCount(m_aLB_Separator.GetEntryCount());
52     m_aLB_Separator.SetSizePixel( m_aLB_Separator.CalcMinimumSize() );
53 
54     m_aEntryMap[ C2U( " " ) ] = 0;
55     m_aEntryMap[ C2U( ", " ) ] = 1;
56     m_aEntryMap[ C2U( "; " ) ] = 2;
57     m_aEntryMap[ C2U( "\n" ) ] = 3;
58 
59     m_aLB_Separator.SetAccessibleName(m_aFT_Separator.GetText());
60 	m_aLB_Separator.SetAccessibleRelationLabeledBy(&m_aFT_Separator);
61 }
~TextSeparatorResources()62 TextSeparatorResources::~TextSeparatorResources()
63 {
64 }
Show(bool bShow)65 void TextSeparatorResources::Show( bool bShow )
66 {
67     m_aFT_Separator.Show( bShow );
68     m_aLB_Separator.Show( bShow );
69 }
Enable(bool bEnable)70 void TextSeparatorResources::Enable( bool bEnable )
71 {
72     m_aFT_Separator.Enable( bEnable );
73     m_aLB_Separator.Enable( bEnable );
74 }
PositionBelowControl(const Window & rWindow)75 void TextSeparatorResources::PositionBelowControl( const Window& rWindow )
76 {
77     Point aPoint( rWindow.GetPosPixel() );
78     Size aSize( rWindow.GetSizePixel() );
79     aPoint.Y() += aSize.Height();
80     Size aBigDistanceSize( rWindow.LogicToPixel( Size(0,RSC_SP_CTRL_Y), MapMode(MAP_APPFONT) ) );
81     aPoint.Y() += aBigDistanceSize.Height();
82 
83     Size aDistanceSize( rWindow.LogicToPixel( Size(RSC_SP_CTRL_DESC_X, (RSC_CD_DROPDOWN_HEIGHT-RSC_CD_FIXEDTEXT_HEIGHT)/2), MapMode(MAP_APPFONT) ) );
84     aPoint.Y() += aDistanceSize.Height();
85 
86     m_aFT_Separator.SetPosPixel( aPoint );
87     m_aLB_Separator.SetPosPixel( Point( aPoint.X()+m_aFT_Separator.GetSizePixel().Width()+aDistanceSize.Width(), aPoint.Y()-aDistanceSize.Height()-1) );
88 }
89 
AlignListBoxWidthAndXPos(long nWantedLeftBorder,long nWantedRightBorder,long nMinimumListBoxWidth)90 void TextSeparatorResources::AlignListBoxWidthAndXPos( long nWantedLeftBorder /*use -1 to indicate that this can be automatic*/
91                                                      , long nWantedRightBorder /*use -1 to indicate that this can be automatic*/
92                                                      , long nMinimumListBoxWidth /*use -1 to indicate that this can be automatic*/ )
93 {
94     long nMinPossibleLeftBorder = m_aFT_Separator.GetPosPixel().X() + m_aFT_Separator.GetSizePixel().Width() + 1 ;
95     if( nWantedLeftBorder >= 0 && nWantedLeftBorder>nMinPossibleLeftBorder )
96     {
97         Point aPos( m_aLB_Separator.GetPosPixel() );
98         aPos.X() = nWantedLeftBorder;
99         m_aLB_Separator.SetPosPixel( aPos );
100     }
101 
102     long nMinPossibleRightBorder = m_aLB_Separator.GetPosPixel().X() + m_aLB_Separator.CalcMinimumSize().Width() - 1 ;
103     if( nWantedRightBorder < m_aLB_Separator.GetPosPixel().X() + nMinimumListBoxWidth )
104         nWantedRightBorder = m_aLB_Separator.GetPosPixel().X() + nMinimumListBoxWidth;
105 
106     if( nWantedRightBorder >= 0 && nWantedRightBorder > nMinPossibleRightBorder )
107     {
108         Size aSize( m_aLB_Separator.GetSizePixel() );
109         aSize.Width() = nWantedRightBorder-m_aLB_Separator.GetPosPixel().X();
110         m_aLB_Separator.SetSizePixel(aSize);
111     }
112 }
113 
GetCurrentListBoxPosition() const114 Point TextSeparatorResources::GetCurrentListBoxPosition() const
115 {
116     return m_aLB_Separator.GetPosPixel();
117 }
118 
GetCurrentListBoxSize() const119 Size TextSeparatorResources::GetCurrentListBoxSize() const
120 {
121     return m_aLB_Separator.GetSizePixel();
122 }
123 
SetValue(const rtl::OUString & rSeparator)124 void TextSeparatorResources::SetValue( const rtl::OUString& rSeparator )
125 {
126     ::std::map< ::rtl::OUString, sal_uInt16 >::iterator aIter( m_aEntryMap.find(rSeparator) );
127     if( aIter == m_aEntryMap.end() )
128         m_aLB_Separator.SelectEntryPos( m_nDefaultPos );
129     else
130         m_aLB_Separator.SelectEntryPos( aIter->second );
131 }
132 
SetDefault()133 void TextSeparatorResources::SetDefault()
134 {
135     m_aLB_Separator.SelectEntryPos( m_nDefaultPos );
136 }
137 
GetValue() const138 rtl::OUString TextSeparatorResources::GetValue() const
139 {
140     sal_uInt16 nPos = m_aLB_Separator.GetSelectEntryPos();
141     ::std::map< ::rtl::OUString, sal_uInt16 >::const_iterator aIter( m_aEntryMap.begin() );
142     while( aIter != m_aEntryMap.end() )
143     {
144         if(aIter->second==nPos )
145             return aIter->first;
146         ++aIter;
147     }
148     return C2U( " " );
149 }
150 
151 //.............................................................................
152 } //namespace chart
153 //.............................................................................
154 
155