blob: 45d0c1ca19b0b4efe8ffed148829eef20ce35f32 [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 SVX_PROPERTYPANEL_LINEPAGE_HXX
#define SVX_PROPERTYPANEL_LINEPAGE_HXX
#include <svx/xdash.hxx>
#include <vcl/ctrl.hxx>
#include <sfx2/sidebar/SidebarPanelBase.hxx>
#include <sfx2/sidebar/ControllerItem.hxx>
#include <sfx2/sidebar/GridLayouter.hxx>
#include <vcl/fixed.hxx>
#include <vcl/field.hxx>
#include <boost/scoped_ptr.hpp>
#include <boost/scoped_array.hpp>
#include <svx/sidebar/ColorPopup.hxx>
#include "LineWidthPopup.hxx"
namespace svx { class ToolboxButtonColorUpdater; }
class SvxLineColorPage;
class SvxLineStylePage;
class SvxLineWidthPage;
class XLineStyleItem;
class XLineDashItem;
class XLineStartItem;
class XLineEndItem;
class XLineEndList;
class XDashList;
class ListBox;
class ToolBox;
class FloatingWindow;
typedef ::boost::shared_ptr< XLineEndList > XLineEndListSharedPtr;
typedef ::boost::shared_ptr< XDashList > XDashListSharedPtr;
namespace {
#define SIDEBAR_LINE_WIDTH_GLOBAL_VALUE String("PopupPanel_LineWidth", 20, RTL_TEXTENCODING_ASCII_US)
} //end of anonymous namespace
namespace svx { namespace sidebar {
class PopupContainer;
class ColorPopup;
class LineWidthControl;
class LinePropertyPanel
: public Control,
public ::sfx2::sidebar::ControllerItem::ItemUpdateReceiverInterface
{
private:
friend class ::SvxLineStylePage;
friend class ::SvxLineWidthPage;
public:
static LinePropertyPanel* Create(
Window* pParent,
const cssu::Reference<css::frame::XFrame>& rxFrame,
SfxBindings* pBindings);
virtual void DataChanged(
const DataChangedEvent& rEvent);
virtual void NotifyItemUpdate(
const sal_uInt16 nSId,
const SfxItemState eState,
const SfxPoolItem* pState,
const bool bIsEnabled);
SfxBindings* GetBindings();
void SetWidth(long nWidth);
void SetWidthIcon(int n);
void SetWidthIcon();
void EndLineWidthPopupMode (void);
virtual void Resize (void);
private:
//ui controls
::boost::scoped_ptr< FixedText > mpFTWidth;
::boost::scoped_ptr< Window > mpTBWidthBackground;
::boost::scoped_ptr< ToolBox > mpTBWidth;
::boost::scoped_ptr< FixedText > mpFTColor;
::boost::scoped_ptr< Window > mpTBColorBackground;
::boost::scoped_ptr< ToolBox > mpTBColor;
::boost::scoped_ptr< FixedText > mpFTStyle;
::boost::scoped_ptr< ListBox > mpLBStyle;
::boost::scoped_ptr< FixedText > mpFTTrancparency;
::boost::scoped_ptr< MetricField > mpMFTransparent;
::boost::scoped_ptr< FixedText > mpFTArrow;
::boost::scoped_ptr< ListBox > mpLBStart;
::boost::scoped_ptr< ListBox > mpLBEnd;
::boost::scoped_ptr< FixedText > mpFTEdgeStyle;
::boost::scoped_ptr< ListBox > mpLBEdgeStyle;
::boost::scoped_ptr< FixedText > mpFTCapStyle;
::boost::scoped_ptr< ListBox > mpLBCapStyle;
//ControllerItem
::sfx2::sidebar::ControllerItem maStyleControl;
::sfx2::sidebar::ControllerItem maDashControl;
::sfx2::sidebar::ControllerItem maWidthControl;
::sfx2::sidebar::ControllerItem maColorControl;
::sfx2::sidebar::ControllerItem maStartControl;
::sfx2::sidebar::ControllerItem maEndControl;
::sfx2::sidebar::ControllerItem maLineEndListControl;
::sfx2::sidebar::ControllerItem maLineStyleListControl;
::sfx2::sidebar::ControllerItem maTransControl;
::sfx2::sidebar::ControllerItem maEdgeStyle;
::sfx2::sidebar::ControllerItem maCapStyle;
Color maColor;
::boost::scoped_ptr< ::svx::ToolboxButtonColorUpdater > mpColorUpdater;
::boost::scoped_ptr< XLineStyleItem > mpStyleItem;
::boost::scoped_ptr< XLineDashItem > mpDashItem;
sal_uInt16 mnTrans;
SfxMapUnit meMapUnit;
sal_Int32 mnWidthCoreValue;
XLineEndListSharedPtr maLineEndList;
XDashListSharedPtr maLineStyleList;
::boost::scoped_ptr< XLineStartItem > mpStartItem;
::boost::scoped_ptr< XLineEndItem > mpEndItem;
//popup windows
ColorPopup maColorPopup;
LineWidthPopup maLineWidthPopup;
// images from ressource
Image maIMGColor;
Image maIMGNone;
// multi-images
::boost::scoped_array<Image> mpIMGWidthIcon;
::boost::scoped_array<Image> mpIMGWidthIconH; //high contrast
cssu::Reference< css::frame::XFrame > mxFrame;
SfxBindings* mpBindings;
/// bitfield
bool mbColorAvailable : 1;
bool mbWidthValuable : 1;
::sfx2::sidebar::GridLayouter maLayouter;
void SetupIcons(void);
void Initialize();
void FillLineEndList();
void FillLineStyleList();
void SelectEndStyle(bool bStart);
void SelectLineStyle();
DECL_LINK(ImplPopupModeEndHdl, FloatingWindow* );
DECL_LINK(ImplWidthPopupModeEndHdl, FloatingWindow* );
DECL_LINK(ToolboxColorSelectHdl, ToolBox*);
DECL_LINK(ChangeLineStyleHdl, ToolBox*);
DECL_LINK(ToolboxWidthSelectHdl, ToolBox*);
DECL_LINK(ChangeTransparentHdl , void *);
DECL_LINK(ChangeStartHdl, void *);
DECL_LINK(ChangeEndHdl, void *);
DECL_LINK(ChangeEdgeStyleHdl, void *);
DECL_LINK(ChangeCapStyleHdl, void *);
// constructor/destuctor
LinePropertyPanel(
Window* pParent,
const cssu::Reference<css::frame::XFrame>& rxFrame,
SfxBindings* pBindings);
virtual ~LinePropertyPanel(void);
void SetColor(
const String& rsColorName,
const Color aColor);
PopupControl* CreateColorPopupControl (PopupContainer* pParent);
PopupControl* CreateLineWidthPopupControl (PopupContainer* pParent);
};
} } // end of namespace svx::sidebar
#endif
// eof