summaryrefslogtreecommitdiff
path: root/sd/source/ui/dlg/PaneDockingWindow.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/ui/dlg/PaneDockingWindow.cxx')
-rw-r--r--sd/source/ui/dlg/PaneDockingWindow.cxx411
1 files changed, 411 insertions, 0 deletions
diff --git a/sd/source/ui/dlg/PaneDockingWindow.cxx b/sd/source/ui/dlg/PaneDockingWindow.cxx
new file mode 100644
index 000000000000..c0dcd76f0fae
--- /dev/null
+++ b/sd/source/ui/dlg/PaneDockingWindow.cxx
@@ -0,0 +1,411 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sd.hxx"
+
+#include "PaneDockingWindow.hxx"
+#include "Window.hxx"
+#include "ViewShellBase.hxx"
+#include "sdresid.hxx"
+#include "res_bmp.hrc"
+#include <sfx2/dispatch.hxx>
+#include <vcl/toolbox.hxx>
+#include <vcl/taskpanelist.hxx>
+#include "framework/FrameworkHelper.hxx"
+
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::drawing::framework;
+
+namespace sd {
+
+PaneDockingWindow::PaneDockingWindow (
+ SfxBindings *_pBindings,
+ SfxChildWindow *pChildWindow,
+ ::Window* pParent,
+ const ResId& rResId,
+ const ::rtl::OUString& rsPaneURL,
+ const ::rtl::OUString& rsTitle)
+ : SfxDockingWindow (
+ _pBindings,
+ pChildWindow,
+ pParent,
+ rResId
+ ),
+ msPaneURL(rsPaneURL),
+ msTitle(rsTitle),
+ mpTitleToolBox(),
+ maBorder (3,1,3,3),
+ mnChildWindowId(pChildWindow->GetType()),
+ mpContentWindow(new ::Window(this)),
+ mbIsLayoutPending(false)
+{
+ SetBackground (Wallpaper());
+
+ InitializeTitleToolBox();
+
+ // Tell the system window about the new docking window so that it can be
+ // reached via the keyboard.
+ SystemWindow* pSystemWindow = GetSystemWindow();
+ if (pSystemWindow != NULL)
+ pSystemWindow->GetTaskPaneList()->AddWindow(this);
+
+ mpContentWindow->Show();
+}
+
+
+
+
+PaneDockingWindow::~PaneDockingWindow (void)
+{
+ // 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();
+}
+
+
+
+
+void PaneDockingWindow::SetTitle (const String& rsTitle)
+{
+ msTitle = rsTitle;
+ Invalidate();
+}
+
+
+
+
+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());
+
+ // Place the title tool box.
+ if (mpTitleToolBox.get() != NULL)
+ {
+ if (IsFloatingMode())
+ mpTitleToolBox->HideItem (1);
+ else
+ mpTitleToolBox->ShowItem (1);
+
+ aToolBoxSize = mpTitleToolBox->CalcWindowSizePixel();
+ if (aToolBoxSize.Height() > nTitleBarHeight)
+ nTitleBarHeight = aToolBoxSize.Height();
+ mpTitleToolBox->SetPosSizePixel (
+ Point(aWindowSize.Width()-aToolBoxSize.Width(),
+ (nTitleBarHeight-aToolBoxSize.Height())/2),
+ aToolBoxSize);
+ }
+
+ // 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()));
+}
+
+
+
+
+void PaneDockingWindow::Paint (const Rectangle& rRectangle)
+{
+ if (mbIsLayoutPending)
+ Layout();
+
+ SfxDockingWindow::Paint (rRectangle);
+ int nTitleBarHeight (GetSettings().GetStyleSettings().GetTitleHeight());
+ Size aToolBoxSize = mpTitleToolBox->CalcWindowSizePixel();
+ if (aToolBoxSize.Height() > nTitleBarHeight)
+ nTitleBarHeight = aToolBoxSize.Height();
+ Color aOriginalLineColor (GetLineColor());
+ Color aOriginalFillColor (GetFillColor());
+ SetFillColor (GetSettings().GetStyleSettings().GetDialogColor());
+ SetLineColor ();
+
+ // Make font bold.
+ const Font& rOriginalFont (GetFont());
+ Font aFont (rOriginalFont);
+ aFont.SetWeight (WEIGHT_BOLD);
+ SetFont (aFont);
+
+ // Set border values.
+ Size aWindowSize (GetOutputSizePixel());
+ int nOuterLeft = 0;
+ int nInnerLeft = nOuterLeft + maBorder.Left() - 1;
+ int nOuterRight = aWindowSize.Width() - 1;
+ int nInnerRight = nOuterRight - maBorder.Right() + 1;
+ int nInnerTop = nTitleBarHeight + maBorder.Top() - 1;
+ int nOuterBottom = aWindowSize.Height() - 1;
+ int nInnerBottom = nOuterBottom - maBorder.Bottom() + 1;
+
+ // Paint title bar background.
+ Rectangle aTitleBarBox (Rectangle(
+ nOuterLeft,
+ 0,
+ nOuterRight,
+ nInnerTop-1));
+ DrawRect (aTitleBarBox);
+
+ if (nInnerLeft > nOuterLeft)
+ DrawRect (
+ Rectangle (nOuterLeft, nInnerTop, nInnerLeft, nInnerBottom));
+ if (nOuterRight > nInnerRight)
+ DrawRect (
+ Rectangle (nInnerRight, nInnerTop, nOuterRight, nInnerBottom));
+ if (nInnerBottom < nOuterBottom)
+ DrawRect (
+ Rectangle (nOuterLeft, nInnerBottom, nOuterRight, nOuterBottom));
+
+ // Paint bevel border.
+ SetFillColor ();
+ SetLineColor (GetSettings().GetStyleSettings().GetShadowColor());
+ if (maBorder.Top() > 0)
+ DrawLine (
+ Point(nInnerLeft,nInnerTop),
+ Point(nInnerLeft,nInnerBottom));
+ if (maBorder.Left() > 0)
+ DrawLine (
+ Point(nInnerLeft,nInnerTop),
+ Point(nInnerRight,nInnerTop));
+ SetLineColor (GetSettings().GetStyleSettings().GetLightColor());
+ if (maBorder.Bottom() > 0)
+ DrawLine (
+ Point(nInnerRight,nInnerBottom),
+ Point(nInnerLeft,nInnerBottom));
+ if (maBorder.Right() > 0)
+ DrawLine (
+ Point(nInnerRight,nInnerBottom),
+ Point(nInnerRight,nInnerTop));
+
+ // Paint title bar text.
+ SetLineColor (GetSettings().GetStyleSettings().GetActiveTextColor());
+ SetFillColor ();
+ aTitleBarBox.Left() += 3;
+ DrawText (aTitleBarBox, msTitle,
+ TEXT_DRAW_LEFT
+ | TEXT_DRAW_VCENTER
+ | TEXT_DRAW_MULTILINE
+ | TEXT_DRAW_WORDBREAK);
+
+ // Restore original values of the output device.
+ SetFont (rOriginalFont);
+ SetFillColor (aOriginalFillColor);
+}
+
+
+
+
+void PaneDockingWindow::InitializeTitleToolBox (void)
+{
+ if (mpTitleToolBox.get() == NULL)
+ {
+ // Initialize the title tool box.
+ mpTitleToolBox.reset (new ToolBox(this));
+ mpTitleToolBox->SetSelectHdl (
+ LINK(this, PaneDockingWindow, ToolboxSelectHandler));
+ mpTitleToolBox->SetOutStyle (TOOLBOX_STYLE_FLAT);
+ mpTitleToolBox->SetBackground (Wallpaper (
+ GetSettings().GetStyleSettings().GetDialogColor()));
+ mpTitleToolBox->Show();
+ }
+ else
+ mpTitleToolBox->Clear();
+
+ // Get the closer bitmap and set it as right most button.
+ Bitmap aBitmap (SdResId (BMP_CLOSE_DOC));
+ Bitmap aBitmapHC (SdResId (BMP_CLOSE_DOC_H));
+ Image aImage = Image (aBitmap, Color (COL_LIGHTMAGENTA));
+ Image aImageHC = Image (aBitmapHC, Color (BMP_COLOR_HIGHCONTRAST));
+ mpTitleToolBox->InsertItem (1,
+ GetSettings().GetStyleSettings().GetHighContrastMode()
+ ? aImageHC
+ : aImage);
+ mpTitleToolBox->ShowItem (1);
+}
+
+
+
+
+USHORT PaneDockingWindow::AddMenu (
+ const String& rsMenuName,
+ ULONG nHelpId,
+ const Link& rCallback)
+{
+ // Add the menu before the closer button.
+ USHORT nItemCount (mpTitleToolBox->GetItemCount());
+ USHORT nItemId (nItemCount+1);
+ mpTitleToolBox->InsertItem (
+ nItemId,
+ rsMenuName,
+ TIB_DROPDOWNONLY,
+ 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;
+}
+
+
+
+
+IMPL_LINK(PaneDockingWindow, ToolboxSelectHandler, ToolBox*, pToolBox)
+{
+ USHORT nId = pToolBox->GetCurItemId();
+
+ if (nId == 1)
+ {
+ EndTracking();
+ SfxBoolItem aVisibility (mnChildWindowId, FALSE);
+ GetBindings().GetDispatcher()->Execute (
+ mnChildWindowId,
+ SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD,
+ &aVisibility,
+ NULL);
+ }
+
+ return 0;
+}
+
+
+
+
+long PaneDockingWindow::Notify( NotifyEvent& rNEvt )
+{
+ return SfxDockingWindow::Notify (rNEvt);
+}
+
+
+
+
+void PaneDockingWindow::StateChanged( StateChangedType nType )
+{
+ switch (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);
+}
+
+
+
+
+void PaneDockingWindow::DataChanged (const DataChangedEvent& rEvent)
+{
+ SfxDockingWindow::DataChanged (rEvent);
+
+ switch (rEvent.GetType())
+ {
+ case DATACHANGED_SETTINGS:
+ if ((rEvent.GetFlags() & SETTINGS_STYLE) == 0)
+ break;
+ // else fall through.
+ case DATACHANGED_FONTS:
+ case DATACHANGED_FONTSUBSTITUTION:
+ {
+ const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
+
+ // Font.
+ Font aFont = rStyleSettings.GetAppFont();
+ if (IsControlFont())
+ aFont.Merge(GetControlFont());
+ SetZoomedPointFont(aFont);
+
+ // Color.
+ Color aColor;
+ if (IsControlForeground())
+ aColor = GetControlForeground();
+ else
+ aColor = rStyleSettings.GetButtonTextColor();
+ SetTextColor(aColor);
+ SetTextFillColor();
+
+ Resize();
+ Invalidate();
+ }
+ break;
+ }
+}
+
+
+
+
+::Window* PaneDockingWindow::GetContentWindow (void)
+{
+ return mpContentWindow.get();
+}
+
+
+
+
+::boost::shared_ptr<ToolBox> PaneDockingWindow::GetTitleToolBox (void) const
+{
+ return mpTitleToolBox;
+}
+
+
+} // end of namespace ::sd