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



#ifndef _EXTENSIONS_DBP_DBPRESID_HRC_
#include "dbpresid.hrc"
#endif

TabPage RID_PAGE_LCW_CONTENTSELECTION_TABLE
{
    HelpID = "extensions:TabPage:RID_PAGE_LCW_CONTENTSELECTION_TABLE";
	SVLook = TRUE ;
	Size = MAP_APPFONT ( WINDOW_SIZE_X , WINDOW_SIZE_Y ) ;

	Text [ en-US ] = "Table Selection";

	FixedLine FL_FRAME
	{
		Pos = MAP_APPFONT ( 4 , 40  ) ;
		Size = MAP_APPFONT ( WINDOW_SIZE_X - 8 , 8 ) ;
		Text [ en-US ] = "Control";
	};

	FixedText FT_SELECTTABLE_LABEL
	{
		Pos = MAP_APPFONT ( 7 , 52  ) ;
		Size = MAP_APPFONT ( 120, WINDOW_SIZE_Y - 21 ) ;
		WordBreak = TRUE;
		Group = TRUE;
		Text [ en-US ] = "On the right side, you see all the tables from the data source of the form.\n\n\nChoose the table from which the data should be used as basis for the list content:";
	};
	ListBox LB_SELECTTABLE
	{
	    HelpID = "extensions:ListBox:RID_PAGE_LCW_CONTENTSELECTION_TABLE:LB_SELECTTABLE";
		Pos = MAP_APPFONT ( 130 , 52  ) ;
		Size = MAP_APPFONT ( WINDOW_SIZE_X - 130 - 7, WINDOW_SIZE_Y - 52 - 6 ) ;
		SVLook = TRUE ;
		Border = TRUE ;
		AutoHScroll = TRUE ;
		Sort = FALSE;
		DropDown = FALSE;
	};
};

TabPage RID_PAGE_LCW_CONTENTSELECTION_FIELD
{
    HelpID = "extensions:TabPage:RID_PAGE_LCW_CONTENTSELECTION_FIELD";
	SVLook = TRUE ;
	Size = MAP_APPFONT ( WINDOW_SIZE_X , WINDOW_SIZE_Y ) ;

	Text [ en-US ] = "Field Selection";

	FixedLine FL_FRAME
	{
		Pos = MAP_APPFONT ( 4 , 3  ) ;
		Size = MAP_APPFONT ( WINDOW_SIZE_X - 8 , 8 ) ;
	};

	FixedText FT_TABLEFIELDS
	{
		Pos = MAP_APPFONT ( 7 , 15  ) ;
		Size = MAP_APPFONT ( WINDOW_HALF_SIZE_X - 3, 8 ) ;
		WordBreak = TRUE;
		Group = TRUE;
		Text [ en-US ] = "Existing fields";
	};
	ListBox LB_SELECTFIELD
	{
	    HelpID = "extensions:ListBox:RID_PAGE_LCW_CONTENTSELECTION_FIELD:LB_SELECTFIELD";
		Pos = MAP_APPFONT ( 7 , 26  ) ;
		Size = MAP_APPFONT ( WINDOW_HALF_SIZE_X - 10, WINDOW_SIZE_Y - 32 ) ;
		SVLook = TRUE ;
		Border = TRUE ;
		AutoHScroll = TRUE ;
		Sort = FALSE;
		DropDown = FALSE;
	};
	FixedText FT_DISPLAYEDFIELD
	{
		Pos = MAP_APPFONT ( WINDOW_HALF_SIZE_X + 3 , 15  ) ;
		Size = MAP_APPFONT ( WINDOW_HALF_SIZE_X - 10, 8 ) ;
		Text [ en-US ] = "Display field";
	};
	Edit ET_DISPLAYEDFIELD
	{
	    HelpID = "extensions:Edit:RID_PAGE_LCW_CONTENTSELECTION_FIELD:ET_DISPLAYEDFIELD";
		Pos = MAP_APPFONT ( WINDOW_HALF_SIZE_X + 3 , 26  ) ;
		Size = MAP_APPFONT ( WINDOW_HALF_SIZE_X - 10, 12 ) ;
		SVLook = TRUE ;
		Border = TRUE ;
		ReadOnly = TRUE;
	};
	FixedText FT_CONTENTFIELD_INFO
	{
		Pos = MAP_APPFONT ( WINDOW_HALF_SIZE_X + 3 , 45  ) ;
		Size = MAP_APPFONT ( WINDOW_HALF_SIZE_X - 10, WINDOW_SIZE_Y - 51 ) ;
		WordBreak = TRUE;
	};
	String STR_FIELDINFO_COMBOBOX
	{
		Text [ en-US ] = "The contents of the field selected will be shown in the combo box list.";
	};

	String STR_FIELDINFO_LISTBOX
	{
		Text [ en-US ] = "The contents of the selected field will be shown in the list box if the linked fields are identical.";
	};
};

TabPage RID_PAGE_LCW_FIELDLINK
{
    HelpID = "extensions:TabPage:RID_PAGE_LCW_FIELDLINK";
	SVLook = TRUE ;
	Size = MAP_APPFONT ( WINDOW_SIZE_X , WINDOW_SIZE_Y ) ;

	Text [ en-US ] = "Field Link";

	FixedText FT_FIELDLINK_DESC
	{
		Pos = MAP_APPFONT ( 7 , 6  ) ;
		Size = MAP_APPFONT ( WINDOW_SIZE_X - 14 , 16 ) ;
		WordBreak = TRUE;
		Text [ en-US ] = "This is where you select fields with matching contents so that the value from the display field will be shown.";
	};
	FixedLine FL_FRAME
	{
		Pos = MAP_APPFONT ( 4 , 25  ) ;
		Size = MAP_APPFONT ( WINDOW_SIZE_X - 8 , 8 ) ;
	};
	FixedText FT_VALUELISTFIELD
	{
		Pos = MAP_APPFONT ( 7 , 37  ) ;
		Size = MAP_APPFONT ( WINDOW_HALF_SIZE_X - 10, 8 ) ;
		Group = TRUE;
		Text [ en-US ] = "Field from the ~Value Table";
	};
	ComboBox CMB_VALUELISTFIELD
	{
	    HelpID = "extensions:ComboBox:RID_PAGE_LCW_FIELDLINK:CMB_VALUELISTFIELD";
		Pos = MAP_APPFONT ( 7 , 48  ) ;
		Size = MAP_APPFONT ( WINDOW_HALF_SIZE_X - 10, WINDOW_SIZE_Y - 54 ) ;
		SVLook = TRUE ;
		Border = TRUE ;
		DropDown = FALSE;
		Sort = FALSE;
		AutoHScroll = TRUE;
	};
	FixedText FT_TABLEFIELD
	{
		Pos = MAP_APPFONT ( WINDOW_HALF_SIZE_X + 3 , 37 ) ;
		Size = MAP_APPFONT ( WINDOW_HALF_SIZE_X - 10, 8 ) ;
		Group = TRUE;
		Text [ en-US ] = "Field from the ~List Table";
	};
	ComboBox CMB_TABLEFIELD
	{
	    HelpID = "extensions:ComboBox:RID_PAGE_LCW_FIELDLINK:CMB_TABLEFIELD";
		Pos = MAP_APPFONT ( WINDOW_HALF_SIZE_X + 3 , 48 ) ;
		Size = MAP_APPFONT ( WINDOW_HALF_SIZE_X - 10, WINDOW_SIZE_Y - 54 ) ;
		SVLook = TRUE ;
		Border = TRUE ;
		DropDown = FALSE;
		Sort = FALSE;
		AutoHScroll = TRUE;
	};
};

String RID_STR_COMBOWIZ_DBFIELD
{
	Text [ en-US ] = "You can either save the value of the combo box in a database field or use it for display purposes.";
};

















