2004-07-13 07:49:49 -05:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
2005-09-08 21:49:47 -05:00
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2004-07-13 07:49:49 -05:00
|
|
|
*
|
2005-09-08 21:49:47 -05:00
|
|
|
* $RCSfile: PaneDockingWindow.cxx,v $
|
2004-07-13 07:49:49 -05:00
|
|
|
*
|
2006-12-12 09:57:28 -06:00
|
|
|
* $Revision: 1.14 $
|
2004-07-13 07:49:49 -05:00
|
|
|
*
|
2006-12-12 09:57:28 -06:00
|
|
|
* last change: $Author: kz $ $Date: 2006-12-12 16:57:28 $
|
2004-07-13 07:49:49 -05:00
|
|
|
*
|
2005-09-08 21:49:47 -05:00
|
|
|
* The Contents of this file are made available subject to
|
|
|
|
* the terms of GNU Lesser General Public License Version 2.1.
|
2004-07-13 07:49:49 -05:00
|
|
|
*
|
|
|
|
*
|
2005-09-08 21:49:47 -05:00
|
|
|
* GNU Lesser General Public License Version 2.1
|
|
|
|
* =============================================
|
|
|
|
* Copyright 2005 by Sun Microsystems, Inc.
|
|
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
2004-07-13 07:49:49 -05:00
|
|
|
*
|
2005-09-08 21:49:47 -05:00
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License version 2.1, as published by the Free Software Foundation.
|
2004-07-13 07:49:49 -05:00
|
|
|
*
|
2005-09-08 21:49:47 -05:00
|
|
|
* This library 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 for more details.
|
2004-07-13 07:49:49 -05:00
|
|
|
*
|
2005-09-08 21:49:47 -05:00
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
|
|
* MA 02111-1307 USA
|
2004-07-13 07:49:49 -05:00
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
|
2006-09-16 12:34:23 -05:00
|
|
|
// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
|
|
#include "precompiled_sd.hxx"
|
|
|
|
|
2004-07-13 07:49:49 -05:00
|
|
|
#include "PaneDockingWindow.hxx"
|
|
|
|
#include "Window.hxx"
|
2005-10-24 10:16:03 -05:00
|
|
|
#include "ViewShellBase.hxx"
|
2004-07-13 07:49:49 -05:00
|
|
|
#include "sdresid.hxx"
|
|
|
|
#include "res_bmp.hrc"
|
|
|
|
#ifndef _SFXDISPATCH_HXX
|
|
|
|
#include <sfx2/dispatch.hxx>
|
|
|
|
#endif
|
|
|
|
#include <vcl/toolbox.hxx>
|
2004-11-26 08:14:02 -06:00
|
|
|
#ifndef _SV_TASKPANELIST_HXX
|
|
|
|
#include <vcl/taskpanelist.hxx>
|
|
|
|
#endif
|
2004-07-13 07:49:49 -05:00
|
|
|
|
|
|
|
namespace sd {
|
|
|
|
|
|
|
|
PaneDockingWindow::PaneDockingWindow (
|
2006-12-12 09:57:28 -06:00
|
|
|
SfxBindings *_pBindings,
|
2004-07-13 07:49:49 -05:00
|
|
|
SfxChildWindow *pChildWindow,
|
|
|
|
::Window* pParent,
|
|
|
|
const ResId& rResId,
|
2005-10-24 10:16:03 -05:00
|
|
|
PaneManager::PaneType ePane,
|
|
|
|
const String& rsTitle)
|
2004-07-13 07:49:49 -05:00
|
|
|
: SfxDockingWindow (
|
2006-12-12 09:57:28 -06:00
|
|
|
_pBindings,
|
2004-07-13 07:49:49 -05:00
|
|
|
pChildWindow,
|
|
|
|
pParent,
|
|
|
|
rResId
|
|
|
|
),
|
|
|
|
mePane(ePane),
|
2005-10-24 10:16:03 -05:00
|
|
|
msTitle(rsTitle),
|
2004-07-13 07:49:49 -05:00
|
|
|
mpTitleToolBox(NULL),
|
|
|
|
maBorder (3,1,3,3),
|
|
|
|
mnChildWindowId(pChildWindow->GetType())
|
|
|
|
{
|
|
|
|
SetBackground (Wallpaper());
|
|
|
|
|
2004-11-16 09:11:51 -06:00
|
|
|
InitializeTitleToolBox();
|
2004-07-13 07:49:49 -05:00
|
|
|
|
2004-11-26 08:14:02 -06:00
|
|
|
// 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);
|
2005-05-02 07:17:56 -05:00
|
|
|
|
|
|
|
AddEventListener(LINK(this,PaneDockingWindow,WindowEventListener));
|
2004-07-13 07:49:49 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PaneDockingWindow::~PaneDockingWindow (void)
|
|
|
|
{
|
2005-05-02 07:17:56 -05:00
|
|
|
RemoveEventListener(LINK(this,PaneDockingWindow,WindowEventListener));
|
|
|
|
|
2004-11-26 08:14:02 -06:00
|
|
|
// Tell the next system window that the docking window is no longer
|
|
|
|
// available.
|
|
|
|
SystemWindow* pSystemWindow = GetSystemWindow();
|
|
|
|
if (pSystemWindow != NULL)
|
|
|
|
pSystemWindow->GetTaskPaneList()->RemoveWindow(this);
|
2004-07-13 07:49:49 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2004-09-08 07:42:34 -05:00
|
|
|
void PaneDockingWindow::SetTitle (const String& rsTitle)
|
|
|
|
{
|
|
|
|
msTitle = rsTitle;
|
|
|
|
Invalidate();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2004-07-13 07:49:49 -05:00
|
|
|
void PaneDockingWindow::Resize (void)
|
|
|
|
{
|
|
|
|
SfxDockingWindow::Resize();
|
|
|
|
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 view shell.
|
2004-11-16 09:11:51 -06:00
|
|
|
ViewShellBase* pBase (ViewShellBase::GetViewShellBase(
|
2004-07-13 07:49:49 -05:00
|
|
|
GetBindings().GetDispatcher()->GetFrame()));
|
2004-11-16 09:11:51 -06:00
|
|
|
if (pBase != NULL)
|
2004-07-13 07:49:49 -05:00
|
|
|
{
|
2004-11-16 09:11:51 -06:00
|
|
|
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()));
|
|
|
|
}
|
2004-07-13 07:49:49 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void PaneDockingWindow::Paint (const Rectangle& rRectangle)
|
|
|
|
{
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2004-11-16 09:11:51 -06:00
|
|
|
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().GetMenuBarColor().IsDark()
|
|
|
|
? aImageHC
|
|
|
|
: aImage);
|
|
|
|
mpTitleToolBox->ShowItem (1);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2004-07-13 07:49:49 -05:00
|
|
|
USHORT PaneDockingWindow::AddMenu (
|
|
|
|
const String& rsMenuName,
|
2005-01-31 07:50:51 -06:00
|
|
|
ULONG nHelpId,
|
2004-07-13 07:49:49 -05:00
|
|
|
const Link& rCallback)
|
|
|
|
{
|
|
|
|
// Add the menu before the closer button.
|
2006-12-12 09:57:28 -06:00
|
|
|
USHORT nItemCount (mpTitleToolBox->GetItemCount());
|
|
|
|
USHORT nItemId = (nItemCount+1);
|
2004-07-13 07:49:49 -05:00
|
|
|
mpTitleToolBox->InsertItem (
|
2005-01-31 07:50:51 -06:00
|
|
|
nItemId,
|
2004-07-13 07:49:49 -05:00
|
|
|
rsMenuName,
|
2005-03-15 02:19:16 -06:00
|
|
|
TIB_DROPDOWNONLY,
|
2004-07-13 07:49:49 -05:00
|
|
|
nItemCount-1);
|
2005-01-31 07:50:51 -06:00
|
|
|
mpTitleToolBox->SetHelpId( nItemId, nHelpId );
|
2004-07-13 07:49:49 -05:00
|
|
|
mpTitleToolBox->SetClickHdl (rCallback);
|
2004-08-04 02:53:51 -05:00
|
|
|
mpTitleToolBox->SetDropdownClickHdl (rCallback);
|
2004-07-13 07:49:49 -05:00
|
|
|
|
|
|
|
return nItemCount+1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IMPL_LINK(PaneDockingWindow, ToolboxSelectHandler, ToolBox*, pToolBox)
|
|
|
|
{
|
|
|
|
USHORT nId = pToolBox->GetCurItemId();
|
|
|
|
|
|
|
|
if (nId == 1)
|
|
|
|
{
|
|
|
|
EndTracking();
|
2004-11-16 09:11:51 -06:00
|
|
|
SfxBoolItem aVisibility (mnChildWindowId, FALSE);
|
2004-07-13 07:49:49 -05:00
|
|
|
GetBindings().GetDispatcher()->Execute (
|
|
|
|
mnChildWindowId,
|
2004-11-16 09:11:51 -06:00
|
|
|
SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD,
|
|
|
|
&aVisibility,
|
|
|
|
NULL);
|
2004-07-13 07:49:49 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
long PaneDockingWindow::Notify( NotifyEvent& rNEvt )
|
|
|
|
{
|
|
|
|
return SfxDockingWindow::Notify (rNEvt);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void PaneDockingWindow::StateChanged( StateChangedType nType )
|
|
|
|
{
|
|
|
|
switch (nType)
|
|
|
|
{
|
|
|
|
case STATE_CHANGE_INITSHOW:
|
|
|
|
Resize();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
SfxDockingWindow::StateChanged (nType);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-03-18 09:47:25 -06:00
|
|
|
void PaneDockingWindow::DataChanged (const DataChangedEvent& rEvent)
|
2004-07-13 07:49:49 -05:00
|
|
|
{
|
2005-03-18 09:47:25 -06:00
|
|
|
SfxDockingWindow::DataChanged (rEvent);
|
|
|
|
|
|
|
|
switch (rEvent.GetType())
|
|
|
|
{
|
|
|
|
case DATACHANGED_SETTINGS:
|
2006-12-12 09:57:28 -06:00
|
|
|
if ((rEvent.GetFlags() & SETTINGS_STYLE) == 0)
|
2005-03-18 09:47:25 -06:00
|
|
|
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();
|
2004-07-13 07:49:49 -05:00
|
|
|
|
2005-03-18 09:47:25 -06:00
|
|
|
Resize();
|
|
|
|
Invalidate();
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2004-07-13 07:49:49 -05:00
|
|
|
|
|
|
|
|
2005-05-02 07:17:56 -05:00
|
|
|
|
|
|
|
|
|
|
|
IMPL_LINK(PaneDockingWindow, WindowEventListener, VclSimpleEvent*, pEvent)
|
|
|
|
{
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2004-07-13 07:49:49 -05:00
|
|
|
} // end of namespace ::sd
|