blob: 074fef3912ee34de57ad108a4824f8b53de7f645 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#include "precompiled_sfx2.hxx"
#include "TitleBar.hxx"
#include "Paint.hxx"
#include "Accessible.hxx"
#include "AccessibleTitleBar.hxx"
#include <tools/svborder.hxx>
#include <vcl/gradient.hxx>
#include <vcl/lineinfo.hxx>
#include <com/sun/star/accessibility/AccessibleRole.hpp>
ToolbarValue::~ToolbarValue (void) {}
namespace
{
const static sal_Int32 gnLeftIconSpace (3);
const static sal_Int32 gnRightIconSpace (3);
}
namespace sfx2 { namespace sidebar {
TitleBar::TitleBar (
const ::rtl::OUString& rsTitle,
Window* pParentWindow,
const sidebar::Paint& rInitialBackgroundPaint)
: Window(pParentWindow),
maToolBox(this),
msTitle(rsTitle),
maIcon()
{
SetBackground(rInitialBackgroundPaint.GetWallpaper());
maToolBox.SetSelectHdl(LINK(this, TitleBar, SelectionHandler));
}
TitleBar::~TitleBar (void)
{
}
void TitleBar::SetTitle (const ::rtl::OUString& rsTitle)
{
msTitle = rsTitle;
Invalidate();
}
void TitleBar::SetIcon (const Image& rIcon)
{
maIcon = rIcon;
Invalidate();
}
void TitleBar::Paint (const Rectangle& rUpdateArea)
{
(void)rUpdateArea;
// Paint title bar background.
Size aWindowSize (GetOutputSizePixel());
Rectangle aTitleBarBox(
0,
0,
aWindowSize.Width(),
aWindowSize.Height()
);
PaintDecoration(aTitleBarBox);
const Rectangle aTitleBox (GetTitleArea(aTitleBarBox));
PaintTitle(aTitleBox);
PaintFocus(aTitleBox);
}
void TitleBar::DataChanged (const DataChangedEvent& rEvent)
{
(void)rEvent;
SetBackground(GetBackgroundPaint().GetWallpaper());
}
void TitleBar::SetPosSizePixel (
long nX,
long nY,
long nWidth,
long nHeight,
sal_uInt16 nFlags)
{
Window::SetPosSizePixel(nX,nY,nWidth,nHeight,nFlags);
// Place the toolbox.
const sal_Int32 nToolBoxWidth (maToolBox.GetItemPosRect(0).GetWidth());
maToolBox.SetPosSizePixel(nWidth-nToolBoxWidth,0, nToolBoxWidth,nHeight, WINDOW_POSSIZE_POSSIZE);
maToolBox.Show();
}
ToolBox& TitleBar::GetToolBox (void)
{
return maToolBox;
}
const ToolBox& TitleBar::GetToolBox (void) const
{
return maToolBox;
}
void TitleBar::HandleToolBoxItemClick (const sal_uInt16 nItemIndex)
{
(void)nItemIndex;
// Any real processing has to be done in derived class.
}
cssu::Reference<css::accessibility::XAccessible> TitleBar::CreateAccessible (void)
{
SetAccessibleRole(css::accessibility::AccessibleRole::PANEL);
return AccessibleTitleBar::Create(*this);
}
void TitleBar::PaintTitle (const Rectangle& rTitleBox)
{
Push(PUSH_FONT | PUSH_TEXTCOLOR);
Rectangle aTitleBox (rTitleBox);
// When there is an icon then paint it at the left of the given
// box.
if ( !! maIcon)
{
DrawImage(
Point(
aTitleBox.Left() + gnLeftIconSpace,
aTitleBox.Top() + (aTitleBox.GetHeight()-maIcon.GetSizePixel().Height())/2),
maIcon);
aTitleBox.Left() += gnLeftIconSpace + maIcon.GetSizePixel().Width() + gnRightIconSpace;
}
Font aFont(GetFont());
aFont.SetWeight(WEIGHT_BOLD);
SetFont(aFont);
// Paint title bar text.
SetTextColor(GetTextColor());
DrawText(
aTitleBox,
msTitle,
TEXT_DRAW_LEFT | TEXT_DRAW_VCENTER);
Pop();
}
void TitleBar::PaintFocus (const Rectangle& rFocusBox)
{
Push(PUSH_FONT | PUSH_TEXTCOLOR);
Font aFont(GetFont());
aFont.SetWeight(WEIGHT_BOLD);
SetFont(aFont);
const Rectangle aTextBox (
GetTextRect(
rFocusBox,
msTitle,
TEXT_DRAW_LEFT | TEXT_DRAW_VCENTER));
const Rectangle aLargerTextBox (
aTextBox.Left() - 2,
aTextBox.Top() - 2,
aTextBox.Right() + 2,
aTextBox.Bottom() + 2);
if (HasFocus())
Window::ShowFocus(aLargerTextBox);
else
Window::HideFocus();
Pop();
}
IMPL_LINK(TitleBar, SelectionHandler, ToolBox*, pToolBox)
{
(void)pToolBox;
OSL_ASSERT(&maToolBox==pToolBox);
const sal_uInt16 nItemId (maToolBox.GetHighlightItemId());
HandleToolBoxItemClick(nItemId);
return sal_True;
}
} } // end of namespace sfx2::sidebar