/**************************************************************
 *
 * 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 ---------------------------------------------------------------
#include "helpid.hrc"
#include "cuires.hrc"
#include "acccfg.hrc"

#define PUSHBUTTON_TEXT_SAVE \
	Text [ en-US ] = "~Save..." ; \

#define PUSHBUTTON_TEXT_RESET \
	Text [ en-US ] = "R~eset" ; \

#define PUSHBUTTON_TEXT_LOAD \
	Text [ en-US ] = "~Load..." ; \

#define PUSHBUTTON_TEXT_REMOVE \
	Text [ en-US ] = "~Delete" ; \

#define PUSHBUTTON_TEXT_CHANGE \
	Text [ en-US ] = "~Modify" ; \

#define PUSHBUTTON_TEXT_NEW \
	Text [ en-US ] = "~New" ; \

#define FIXEDTEXT_TEXT_GROUP \
	Text [ en-US ] = "~Category" ; \

#define FIXEDTEXT_TEXT_FUNCTION \
	Text [ en-US ] = "Function" ; \

#define GROUPBOX_TEXT_FUNCTIONS \
	Text [ en-US ] = "Functions" ; \

// TP_CONFIG_ACCEL -------------------------------------------------------
TabPage RID_SVXPAGE_KEYBOARD
{
	HelpId = HID_CONFIG_ACCEL ;
	Hide = TRUE ;
	Size = MAP_APPFONT ( 273, 258 ) ;
	RadioButton RB_OFFICE
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_KEYBOARD:RB_OFFICE" ;
		Pos = MAP_APPFONT ( 192, 6 ) ;
		Size = MAP_APPFONT ( 75, 10 ) ;
		Text = "%PRODUCTNAME" ;
	};
	RadioButton RB_MODULE
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_KEYBOARD:RB_MODULE" ;
		Pos = MAP_APPFONT ( 192, 19 ) ;
		Size = MAP_APPFONT ( 75, 10 ) ;
		Text = "$(MODULE)" ;
	};
	PushButton BTN_ACC_CHANGE
	{
		HelpID = "cui:PushButton:RID_SVXPAGE_KEYBOARD:BTN_ACC_CHANGE" ;
		Pos = MAP_APPFONT ( 192, 35 ) ;
		Size = MAP_APPFONT ( 75, 14 ) ;
		TabStop = TRUE ;
		PUSHBUTTON_TEXT_CHANGE
	};
	PushButton BTN_ACC_REMOVE
	{
		HelpID = "cui:PushButton:RID_SVXPAGE_KEYBOARD:BTN_ACC_REMOVE" ;
		Pos = MAP_APPFONT ( 192, 52 ) ;
		Size = MAP_APPFONT ( 75, 14 ) ;
		TabStop = TRUE ;
		Group = TRUE ;
		PUSHBUTTON_TEXT_REMOVE
	};
	FixedLine GRP_ACC_KEYBOARD
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 180, 8 ) ;
		Group = TRUE ;
		Text [ en-US ] = "Shortcut keys" ;
	};
	Control BOX_ACC_ENTRIES
	{
		Border = TRUE ;
		Pos = MAP_APPFONT ( 12, 14 ) ;
		Size = MAP_APPFONT ( 174, 120 ) ;
		TabStop = TRUE ;
		Group = TRUE ;
		HelpId = HID_ACCELCONFIG_LISTBOX ;
	};
	FixedLine GRP_ACC_FUNCTIONS
	{
		Pos = MAP_APPFONT ( 6, 140 ) ;
		Size = MAP_APPFONT ( 258, 8 ) ;
		Group = TRUE ;
		GROUPBOX_TEXT_FUNCTIONS
	};
	FixedText TXT_ACC_GROUP
	{
		Pos = MAP_APPFONT ( 12, 151 ) ;
		Size = MAP_APPFONT ( 78, 8 ) ;
		Group = TRUE ;
		Left = TRUE ;
		FIXEDTEXT_TEXT_GROUP
	};
	Control BOX_ACC_GROUP
	{
		Border = TRUE ;
		Pos = MAP_APPFONT ( 12, 161 ) ;
		Size = MAP_APPFONT ( 78, 91 ) ;
		TabStop = TRUE ;
		HelpId = HID_CONFIGGROUP_ACC_LISTBOX ;
	};
	FixedText TXT_ACC_FUNCTION
	{
		Pos = MAP_APPFONT ( 93, 151 ) ;
		Size = MAP_APPFONT ( 88, 8 ) ;
		Left = TRUE ;
		FIXEDTEXT_TEXT_FUNCTION
	};
	Control BOX_ACC_FUNCTION
	{
		Border = TRUE ;
		Pos = MAP_APPFONT ( 93, 161 ) ;
		Size = MAP_APPFONT ( 88, 91 ) ;
		TabStop = TRUE ;
		HelpId = HID_CONFIGFUNCTION_ACC_LISTBOX ;
	};
	FixedText TXT_ACC_KEY
	{
		Pos = MAP_APPFONT ( 184, 151 ) ;
		Size = MAP_APPFONT ( 80, 8 ) ;
		Text [ en-US ] = "~Keys" ;
		Left = TRUE ;
	};
	Control BOX_ACC_KEY
	{
		Border = TRUE ;
		Pos = MAP_APPFONT ( 184, 161 ) ;
		Size = MAP_APPFONT ( 80, 91 ) ;
		TabStop = TRUE ;
	};
	PushButton BTN_LOAD
	{
		HelpID = "cui:PushButton:RID_SVXPAGE_KEYBOARD:BTN_LOAD" ;
		Pos = MAP_APPFONT ( 192, 86 ) ;
		Size = MAP_APPFONT ( 75, 14 ) ;
		TabStop = TRUE ;
		Group = TRUE ;
		PUSHBUTTON_TEXT_LOAD
	};
	PushButton BTN_SAVE
	{
		HelpID = "cui:PushButton:RID_SVXPAGE_KEYBOARD:BTN_SAVE" ;
		Pos = MAP_APPFONT ( 192, 103 ) ;
		Size = MAP_APPFONT ( 75, 14 ) ;
		TabStop = TRUE ;
		Group = TRUE ;
		PUSHBUTTON_TEXT_SAVE
	};
	PushButton BTN_RESET
	{
		HelpID = "cui:PushButton:RID_SVXPAGE_KEYBOARD:BTN_RESET" ;
		Pos = MAP_APPFONT ( 192, 120 ) ;
		Size = MAP_APPFONT ( 75, 14 ) ;
		TabStop = TRUE ;
		Group = TRUE ;
		PUSHBUTTON_TEXT_RESET
	};
	String STR_LOADACCELCONFIG
	{
		Text [ en-US ] = "Load Keyboard Configuration" ;
	};
	String STR_SAVEACCELCONFIG
	{
		Text [ en-US ] = "Save Keyboard Configuration" ;
	};
	String STR_FILTERNAME_CFG
	{
		Text [ en-US ] = "Configuration (*.cfg)" ;
	};
};

Resource RID_SVXPAGE_CONFIGGROUPBOX
{
	String STR_MYMACROS
	{
		Text [ en-US ] = "My Macros" ;
	};
	String STR_PRODMACROS
	{
		Text [ en-US ] = "%PRODUCTNAME Macros" ;
	};
	String STR_BASICMACROS
	{
		Text [ en-US ] = "BASIC Macros" ;
	};
	String STR_DLG_MACROS
	{
		Text [ en-US ] = "%PRODUCTNAME Macros" ;
	};
	String STR_HUMAN_APPNAME
	{
		Text = "%PRODUCTNAME" ;
	};
	String STR_GROUP_STYLES
	{
		Text [ en-US ] = "Styles" ;
	};
	Image IMG_HARDDISK
	{
		ImageBitmap = Bitmap { File = "harddisk_16.png" ; };
	};
	Image IMG_HARDDISK_HC
	{
		ImageBitmap = Bitmap { File = "harddisk_16_h.png" ; };
	};
	Image IMG_LIB
	{
		ImageBitmap = Bitmap { File = "im30820.png" ; };
	};
	Image IMG_LIB_HC
	{
		ImageBitmap = Bitmap { File = "imh30820.png" ; };
	};
	Image IMG_MACRO
	{
		ImageBitmap = Bitmap { File = "im30821.png" ; };
	};
	Image IMG_MACRO_HC
	{
		ImageBitmap = Bitmap { File = "imh30821.png" ; };
	};
	Image IMG_DOC
	{
		ImageBitmap = Bitmap { File = "im30826.png" ; };
	};
	Image IMG_DOC_HC
	{
		ImageBitmap = Bitmap { File = "imh30826.png" ; };
	};
	Image BMP_COLLAPSED
	{
		ImageBitmap = Bitmap
		{
			File = "plus.png" ;
		};
	};
	Image BMP_EXPANDED
	{
		ImageBitmap = Bitmap
		{
			File = "minus.png" ;
		};
	};
	Image BMP_EXPANDED_HC
	{
		ImageBitmap = Bitmap
		{
			File = "minus_h.png" ;
		};
	};
	Image BMP_COLLAPSED_HC
	{
		ImageBitmap = Bitmap
		{
			File = "plus_h.png" ;
		};
	};
};

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