/**************************************************************
 * 
 * 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 <mmdocselectpage.hrc>
#include <dbui.hrc>
#include <helpid.h>
TabPage DLG_MM_DOCSELECT_PAGE
{
    HelpID = HID_MM_DOCSELECTPAGE ;
    Size = MAP_APPFONT ( 260 , 250 ) ;
    Hide = TRUE ;

    FixedText FI_HEADER
    {
        Pos = MAP_APPFONT ( 6 , 8 ) ;
        Size = MAP_APPFONT ( 248 , 8 ) ;
        Text [ en-US ] = "Select starting document for the mail merge";
    };
    FixedText   FT_HOWTO
    {
        Pos = MAP_APPFONT ( 6 , 27 ) ;
        Size = MAP_APPFONT ( 248 , 8 ) ;
        Text [ en-US ] = "Select the document upon which to base the mail merge document";
    };
    RadioButton RB_CURRENTDOC
    {
        HelpID = "sw:RadioButton:DLG_MM_DOCSELECT_PAGE:RB_CURRENTDOC";
        Pos = MAP_APPFONT ( 12 , 48 ) ;
        Size = MAP_APPFONT ( 190 , 10 ) ;
        Text[ en-US ] = "Use the current ~document";
    };
    RadioButton RB_NEWDOC
    {
        HelpID = "sw:RadioButton:DLG_MM_DOCSELECT_PAGE:RB_NEWDOC";
        Pos = MAP_APPFONT ( 12 , 66 ) ;
        Size = MAP_APPFONT ( 190 , 10 ) ;
        Text[ en-US ] = "Create a ne~w document";
    };
    RadioButton RB_LOADDOC
    {
        HelpID = "sw:RadioButton:DLG_MM_DOCSELECT_PAGE:RB_LOADDOC";
        Pos = MAP_APPFONT ( 12 ,  84) ;
        Size = MAP_APPFONT ( 190 , 10 ) ;
        Text[ en-US ] = "Start from ~existing document";
    };
    PushButton  PB_LOADDOC
    {
        HelpID = "sw:PushButton:DLG_MM_DOCSELECT_PAGE:PB_LOADDOC";
        Pos = MAP_APPFONT ( 204 ,  80) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
        Text[ en-US ] = "B~rowse...";
    };
    RadioButton RB_LOADTEMPLATE
    {
        HelpID = "sw:RadioButton:DLG_MM_DOCSELECT_PAGE:RB_LOADTEMPLATE";
        Pos = MAP_APPFONT ( 12 , 103 ) ;
        Size = MAP_APPFONT ( 190 , 10 ) ;
        Text[ en-US ] = "Start from a t~emplate";
    };
    PushButton  PB_BROWSETEMPLATE
    {
        HelpID = "sw:PushButton:DLG_MM_DOCSELECT_PAGE:PB_BROWSETEMPLATE";
        Pos = MAP_APPFONT ( 204 , 99 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
        Text[ en-US ] = "B~rowse...";
    };
    RadioButton RB_RECENTDOC
    {
        HelpID = "sw:RadioButton:DLG_MM_DOCSELECT_PAGE:RB_RECENTDOC";
        Pos = MAP_APPFONT ( 12 ,  120) ;
        Size = MAP_APPFONT ( 190 , 10 ) ;
        Text[ en-US ] = "Start fro~m a recently saved starting document";
    };
    ListBox     LB_RECENTDOC
    {
        HelpID = "sw:ListBox:DLG_MM_DOCSELECT_PAGE:LB_RECENTDOC";
        Pos = MAP_APPFONT ( 20 , 134 ) ;
        Size = MAP_APPFONT ( 180 , 50 ) ;
        DropDown = TRUE;
        Border = TRUE;
    };
};



