/**************************************************************
 * 
 * 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 "sc.hrc"
#include "dapitype.hrc"


ModalDialog RID_SCDLG_DAPITYPE
{
	OutputSize = TRUE ;
	HelpId = HID_DATAPILOT_TYPE ;
	SVLook = TRUE ;
    Size = MAP_APPFONT ( 241 , 63 ) ;
	Moveable = TRUE ;
	Closeable = FALSE ;
	OKButton BTN_OK
	{
        Pos = MAP_APPFONT ( 185 , 6 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton BTN_CANCEL
	{
        Pos = MAP_APPFONT ( 185 , 23 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton BTN_HELP
	{
        Pos = MAP_APPFONT ( 185 , 43 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
	};
	RadioButton BTN_SELECTION
	{
	    HelpID = "sc:RadioButton:RID_SCDLG_DAPITYPE:BTN_SELECTION";
		Pos = MAP_APPFONT ( 12 , 14 ) ;
        Size = MAP_APPFONT ( 164 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~Current selection";
	};
	RadioButton BTN_DATABASE
	{
	    HelpID = "sc:RadioButton:RID_SCDLG_DAPITYPE:BTN_DATABASE";
        Pos = MAP_APPFONT ( 12 , 28 ) ;
        Size = MAP_APPFONT ( 164 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~Data source registered in %PRODUCTNAME";
	};
	RadioButton BTN_EXTERNAL
	{
	    HelpID = "sc:RadioButton:RID_SCDLG_DAPITYPE:BTN_EXTERNAL";
        Pos = MAP_APPFONT ( 12 , 42 ) ;
        Size = MAP_APPFONT ( 164 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~External source/interface";
	};
    FixedLine FL_FRAME
	{
		Pos = MAP_APPFONT ( 6 , 3 ) ;
        Size = MAP_APPFONT ( 173 , 8 ) ;
		Text [ en-US ] = "Selection";
	};
	Text [ en-US ] = "Select Source";
};


//------------------------------------------------------------------------


ModalDialog RID_SCDLG_DAPISERVICE
{
	OutputSize = TRUE ;
	HelpId = HID_DATAPILOT_SERVICE ;
	SVLook = TRUE ;
    Size = MAP_APPFONT ( 241 , 94 ) ;
	Moveable = TRUE ;
	Closeable = FALSE ;
	OKButton BTN_OK
	{
		Pos = MAP_APPFONT ( 185 , 6 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton BTN_CANCEL
	{
		Pos = MAP_APPFONT ( 185 , 23 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( 185 , 43 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
	};
	FixedText FT_SERVICE
	{
		Pos = MAP_APPFONT ( 12 , 14 ) ;
        Size = MAP_APPFONT ( 40 , 8 ) ;
		Text [ en-US ] = "~Service";
	};
	ListBox LB_SERVICE
	{
	    HelpID = "sc:ListBox:RID_SCDLG_DAPISERVICE:LB_SERVICE";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 56 , 12 ) ;
        Size = MAP_APPFONT ( 120 , 80 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};
	FixedText FT_SOURCE
	{
        Pos = MAP_APPFONT ( 12 , 30 ) ;
        Size = MAP_APPFONT ( 40 , 8 ) ;
		Text [ en-US ] = "So~urce";
	};
	Edit ED_SOURCE
	{
	    HelpID = "sc:Edit:RID_SCDLG_DAPISERVICE:ED_SOURCE";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 56 , 28 ) ;
        Size = MAP_APPFONT ( 120 , 12 ) ;
		TabStop = TRUE ;
	};
	FixedText FT_NAME
	{
        Pos = MAP_APPFONT ( 12 , 46 ) ;
        Size = MAP_APPFONT ( 40 , 8 ) ;
		Text [ en-US ] = "~Name";
	};
	Edit ED_NAME
	{
	    HelpID = "sc:Edit:RID_SCDLG_DAPISERVICE:ED_NAME";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 56 , 44 ) ;
        Size = MAP_APPFONT ( 120 , 12 ) ;
		TabStop = TRUE ;
	};
	FixedText FT_USER
	{
        Pos = MAP_APPFONT ( 12 , 62 ) ;
        Size = MAP_APPFONT ( 40 , 8 ) ;
		Text [ en-US ] = "Us~er";
	};
	Edit ED_USER
	{
	    HelpID = "sc:Edit:RID_SCDLG_DAPISERVICE:ED_USER";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 56 , 60 ) ;
        Size = MAP_APPFONT ( 120 , 12 ) ;
		TabStop = TRUE ;
	};
	FixedText FT_PASSWD
	{
        Pos = MAP_APPFONT ( 12 , 78 ) ;
        Size = MAP_APPFONT ( 40 , 8 ) ;
		Text [ en-US ] = "~Password";
	};
	Edit ED_PASSWD
	{
	    HelpID = "sc:Edit:RID_SCDLG_DAPISERVICE:ED_PASSWD";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 56 , 76 ) ;
        Size = MAP_APPFONT ( 120 , 12 ) ;
		TabStop = TRUE ;
		PassWord = TRUE ;
	};
    FixedLine FL_FRAME
	{
		Pos = MAP_APPFONT ( 6 , 3 ) ;
        Size = MAP_APPFONT ( 173 , 8 ) ;
		Text [ en-US ] = "Selection";
	};
	Text [ en-US ] = "External Source";
};


//------------------------------------------------------------------------


ModalDialog RID_SCDLG_DAPIDATA
{
	OutputSize = TRUE ;
	HelpId = HID_DATAPILOT_DATABASE ;
	SVLook = TRUE ;
    Size = MAP_APPFONT ( 241 , 63 ) ;
	Moveable = TRUE ;
	Closeable = FALSE ;
	OKButton BTN_OK
	{
		Pos = MAP_APPFONT ( 185 , 6 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
		DefButton = TRUE ;
	};
	CancelButton BTN_CANCEL
	{
		Pos = MAP_APPFONT ( 185 , 23 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
	};
	HelpButton BTN_HELP
	{
		Pos = MAP_APPFONT ( 185 , 43 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		TabStop = TRUE ;
	};

	FixedText FT_DATABASE
	{
		Pos = MAP_APPFONT ( 12 , 14 ) ;
        Size = MAP_APPFONT ( 52 , 8 ) ;
		Text [ en-US ] = "~Database";
	};
	ListBox LB_DATABASE
	{
	    HelpID = "sc:ListBox:RID_SCDLG_DAPIDATA:LB_DATABASE";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 66 , 12 ) ;
        Size = MAP_APPFONT ( 110 , 80 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};

	FixedText FT_OBJECT
	{
        Pos = MAP_APPFONT ( 12 , 46 ) ;
        Size = MAP_APPFONT ( 52 , 8 ) ;
		Text [ en-US ] = "Data so~urce";
	};
	ComboBox CB_OBJECT
	{
	    HelpID = "sc:ComboBox:RID_SCDLG_DAPIDATA:CB_OBJECT";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 66 , 44 ) ;
        Size = MAP_APPFONT ( 110 , 80 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};

	FixedText FT_OBJTYPE
	{
        Pos = MAP_APPFONT ( 12 , 30 ) ;
        Size = MAP_APPFONT ( 52 , 8 ) ;
		Text [ en-US ] = "~Type";
	};
	ListBox LB_OBJTYPE
	{
	    HelpID = "sc:ListBox:RID_SCDLG_DAPIDATA:LB_OBJTYPE";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 66 , 28 ) ;
        Size = MAP_APPFONT ( 110 , 80 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	StringList [ en-US ] =
	{
		< "Table" ; Default ; > ;
		< "Query" ; Default ; > ;
		< "Sql" ; Default ; > ;
		< "Sql [Native]" ; Default ; > ;
	};
	};

    FixedLine FL_FRAME
	{
		Pos = MAP_APPFONT ( 6 , 3 ) ;
        Size = MAP_APPFONT ( 173 , 8 ) ;
		Text [ en-US ] = "Selection";
	};
	Text [ en-US ] = "Select Data Source";
};





















