/**************************************************************
 * 
 * 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 <svx/dialogs.hrc>
#include "srchdlg.hrc"
#include <sfx2/sfxcommands.h>

#define MASKCOLOR   MaskColor = Color { Red = 0xFFFF; Green = 0x0000; Blue = 0xFFFF; } ;

 // Strings ---------------------------------------------------------------

String RID_SVXSTR_SEARCH_STYLES
{
	Text [ en-US ] = "Including Styles" ;
};
String RID_SVXSTR_SEARCH
{
	Text [ en-US ] = "(Search)" ;
};
String RID_SVXSTR_REPLACE
{
	Text [ en-US ] = "(Replace)" ;
};

 // RID_SVXDLG_SEARCH -----------------------------------------------------

ModelessDialog RID_SVXDLG_SEARCH
{
	HelpId = CMD_SID_SEARCH_DLG ;
	OutputSize = TRUE ;
	Hide = TRUE ;
	SvLook = TRUE ;
    Size = MAP_APPFONT ( 200 , 155 ) ;
	Text [ en-US ] = "Find & Replace" ;
	Moveable = TRUE ;
	FixedText FT_SEARCH
	{
		Pos = MAP_APPFONT ( 6 , 7 ) ;
        Size = MAP_APPFONT ( 132 , 8 ) ;
		Text [ en-US ] = "~Search for" ;
	};
	ComboBox ED_SEARCH
	{
	    HelpID = "svx:ComboBox:RID_SVXDLG_SEARCH:ED_SEARCH";
        Pos = MAP_APPFONT ( 6 , 18 ) ;
        Size = MAP_APPFONT ( 132 , 98 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};
	ListBox LB_SEARCH
	{
	    HelpID = "svx:ListBox:RID_SVXDLG_SEARCH:LB_SEARCH";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 6 , 18 ) ;
        Size = MAP_APPFONT ( 132 , 98 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		Hide = TRUE ;
		Sort = TRUE ;
	};
	FixedText FT_SEARCH_ATTR
	{
        Pos = MAP_APPFONT ( 9 , 35 ) ;
        Size = MAP_APPFONT ( 129 , 16 ) ;
		WordBreak = TRUE ;
		Hide = TRUE ;
	};
    FixedText FT_SEARCH_FORMATS
	{
        Pos = MAP_APPFONT ( 9 , 35 ) ;
        Size = MAP_APPFONT ( 129 , 16 ) ;
        WordBreak = TRUE ;
		Hide = TRUE ;
	};
	FixedText FT_REPLACE
	{
        Pos = MAP_APPFONT ( 6 , 54 ) ;
        Size = MAP_APPFONT ( 132 , 8 ) ;
		Text [ en-US ] = "Re~place with" ;
	};
	ComboBox ED_REPLACE
	{
	    HelpID = "svx:ComboBox:RID_SVXDLG_SEARCH:ED_REPLACE";
        Pos = MAP_APPFONT ( 6 , 65 ) ;
        Size = MAP_APPFONT ( 132 , 98 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
	};
	ListBox LB_REPLACE
	{
	    HelpID = "svx:ListBox:RID_SVXDLG_SEARCH:LB_REPLACE";
		Border = TRUE ;
        Pos = MAP_APPFONT ( 6 , 65 ) ;
        Size = MAP_APPFONT ( 132 , 98 ) ;
		TabStop = TRUE ;
		DropDown = TRUE ;
		Hide = TRUE ;
		Sort = TRUE ;
	};
	FixedText FT_REPLACE_ATTR
	{
        Pos = MAP_APPFONT ( 9 , 82 ) ;
        Size = MAP_APPFONT ( 129 , 16 ) ;
		WordBreak = TRUE ;
		Hide = TRUE ;
	};
	FixedText FT_REPLACE_FORMATS
	{
        Pos = MAP_APPFONT ( 9 , 82 ) ;
        Size = MAP_APPFONT ( 129 , 16 ) ;
        WordBreak = TRUE ;
		Hide = TRUE ;
	};
    PushButton BTN_SEARCH
    {
        HelpID = "svx:PushButton:RID_SVXDLG_SEARCH:BTN_SEARCH";
        Pos = MAP_APPFONT ( 144 , 9 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
        Text [ en-US ] = "~Find" ;
        TabStop = TRUE ;
        DefButton = TRUE ;
    };
    PushButton BTN_SEARCH_ALL
    {
        HelpID = "svx:PushButton:RID_SVXDLG_SEARCH:BTN_SEARCH_ALL";
        Pos = MAP_APPFONT ( 144 , 26 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
        Text [ en-US ] = "Find ~All" ;
        TabStop = TRUE ;
    };
    FixedLine FL_SEARCH_COMMAND
    {
        Pos = MAP_APPFONT ( 141 , 44 ) ;
        Size = MAP_APPFONT ( 56 , 8 ) ;
    };
    PushButton BTN_REPLACE
    {
        HelpID = "svx:PushButton:RID_SVXDLG_SEARCH:BTN_REPLACE";
        Pos = MAP_APPFONT ( 144 , 56 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
        Text [ en-US ] = "~Replace" ;
        TabStop = TRUE ;
    };
    PushButton BTN_REPLACE_ALL
    {
        HelpID = "svx:PushButton:RID_SVXDLG_SEARCH:BTN_REPLACE_ALL";
        Pos = MAP_APPFONT ( 144 , 73 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
        Text [ en-US ] = "Replace A~ll" ;
        TabStop = TRUE ;
    };
    FixedLine FL_SEARCH_COMPONENT
    {
        Pos = MAP_APPFONT ( 141 , 91 ) ;
        Size = MAP_APPFONT ( 56 , 8 ) ;
        Hide = TRUE;
    };
    PushButton BTN_COMPONENT_1
    {
        HelpID = "svx:PushButton:RID_SVXDLG_SEARCH:BTN_COMPONENT_1";
        Pos = MAP_APPFONT ( 144 , 103 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
        TabStop = TRUE ;
        Hide = TRUE;
    };
    PushButton BTN_COMPONENT_2
    {
        HelpID = "svx:PushButton:RID_SVXDLG_SEARCH:BTN_COMPONENT_2";
        Pos = MAP_APPFONT ( 144 , 120 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
        TabStop = TRUE ;
        Hide = TRUE;
    };
    CheckBox CB_MATCH_CASE
    {
        HelpID = "svx:CheckBox:RID_SVXDLG_SEARCH:CB_MATCH_CASE";
        Pos = MAP_APPFONT ( 12 , 101 ) ;
        Size = MAP_APPFONT ( 126 , 10 ) ;
        TabStop = TRUE ;
        Text [ en-US ] = "Ma~tch case";
    };
    CheckBox CB_WHOLE_WORDS
    {
        HelpID = "svx:CheckBox:RID_SVXDLG_SEARCH:CB_WHOLE_WORDS";
        Pos = MAP_APPFONT ( 12 , 114 ) ;
        Size = MAP_APPFONT ( 126 , 10 ) ;
        Text [ en-US ] = "Whole wor~ds only" ;
        TabStop = TRUE ;
    };
    FixedLine FL_BUTTONS
    {
        Pos = MAP_APPFONT ( 0 , 124 ) ;
        Size = MAP_APPFONT ( 200 , 8 ) ;
    };
    MoreButton BTN_MORE
    {
        HelpID = "svx:MoreButton:RID_SVXDLG_SEARCH:BTN_MORE";
        Pos = MAP_APPFONT ( 6 , 135 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
        TabStop = TRUE ;
        MapUnit = MAP_APPFONT ;
        Delta = 174 ;
        State = FALSE ;
    };
    HelpButton BTN_HELP
    {
        Pos = MAP_APPFONT ( 88 , 135 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
        TabStop = TRUE ;
    };
    CancelButton BTN_CLOSE
    {
        Pos = MAP_APPFONT ( 144 , 135 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
        Text [ en-US ] = "~Close" ;
        TabStop = TRUE ;
    };
    FixedLine FL_OPTIONS
    {
        Pos = MAP_APPFONT ( 6 , 152 ) ;
        Size = MAP_APPFONT ( 191 , 8 ) ;
        Hide = TRUE ;
    };
    CheckBox CB_SELECTIONS
    {
        HelpID = "svx:CheckBox:RID_SVXDLG_SEARCH:CB_SELECTIONS";
        Pos = MAP_APPFONT ( 12 , 163 ) ;
        Size = MAP_APPFONT ( 126 , 10 ) ;
        Text [ en-US ] = "C~urrent selection only" ;
        TabStop = TRUE ;
        Hide = TRUE ;
    };
    CheckBox CB_BACKWARDS
	{
        HelpID = "svx:CheckBox:RID_SVXDLG_SEARCH:CB_BACKWARDS";
        Pos = MAP_APPFONT ( 12 , 176 ) ;
        Size = MAP_APPFONT ( 126 , 10 ) ;
		Text [ en-US ] = "Bac~kwards" ;
		TabStop = TRUE ;
        Hide = TRUE ;
	};
    CheckBox CB_REGEXP
    {
        HelpID = "svx:CheckBox:RID_SVXDLG_SEARCH:CB_REGEXP";
        Pos = MAP_APPFONT ( 12 , 189 ) ;
        Size = MAP_APPFONT ( 126 , 10 ) ;
        Text [ en-US ] = "Regular e~xpressions" ;
        TabStop = TRUE ;
        Hide = TRUE ;
    };
    CheckBox CB_SIMILARITY
    {
        HelpID = "svx:CheckBox:RID_SVXDLG_SEARCH:CB_SIMILARITY";
        Pos = MAP_APPFONT ( 12 , 204 ) ;
        Size = MAP_APPFONT ( 109 , 10 ) ;
        Text [ en-US ] = "S~imilarity search" ;
        TabStop = TRUE ;
        Hide = TRUE ;
    };
    PushButton PB_SIMILARITY
    {
        HelpID = "svx:PushButton:RID_SVXDLG_SEARCH:PB_SIMILARITY";
        Pos = MAP_APPFONT ( 124 , 202 ) ;
        Size = MAP_APPFONT ( 14 , 14 ) ;
        Text = "~..." ;
        TabStop = TRUE ;
        Hide = TRUE ;
    };
    CheckBox CB_LAYOUTS
    {
        HelpID = "svx:CheckBox:RID_SVXDLG_SEARCH:CB_LAYOUTS";
        Pos = MAP_APPFONT ( 12 , 219 ) ;
        Size = MAP_APPFONT ( 126 , 10 ) ;
        Text [ en-US ] = "Search for St~yles" ;
        TabStop = TRUE ;
        Hide = TRUE ;
    };
    CheckBox CB_NOTES
    {
        HelpID = "svx:CheckBox:RID_SVXDLG_SEARCH:CB_NOTES";
        Pos = MAP_APPFONT ( 12 , 232 ) ;
        Size = MAP_APPFONT ( 126 , 10 ) ;
        TabStop = TRUE ;
        Text [ en-US ] = "Notes";
    };
    CheckBox CB_JAP_MATCH_FULL_HALF_WIDTH
	{
        HelpID = "svx:CheckBox:RID_SVXDLG_SEARCH:CB_JAP_MATCH_FULL_HALF_WIDTH";
        Pos = MAP_APPFONT ( 12 , 247 ) ;
        Size = MAP_APPFONT ( 126 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Match character width";
        Hide = TRUE ;
	};
	CheckBox CB_JAP_SOUNDS_LIKE
	{
	    HelpID = "svx:CheckBox:RID_SVXDLG_SEARCH:CB_JAP_SOUNDS_LIKE";
        Pos = MAP_APPFONT ( 12 , 260 ) ;
        Size = MAP_APPFONT ( 109 , 10 ) ;
		TabStop = TRUE ;
		Text [ en-US ] = "Sounds like (Japanese)";
        Hide = TRUE ;
	};
	PushButton PB_JAP_OPTIONS
	{
	    HelpID = "svx:PushButton:RID_SVXDLG_SEARCH:PB_JAP_OPTIONS";
        Pos = MAP_APPFONT ( 124 , 258 ) ;
		Size = MAP_APPFONT ( 14 , 14 ) ;
		Text = "..." ;
		TabStop = TRUE ;
        Hide = TRUE ;
	};
    PushButton BTN_ATTRIBUTE
    {
        HelpID = "svx:PushButton:RID_SVXDLG_SEARCH:BTN_ATTRIBUTE";
        Pos = MAP_APPFONT ( 144 , 163 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
        Text [ en-US ] = "Attri~butes..." ;
        TabStop = TRUE ;
        Hide = TRUE ;
    };
    PushButton BTN_FORMAT
    {
        HelpID = "svx:PushButton:RID_SVXDLG_SEARCH:BTN_FORMAT";
        Pos = MAP_APPFONT ( 144 , 180 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
        Text [ en-US ] = "For~mat..." ;
        TabStop = TRUE ;
        Hide = TRUE ;
    };
    PushButton BTN_NOFORMAT
    {
        HelpID = "svx:PushButton:RID_SVXDLG_SEARCH:BTN_NOFORMAT";
        Pos = MAP_APPFONT ( 144 , 197 ) ;
        Size = MAP_APPFONT ( 50 , 14 ) ;
        Text [ en-US ] = "~No Format" ;
        TabStop = TRUE ;
        Hide = TRUE ;
    };
    FixedLine FL_CALC
    {
        Pos = MAP_APPFONT ( 6 , 272 ) ;
        Size = MAP_APPFONT ( 191 , 8 ) ;
        Hide = TRUE ;
    };
    FixedText FT_CALC_SEARCHIN
    {
        Pos = MAP_APPFONT ( 12 , 285 ) ;
        Size = MAP_APPFONT ( 60 , 8 ) ;
        Text [ en-US ] = "Search i~n" ;
        Hide = TRUE ;
    };
    ListBox LB_CALC_SEARCHIN
    {
        HelpID = "svx:ListBox:RID_SVXDLG_SEARCH:LB_CALC_SEARCHIN";
        Border = TRUE ;
        Pos = MAP_APPFONT ( 75 , 283 ) ;
        Size = MAP_APPFONT ( 63 , 48 ) ;
        TabStop = TRUE ;
        DropDown = TRUE ;
        Hide = TRUE ;
        StringList [ en-US ] =
        {
            < "Formulas" ; Default ; > ;
            < "Values" ; Default ; > ;
            < "Notes" ; Default ; > ;
        };
    };
    FixedText FT_CALC_SEARCHDIR
    {
        Pos = MAP_APPFONT ( 12 , 300 ) ;
        Size = MAP_APPFONT ( 60 , 8 ) ;
        Text [ en-US ] = "Search ~direction" ;
        Hide = TRUE ;
    };
    RadioButton RB_CALC_ROWS
	{
        HelpID = "svx:RadioButton:RID_SVXDLG_SEARCH:RB_CALC_ROWS";
        Pos = MAP_APPFONT ( 75 , 300 ) ;
        Size = MAP_APPFONT ( 63 , 10 ) ;
		Text [ en-US ] = "Ro~ws" ;
		Hide = TRUE ;
	};
    RadioButton RB_CALC_COLUMNS
	{
        HelpID = "svx:RadioButton:RID_SVXDLG_SEARCH:RB_CALC_COLUMNS";
        Pos = MAP_APPFONT ( 75 , 313 ) ;
        Size = MAP_APPFONT ( 63 , 10 ) ;
		Text [ en-US ] = "Colu~mns" ;
		Hide = TRUE ;
	};
    CheckBox CB_ALL_SHEETS
    {
        HelpID = "svx:CheckBox:RID_SVXDLG_SEARCH:CB_ALL_SHEETS";
        Pos = MAP_APPFONT ( 12 , 326 ) ;
        Size = MAP_APPFONT ( 126 , 10 ) ;
        Text [ en-US ] = "Search in all sheets" ;
        Hide = TRUE ;
    };

    String STR_WORDCALC
	{
		Text [ en-US ] = "~Entire cells" ;
	};
    String STR_MORE_BTN
    {
        Text [ en-US ] = "More ~Options" ;
    };
    String STR_LESS_BTN
    {
        Text [ en-US ] = "Fewer ~Options" ;
    };
};

 // ********************************************************************** EOF

