/**************************************************************
 *
 * 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 <grid.hrc>

ModalDialog GRID_DIALOG
{
	HelpID = "extensions:ModalDialog:GRID_DIALOG" ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Pos = MAP_APPFONT ( 10, 10 ) ;
	Size = MAP_APPFONT ( 300, 200 ) ;
	Moveable = TRUE ;
	Closeable = TRUE ;

	OKButton GRID_DIALOG_OK_BTN
	{
		Pos = MAP_APPFONT ( 245, 5 ) ;
		Size = MAP_APPFONT ( 50, 15 ) ;
		DefButton = TRUE ;
	};
	CancelButton GRID_DIALOG_CANCEL_BTN
	{
		Pos = MAP_APPFONT ( 245, 25 ) ;
		Size = MAP_APPFONT ( 50, 15 ) ;
	};
	ListBox GRID_DIALOG_TYPE_BOX
	{
		HelpID = "extensions:ListBox:GRID_DIALOG:GRID_DIALOG_TYPE_BOX" ;
		Border = TRUE ;
		Dropdown = TRUE ;
		Pos = MAP_APPFONT ( 245, 45 ) ;
		Size = MAP_APPFONT ( 50, 130 ) ;
	};
	PushButton GRID_DIALOG_RESET_BTN
	{
		HelpID = "extensions:PushButton:GRID_DIALOG:GRID_DIALOG_RESET_BTN" ;
		Pos = MAP_APPFONT ( 245, 65 ) ;
		Size = MAP_APPFONT ( 50, 15 ) ;
		Text [ en-US ] = "Set" ;
	};
	Bitmap GRID_DIALOG_HANDLE_BMP
	{
		File = "handle.png" ;
	};
	String RESET_TYPE_LINEAR_ASCENDING
	{
		Text [ en-US ] = "Linear ascending" ;
	};
	String RESET_TYPE_LINEAR_DESCENDING
	{
		Text [ en-US ] = "Linear descending" ;
	};
	String RESET_TYPE_RESET
	{
		Text [ en-US ] = "Original values" ;
	};
	String RESET_TYPE_EXPONENTIAL
	{
		Text [ en-US ] = "Exponential increasing" ;
	};
};

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