diff options
Diffstat (limited to 'sfx2/source/sidebar/PanelTitleBar.cxx')
-rw-r--r-- | sfx2/source/sidebar/PanelTitleBar.cxx | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/sfx2/source/sidebar/PanelTitleBar.cxx b/sfx2/source/sidebar/PanelTitleBar.cxx new file mode 100644 index 000000000000..ded65fb8a458 --- /dev/null +++ b/sfx2/source/sidebar/PanelTitleBar.cxx @@ -0,0 +1,185 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +#include "PanelTitleBar.hxx" + +#include "Paint.hxx" +#include "Panel.hxx" +#include "sfx2/sidebar/Theme.hxx" + +#include <tools/svborder.hxx> +#include <vcl/gradient.hxx> +#include <vcl/image.hxx> + +#ifdef DEBUG +#include "Tools.hxx" +#endif + + +namespace sfx2 { namespace sidebar { + + +static const sal_Int32 gaLeftIconPadding (5); +static const sal_Int32 gaRightIconPadding (5); + + +PanelTitleBar::PanelTitleBar ( + const ::rtl::OUString& rsTitle, + Window* pParentWindow, + Panel* pPanel, + const ::boost::function<void(void)>& rMenuAction) + : TitleBar(rsTitle, pParentWindow, GetBackgroundPaint()), + mbIsLeftButtonDown(false), + mpPanel(pPanel), + mnMenuItemIndex(1), + maMenuAction(rMenuAction) +{ + OSL_ASSERT(mpPanel != NULL); + + if (maMenuAction) + { + maToolBox.InsertItem( + mnMenuItemIndex, + Theme::GetImage(Theme::Image_PanelMenu)); + maToolBox.SetOutStyle(TOOLBOX_STYLE_FLAT); + } + +#ifdef DEBUG + SetText(A2S("PanelTitleBar")); +#endif +} + + + + +PanelTitleBar::~PanelTitleBar (void) +{ +} + + + + +Rectangle PanelTitleBar::GetTitleArea (const Rectangle& rTitleBarBox) +{ + if (mpPanel != NULL) + { + Image aImage (mpPanel->IsExpanded() + ? Theme::GetImage(Theme::Image_Expand) + : Theme::GetImage(Theme::Image_Collapse)); + return Rectangle( + aImage.GetSizePixel().Width() + gaLeftIconPadding + gaRightIconPadding, + rTitleBarBox.Top(), + rTitleBarBox.Right(), + rTitleBarBox.Bottom()); + } + else + return rTitleBarBox; +} + + + + +void PanelTitleBar::PaintDecoration (const Rectangle& rTitleBarBox) +{ + (void)rTitleBarBox; + + if (mpPanel != NULL) + { + Image aImage (mpPanel->IsExpanded() + ? Theme::GetImage(Theme::Image_Collapse) + : Theme::GetImage(Theme::Image_Expand)); + const Point aTopLeft ( + gaLeftIconPadding, + (GetSizePixel().Height()-aImage.GetSizePixel().Height())/2); + DrawImage(aTopLeft, aImage); + } +} + + + + +Paint PanelTitleBar::GetBackgroundPaint (void) +{ + return Theme::GetPaint(Theme::Paint_PanelTitleBarBackground); +} + + + + +Color PanelTitleBar::GetTextColor (void) +{ + return Theme::GetColor(Theme::Color_PanelTitleFont); +} + + + + +void PanelTitleBar::HandleToolBoxItemClick (const sal_uInt16 nItemIndex) +{ + if (nItemIndex == mnMenuItemIndex) + if (maMenuAction) + maMenuAction(); +} + + + + +void PanelTitleBar::MouseButtonDown (const MouseEvent& rMouseEvent) +{ + if (rMouseEvent.IsLeft()) + { + mbIsLeftButtonDown = true; + CaptureMouse(); + } +} + + + + +void PanelTitleBar::MouseButtonUp (const MouseEvent& rMouseEvent) +{ + if (IsMouseCaptured()) + ReleaseMouse(); + + if (rMouseEvent.IsLeft()) + { + if (mbIsLeftButtonDown) + { + if (mpPanel != NULL) + { + mpPanel->SetExpanded( ! mpPanel->IsExpanded()); + Invalidate(); + } + } + } + if (mbIsLeftButtonDown) + mbIsLeftButtonDown = false; +} + + + + +void PanelTitleBar::DataChanged (const DataChangedEvent& rEvent) +{ + maToolBox.SetItemImage( + mnMenuItemIndex, + Theme::GetImage(Theme::Image_PanelMenu)); + TitleBar::DataChanged(rEvent); +} + +} } // end of namespace sfx2::sidebar |