/**************************************************************
 * 
 * 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 "RptResId.hrc"
#include "rptui_slotid.hrc"
#ifndef _GLOBLMN_HRC
#include <svx/globlmn.hrc>
#endif
#ifndef _SBASLTID_HRC
#include <svx/svxids.hrc>
#endif

String RID_STR_PROPPAGE_DEFAULT
{
	Text [ en-US ] = "General" ;
};
String RID_STR_PROPPAGE_DATA
{
	Text [ en-US ] = "Data" ;
};
Resource RID_STR_BOOL
{
    String 1
    {
	    Text [ en-US ] = "No" ;
    };
    String 2
    {
	    Text [ en-US ] = "Yes" ;
    };
};
String RID_STR_FORCENEWPAGE
{
	Text [ en-US ] = "Force New Page" ;
};
Resource RID_STR_FORCENEWPAGE_CONST
{
    String 1
    {
	    Text [ en-US ] = "None" ;
    };
    String 2
    {
	    Text [ en-US ] = "Before Section" ;
    };
    String 3
    {
	    Text [ en-US ] = "After Section" ;
    };
    String 4
    {
	    Text [ en-US ] = "Before & After Section" ;
    };
};
String RID_STR_NEWROWORCOL
{
	Text [ en-US ] = "New Row Or Column" ;
};
String RID_STR_KEEPTOGETHER
{
	Text [ en-US ] = "Keep Together" ;
};
Resource RID_STR_KEEPTOGETHER_CONST
{
    String 1
    {
	    Text [ en-US ] = "No" ;
    };
    String 2
    {
	    Text [ en-US ] = "Whole Group" ;
    };
    String 3
    {
	    Text [ en-US ] = "With First Detail" ;
    };
};
String RID_STR_CANGROW
{
	Text [ en-US ] = "Can Grow" ;
};
String RID_STR_CANSHRINK
{
	Text [ en-US ] = "Can Shrink" ;
};
String RID_STR_REPEATSECTION
{
	Text [ en-US ] = "Repeat Section" ;
};
String RID_STR_PRINTREPEATEDVALUES
{
	Text [ en-US ] = "Print repeated values" ;
};
String RID_STR_CONDITIONALPRINTEXPRESSION
{
	Text [ en-US ] = "Conditional Print Expression" ;
};
String RID_STR_STARTNEWCOLUMN
{
	Text [ en-US ] = "Start new column" ;
};
String RID_STR_STARTNEWPAGE
{
	Text [ en-US ] = "Start new page" ;
};
String RID_STR_RESETPAGENUMBER
{
	Text [ en-US ] = "Reset page number" ;
};
String RID_STR_CHARTTYPE
{
	Text [ en-US ] = "Chart type" ;
};
String RID_STR_PRINTWHENGROUPCHANGE
{
	Text [ en-US ] = "Print When Group Change" ;
};
String RID_STR_VISIBLE
{
	Text [ en-US ] = "Visible" ;
};
String RID_STR_GROUPKEEPTOGETHER
{
	Text [ en-US ] = "Group keep together" ;
};
Resource RID_STR_GROUPKEEPTOGETHER_CONST
{
    String 1
    {
	    Text [ en-US ] = "Per Page" ;
    };
    String 2
    {
	    Text [ en-US ] = "Per Column" ;
    };
};
Resource RID_STR_SECTIONPAGEBREAK_CONST
{
    String 1
    {
	    Text [ en-US ] = "None" ;
    };
    String 2
    {
	    Text [ en-US ] = "Section" ;
    };
    String 3
    {
	    Text [ en-US ] = "Automatic" ;
    };
};
String RID_STR_PAGEHEADEROPTION
{
	Text [ en-US ] = "Page header" ;
};
String RID_STR_PAGEFOOTEROPTION
{
	Text [ en-US ] = "Page footer" ;
};
Resource RID_STR_REPORTPRINTOPTION_CONST
{
    String 1
    {
	    Text [ en-US ] = "All Pages" ;
    };
    String 2
    {
	    Text [ en-US ] = "Not With Report Header" ;
    };
    String 3
    {
	    Text [ en-US ] = "Not With Report Footer" ;
    };
    String 4
    {
	    Text [ en-US ] = "Not With Report Header/Footer" ;
    };
};
String RID_STR_DEEPTRAVERSING
{
	Text [ en-US ] = "Deep traversing" ;
};
String RID_STR_PREEVALUATED
{
	Text [ en-US ] = "Pre evaluation" ;
};
String RID_STR_POSITIONX
{
	Text [ en-US ] = "Position X";
};
String RID_STR_POSITIONY
{
	Text [ en-US ] = "Position Y";
};
String RID_STR_WIDTH
{
	Text [ en-US ] = "Width";
};
String RID_STR_HEIGHT
{
	Text [ en-US ] = "Height";
};
String RID_STR_INITIALFORMULA
{
	Text [ en-US ] = "Initial value" ;
};
String RID_STR_PRESERVEIRI
{
	Text [ en-US ] = "Preserve as Link" ;
};
String RID_STR_FORMULA
{
	Text [ en-US ] = "Formula" ;
};
String RID_STR_DATAFIELD
{
	Text [ en-US ] = "Data field" ;
};
String RID_STR_FONT
{
	Text [ en-US ] = "Font" ;
};
String RID_STR_BACKCOLOR
{
    Text [ en-US ] = "Background color";
};
String RID_STR_BACKTRANSPARENT
{
    Text [ en-US ] = "Background Transparent";
};
String RID_STR_CONTROLBACKGROUNDTRANSPARENT
{
    Text [ en-US ] = "Background Transparent";
};
String RID_STR_OVERLAP_OTHER_CONTROL
{
	Text [ en-US ] = "This operation is not allowed. The control overlaps with another one.";
};
String RID_STR_ILLEGAL_POSITION
{
	Text [ en-US ] = "This position can not be set. It is invalid.";
};
String RID_STR_SCOPE_GROUP
{	
    Text [ en-US ] = "Group: %1";
};
String RID_STR_FORMULALIST
{	
    Text [ en-US ] = "Function";
};
String RID_STR_SCOPE
{	
    Text [ en-US ] = "Scope";
};
String RID_STR_TYPE
{	
    Text [ en-US ] = "Data Field Type";
};
Resource RID_STR_TYPE_CONST
{
    String 1
    {	
        Text [ en-US ] = "Field or Formula";
    };
    String 2
    {	
        Text [ en-US ] = "Function";
    };
    String 3
    {	
        Text [ en-US ] = "Counter";
    };
    String 4
    {	
        Text [ en-US ] = "User defined Function";
    };
};
String RID_STR_MASTERFIELDS
{
	Text [ en-US ] = "Link master fields" ;
};
String RID_STR_DETAILFIELDS
{
	Text [ en-US ] = "Link slave fields" ;
};
String RID_STR_EXPLANATION
{
    Text [ en-US ] = "Charts can be used to display detailed data about the current record of the report. To do this, you can specify which columns in the chart match which columns in the report.";
};
String RID_STR_DETAILLABEL
{
	Text [ en-US ] = "Chart" ;
};
String RID_STR_MASTERLABEL
{
	Text [ en-US ] = "Report" ;
};

String RID_STR_PREVIEW_COUNT
{
	Text [ en-US ] = "Preview Row(s)" ;
};
String RID_STR_AREA
{
	Text [ en-US ] = "Area" ;
};
String RID_STR_MIMETYPE
{
	Text [ en-US ] = "Report Output Format" ;
};
String RID_STR_VERTICALALIGN
{
	Text [ en-US ] = "Vert. Alignment" ;
};
Resource RID_STR_VERTICAL_ALIGN_CONST
{
    String 1
    {
        Text [ en-US ] = "Top";
    };
    String 2
    {
        Text [ en-US ] = "Middle";
    };
    String 3
    {
        Text [ en-US ] = "Bottom";
    };
};
String RID_STR_PARAADJUST
{
	Text [ en-US ] = "Horz. Alignment" ;
};
Resource RID_STR_PARAADJUST_CONST
{
    String 1
    {
        Text [ en-US ] = "Left";
    };
    String 2
    {
        Text [ en-US ] = "Right";
    };
    String 3
    {
        Text [ en-US ] = "Block";
    };
    String 4
    {
        Text [ en-US ] = "Center";
    };
};
String RID_STR_F_COUNTER
{
	Text [ en-US ] = "Counter" ;
};
String RID_STR_F_ACCUMULATION
{
	Text [ en-US ] = "Accumulation" ;
};
String RID_STR_F_MINIMUM
{
	Text [ en-US ] = "Minimum" ;
};
String RID_STR_F_MAXIMUM
{
	Text [ en-US ] = "Maximum" ;
};

