/**************************************************************
 *
 * 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 <svtools/controldims.hrc>
#include <cuires.hrc>
#include "helpid.hrc"
#include "grfflt.hrc"
#include <svx/dialogs.hrc>

// --------------------
// - DLG_FILTERMOSAIC -
// --------------------

ModalDialog RID_SVX_GRFFILTER_DLG_MOSAIC
{
	HelpID = CMD_SID_GRFFILTER_MOSAIC ;
	OutputSize = TRUE ;
	Moveable = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 250, 100 ) ;

	Text [ en-US ] = "Mosaic" ;

	FixedLine FL_PARAMETER
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 182, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Parameters" ;
	};
	Control CTL_PREVIEW
	{
		Pos = MAP_APPFONT ( 104, 3 + RSC_CD_FIXEDLINE_HEIGHT + RSC_SP_FLGR_INNERBORDER_TOP ) ;
		Size = MAP_APPFONT ( 81, 73 ) ;
	};
#define MA_Y0	3 + RSC_CD_FIXEDLINE_HEIGHT + RSC_SP_FLGR_INNERBORDER_TOP
	FixedText DLG_FILTERMOSAIC_FT_WIDTH
	{
		Pos = MAP_APPFONT ( 12, MA_Y0 ) ;
		Size = MAP_APPFONT ( 77, 10 ) ;
		Text [ en-US ] = "~Width" ;
	};
#define MA_Y1	MA_Y0 + RSC_CD_FIXEDTEXT_HEIGHT + RSC_SP_CTRL_DESC_Y
	MetricField DLG_FILTERMOSAIC_MTR_WIDTH
	{
		HelpID = "cui:MetricField:RID_SVX_GRFFILTER_DLG_MOSAIC:DLG_FILTERMOSAIC_MTR_WIDTH" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 12, MA_Y1 ) ;
		Size = MAP_APPFONT ( 35, 12 ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 1 ;
		Maximum = 999 ;
		StrictFormat = TRUE ;
		Unit = FUNIT_CUSTOM ;
		CustomUnitText = " Pixel" ;
		First = 1 ;
		Last = 999 ;
		SpinSize = 1 ;
	};
#define MA_Y2	MA_Y1 + RSC_CD_TEXTBOX_HEIGHT + RSC_SP_CTRL_GROUP_Y
	FixedText DLG_FILTERMOSAIC_FT_HEIGHT
	{
		Pos = MAP_APPFONT ( 12, MA_Y2 ) ;
		Size = MAP_APPFONT ( 77, 10 ) ;
		Text [ en-US ] = "H~eight" ;
	};
#define MA_Y3	MA_Y2 + RSC_CD_FIXEDTEXT_HEIGHT + RSC_SP_CTRL_DESC_Y
	MetricField DLG_FILTERMOSAIC_MTR_HEIGHT
	{
		HelpID = "cui:MetricField:RID_SVX_GRFFILTER_DLG_MOSAIC:DLG_FILTERMOSAIC_MTR_HEIGHT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 12, MA_Y3 ) ;
		Size = MAP_APPFONT ( 35, 12 ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 1 ;
		Maximum = 999 ;
		StrictFormat = TRUE ;
		Unit = FUNIT_CUSTOM ;
		CustomUnitText = " Pixel" ;
		First = 1 ;
		Last = 999 ;
		SpinSize = 1 ;
	};
#define MA_Y4	MA_Y3 + RSC_CD_TEXTBOX_HEIGHT + RSC_SP_CTRL_Y
	CheckBox DLG_FILTERMOSAIC_CBX_EDGES
	{
		HelpID = "cui:CheckBox:RID_SVX_GRFFILTER_DLG_MOSAIC:DLG_FILTERMOSAIC_CBX_EDGES" ;
		Pos = MAP_APPFONT ( 12, MA_Y4 ) ;
		Size = MAP_APPFONT ( 91, 12 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "E~nhance edges" ;
	};
	OKButton BTN_OK
	{
		Pos = MAP_APPFONT ( 194, 6 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton BTN_CANCEL
	{
		Pos = MAP_APPFONT ( 194, 23 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( 194, 43 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
};

// ----------------------
// - DLG_FILTERSOLARIZE -
// ----------------------

ModalDialog RID_SVX_GRFFILTER_DLG_SOLARIZE
{
	HelpID = CMD_SID_GRFFILTER_SOLARIZE ;
	OutputSize = TRUE ;
	Moveable = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 250, 100 ) ;

	Text [ en-US ] = "Solarization" ;

	FixedLine FL_PARAMETER
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 182, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Parameters" ;
	};
	Control CTL_PREVIEW
	{
		Pos = MAP_APPFONT ( 104, 3 + RSC_CD_FIXEDLINE_HEIGHT + RSC_SP_FLGR_INNERBORDER_TOP ) ;
		Size = MAP_APPFONT ( 81, 73 ) ;
	};
#define MA_Y5	3 + RSC_CD_FIXEDLINE_HEIGHT + RSC_SP_FLGR_INNERBORDER_TOP
	FixedText DLG_FILTERSOLARIZE_FT_THRESHOLD
	{
		Pos = MAP_APPFONT ( 12, MA_Y5 ) ;
		Size = MAP_APPFONT ( 77, 10 ) ;
		Text [ en-US ] = "Threshold ~value" ;
	};
#define MA_Y6	MA_Y5 + RSC_CD_FIXEDTEXT_HEIGHT + RSC_SP_CTRL_DESC_Y
	MetricField DLG_FILTERSOLARIZE_MTR_THRESHOLD
	{
		HelpID = "cui:MetricField:RID_SVX_GRFFILTER_DLG_SOLARIZE:DLG_FILTERSOLARIZE_MTR_THRESHOLD" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 12, MA_Y6 ) ;
		Size = MAP_APPFONT ( 35, 12 ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Maximum = 100 ;
		StrictFormat = TRUE ;
		Unit = FUNIT_PERCENT ;
		Last = 100 ;
		SpinSize = 1 ;
	};
#define MA_Y7	MA_Y6 + RSC_CD_TEXTBOX_HEIGHT + RSC_SP_CTRL_GROUP_Y
	CheckBox DLG_FILTERSOLARIZE_CBX_INVERT
	{
		HelpID = "cui:CheckBox:RID_SVX_GRFFILTER_DLG_SOLARIZE:DLG_FILTERSOLARIZE_CBX_INVERT" ;
		Pos = MAP_APPFONT ( 12, 46 ) ;
		Size = MAP_APPFONT ( 77, 12 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~Invert" ;
	};
	OKButton BTN_OK
	{
		Pos = MAP_APPFONT ( 194, 6 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton BTN_CANCEL
	{
		Pos = MAP_APPFONT ( 194, 23 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( 194, 43 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
};

// ----------------------
// - DLG_FILTERSOLARIZE -
// ----------------------

ModalDialog RID_SVX_GRFFILTER_DLG_SEPIA
{
	HelpID = CMD_SID_GRFFILTER_SEPIA ;
	OutputSize = TRUE ;
	Moveable = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 250, 100 ) ;

	Text [ en-US ] = "Aging" ;

	FixedLine FL_PARAMETER
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 182, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Parameters" ;
	};
	Control CTL_PREVIEW
	{
		Pos = MAP_APPFONT ( 104, 3 + RSC_CD_FIXEDLINE_HEIGHT + RSC_SP_FLGR_INNERBORDER_TOP ) ;
		Size = MAP_APPFONT ( 81, 73 ) ;
	};
#define MA_Y8	3 + RSC_CD_FIXEDLINE_HEIGHT + RSC_SP_FLGR_INNERBORDER_TOP
	FixedText DLG_FILTERSEPIA_FT_SEPIA
	{
		Pos = MAP_APPFONT ( 12, MA_Y8 ) ;
		Size = MAP_APPFONT ( 77, 10 ) ;
		Text [ en-US ] = "Aging degree" ;
	};
#define MA_Y9	MA_Y8 + RSC_CD_FIXEDTEXT_HEIGHT + RSC_SP_CTRL_DESC_Y
	MetricField DLG_FILTERSEPIA_MTR_SEPIA
	{
		HelpID = "cui:MetricField:RID_SVX_GRFFILTER_DLG_SEPIA:DLG_FILTERSEPIA_MTR_SEPIA" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 12, MA_Y9 ) ;
		Size = MAP_APPFONT ( 35, 12 ) ;
		TabStop = TRUE ;
		Right = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 1 ;
		Maximum = 100 ;
		StrictFormat = TRUE ;
		Unit = FUNIT_PERCENT ;
		First = 1 ;
		Last = 100 ;
		SpinSize = 1 ;
	};
	OKButton BTN_OK
	{
		Pos = MAP_APPFONT ( 194, 6 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton BTN_CANCEL
	{
		Pos = MAP_APPFONT ( 194, 23 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( 194, 43 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
};

// --------------------
// - DLG_FILTERPOSTER -
// --------------------

ModalDialog RID_SVX_GRFFILTER_DLG_POSTER
{
	HelpID = CMD_SID_GRFFILTER_POSTER ;
	OutputSize = TRUE ;
	Moveable = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 250, 100 ) ;

	Text [ en-US ] = "Posterize" ;

	FixedLine FL_PARAMETER
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 182, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Parameters" ;
	};
	Control CTL_PREVIEW
	{
		Pos = MAP_APPFONT ( 104, 3 + RSC_CD_FIXEDLINE_HEIGHT + RSC_SP_FLGR_INNERBORDER_TOP ) ;
		Size = MAP_APPFONT ( 81, 73 ) ;
	};
#define MA_Y10	3 + RSC_CD_FIXEDLINE_HEIGHT + RSC_SP_FLGR_INNERBORDER_TOP
	FixedText DLG_FILTERPOSTER_FT_POSTER
	{
		Pos = MAP_APPFONT ( 12, MA_Y10 ) ;
		Size = MAP_APPFONT ( 77, 10 ) ;
		Text [ en-US ] = "Poster colors" ;
	};
#define MA_Y11	MA_Y10 + RSC_CD_FIXEDTEXT_HEIGHT + RSC_SP_CTRL_DESC_Y
	NumericField DLG_FILTERPOSTER_NUM_POSTER
	{
		HelpID = "cui:NumericField:RID_SVX_GRFFILTER_DLG_POSTER:DLG_FILTERPOSTER_NUM_POSTER" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 12, MA_Y11 ) ;
		Size = MAP_APPFONT ( 35, 12 ) ;
		TabStop = TRUE ;
		Repeat = TRUE ;
		Spin = TRUE ;
		Minimum = 2 ;
		Maximum = 64 ;
		StrictFormat = TRUE ;
		First = 2 ;
		Last = 64 ;
		SpinSize = 1 ;
	};
	OKButton BTN_OK
	{
		Pos = MAP_APPFONT ( 194, 6 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton BTN_CANCEL
	{
		Pos = MAP_APPFONT ( 194, 23 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( 194, 43 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
};

// --------------------
// - DLG_FILTEREMBOSS -
// --------------------

TabPage RID_SVX_GRFFILTER_DLG_EMBOSS_TAB
{
	HelpID = "cui:TabPage:RID_SVX_GRFFILTER_DLG_EMBOSS_TAB" ;
	Pos = MAP_APPFONT ( 0, 0 ) ;
	Size = MAP_APPFONT ( 0, 0 ) ;
};

ModalDialog RID_SVX_GRFFILTER_DLG_EMBOSS
{
	HelpID = CMD_SID_GRFFILTER_EMBOSS ;
	OutputSize = TRUE ;
	Moveable = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 250, 100 ) ;

	Text [ en-US ] = "Relief" ;

	FixedLine FL_PARAMETER
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 182, RSC_CD_FIXEDLINE_HEIGHT ) ;
		Text [ en-US ] = "Parameters" ;
	};
	Control CTL_PREVIEW
	{
		Pos = MAP_APPFONT ( 104, 3 + RSC_CD_FIXEDLINE_HEIGHT + RSC_SP_FLGR_INNERBORDER_TOP ) ;
		Size = MAP_APPFONT ( 81, 73 ) ;
	};
#define MA_Y12	3 + RSC_CD_FIXEDLINE_HEIGHT + RSC_SP_FLGR_INNERBORDER_TOP
	FixedText DLG_FILTEREMBOSS_FT_LIGHT
	{
		Pos = MAP_APPFONT ( 12, MA_Y12 ) ;
		Size = MAP_APPFONT ( 77, 10 ) ;
		Text [ en-US ] = "Light source" ;
	};
#define MA_Y13	MA_Y12 + RSC_CD_FIXEDTEXT_HEIGHT + RSC_SP_CTRL_DESC_Y
	Control DLG_FILTEREMBOSS_CTL_LIGHT
	{
		HelpID = HID_GRFFILTER_EMBOSS_LIGHT ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 12, MA_Y13 ) ;
		Size = MAP_APPFONT ( 77, 60 ) ;
		TabStop = TRUE ;
	};
	OKButton BTN_OK
	{
		Pos = MAP_APPFONT ( 194, 6 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton BTN_CANCEL
	{
		Pos = MAP_APPFONT ( 194, 23 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( 194, 43 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		TabStop = TRUE ;
	};
};

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