1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #include "vclxtabpage.hxx"
25*b1cdbd2cSJim Jagielski #include "forward.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/PosSize.hpp>
28*b1cdbd2cSJim Jagielski #include <toolkit/helper/convert.hxx>
29*b1cdbd2cSJim Jagielski #include <vcl/tabpage.hxx>
30*b1cdbd2cSJim Jagielski #include <vcl/tabctrl.hxx>
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski #if !defined (__GNUC__)
33*b1cdbd2cSJim Jagielski #define __PRETTY_FUNCTION__ __FUNCTION__
34*b1cdbd2cSJim Jagielski #endif /* !__GNUC__ */
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski namespace layoutimpl
37*b1cdbd2cSJim Jagielski {
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski // XInterface
42*b1cdbd2cSJim Jagielski IMPLEMENT_FORWARD_XINTERFACE2( VCLXTabPage, VCLXWindow, Bin );
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski // XTypeProvider
45*b1cdbd2cSJim Jagielski IMPLEMENT_FORWARD_XTYPEPROVIDER1( VCLXTabPage, VCLXWindow );
46*b1cdbd2cSJim Jagielski 
VCLXTabPage(Window * p)47*b1cdbd2cSJim Jagielski VCLXTabPage::VCLXTabPage( Window *p )
48*b1cdbd2cSJim Jagielski     : VCLXWindow()
49*b1cdbd2cSJim Jagielski     , Bin()
50*b1cdbd2cSJim Jagielski     , bRealized( false )
51*b1cdbd2cSJim Jagielski {
52*b1cdbd2cSJim Jagielski     /* FIXME: before Window is set, setLabel, setProperty->setImage
53*b1cdbd2cSJim Jagielski      * are silent no-ops.  */
54*b1cdbd2cSJim Jagielski     p->SetComponentInterface( this );
55*b1cdbd2cSJim Jagielski }
56*b1cdbd2cSJim Jagielski 
~VCLXTabPage()57*b1cdbd2cSJim Jagielski VCLXTabPage::~VCLXTabPage()
58*b1cdbd2cSJim Jagielski {
59*b1cdbd2cSJim Jagielski }
60*b1cdbd2cSJim Jagielski 
dispose()61*b1cdbd2cSJim Jagielski void SAL_CALL VCLXTabPage::dispose() throw(uno::RuntimeException)
62*b1cdbd2cSJim Jagielski {
63*b1cdbd2cSJim Jagielski     {
64*b1cdbd2cSJim Jagielski         ::vos::OGuard aGuard( GetMutex() );
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski         lang::EventObject aDisposeEvent;
67*b1cdbd2cSJim Jagielski         aDisposeEvent.Source = W3K_EXPLICIT_CAST (*this);
68*b1cdbd2cSJim Jagielski     }
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski     VCLXWindow::dispose();
71*b1cdbd2cSJim Jagielski }
72*b1cdbd2cSJim Jagielski 
allocateArea(awt::Rectangle const & area)73*b1cdbd2cSJim Jagielski void SAL_CALL VCLXTabPage::allocateArea( awt::Rectangle const& area )
74*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
75*b1cdbd2cSJim Jagielski {
76*b1cdbd2cSJim Jagielski     awt::Size currentSize = getSize();
77*b1cdbd2cSJim Jagielski     awt::Size requestedSize = getMinimumSize();
78*b1cdbd2cSJim Jagielski     requestedSize.Height = getHeightForWidth( area.Width );
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski     if ( currentSize.Width > 0 && currentSize.Height > 0
81*b1cdbd2cSJim Jagielski          && requestedSize.Width > currentSize.Width )
82*b1cdbd2cSJim Jagielski         requestedSize.Width = currentSize.Width;
83*b1cdbd2cSJim Jagielski     if ( currentSize.Width > 0 && currentSize.Height > 0
84*b1cdbd2cSJim Jagielski          && requestedSize.Height > currentSize.Height )
85*b1cdbd2cSJim Jagielski         requestedSize.Height = currentSize.Height;
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski     // FIXME: missing destructor?
88*b1cdbd2cSJim Jagielski     if ( !GetWindow() )
89*b1cdbd2cSJim Jagielski         return;
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski     Size windowSize = GetWindow()->GetSizePixel();
92*b1cdbd2cSJim Jagielski     Window *parent = GetWindow()->GetParent();
93*b1cdbd2cSJim Jagielski     Size parentSize = parent->GetSizePixel();
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski     Point pos = GetWindow()->GetPosPixel();
96*b1cdbd2cSJim Jagielski #ifndef __SUNPRO_CC
97*b1cdbd2cSJim Jagielski     OSL_TRACE ("\n%s", __PRETTY_FUNCTION__);
98*b1cdbd2cSJim Jagielski     OSL_TRACE ("%s: curpos: %d ,%d", __FUNCTION__, pos.X(), pos.Y() );
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski     OSL_TRACE ("%s: cursize: %d ,%d", __FUNCTION__, currentSize.Width, currentSize.Height );
101*b1cdbd2cSJim Jagielski     OSL_TRACE ("%s: area: %d, %d", __FUNCTION__, area.Width, area.Height );
102*b1cdbd2cSJim Jagielski     OSL_TRACE ("%s: requestedSize: %d, %d", __FUNCTION__, requestedSize.Width, requestedSize.Height );
103*b1cdbd2cSJim Jagielski     OSL_TRACE ("%s: parent: %d, %d", __FUNCTION__, parentSize.Width(), parentSize.Height() );
104*b1cdbd2cSJim Jagielski     OSL_TRACE ("%s: window: %d, %d", __FUNCTION__, windowSize.Width(), windowSize.Height() );
105*b1cdbd2cSJim Jagielski #endif
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski #if 0
108*b1cdbd2cSJim Jagielski     if (requestedSize.Width > parentSize.Width ()
109*b1cdbd2cSJim Jagielski         || requestedSize.Height > parentSize.Height ())
110*b1cdbd2cSJim Jagielski     {
111*b1cdbd2cSJim Jagielski #ifndef __SUNPRO_CC
112*b1cdbd2cSJim Jagielski         OSL_TRACE ("%s: ***setting parent: %d, %d", __FUNCTION__, requestedSize.Width, requestedSize.Height );
113*b1cdbd2cSJim Jagielski #endif
114*b1cdbd2cSJim Jagielski         parent->SetSizePixel ( Size (requestedSize.Width, requestedSize.Height) );
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski         if (Window *grand_parent = parent->GetParent ())
117*b1cdbd2cSJim Jagielski             grand_parent->SetSizePixel ( Size (requestedSize.Width, requestedSize.Height) );
118*b1cdbd2cSJim Jagielski     }
119*b1cdbd2cSJim Jagielski #endif
120*b1cdbd2cSJim Jagielski 
121*b1cdbd2cSJim Jagielski     if ( !bRealized )
122*b1cdbd2cSJim Jagielski     {
123*b1cdbd2cSJim Jagielski         setPosSize( area.X, area.Y, requestedSize.Width, requestedSize.Height, awt::PosSize::SIZE );
124*b1cdbd2cSJim Jagielski         bRealized = true;
125*b1cdbd2cSJim Jagielski     }
126*b1cdbd2cSJim Jagielski     else
127*b1cdbd2cSJim Jagielski     {
128*b1cdbd2cSJim Jagielski         if ( requestedSize.Width > currentSize.Width + 10)
129*b1cdbd2cSJim Jagielski             setPosSize( 0, 0, requestedSize.Width, 0, awt::PosSize::WIDTH );
130*b1cdbd2cSJim Jagielski         if ( requestedSize.Height > currentSize.Height + 10)
131*b1cdbd2cSJim Jagielski             setPosSize( 0, 0, 0, requestedSize.Height, awt::PosSize::HEIGHT );
132*b1cdbd2cSJim Jagielski     }
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski     awt::Size newSize = getSize();
135*b1cdbd2cSJim Jagielski #ifndef __SUNPRO_CC
136*b1cdbd2cSJim Jagielski     OSL_TRACE ("%s: newSize: %d, %d", __FUNCTION__, newSize.Width, newSize.Height );
137*b1cdbd2cSJim Jagielski #endif
138*b1cdbd2cSJim Jagielski     maAllocation.Width = newSize.Width;
139*b1cdbd2cSJim Jagielski     maAllocation.Height = newSize.Height;
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski     Bin::allocateArea( maAllocation );
142*b1cdbd2cSJim Jagielski }
143*b1cdbd2cSJim Jagielski 
getMinimumSize()144*b1cdbd2cSJim Jagielski awt::Size SAL_CALL VCLXTabPage::getMinimumSize()
145*b1cdbd2cSJim Jagielski     throw(uno::RuntimeException)
146*b1cdbd2cSJim Jagielski {
147*b1cdbd2cSJim Jagielski     ::vos::OGuard aGuard( GetMutex() );
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski     return Bin::getMinimumSize();
150*b1cdbd2cSJim Jagielski }
151*b1cdbd2cSJim Jagielski 
152*b1cdbd2cSJim Jagielski } // namespace layoutimpl
153