/**************************************************************
 *
 * 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 "grafctrl.hrc"
#include <svx/dialogs.hrc>
#include "helpid.hrc"
#include <svx/svxids.hrc>

FloatingWindow RID_SVXTBX_GRFFILTER
{
	HelpId = HID_GRFFILTER ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	Hide = TRUE ;
	SVLook = TRUE ;
	Text [ en-US ] = "Filters" ;
	ToolBox TBX_GRFFILTER
	{
		SVLook = TRUE ;
		MenuStrings = TRUE ;
		Align = BOXALIGN_TOP ;
		LineCount = 3 ;
		ItemList =
		{
			ToolBoxItem
			{
				Identifier = SID_GRFFILTER_INVERT ;
				HelpID = HID_GRFFILTER_INVERT ;
			};
			ToolBoxItem
			{
				Identifier = SID_GRFFILTER_SMOOTH ;
				HelpID = HID_GRFFILTER_SMOOTH ;
			};
			ToolBoxItem
			{
				Identifier = SID_GRFFILTER_SHARPEN ;
				HelpID = HID_GRFFILTER_SHARPEN ;
			};
			ToolBoxItem
			{
				Identifier = SID_GRFFILTER_REMOVENOISE ;
				HelpID = HID_GRFFILTER_REMOVENOISE ;
			};
			ToolBoxItem
			{
				Type = TOOLBOXITEM_BREAK ;
			};
			ToolBoxItem
			{
				Identifier = SID_GRFFILTER_SOLARIZE ;
				HelpId = HID_GRFFILTER_SOLARIZE ;
			};
			ToolBoxItem
			{
				Identifier = SID_GRFFILTER_SEPIA ;
				HelpId = HID_GRFFILTER_SEPIA ;
			};
			ToolBoxItem
			{
				Identifier = SID_GRFFILTER_POSTER ;
				HelpId = HID_GRFFILTER_POSTER ;
			};
			ToolBoxItem
			{
				Identifier = SID_GRFFILTER_POPART ;
				HelpId = HID_GRFFILTER_POPART ;
			};
			ToolBoxItem
			{
				Type = TOOLBOXITEM_BREAK ;
			};
			ToolBoxItem
			{
				Identifier = SID_GRFFILTER_SOBEL ;
				HelpId = HID_GRFFILTER_SOBEL ;
			};
			ToolBoxItem
			{
				Identifier = SID_GRFFILTER_EMBOSS ;
				HelpId = HID_GRFFILTER_EMBOSS ;
			};
			ToolBoxItem
			{
				Identifier = SID_GRFFILTER_MOSAIC ;
				HelpId = HID_GRFFILTER_MOSAIC ;
			};
		};
	};
};

// -----------
// - Strings -
// -----------

String RID_SVXSTR_UNDO_GRAFMODE
{
	Text [ en-US ] = "Graphics Mode" ;
};
String RID_SVXSTR_UNDO_GRAFRED
{
	Text [ en-US ] = "Red" ;
};
String RID_SVXSTR_UNDO_GRAFGREEN
{
	Text [ en-US ] = "Green" ;
};
String RID_SVXSTR_UNDO_GRAFBLUE
{
	Text [ en-US ] = "Blue" ;
};
String RID_SVXSTR_UNDO_GRAFLUMINANCE
{
	Text [ en-US ] = "Brightness" ;
};
String RID_SVXSTR_UNDO_GRAFCONTRAST
{
	Text [ en-US ] = "Contrast" ;
};
String RID_SVXSTR_UNDO_GRAFGAMMA
{
	Text [ en-US ] = "Gamma" ;
};
String RID_SVXSTR_UNDO_GRAFTRANSPARENCY
{
	Text [ en-US ] = "Transparency" ;
};
String RID_SVXSTR_GRAFCROP
{
	Text [ en-US ] = "Crop" ;
};

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