/**************************************************************
 * 
 * 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 *****************************************************************
#include "mailmrge.hrc"
#include "cmdid.h"
#include "helpid.h"

#define _MAIL_MERGE_STRING_ \
    Text [ en-US ] = "Mail Merge" ;	\

ModalDialog DLG_MAILMERGE
{
	OutputSize = TRUE ;
	SVLook = TRUE ;
    Size = MAP_APPFONT ( 312 , 264 ) ;
    _MAIL_MERGE_STRING_
    Moveable = TRUE ;
    Sizeable = TRUE;
	HelpID = CMD_FN_QRY_MERGE ;
    Window WIN_BEAMER
    {
        Pos = MAP_APPFONT ( 6 , 3 ) ;
        Size = MAP_APPFONT ( 300 , 80 ) ;
    };
	RadioButton RB_ALL
	{
	    HelpID = "sw:RadioButton:DLG_MAILMERGE:RB_ALL";
        Pos = MAP_APPFONT ( 12 , 97 ) ;
        Size = MAP_APPFONT ( 100 , 10 ) ;
		Text [ en-US ] = "~All" ;
		TabStop = TRUE ;
	};
	RadioButton RB_MARKED
	{
	    HelpID = "sw:RadioButton:DLG_MAILMERGE:RB_MARKED";
        Pos = MAP_APPFONT ( 12 , 110 ) ;
        Size = MAP_APPFONT ( 100 , 10 ) ;
		Text [ en-US ] = "~Selected records" ;
		TabStop = TRUE ;
	};
	RadioButton RB_FROM
	{
	    HelpID = "sw:RadioButton:DLG_MAILMERGE:RB_FROM";
        Pos = MAP_APPFONT ( 12 , 123 ) ;
		Size = MAP_APPFONT ( 33 , 10 ) ;
		Text [ en-US ] = "~From:" ;
		TabStop = TRUE ;
	};
	NumericField NF_FROM
	{
	    HelpID = "sw:NumericField:DLG_MAILMERGE:NF_FROM";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 48 , 122 ) ;
		Size = MAP_APPFONT ( 24 , 12 ) ;
		TabStop = TRUE ;
		StrictFormat = TRUE ;
		Minimum = 1 ;
		Maximum = 999999 ;
	};
	FixedText FT_BIS
	{
        Pos = MAP_APPFONT ( 75 , 123 ) ;
		Size = MAP_APPFONT ( 27 , 10 ) ;
		Text [ en-US ] = "~To:" ;
		Center = TRUE ;
	};
	NumericField NF_TO
	{
	    HelpID = "sw:NumericField:DLG_MAILMERGE:NF_TO";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 105 , 122 ) ;
		Size = MAP_APPFONT ( 24 , 12 ) ;
		TabStop = TRUE ;
		StrictFormat = TRUE ;
		Minimum = 1 ;
		Maximum = 999999 ;
	};
    FixedLine FL_RECORD
	{
        Pos = MAP_APPFONT ( 6 , 86 ) ;
        Size = MAP_APPFONT ( 126 , 8 ) ;
		Text [ en-US ] = "Records" ;
	};
	RadioButton RB_PRINTER
	{
	    HelpID = "sw:RadioButton:DLG_MAILMERGE:RB_PRINTER";
        Pos = MAP_APPFONT ( 144 , 97 ) ;
        Size = MAP_APPFONT ( 53 , 10 ) ;
		Check = TRUE ;
		TabStop = TRUE ;
        Text [ en-US ] = "~Printer" ;
	};
	RadioButton RB_MAILING
	{
	    HelpID = "sw:RadioButton:DLG_MAILMERGE:RB_MAILING";
        Pos = MAP_APPFONT ( 200 , 97 ) ;
        Size = MAP_APPFONT ( 53 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "~Electronic" ;
	};
	RadioButton RB_FILE
	{
	    HelpID = "sw:RadioButton:DLG_MAILMERGE:RB_FILE";
        Pos = MAP_APPFONT ( 256 , 97 ) ;
        Size = MAP_APPFONT ( 56 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "File" ;
	};
    CheckBox CB_SINGLE_JOBS
    {
        HelpID = "sw:CheckBox:DLG_MAILMERGE:CB_SINGLE_JOBS";
        Pos = MAP_APPFONT ( 150 , 112 ) ;
        Size = MAP_APPFONT ( 142 , 10 ) ;
        TabStop = TRUE ;
        Text [ en-US ] = "~Single print jobs" ;
    };
    FixedLine FL_SAVE_MERGED_DOCUMENT
    {
        Pos = MAP_APPFONT (  144, 128 ) ;
        Size = MAP_APPFONT ( 156 , 8 ) ;
        Text [ en-US ] = "Save merged document" ;
    };
    RadioButton RB_SAVE_SINGLE_DOC     
    {
        HelpID = "sw:RadioButton:DLG_MAILMERGE:RB_SAVE_SINGLE_DOC";
        Pos = MAP_APPFONT (  150, 139 ) ;
        Size = MAP_APPFONT ( 150 , 10 ) ;
        TabStop = TRUE ;
        Text [ en-US ] = "S~ave as single document";
    };
    RadioButton RB_SAVE_INDIVIDUAL     
    {
        HelpID = "sw:RadioButton:DLG_MAILMERGE:RB_SAVE_INDIVIDUAL";
        Pos = MAP_APPFONT (  150, 152 ) ;
        Size = MAP_APPFONT ( 150 , 10 ) ;
        TabStop = TRUE ;
        Text [ en-US ] = "Sa~ve as individual documents";
    };
    CheckBox RB_GENERATE_FROM_DATABASE
    {
        HelpID = "sw:CheckBox:DLG_MAILMERGE:RB_GENERATE_FROM_DATABASE";
        Pos = MAP_APPFONT (  156, 168 ) ;
        Size = MAP_APPFONT ( 144 , 10 ) ;
        TabStop = TRUE ;
        Text [ en-US ] = "Generate file name from ~Database";
    };
    FixedText FT_COLUMN
    {
        Pos = MAP_APPFONT ( 162 , 184 ) ;
        Size = MAP_APPFONT ( 41 , 10 ) ;
        Text [ en-US ] = "Field" ;
    };
    ListBox LB_COLUMN
	{
        HelpID = "sw:ListBox:DLG_MAILMERGE:LB_COLUMN";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 205 , 182 ) ;
        Size = MAP_APPFONT ( 103 , 84 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};
    FixedText FT_PATH
    {
        Pos = MAP_APPFONT ( 162 , 200 ) ;
        Size = MAP_APPFONT ( 41 , 10 ) ;
        Text [ en-US ] = "~Path" ;
    };
    Edit ED_PATH
    {
        HelpID = "sw:Edit:DLG_MAILMERGE:ED_PATH";
        Pos = MAP_APPFONT ( 205 , 198 ) ;
        Size = MAP_APPFONT ( 86 , 12 ) ;
        Border = TRUE ;
        TabStop = TRUE ;
    };
    PushButton PB_PATH
    {
        HelpID = "sw:PushButton:DLG_MAILMERGE:PB_PATH";
        Pos = MAP_APPFONT ( 294 , 198 ) ;
        Size = MAP_APPFONT ( 14 , 12 ) ;
         // Soll Groesse des Edits haben (12)!
        Text = "~..." ;
        TabStop = TRUE ;
    };
    FixedText FT_FILTER
    {
        Pos = MAP_APPFONT ( 162 , 216 ) ;
        Size = MAP_APPFONT ( 41 , 8 ) ;
        Text [ en-US ] = "F~ile format" ;
    };
    ListBox LB_FILTER
    {
        HelpID = "sw:ListBox:DLG_MAILMERGE:LB_FILTER";
        Border = TRUE ;
        Pos = MAP_APPFONT ( 205 , 214 ) ;
        Size = MAP_APPFONT ( 103 , 84 ) ;
        Disable = TRUE ;
        TabStop = TRUE ;
        DropDown = TRUE ;
    };
	ListBox LB_ADDRESSFLD
	{
	    HelpID = "sw:ListBox:DLG_MAILMERGE:LB_ADDRESSFLD";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 220 , 110 ) ;
        Size = MAP_APPFONT ( 74 , 84 ) ;
		Disable = TRUE ;
		Hide = TRUE ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};
	FixedText FT_SUBJECT
	{
        Pos = MAP_APPFONT ( 144 , 125 ) ;
		Size = MAP_APPFONT ( 51 , 10 ) ;
		Disable = TRUE ;
		Text [ en-US ] = "~Subject" ;
	};
	Edit ED_SUBJECT
	{
	    HelpID = "sw:Edit:DLG_MAILMERGE:ED_SUBJECT";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 220 , 127 ) ;
        Size = MAP_APPFONT ( 88 , 12 ) ;
		Disable = TRUE ;
		TabStop = TRUE ;
	};
	FixedText FT_ATTACH
	{
        Pos = MAP_APPFONT ( 144 , 140 ) ;
		Size = MAP_APPFONT ( 51 , 10 ) ;
		Disable = TRUE ;
		Text [ en-US ] = "Attachments" ;
	};
	Edit ED_ATTACH
	{
	    HelpID = "sw:Edit:DLG_MAILMERGE:ED_ATTACH";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 220 , 140 ) ;
        Size = MAP_APPFONT ( 72 , 12 ) ;
		Disable = TRUE ;
		TabStop = TRUE ;
		ReadOnly = TRUE ;
	};
	PushButton PB_ATTACH
	{
	    HelpID = "sw:PushButton:DLG_MAILMERGE:PB_ATTACH";
        Pos = MAP_APPFONT ( 294 , 140 ) ;
		Size = MAP_APPFONT ( 14 , 12 ) ;
		 // Soll Groesse des Edits haben (12)!
		Text = "~..." ;
		TabStop = TRUE ;
		Disable = TRUE ;
	};
	FixedText FT_FORMAT
	{
        Pos = MAP_APPFONT ( 144 , 157 ) ;
        Size = MAP_APPFONT ( 51 , 8 ) ;
		Disable = TRUE ;
		Text [ en-US ] = "Mail Format" ;
	};
	CheckBox CB_FORMAT_HTML
	{
	    HelpID = "sw:CheckBox:DLG_MAILMERGE:CB_FORMAT_HTML";
        Pos = MAP_APPFONT ( 220 , 156 ) ;
        Size = MAP_APPFONT ( 90 , 10 ) ;
		Disable = TRUE ;
		/* ### ACHTUNG: Neuer Text in Resource? HTM~L : HTML */
		TabStop = TRUE ;
		Text [ en-US ] = "HTM~L" ;
	};
	CheckBox CB_FORMAT_RTF
	{
	    HelpID = "sw:CheckBox:DLG_MAILMERGE:CB_FORMAT_RTF";
        Pos = MAP_APPFONT ( 220 , 169 ) ;
        Size = MAP_APPFONT ( 90 , 10 ) ;
		Disable = TRUE ;
		TabStop = TRUE ;
		Text [ en-US ] = "RT~F" ;
	};
	CheckBox CB_FORMAT_SW
	{
	    HelpID = "sw:CheckBox:DLG_MAILMERGE:CB_FORMAT_SW";
        Pos = MAP_APPFONT ( 220, 182 ) ;
        Size = MAP_APPFONT ( 90 , 10 ) ;
		Disable = TRUE ;
		TabStop = TRUE ;
		Text [ en-US ] = "%PRODUCTNAME Writer" ;
	};
    FixedLine FL_SEPARATOR
    {
        Pos = MAP_APPFONT ( 133 , 93 ) ;
        Size = MAP_APPFONT ( 4 , 136 ) ;
        Vert = TRUE;
    };
    FixedLine FL_DEST
	{
        Pos = MAP_APPFONT ( 138 , 86 ) ;
        Size = MAP_APPFONT ( 162 , 8 ) ;
		Text [ en-US ] = "Output" ;
	};
    FixedLine FL_BOTTOM_SEPARATOR    
    {
        Pos = MAP_APPFONT (  0, 232 ) ;
        Size = MAP_APPFONT ( 312 , 8 ) ;
    };
	OKButton BTN_OK
	{
        Pos = MAP_APPFONT ( 147 , 244 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
		DefButton = TRUE ;
	};
	CancelButton BTN_CANCEL
	{
        Pos = MAP_APPFONT ( 200 , 244 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
	};
	HelpButton BTN_HELP
	{
        Pos = MAP_APPFONT ( 256 , 244 ) ;
		Size = MAP_APPFONT ( 50 , 14 ) ;
	};
};

ModalDialog DLG_MERGE_CREATE
{
    OutputSize = TRUE ;
    SVLook = TRUE ;
    Size = MAP_APPFONT ( 145 , 63 ) ;
    Moveable = TRUE ;
    HelpID = HID_MAIL_MERGE_CREATE_FROM;
    _MAIL_MERGE_STRING_
    FixedLine FL_CREATEFROM
    {
        Pos = MAP_APPFONT ( 6 , 3 ) ;
        Size = MAP_APPFONT ( 80 , 8 ) ;
        Text [ en-US ] = "Create" ;
	};
    RadioButton RB_THISDOC
    {
        HelpID = "sw:RadioButton:DLG_MERGE_CREATE:RB_THISDOC";
        Pos = MAP_APPFONT ( 12 , 14 ) ;
        Size = MAP_APPFONT ( 70 , 10 ) ;
        Check = TRUE;
        TabStop = TRUE ;
        Text [ en-US ] = "From this ~document" ;
	};
    RadioButton RB_TEMPLATE
    {
        HelpID = "sw:RadioButton:DLG_MERGE_CREATE:RB_TEMPLATE";
        Pos = MAP_APPFONT ( 12 , 27 ) ;
        Size = MAP_APPFONT ( 70 , 10 ) ;
        TabStop = TRUE ;
        Text [ en-US ] = "From a ~template" ;
	};
    OKButton BT_OK
    {
        Pos = MAP_APPFONT ( 89 , 6 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
        DefButton = TRUE ;
    };
    CancelButton BT_CANCEL
    {
        Pos = MAP_APPFONT ( 89 , 23 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
    };
    HelpButton BT_HELP
    {
        Pos = MAP_APPFONT ( 89 , 43 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
    };

};
ModalDialog DLG_MERGE_FIELD_CONNECTIONS
{
    OutputSize = TRUE ;
    SVLook = TRUE ;
    Size = MAP_APPFONT ( 205 , 97 ) ;
    Moveable = TRUE ;
    HelpID = HID_MAIL_MERGE_INSERT_FIELDS;
    Text [ en-US ] = "Data Source Connection" ;
    FixedLine FL_CONNECTIONS
    {
        Pos = MAP_APPFONT ( 6 , 3 ) ;
        Size = MAP_APPFONT ( 140 , 8 ) ;
        Text [ en-US ] = "Connect" ;
	};
    RadioButton RB_USEEXISTING
    {
        HelpID = "sw:RadioButton:DLG_MERGE_FIELD_CONNECTIONS:RB_USEEXISTING";
        Pos = MAP_APPFONT ( 12 , 14 ) ;
        Size = MAP_APPFONT ( 130 , 10 ) ;
        Check = TRUE;
        TabStop = TRUE ;
        Text [ en-US ] = "~Use existing" ;
	};
    RadioButton RB_CREATENEW
    {
        HelpID = "sw:RadioButton:DLG_MERGE_FIELD_CONNECTIONS:RB_CREATENEW";
        Pos = MAP_APPFONT ( 12 , 27 ) ;
        Size = MAP_APPFONT ( 130 , 10 ) ;
        TabStop = TRUE ;
        Text [ en-US ] = "~Create new connection" ;
	};
    FixedText FT_INFO
    {
        Pos = MAP_APPFONT ( 6 , 41 ) ;
        Size = MAP_APPFONT ( 141 , 50 ) ;
        WordBreak = TRUE;
        Text [ en-US ] = "Fields are used to personalize form letters. The fields are placeholders for data from a data source, such as a database. The fields in the form letter must be connected to the data source." ;
	};
    OKButton BT_OK
    {
        Pos = MAP_APPFONT ( 149 , 6 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
        DefButton = TRUE ;
    };
    CancelButton BT_CANCEL
    {
        Pos = MAP_APPFONT ( 149 , 23 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
    };
    HelpButton BT_HELP
    {
        Pos = MAP_APPFONT ( 149 , 43 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
    };

};

