/**************************************************************
 * 
 * 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 "InsertPropertyPanel.hrc"
#include <sfx2/sidebar/ResourceDefinitions.hrc>
#include "helpid.hrc"                       

#define FIRST_LINE_Y    SECTIONPAGE_MARGIN_VERTICAL_TOP
#define SECOND_LINE_Y   FIRST_LINE_Y + TOOLBOX_ITEM_HEIGHT + CONTROL_SPACING_VERTICAL  + 1

Control RID_SIDEBAR_INSERT_PANEL
{
    OutputSize = TRUE;
	DialogControl = TRUE;
	Border = FALSE;

	Size = MAP_APPFONT(
          PROPERTYPAGE_WIDTH,
          SECTIONPAGE_MARGIN_VERTICAL_TOP 
          + TOOLBOX_ITEM_HEIGHT * 2 
          + CONTROL_SPACING_VERTICAL
          + SECTIONPAGE_MARGIN_VERTICAL_BOT);
	HelpID = HID_SIDEBAR_INSERT_PANEL;
	Text = "Insert";
	
	ToolBox TB_INSERT_STANDARD
	{
		SVLook = TRUE ;
		Pos = MAP_APPFONT (SECTIONPAGE_MARGIN_HORIZONTAL, FIRST_LINE_Y);
		Size = MAP_APPFONT (TOOLBOX_ITEM_WIDTH * 6 + TOOLBOX_ITEM_DD_WIDTH, TOOLBOX_ITEM_HEIGHT) ;
		TabStop = TRUE ;
		HelpID = HID_SIDEBAR_INSERT_TOOLBOX;
		Text = "Insert Shapes";
		ItemList =
		{
			ToolBoxItem
			{
				Identifier = TBI_STANDARD_LINE;
                Command = ".uno:Line";
			};
			ToolBoxItem
			{
				Identifier = TBI_STANDARD_ARROW;
                Command = ".uno:LineArrowEnd";
			};
			ToolBoxItem
			{
				Identifier = TBI_STANDARD_RECTANGLE;
                Command = ".uno:Rect";
			};
			ToolBoxItem
			{
				Identifier = TBI_STANDARD_ELLIPSE;
                Command = ".uno:Ellipse";
			};
			ToolBoxItem
			{
				Identifier = TBI_STANDARD_TEXT;
                Command = ".uno:Text";
			};
			ToolBoxItem
			{
				Identifier = TBI_STANDARD_LINES;
                Command = ".uno:LineToolbox";
			};
			ToolBoxItem
			{
				Identifier = TBI_STANDARD_CONNECTORS;
                Command = ".uno:ConnectorToolbox";
			};
			ToolBoxItem
			{
				Identifier = TBI_STANDARD_ARROWS;
                Command = ".uno:ArrowsToolbox";
                DropDown = TRUE;
			};
        };
    };

	ToolBox TB_INSERT_CUSTOM
	{
		SVLook = TRUE ;
		Pos = MAP_APPFONT (SECTIONPAGE_MARGIN_HORIZONTAL, SECOND_LINE_Y);
		Size = MAP_APPFONT (TOOLBOX_ITEM_DD_WIDTH * 6, TOOLBOX_ITEM_HEIGHT) ;
		TabStop = TRUE ;
		HelpID = HID_SIDEBAR_INSERT_TOOLBOX;
		Text = "Insert";
		ItemList =
		{
			ToolBoxItem
			{
				Identifier = TBI_CUSTOM_BASICS;
                Command = ".uno:BasicShapes";
                DropDown = TRUE;
			};
			ToolBoxItem
			{
				Identifier = TBI_CUSTOM_SYMBOLS;
                Command = ".uno:SymbolShapes";
                DropDown = TRUE;
			};
			ToolBoxItem
			{
				Identifier = TBI_CUSTOM_ARROWS;
                Command = ".uno:ArrowShapes";
                DropDown = TRUE;
			};
			ToolBoxItem
			{
				Identifier = TBI_CUSTOM_FLOWCHARTS;
                Command = ".uno:FlowChartShapes";
                DropDown = TRUE;
            };
			ToolBoxItem
			{
				Identifier = TBI_CUSTOM_CALLOUTS;
                Command = ".uno:CalloutShapes";
                DropDown = TRUE;
			};
			ToolBoxItem
			{
				Identifier = TBI_CUSTOM_STARS;
                Command = ".uno:StarShapes";
                DropDown = TRUE;
			};
		};
	};
};
