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_dbui.hxx"
26 #ifndef DBAUI_VERTSPLITVIEW_HXX
27 #include "VertSplitView.hxx"
28 #endif
29
30 #ifndef _TOOLS_DEBUG_HXX
31 #include <tools/debug.hxx>
32 #endif
33
34 #define SPLITTER_WIDTH 80
35
36 using namespace ::dbaui;
37
38 //==================================================================
39 // class OSplitterView
40 //==================================================================
DBG_NAME(OSplitterView)41 DBG_NAME(OSplitterView)
42 OSplitterView::OSplitterView(Window* _pParent,sal_Bool _bVertical) : Window(_pParent,WB_DIALOGCONTROL) // ,WB_BORDER
43 ,m_pSplitter( NULL )
44 ,m_pLeft(NULL)
45 ,m_pRight(NULL)
46 ,m_bVertical(_bVertical)
47 {
48 DBG_CTOR(OSplitterView,NULL);
49 ImplInitSettings( sal_True, sal_True, sal_True );
50 }
51 // -----------------------------------------------------------------------------
~OSplitterView()52 OSplitterView::~OSplitterView()
53 {
54 DBG_DTOR(OSplitterView,NULL);
55 m_pRight = m_pLeft = NULL;
56 }
57 //------------------------------------------------------------------------------
58 IMPL_LINK( OSplitterView, SplitHdl, Splitter*, /*pSplit*/ )
59 {
60 OSL_ENSURE(m_pSplitter, "Splitter is NULL!");
61 if ( m_bVertical )
62 {
63 long nPosY = m_pSplitter->GetPosPixel().Y();
64 m_pSplitter->SetPosPixel( Point( m_pSplitter->GetSplitPosPixel(), nPosY ) );
65 }
66 else
67 m_pSplitter->SetPosPixel( Point( m_pSplitter->GetPosPixel().X(),m_pSplitter->GetSplitPosPixel() ) );
68
69 Resize();
70 return 0L;
71 }
72 // -----------------------------------------------------------------------------
ImplInitSettings(sal_Bool bFont,sal_Bool bForeground,sal_Bool bBackground)73 void OSplitterView::ImplInitSettings( sal_Bool bFont, sal_Bool bForeground, sal_Bool bBackground )
74 {
75 const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
76
77 if ( bFont )
78 {
79 Font aFont = rStyleSettings.GetAppFont();
80 if ( IsControlFont() )
81 aFont.Merge( GetControlFont() );
82 SetPointFont( aFont );
83 // Set/*Zoomed*/PointFont( aFont );
84 }
85
86 if ( bFont || bForeground )
87 {
88 Color aTextColor = rStyleSettings.GetButtonTextColor();
89 if ( IsControlForeground() )
90 aTextColor = GetControlForeground();
91 SetTextColor( aTextColor );
92 }
93
94 if ( bBackground )
95 {
96 if( IsControlBackground() )
97 SetBackground( GetControlBackground() );
98 else
99 SetBackground( rStyleSettings.GetFaceColor() );
100 }
101 }
102 // -----------------------------------------------------------------------
DataChanged(const DataChangedEvent & rDCEvt)103 void OSplitterView::DataChanged( const DataChangedEvent& rDCEvt )
104 {
105 Window::DataChanged( rDCEvt );
106
107 if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
108 (rDCEvt.GetFlags() & SETTINGS_STYLE) )
109 {
110 ImplInitSettings( sal_True, sal_True, sal_True );
111 Invalidate();
112 }
113 }
114 // -----------------------------------------------------------------------------
GetFocus()115 void OSplitterView::GetFocus()
116 {
117 Window::GetFocus();
118
119 // forward the focus to the current cell of the editor control
120 if ( m_pLeft )
121 m_pLeft->GrabFocus();
122 else if ( m_pRight )
123 m_pRight->GrabFocus();
124 }
125
126 // -------------------------------------------------------------------------
Resize()127 void OSplitterView::Resize()
128 {
129 Window::Resize();
130 OSL_ENSURE( m_pRight, "No init called!");
131
132 Point aSplitPos;
133 Size aSplitSize;
134 Point aPlaygroundPos( 0,0 );
135 Size aPlaygroundSize( GetOutputSizePixel() );
136
137 if ( m_pLeft && m_pLeft->IsVisible() && m_pSplitter )
138 {
139 aSplitPos = m_pSplitter->GetPosPixel();
140 aSplitSize = m_pSplitter->GetOutputSizePixel();
141 if ( m_bVertical )
142 {
143 // calculate the splitter pos and size
144 aSplitPos.Y() = aPlaygroundPos.Y();
145 aSplitSize.Height() = aPlaygroundSize.Height();
146
147 if( ( aSplitPos.X() + aSplitSize.Width() ) > ( aPlaygroundSize.Width() ))
148 aSplitPos.X() = aPlaygroundSize.Width() - aSplitSize.Width();
149
150 if( aSplitPos.X() <= aPlaygroundPos.X() )
151 aSplitPos.X() = aPlaygroundPos.X() + sal_Int32(aPlaygroundSize.Width() * 0.3);
152
153 // the tree pos and size
154 Point aTreeViewPos( aPlaygroundPos );
155 Size aTreeViewSize( aSplitPos.X(), aPlaygroundSize.Height() );
156
157 // set the size of treelistbox
158 m_pLeft->SetPosSizePixel( aTreeViewPos, aTreeViewSize );
159
160 //set the size of the splitter
161 m_pSplitter->SetPosSizePixel( aSplitPos, Size( aSplitSize.Width(), aPlaygroundSize.Height() ) );
162 m_pSplitter->SetDragRectPixel( Rectangle(aPlaygroundPos,aPlaygroundSize) );
163 }
164 else
165 {
166 aSplitPos.X() = aPlaygroundPos.X();
167 aSplitSize.Width() = aPlaygroundSize.Width();
168
169 if( ( aSplitPos.Y() + aSplitSize.Height() ) > ( aPlaygroundSize.Height() ))
170 aSplitPos.Y() = aPlaygroundSize.Height() - aSplitSize.Height();
171
172 if( aSplitPos.Y() <= aPlaygroundPos.Y() )
173 aSplitPos.Y() = aPlaygroundPos.Y() + sal_Int32(aPlaygroundSize.Height() * 0.3);
174
175 // the tree pos and size
176 Point aTreeViewPos( aPlaygroundPos );
177 Size aTreeViewSize( aPlaygroundSize.Width() ,aSplitPos.Y());
178
179 // set the size of treelistbox
180 m_pLeft->SetPosSizePixel( aTreeViewPos, aTreeViewSize );
181
182 //set the size of the splitter
183 m_pSplitter->SetPosSizePixel( aSplitPos, Size( aPlaygroundSize.Width(), aSplitSize.Height() ) );
184 m_pSplitter->SetDragRectPixel( Rectangle(aPlaygroundPos,aPlaygroundSize) );
185 }
186 }
187
188 if ( m_pRight )
189 {
190 if ( m_bVertical )
191 m_pRight->SetPosSizePixel( aSplitPos.X() + aSplitSize.Width(), aPlaygroundPos.Y(),
192 aPlaygroundSize.Width() - aSplitSize.Width() - aSplitPos.X(), aPlaygroundSize.Height());
193 else
194 m_pRight->SetPosSizePixel( aSplitPos.X(), aPlaygroundPos.Y() + aSplitPos.Y() + aSplitSize.Height(),
195 aPlaygroundSize.Width() , aPlaygroundSize.Height() - aSplitSize.Height() - aSplitPos.Y());
196 }
197
198 }
199 // -----------------------------------------------------------------------------
set(Window * _pRight,Window * _pLeft)200 void OSplitterView::set(Window* _pRight,Window* _pLeft)
201 {
202 m_pLeft = _pLeft;
203 m_pRight = _pRight;
204 }
205 // -----------------------------------------------------------------------------
setSplitter(Splitter * _pSplitter)206 void OSplitterView::setSplitter(Splitter* _pSplitter)
207 {
208 m_pSplitter = _pSplitter;
209 if ( m_pSplitter )
210 {
211 m_pSplitter->SetSplitPosPixel( LogicToPixel( Size( SPLITTER_WIDTH, 0 ), MAP_APPFONT ).Width() );
212 m_pSplitter->SetSplitHdl( LINK(this, OSplitterView, SplitHdl) );
213 m_pSplitter->Show();
214 LINK( this, OSplitterView, SplitHdl ).Call(m_pSplitter);
215 }
216 }
217