office-gobmx/sd/source/ui/toolpanel/controls/PreviewValueSet.cxx

240 lines
5.3 KiB
C++

/*************************************************************************
*
* 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 "PreviewValueSet.hxx"
#include <vcl/image.hxx>
#include "taskpane/TaskPaneTreeNode.hxx"
namespace sd { namespace toolpanel { namespace controls {
PreviewValueSet::PreviewValueSet (TreeNode* pParent)
: ValueSet (pParent->GetWindow(), WB_TABSTOP),
mpParent(pParent),
maPreviewSize(10,10),
mnBorderWidth(3),
mnBorderHeight(3),
mnMaxColumnCount(-1)
{
SetStyle (
GetStyle()
& ~(WB_ITEMBORDER)// | WB_MENUSTYLEVALUESET)
// | WB_FLATVALUESET);
);
SetColCount(2);
// SetLineCount(1);
SetExtraSpacing (2);
}
PreviewValueSet::~PreviewValueSet (void)
{
}
void PreviewValueSet::SetPreviewSize (const Size& rSize)
{
maPreviewSize = rSize;
}
void PreviewValueSet::SetRightMouseClickHandler (const Link& rLink)
{
maRightMouseClickHandler = rLink;
}
void PreviewValueSet::MouseButtonDown (const MouseEvent& rEvent)
{
if (rEvent.IsRight())
maRightMouseClickHandler.Call(reinterpret_cast<void*>(
&const_cast<MouseEvent&>(rEvent)));
else
ValueSet::MouseButtonDown (rEvent);
}
void PreviewValueSet::Paint (const Rectangle& rRect)
{
SetBackground (GetSettings().GetStyleSettings().GetWindowColor());
ValueSet::Paint (rRect);
SetBackground (Wallpaper());
}
void PreviewValueSet::Resize (void)
{
ValueSet::Resize ();
Size aWindowSize (GetOutputSizePixel());
if (aWindowSize.Width()>0 && aWindowSize.Height()>0)
{
Rearrange();
}
}
void PreviewValueSet::Command (const CommandEvent& rEvent)
{
switch (rEvent.GetCommand())
{
case COMMAND_CONTEXTMENU:
{
CommandEvent aNonConstEventCopy (rEvent);
maContextMenuCallback.Call(&aNonConstEventCopy);
}
break;
default:
ValueSet::Command(rEvent);
break;
}
}
void PreviewValueSet::Rearrange (bool bForceRequestResize)
{
USHORT nOldColumnCount (GetColCount());
USHORT nOldRowCount (GetLineCount());
USHORT nNewColumnCount (CalculateColumnCount (
GetOutputSizePixel().Width()));
USHORT nNewRowCount (CalculateRowCount (nNewColumnCount));
SetColCount(nNewColumnCount);
SetLineCount(nNewRowCount);
if (bForceRequestResize
|| nOldColumnCount != nNewColumnCount
|| nOldRowCount != nNewRowCount)
mpParent->RequestResize();
}
void PreviewValueSet::SetContextMenuCallback (const Link& rLink)
{
maContextMenuCallback = rLink;
}
USHORT PreviewValueSet::CalculateColumnCount (int nWidth) const
{
int nColumnCount = 0;
if (nWidth > 0)
{
nColumnCount = nWidth / (maPreviewSize.Width() + 2*mnBorderWidth);
if (nColumnCount < 1)
nColumnCount = 1;
else if (mnMaxColumnCount>0 && nColumnCount>mnMaxColumnCount)
nColumnCount = mnMaxColumnCount;
}
return (USHORT)nColumnCount;
}
USHORT PreviewValueSet::CalculateRowCount (USHORT nColumnCount) const
{
int nRowCount = 0;
int nItemCount = GetItemCount();
if (nColumnCount > 0)
{
nRowCount = (nItemCount+nColumnCount-1) / nColumnCount;
if (nRowCount < 1)
nRowCount = 1;
}
return (USHORT)nRowCount;
}
sal_Int32 PreviewValueSet::GetPreferredWidth (sal_Int32 nHeight)
{
int nPreferredWidth (maPreviewSize.Width() + 2*mnBorderWidth);
// Get height of each row.
int nItemHeight (maPreviewSize.Height() + 2*mnBorderHeight);
// Calculate the row- and column count and from the later the preferred
// width.
int nRowCount = nHeight / nItemHeight;
if (nRowCount > 0)
{
int nColumnCount = (GetItemCount()+nRowCount-1) / nRowCount;
if (nColumnCount > 0)
nPreferredWidth = (maPreviewSize.Width() + 2*mnBorderWidth)
* nColumnCount;
}
return nPreferredWidth;
}
sal_Int32 PreviewValueSet::GetPreferredHeight (sal_Int32 nWidth)
{
int nRowCount (CalculateRowCount(CalculateColumnCount(nWidth)));
int nItemHeight (maPreviewSize.Height());
return nRowCount * (nItemHeight + 2*mnBorderHeight);
}
} } } // end of namespace ::sd::toolpanel::controls