blob: c72e8629ead02feef7b2ac69e05b07f0fb7819a6 [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.
*
*************************************************************/
#ifndef SFX_SIDEBAR_TOOLBOX_HXX
#define SFX_SIDEBAR_TOOLBOX_HXX
#include "sfx2/dllapi.h"
#include "vcl/toolbox.hxx"
#include <com/sun/star/frame/XDispatch.hpp>
#include <com/sun/star/frame/XFrame.hpp>
#include <com/sun/star/frame/XToolbarController.hpp>
#include <com/sun/star/util/URL.hpp>
#include <map>
namespace css = ::com::sun::star;
namespace cssu = ::com::sun::star::uno;
namespace sfx2 { namespace sidebar {
/** The sidebar tool box has two responsibilities:
1. Coordinated location, size, and other states with its parent
background window.
2. Create and handle tool bar controller for its items.
*/
class SFX2_DLLPUBLIC SidebarToolBox
: public ToolBox
{
public:
/** Create a new tool box.
When a valid XFrame is given then the tool box will handle its
buttons and drop-downs. Otherwise the caller has to do that.
*/
SidebarToolBox (
Window* pParentWindow,
const ResId& rResId,
const cssu::Reference<css::frame::XFrame>& rxFrame);
SidebarToolBox (
Window* pParentWindow);
virtual ~SidebarToolBox (void);
void SetBorderWindow (const Window* pBorderWindow);
virtual void Paint (const Rectangle& rRect);
virtual Point GetPosPixel (void) const;
virtual void SetPosSizePixel (
long nX,
long nY,
long nWidth,
long nHeight,
sal_uInt16 nFlags);
virtual long Notify (NotifyEvent& rEvent);
cssu::Reference<css::frame::XToolbarController> GetControllerForItemId (
const sal_uInt16 nItemId) const;
sal_uInt16 GetItemIdForSubToolbarName (
const ::rtl::OUString& rsCOmmandName) const;
void SetController (
const sal_uInt16 nItemId,
const cssu::Reference<css::frame::XToolbarController>& rxController,
const ::rtl::OUString& rsCommandName);
private:
bool mbParentIsBorder;
Image maItemSeparator;
class ItemDescriptor
{
public:
cssu::Reference<css::frame::XToolbarController> mxController;
css::util::URL maURL;
rtl::OUString msCurrentCommand;
};
typedef ::std::map<sal_uInt16, ItemDescriptor> ControllerContainer;
ControllerContainer maControllers;
bool mbAreHandlersRegistered;
DECL_LINK(DropDownClickHandler, ToolBox*);
DECL_LINK(ClickHandler, ToolBox*);
DECL_LINK(DoubleClickHandler, ToolBox*);
DECL_LINK(SelectHandler, ToolBox*);
DECL_LINK(Activate, ToolBox*);
DECL_LINK(Deactivate, ToolBox*);
using ToolBox::Activate;
using ToolBox::Deactivate;
using DockingWindow::SetPosSizePixel;
void CreateController (
const sal_uInt16 nItemId,
const cssu::Reference<css::frame::XFrame>& rxFrame,
const sal_Int32 nItemWidth = 0);
void UpdateIcons (
const cssu::Reference<css::frame::XFrame>& rxFrame);
void RegisterHandlers (void);
};
} } // end of namespace sfx2::sidebar
#endif