diff options
author | Rüdiger Timm <rt@openoffice.org> | 2007-04-03 14:40:49 +0000 |
---|---|---|
committer | Rüdiger Timm <rt@openoffice.org> | 2007-04-03 14:40:49 +0000 |
commit | 2b0945ab82d7d610e3fe3ee6dcd032c2e3fff7c3 (patch) | |
tree | 6d3f7a3415ff8a4606a1b3f7b15a4f50e417059a /sd/source/ui/dlg/PaneDockingWindow.cxx | |
parent | 04982642e7f0a3e426a773defdaf8268cbed2f3d (diff) |
INTEGRATION: CWS components1 (1.12.198); FILE MERGED
2007/01/25 14:15:43 af 1.12.198.6: RESYNC: (1.13-1.14); FILE MERGED
2006/11/20 14:17:32 af 1.12.198.5: #i68075# Reacting to STATE_CHANGE_VISIBLE in StateChanged().
2006/11/16 14:34:42 af 1.12.198.4: #i68075# Optimizations to increase start-up performance.
2006/09/25 16:56:49 af 1.12.198.3: RESYNC: (1.12-1.13); FILE MERGED
2006/09/21 08:47:39 af 1.12.198.2: #i68075# Fixed the GetContentWindow() method.
2006/08/23 11:21:28 af 1.12.198.1: #i68075# Transition to new drawing framework.
Diffstat (limited to 'sd/source/ui/dlg/PaneDockingWindow.cxx')
-rw-r--r-- | sd/source/ui/dlg/PaneDockingWindow.cxx | 120 |
1 files changed, 65 insertions, 55 deletions
diff --git a/sd/source/ui/dlg/PaneDockingWindow.cxx b/sd/source/ui/dlg/PaneDockingWindow.cxx index c0f95e400f45..adae1e615852 100644 --- a/sd/source/ui/dlg/PaneDockingWindow.cxx +++ b/sd/source/ui/dlg/PaneDockingWindow.cxx @@ -4,9 +4,9 @@ * * $RCSfile: PaneDockingWindow.cxx,v $ * - * $Revision: 1.14 $ + * $Revision: 1.15 $ * - * last change: $Author: kz $ $Date: 2006-12-12 16:57:28 $ + * last change: $Author: rt $ $Date: 2007-04-03 15:40:49 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -48,6 +48,17 @@ #ifndef _SV_TASKPANELIST_HXX #include <vcl/taskpanelist.hxx> #endif +#ifndef _COM_SUN_STAR_DRAWING_FRAMEWORK_XCONTROLLERMANAGER_HPP_ +#include <com/sun/star/drawing/framework/XControllerManager.hpp> +#endif +#ifndef _COM_SUN_STAR_DRAWING_FRAMEWORK_XPANECONTROLLER_HPP_ +#include <com/sun/star/drawing/framework/XPaneController.hpp> +#endif +#include "framework/FrameworkHelper.hxx" + +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::drawing::framework; namespace sd { @@ -56,19 +67,21 @@ PaneDockingWindow::PaneDockingWindow ( SfxChildWindow *pChildWindow, ::Window* pParent, const ResId& rResId, - PaneManager::PaneType ePane, - const String& rsTitle) + const ::rtl::OUString& rsPaneURL, + const ::rtl::OUString& rsTitle) : SfxDockingWindow ( _pBindings, pChildWindow, pParent, rResId ), - mePane(ePane), + msPaneURL(rsPaneURL), msTitle(rsTitle), mpTitleToolBox(NULL), maBorder (3,1,3,3), - mnChildWindowId(pChildWindow->GetType()) + mnChildWindowId(pChildWindow->GetType()), + mpContentWindow(new ::Window(this)), + mbIsLayoutPending(false) { SetBackground (Wallpaper()); @@ -80,7 +93,7 @@ PaneDockingWindow::PaneDockingWindow ( if (pSystemWindow != NULL) pSystemWindow->GetTaskPaneList()->AddWindow(this); - AddEventListener(LINK(this,PaneDockingWindow,WindowEventListener)); + mpContentWindow->Show(); } @@ -88,13 +101,12 @@ PaneDockingWindow::PaneDockingWindow ( PaneDockingWindow::~PaneDockingWindow (void) { - RemoveEventListener(LINK(this,PaneDockingWindow,WindowEventListener)); - // Tell the next system window that the docking window is no longer // available. SystemWindow* pSystemWindow = GetSystemWindow(); if (pSystemWindow != NULL) pSystemWindow->GetTaskPaneList()->RemoveWindow(this); + mpTitleToolBox.reset(); } @@ -112,6 +124,16 @@ void PaneDockingWindow::SetTitle (const String& rsTitle) void PaneDockingWindow::Resize (void) { SfxDockingWindow::Resize(); + mbIsLayoutPending = true; +} + + + + +void PaneDockingWindow::Layout (void) +{ + mbIsLayoutPending = false; + Size aWindowSize (GetOutputSizePixel()); Size aToolBoxSize (0,0); int nTitleBarHeight (GetSettings().GetStyleSettings().GetTitleHeight()); @@ -133,23 +155,14 @@ void PaneDockingWindow::Resize (void) aToolBoxSize); } - // Place the view shell. - ViewShellBase* pBase (ViewShellBase::GetViewShellBase( - GetBindings().GetDispatcher()->GetFrame())); - if (pBase != NULL) - { - ViewShell* pViewShell = pBase->GetPaneManager().GetViewShell (mePane); - if (pViewShell != NULL) - { - if (nTitleBarHeight < aToolBoxSize.Height()) - nTitleBarHeight = aToolBoxSize.Height(); - aWindowSize.Height() -= nTitleBarHeight; - pViewShell->Resize( - Point(maBorder.Left(),nTitleBarHeight+maBorder.Top()), - Size (aWindowSize.Width()-maBorder.Left()-maBorder.Right(), - aWindowSize.Height()-maBorder.Top()-maBorder.Bottom())); - } - } + // Place the content window. + if (nTitleBarHeight < aToolBoxSize.Height()) + nTitleBarHeight = aToolBoxSize.Height(); + aWindowSize.Height() -= nTitleBarHeight; + mpContentWindow->SetPosSizePixel( + Point(maBorder.Left(),nTitleBarHeight+maBorder.Top()), + Size (aWindowSize.Width()-maBorder.Left()-maBorder.Right(), + aWindowSize.Height()-maBorder.Top()-maBorder.Bottom())); } @@ -157,6 +170,9 @@ void PaneDockingWindow::Resize (void) void PaneDockingWindow::Paint (const Rectangle& rRectangle) { + if (mbIsLayoutPending) + Layout(); + SfxDockingWindow::Paint (rRectangle); int nTitleBarHeight (GetSettings().GetStyleSettings().GetTitleHeight()); Size aToolBoxSize = mpTitleToolBox->CalcWindowSizePixel(); @@ -278,16 +294,21 @@ USHORT PaneDockingWindow::AddMenu ( { // Add the menu before the closer button. USHORT nItemCount (mpTitleToolBox->GetItemCount()); - USHORT nItemId = (nItemCount+1); + USHORT nItemId (nItemCount+1); mpTitleToolBox->InsertItem ( nItemId, rsMenuName, TIB_DROPDOWNONLY, - nItemCount-1); + nItemCount>0 ? nItemCount-1 : (USHORT)-1); mpTitleToolBox->SetHelpId( nItemId, nHelpId ); mpTitleToolBox->SetClickHdl (rCallback); mpTitleToolBox->SetDropdownClickHdl (rCallback); + // The tool box has likely changed its size. The title bar has to be + // resized. + Resize(); + Invalidate(); + return nItemCount+1; } @@ -330,6 +351,20 @@ void PaneDockingWindow::StateChanged( StateChangedType nType ) case STATE_CHANGE_INITSHOW: Resize(); break; + + case STATE_CHANGE_VISIBLE: + // The visibility of the docking window has changed. Tell the + // ConfigurationController so that it can activate or deactivate + // a/the view for the pane. + // Without this the side panes remain empty after closing an + // in-place slide show. + ViewShellBase* pBase = ViewShellBase::GetViewShellBase( + GetBindings().GetDispatcher()->GetFrame()); + if (pBase != NULL) + { + framework::FrameworkHelper::Instance(*pBase)->UpdateConfiguration(); + } + break; } SfxDockingWindow::StateChanged (nType); } @@ -377,34 +412,9 @@ void PaneDockingWindow::DataChanged (const DataChangedEvent& rEvent) -IMPL_LINK(PaneDockingWindow, WindowEventListener, VclSimpleEvent*, pEvent) +::Window* PaneDockingWindow::GetContentWindow (void) { - if (pEvent!=NULL && pEvent->ISA(VclWindowEvent)) - { - ViewShellBase* pBase = ViewShellBase::GetViewShellBase( - GetBindings().GetDispatcher()->GetFrame()); - - VclWindowEvent* pWindowEvent = static_cast<VclWindowEvent*>(pEvent); - switch (pWindowEvent->GetId()) - { - case VCLEVENT_WINDOW_SHOW: - if (pBase != NULL) - pBase->GetPaneManager().RequestWindowVisibilityChange( - mePane, - true, - PaneManager::CM_ASYNCHRONOUS); - break; - - case VCLEVENT_WINDOW_HIDE: - if (pBase != NULL) - pBase->GetPaneManager().RequestWindowVisibilityChange( - mePane, - false, - PaneManager::CM_ASYNCHRONOUS); - break; - } - } - return 1; + return mpContentWindow.get(); } } // end of namespace ::sd |