/**************************************************************
 *
 * 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 <svx/svxids.hrc>
#include "bibliography.hrc"
#include "toolbar.hrc"
#include "svx/svxcommands.h"

#define MASKCOLOR	MaskColor = Color { Red = 0xFFFF; Green = 0x0000; Blue = 0xFFFF; };

ToolBox RID_BIB_TOOLBAR
{
	HelpId = HID_BIB_DB_TBX ;
	Sizeable = TRUE ;
	HideWhenDeactivate = TRUE ;
	LineSpacing = TRUE ;
	Border = TRUE ;
	SVLook = TRUE ;
	Pos = MAP_APPFONT ( 0, 0 ) ;
	Size = MAP_APPFONT ( 200, 16 ) ;
	ButtonType = BUTTON_SYMBOL ;
	ItemList =
	{
		ToolBoxItem
		{
			Identifier = TBC_FT_SOURCE ;
			Text [ en-US ] = "Table" ;
		};
		ToolBoxItem
		{
			Identifier = TBC_LB_SOURCE ;
			HelpID = HID_BIB_TBX_TABLE ;
			Command = ".uno:Bib/source" ;
		};
		ToolBoxItem
		{
			Type = TOOLBOXITEM_SEPARATOR ;
		};

		ToolBoxItem
		{
			Identifier = TBC_FT_QUERY ;
			Text [ en-US ] = "Search Key" ;
		};
		ToolBoxItem
		{
			Identifier = TBC_ED_QUERY ;
			HelpID = HID_BIB_TBX_SEARCH ;
			Command = ".uno:Bib/query" ;
		};
		ToolBoxItem
		{
			Type = TOOLBOXITEM_SEPARATOR ;
		};

		ToolBoxItem
		{
			Identifier = TBC_BT_AUTOFILTER ;
			HelpID = HID_BIB_TBX_AUTOFILTER ;
//			ItemBitmap = Bitmap {File = "sc10716.png" ;} ;
			DropDown = TRUE ;
			Command = ".uno:Bib/autoFilter" ;
			Text [ en-US ] = "AutoFilter" ;
		};

		ToolBoxItem
		{
			Identifier = TBC_BT_FILTERCRIT ;
//			ItemBitmap = Bitmap {File = "sc10715.png" ;} ;
			Command = ".uno:Bib/standardFilter" ;
			Text [ en-US ] = "Standard Filter" ;
		};

		ToolBoxItem
		{
			Identifier = TBC_BT_REMOVEFILTER ;
//			ItemBitmap = Bitmap {File = "sc10711.png" ;} ;
			Command = ".uno:Bib/removeFilter" ;
			Text [ en-US ] = "Remove Filter" ;
		};
		ToolBoxItem
		{
			Identifier = TBC_BT_COL_ASSIGN ;
			HelpId = HID_BIB_MAPPINGDLG ;
//			Command = ".uno:Bib/Mapping" ;
//			ItemBitmap = Bitmap {File = "sc10711.png" ;} ;
			Text [ en-US ] = "Column Arrangement" ;
		};
		ToolBoxItem
		{
			Identifier = TBC_BT_CHANGESOURCE ;
			HelpId = HID_BIB_CHANGESOURCE;
			Command = ".uno:Bib/sdbsource" ;
//			ItemBitmap = Bitmap {File = "sc10711.png" ;} ;
			Checkable=TRUE;
			Text [ en-US ] = "Data Source" ;
		};
	};
	Scroll = TRUE ;
};
#define BIB_IMAGES \
	IdList =									\
	{											\
		SID_FM_AUTOFILTER; /*10716*/			\
		SID_FM_FILTERCRIT; /*10715*/			\
		SID_FM_REMOVE_FILTER_SORT; /*10711*/	\
	};											\
	IdCount = { 3; };

ImageList RID_TOOLBAR_IMGLIST
{
	Prefix = "sc" ;
	MASKCOLOR
	BIB_IMAGES
};
ImageList RID_TOOLBAR_IMGLIST_HC
{
	Prefix = "sch" ;
	MASKCOLOR
	BIB_IMAGES
};

ImageList RID_TOOLBAR_BIGIMGLIST
{
	Prefix = "lc" ;
	MASKCOLOR
	BIB_IMAGES
};
ImageList RID_TOOLBAR_BIGIMGLIST_HC
{
	Prefix = "lch" ;
	MASKCOLOR
	BIB_IMAGES
};

// ********************************************************************** EOF
