/**************************************************************
 * 
 * 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 <mmpreparemergepage.hrc>
#include <dbui.hrc>
#include <helpid.h>

TabPage DLG_MM_PREPAREMERGE_PAGE
{
    HelpID = HID_MM_PREPAREMERGEPAGE ;
    Size = MAP_APPFONT ( 260 , 250 ) ;
    Hide = TRUE ;

    FixedText FI_HEADER
    {
        Pos = MAP_APPFONT ( 6 , 8 ) ;
        Size = MAP_APPFONT ( 248 , 8 ) ;
        Text[ en-US ] = "Preview and edit the document";
    };

    FixedText   FI_PREVIEW
    {
        Pos = MAP_APPFONT ( 6 , 27 ) ;
        Size = MAP_APPFONT ( 248 , 26 ) ;
        WordBreak = TRUE;
        Text[ en-US ] = "The preview of a merged document is visible now. To see the preview of another document click one of the arrows.";
    };
    FixedText   FT_RECIPIENT
    {
        Pos = MAP_APPFONT ( 12 , 58 ) ;
        Size = MAP_APPFONT ( 50 , 8 ) ;
        Text[ en-US ] = "~Recipient";
    };

    PushButton  PB_FIRST
    {
        HelpID = "sw:PushButton:DLG_MM_PREPAREMERGE_PAGE:PB_FIRST";
        Pos = MAP_APPFONT ( 75 , 55 ) ;
        Size = MAP_APPFONT ( 20 , 14 ) ;
        Text = "|<" ;
        QuickHelpText [en-US] = "First";
    };
    PushButton  PB_PREV
    {
        HelpID = "sw:PushButton:DLG_MM_PREPAREMERGE_PAGE:PB_PREV";
        Pos = MAP_APPFONT ( 98 , 55 ) ;
        Size = MAP_APPFONT ( 20 , 14 ) ;
        Text = "<" ;
        QuickHelpText [en-US] = "Previous";
    };
    NumericField ED_RECORD
    {
        HelpID = "sw:NumericField:DLG_MM_PREPAREMERGE_PAGE:ED_RECORD";
        Pos = MAP_APPFONT ( 121 , 56 ) ;
        Size = MAP_APPFONT ( 20 , 12 ) ;
        Border = TRUE ;
        Left = TRUE ;
        First = 1 ;
        Minimum = 1 ;
        Repeat = TRUE ;
        Spin = FALSE ;
        TabStop = TRUE ;
    };
    PushButton  PB_NEXT
    {
        HelpID = "sw:PushButton:DLG_MM_PREPAREMERGE_PAGE:PB_NEXT";
        Pos = MAP_APPFONT ( 144 , 55 ) ;
        Size = MAP_APPFONT ( 20 , 14 ) ;
        Text = ">" ;
        QuickHelpText [en-US] = "Next";
    };
    PushButton  PB_LAST
    {
        HelpID = "sw:PushButton:DLG_MM_PREPAREMERGE_PAGE:PB_LAST";
        Pos = MAP_APPFONT ( 167 , 55 ) ;
        Size = MAP_APPFONT ( 20 , 14 ) ;
        Text = ">|" ;
        QuickHelpText [en-US] = "Last";
    };
    CheckBox CB_EXCLUDE
    {
        HelpID = "sw:CheckBox:DLG_MM_PREPAREMERGE_PAGE:CB_EXCLUDE";
        Pos = MAP_APPFONT ( 75, 77 ) ;
        Size = MAP_APPFONT ( 179 , 10 ) ;
        Text[ en-US ] = "E~xclude this recipient";
    };
    FixedLine   FL_NOTEHEADER
    {
        Pos = MAP_APPFONT ( 6 , 100 ) ;
        Size = MAP_APPFONT ( 248 , 8 ) ;
        Text[ en-US ] = "Edit Document";
    };
    FixedText   FI_EDIT
    {
        Pos = MAP_APPFONT ( 12 , 122 ) ;
        Size = MAP_APPFONT ( 242 , 60 ) ;
        WordBreak = TRUE;
        Text[ en-US ] = "Write or edit your document now if you have not already done so. The changes will effect all merged documents.\n\nClicking 'Edit Document...' will temporarily reduce the wizard to a small window so you can edit the mail merge document. After editing the document, return to the wizard by clicking 'Return to Mail Merge Wizard' in the small window." ;
    };
    PushButton  PB_EDIT
    {
        HelpID = "sw:PushButton:DLG_MM_PREPAREMERGE_PAGE:PB_EDIT";
        Pos = MAP_APPFONT ( 90 , 185 ) ;
        Size = MAP_APPFONT ( 80 , 14 ) ;
        Text[ en-US ] = "~Edit Document...";
    };
};


