xref: /AOO41X/main/dbaccess/source/ui/control/VertSplitView.cxx (revision 96de54900b79e13b861fbc62cbf36018b54e21b7)
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_dbaccess.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