text: /**************************************************************
   * 
   * 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 _SV_TOOLBOX_H
  #define _SV_TOOLBOX_H
  
  #include <tools/gen.hxx>
  #include <tools/string.hxx>
  #include <vcl/sv.h>
  #include <vcl/image.hxx>
  #include <vcl/toolbox.hxx>
  #include <vcl/controllayout.hxx>
  #include <vcl/ImageListProvider.hxx>
  
  #include <vector>
  
  #define TB_DROPDOWNARROWWIDTH   11
  
  #define TB_MENUBUTTON_SIZE      12
  #define TB_MENUBUTTON_OFFSET    2
  
  #define TB_SMALLIMAGESIZE       16
  
  #define TB_LARGEIMAGESIZE            26
  #define TB_LARGEIMAGESIZE_INDUSTRIAL 24
  
  class Window;
  
  // ----------------
  // - ImplToolItem -
  // ----------------
  
  struct ImplToolItem
  {
  	Window* 			mpWindow;
  	void*				mpUserData;
  	Image				maImage;
  	Image				maHighImage;
      long				mnImageAngle;
      bool				mbMirrorMode;
  	XubString			maText;
  	XubString			maQuickHelpText;
  	XubString			maHelpText;
  	String				maCommandStr;
  	rtl::OString		maHelpId;
  	Rectangle			maRect;
  	Rectangle			maCalcRect;
      // the overall horizontal item size, including one or more of [image size + textlength + dropdown arrow]
      Size                maItemSize;     
  	long				mnSepSize;
      long                mnDropDownArrowWidth;
  	ToolBoxItemType 	meType;
  	ToolBoxItemBits 	mnBits;
  	TriState			meState;
  	sal_uInt16				mnId;
  	sal_Bool				mbEnabled:1,
  						mbVisible:1,
  						mbEmptyBtn:1,
  						mbShowWindow:1,
  						mbBreak:1,
                          mbVisibleText:1;    // indicates if text will definitely be drawn, influences dropdown pos
  
  						ImplToolItem();
  						ImplToolItem( sal_uInt16 nItemId, const Image& rImage,
  									  ToolBoxItemBits nItemBits );
  						ImplToolItem( sal_uInt16 nItemId, const XubString& rTxt,
  									  ToolBoxItemBits nItemBits );
  						ImplToolItem( sal_uInt16 nItemId, const Image& rImage,
  									  const XubString& rTxt,
  									  ToolBoxItemBits nItemBits );
  						~ImplToolItem();
  
      ImplToolItem( const ImplToolItem& );
      ImplToolItem& operator=(const ImplToolItem&);
  
      // returns the size of a item, taking toolbox orientation into account
      // the default size is the precomputed size for standard items
      // ie those that are just ordinary buttons (no windows or text etc.)
      // bCheckMaxWidth indicates that item windows must not exceed maxWidth in which case they will be painted as buttons
      Size                GetSize( sal_Bool bHorz, sal_Bool bCheckMaxWidth, long maxWidth, const Size& rDefaultSize );  
  
      // only useful for buttons: returns if the text or image part or both can be drawn according to current button drawing style
      void DetermineButtonDrawStyle( ButtonType eButtonType, sal_Bool& rbImage, sal_Bool& rbText ) const;
  
      // returns the rectangle which contains the drop down arrow
      // or an empty rect if there is none
      // bHorz denotes the toolbox alignment
      Rectangle   GetDropDownRect( sal_Bool bHorz ) const;
  
      // returns sal_True if the toolbar item is currently clipped, which can happen for docked toolbars
      sal_Bool IsClipped() const;
  };
  
  namespace vcl
  {
  
  struct ToolBoxLayoutData : public ControlLayoutData
  {
      std::vector< sal_uInt16 >				m_aLineItemIds;
      std::vector< sal_uInt16 >				m_aLineItemPositions;
  };
  
  
  } /* namespace vcl */
  
  
  struct ImplToolBoxPrivateData
  {
      vcl::ToolBoxLayoutData*			m_pLayoutData;
      std::vector< ImplToolItem >		m_aItems;
  
      ImplToolBoxPrivateData();
      ~ImplToolBoxPrivateData();
  
      void ImplClearLayoutData() { delete m_pLayoutData; m_pLayoutData = NULL; }
  
      // called when dropdown items are clicked
      Link    maDropdownClickHdl;
      Timer	maDropdownTimer; // for opening dropdown items on "long click"
  
      // large or small buttons ?
      ToolBoxButtonSize   meButtonSize;
  
      // the optional custom menu
      PopupMenu*  mpMenu;
      sal_uInt16      maMenuType;
      sal_uIntPtr       mnEventId;
  
      // called when menu button is clicked and before the popup menu is executed
      Link        maMenuButtonHdl; 
  
      // a dummy item representing the custom menu button
      ImplToolItem   maMenubuttonItem;
      long           mnMenuButtonWidth;
      
      Wallpaper   maDisplayBackground;
      
      // support for highcontrast
      vcl::IImageListProvider* mpImageListProvider;
      vcl::ImageListType       meImageListType;
  
      sal_Bool    mbIsLocked:1,           // keeps last lock state from ImplDockingWindowWrapper
              mbAssumeDocked:1,       // only used during calculations to override current floating/popup mode
              mbAssumeFloating:1,
              mbAssumePopupMode:1,
              mbKeyInputDisabled:1,	// no KEY input if all items disabled, closing/docking will be allowed though
              mbIsPaintLocked:1,		// don't allow paints
              mbMenubuttonSelected:1, // menu button is highlighted
              mbPageScroll:1,         // determines if we scroll a page at a time
              mbNativeButtons:1,      // system supports native toolbar buttons
              mbWillUsePopupMode:1,   // this toolbox will be opened in popup mode
              mbDropDownByKeyboard:1; // tells whether a dropdown was started by key input
  };
  
  
  #endif	// _SV_TOOLBOX_H
  