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