/**************************************************************
 * 
 * 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_FORMCTRLR_PROPRESID_HRC_
#include "formresid.hrc"
#endif
#include "propctrlr.hrc"
#ifndef EXTENSIONS_SOURCE_PROPCTRLR_FORMLINKDIALOG_HRC
#include "formlinkdialog.hrc"
#endif

ModalDialog RID_DLG_FORMLINKS
{
    HelpID = "extensions:ModalDialog:RID_DLG_FORMLINKS";
	OutputSize = TRUE ;
	Moveable = TRUE ;
	Closeable = TRUE ;
	SVLook = TRUE ;
    Size = MAP_APPFONT ( 252, 110 ) ;

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

    FixedText FT_EXPLANATION
    {
        Pos = MAP_APPFONT( 6, 6 );
        Size = MAP_APPFONT( 187, 24 );

        WordBreak = TRUE;

        Text [ en-US ] = "Sub forms can be used to display detailed data about the current record of the master form. To do this, you can specify which columns in the sub form match which columns in the master form.";
    };

    FixedText FT_DETAIL_LABEL
    {
        Pos = MAP_APPFONT( 6, 36 );
        Size = MAP_APPFONT( 85, 8 );
    };

    FixedText FT_MASTER_LABEL
    {
        Pos = MAP_APPFONT( 102, 36 );
        Size = MAP_APPFONT( 85, 8 );
    };

#define ROW( n ) \
    Window n \
    { \
        Pos  = MAP_APPFONT( 6, 47 + 15 * ( n - 1 ) ); \
        Size = MAP_APPFONT( 181, 13 );                \
                                                      \
        Hide          = FALSE;                        \
        DialogControl = TRUE;                         \
                                                      \
        ComboBox 1                                    \
        {                                             \
            Pos  = MAP_APPFONT( 0, 0 );               \
            Size = MAP_APPFONT( 85, 12 );             \
                                                      \
            DropDown = TRUE;                          \
            TabStop  = TRUE;                          \
                                                      \
            HelpId   = HID_FIELDLINK_DETAIL_COLUMN;   \
            UniqueId = UID_FIELDLINK_DETAIL#n;        \
        };                                            \
        FixedText 1                                   \
        {                                             \
            Pos  = MAP_APPFONT( 85, 0 );              \
            Size = MAP_APPFONT( 10, 12 );             \
            Center = TRUE;                            \
        };                                            \
        ComboBox 2                                    \
        {                                             \
            Pos  = MAP_APPFONT( 95, 0 );              \
            Size = MAP_APPFONT( 85, 12 );             \
                                                      \
            DropDown = TRUE;                          \
            TabStop  = TRUE;                          \
                                                      \
            HelpId   = HID_FIELDLINK_MASTER_COLUMN;   \
            UniqueId = UID_FIELDLINK_MASTER#n;        \
        };                                            \
    }

    ROW( 1 );
    ROW( 2 );
    ROW( 3 );
    ROW( 4 );

    OKButton PB_OK
    {
        Pos = MAP_APPFONT( 199, 6 );
        Size = MAP_APPFONT( 50, 14 );
        TabStop   = TRUE;
        DefButton = TRUE;
    };

    CancelButton PB_CANCEL
    {
        Pos = MAP_APPFONT( 199, 23 );
        Size = MAP_APPFONT( 50, 14 );
        TabStop = TRUE;
    };

    HelpButton PB_HELP
    {
        Pos = MAP_APPFONT( 199, 43 );
        Size = MAP_APPFONT( 50, 14 );
        TabStop = TRUE;
    };

    PushButton PB_SUGGEST
    {
        HelpID = "extensions:PushButton:RID_DLG_FORMLINKS:PB_SUGGEST";
        Pos = MAP_APPFONT( 199, 90 );
        Size = MAP_APPFONT( 50, 14 );
        TabStop =  TRUE;
        Hide    = FALSE;
        Disable =  TRUE;

        Text [ en-US ] = "Suggest";
    };

    String STR_DETAIL_FORM
    {
        Text [ en-US ] = "Sub Form";
    };

    String STR_MASTER_FORM
    {
        Text [ en-US ] = "Master Form";
    };

    String STR_ERROR_RETRIEVING_COLUMNS
    {
        Text [ en-US ] = "The columns of '#' could not be retrieved.";
    };
};
