1*5b190011SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*5b190011SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*5b190011SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*5b190011SAndrew Rist * distributed with this work for additional information
6*5b190011SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*5b190011SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*5b190011SAndrew Rist * "License"); you may not use this file except in compliance
9*5b190011SAndrew Rist * with the License. You may obtain a copy of the License at
10*5b190011SAndrew Rist *
11*5b190011SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*5b190011SAndrew Rist *
13*5b190011SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*5b190011SAndrew Rist * software distributed under the License is distributed on an
15*5b190011SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*5b190011SAndrew Rist * KIND, either express or implied. See the License for the
17*5b190011SAndrew Rist * specific language governing permissions and limitations
18*5b190011SAndrew Rist * under the License.
19*5b190011SAndrew Rist *
20*5b190011SAndrew Rist *************************************************************/
21*5b190011SAndrew Rist
22*5b190011SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sd.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include "PaneDockingWindow.hxx"
28cdf0e10cSrcweir #include "Window.hxx"
29cdf0e10cSrcweir #include "ViewShellBase.hxx"
30cdf0e10cSrcweir #include "framework/FrameworkHelper.hxx"
31cdf0e10cSrcweir #include "sdresid.hxx"
32cdf0e10cSrcweir #include "res_bmp.hrc"
33cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
34cdf0e10cSrcweir #include <vcl/toolbox.hxx>
35cdf0e10cSrcweir #include <vcl/taskpanelist.hxx>
36cdf0e10cSrcweir #include <vcl/splitwin.hxx>
37cdf0e10cSrcweir #include <vcl/svapp.hxx>
38cdf0e10cSrcweir #include <tools/wintypes.hxx>
39cdf0e10cSrcweir #include <boost/bind.hpp>
40cdf0e10cSrcweir
41cdf0e10cSrcweir using namespace ::com::sun::star;
42cdf0e10cSrcweir using namespace ::com::sun::star::uno;
43cdf0e10cSrcweir using namespace ::com::sun::star::drawing::framework;
44cdf0e10cSrcweir using ::sfx2::TitledDockingWindow;
45cdf0e10cSrcweir
46cdf0e10cSrcweir namespace sd {
47cdf0e10cSrcweir
PaneDockingWindow(SfxBindings * _pBindings,SfxChildWindow * pChildWindow,::Window * pParent,const ResId & rResId,const::rtl::OUString & rsTitle)48cdf0e10cSrcweir PaneDockingWindow::PaneDockingWindow(
49cdf0e10cSrcweir SfxBindings *_pBindings, SfxChildWindow *pChildWindow, ::Window* pParent,
50cdf0e10cSrcweir const ResId& rResId, const ::rtl::OUString& rsTitle )
51cdf0e10cSrcweir :TitledDockingWindow( _pBindings, pChildWindow, pParent, rResId )
52cdf0e10cSrcweir {
53cdf0e10cSrcweir SetTitle( rsTitle );
54cdf0e10cSrcweir }
55cdf0e10cSrcweir
~PaneDockingWindow(void)56cdf0e10cSrcweir PaneDockingWindow::~PaneDockingWindow (void)
57cdf0e10cSrcweir {
58cdf0e10cSrcweir }
59cdf0e10cSrcweir
StateChanged(StateChangedType nType)60cdf0e10cSrcweir void PaneDockingWindow::StateChanged( StateChangedType nType )
61cdf0e10cSrcweir {
62cdf0e10cSrcweir switch (nType)
63cdf0e10cSrcweir {
64cdf0e10cSrcweir case STATE_CHANGE_INITSHOW:
65cdf0e10cSrcweir Resize();
66cdf0e10cSrcweir GetContentWindow().SetStyle(GetContentWindow().GetStyle() | WB_DIALOGCONTROL);
67cdf0e10cSrcweir break;
68cdf0e10cSrcweir
69cdf0e10cSrcweir case STATE_CHANGE_VISIBLE:
70cdf0e10cSrcweir // The visibility of the docking window has changed. Tell the
71cdf0e10cSrcweir // ConfigurationController so that it can activate or deactivate
72cdf0e10cSrcweir // a/the view for the pane.
73cdf0e10cSrcweir // Without this the side panes remain empty after closing an
74cdf0e10cSrcweir // in-place slide show.
75cdf0e10cSrcweir ViewShellBase* pBase = ViewShellBase::GetViewShellBase(
76cdf0e10cSrcweir GetBindings().GetDispatcher()->GetFrame());
77cdf0e10cSrcweir if (pBase != NULL)
78cdf0e10cSrcweir {
79cdf0e10cSrcweir framework::FrameworkHelper::Instance(*pBase)->UpdateConfiguration();
80cdf0e10cSrcweir }
81cdf0e10cSrcweir break;
82cdf0e10cSrcweir }
83cdf0e10cSrcweir SfxDockingWindow::StateChanged (nType);
84cdf0e10cSrcweir }
85cdf0e10cSrcweir
MouseButtonDown(const MouseEvent & rEvent)86cdf0e10cSrcweir void PaneDockingWindow::MouseButtonDown (const MouseEvent& rEvent)
87cdf0e10cSrcweir {
88cdf0e10cSrcweir if (rEvent.GetButtons() == MOUSE_LEFT)
89cdf0e10cSrcweir {
90cdf0e10cSrcweir // For some strange reason we have to set the WB_DIALOGCONTROL at
91cdf0e10cSrcweir // the content window in order to have it pass focus to its content
92cdf0e10cSrcweir // window. Without setting this flag here that works only on views
93cdf0e10cSrcweir // that have not been taken from the cash and relocated to this pane
94cdf0e10cSrcweir // docking window.
95cdf0e10cSrcweir GetContentWindow().SetStyle(GetContentWindow().GetStyle() | WB_DIALOGCONTROL);
96cdf0e10cSrcweir GetContentWindow().GrabFocus();
97cdf0e10cSrcweir }
98cdf0e10cSrcweir SfxDockingWindow::MouseButtonDown(rEvent);
99cdf0e10cSrcweir }
100cdf0e10cSrcweir
101cdf0e10cSrcweir
102cdf0e10cSrcweir
103cdf0e10cSrcweir
104cdf0e10cSrcweir
105cdf0e10cSrcweir
106cdf0e10cSrcweir
107cdf0e10cSrcweir
SetValidSizeRange(const Range aValidSizeRange)108cdf0e10cSrcweir void PaneDockingWindow::SetValidSizeRange (const Range aValidSizeRange)
109cdf0e10cSrcweir {
110cdf0e10cSrcweir SplitWindow* pSplitWindow = dynamic_cast<SplitWindow*>(GetParent());
111cdf0e10cSrcweir if (pSplitWindow != NULL)
112cdf0e10cSrcweir {
113cdf0e10cSrcweir const sal_uInt16 nId (pSplitWindow->GetItemId(static_cast< ::Window*>(this)));
114cdf0e10cSrcweir const sal_uInt16 nSetId (pSplitWindow->GetSet(nId));
115cdf0e10cSrcweir // Because the PaneDockingWindow paints its own decoration, we have
116cdf0e10cSrcweir // to compensate the valid size range for that.
117cdf0e10cSrcweir const SvBorder aBorder (GetDecorationBorder());
118cdf0e10cSrcweir sal_Int32 nCompensation (pSplitWindow->IsHorizontal()
119cdf0e10cSrcweir ? mnTitleBarHeight + aBorder.Top() + aBorder.Bottom()
120cdf0e10cSrcweir : aBorder.Left() + aBorder.Right());
121cdf0e10cSrcweir pSplitWindow->SetItemSizeRange(
122cdf0e10cSrcweir nSetId,
123cdf0e10cSrcweir Range(
124cdf0e10cSrcweir aValidSizeRange.Min() + nCompensation,
125cdf0e10cSrcweir aValidSizeRange.Max() + nCompensation));
126cdf0e10cSrcweir }
127cdf0e10cSrcweir }
128cdf0e10cSrcweir
129cdf0e10cSrcweir
130cdf0e10cSrcweir
131cdf0e10cSrcweir
GetOrientation(void) const132cdf0e10cSrcweir PaneDockingWindow::Orientation PaneDockingWindow::GetOrientation (void) const
133cdf0e10cSrcweir {
134cdf0e10cSrcweir SplitWindow* pSplitWindow = dynamic_cast<SplitWindow*>(GetParent());
135cdf0e10cSrcweir if (pSplitWindow == NULL)
136cdf0e10cSrcweir return UnknownOrientation;
137cdf0e10cSrcweir else if (pSplitWindow->IsHorizontal())
138cdf0e10cSrcweir return HorizontalOrientation;
139cdf0e10cSrcweir else
140cdf0e10cSrcweir return VerticalOrientation;
141cdf0e10cSrcweir }
142cdf0e10cSrcweir
143cdf0e10cSrcweir } // end of namespace ::sd
144