/**************************************************************
 *
 * 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 "optupdt.hrc"
#include <cuires.hrc>
#include "helpid.hrc"

// RID_SVXPAGE_ONLINEUPDATE --------------------------------------------
TabPage RID_SVXPAGE_ONLINEUPDATE
{
	HelpId = HID_SVX_OPTIONS_ONLINEUPDATE ;
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Hide = TRUE ;
	Size = MAP_APPFONT ( 260, 185 ) ;
	Text [ en-US ] = "OnlineUpdate" ;
	FixedLine FL_OPTIONS
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 248, 8 ) ;
		Text [ en-US ] = "Online Update Options" ;
	};
	CheckBox CB_AUTOCHECK
	{
		HelpID = "cui:CheckBox:RID_SVXPAGE_ONLINEUPDATE:CB_AUTOCHECK" ;
		Pos = MAP_APPFONT ( 12, 14 ) ;
		Size = MAP_APPFONT ( 210, 10 ) ;
		Text [ en-US ] = "~Check for updates automatically" ;
	};
	RadioButton RB_EVERYDAY
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_ONLINEUPDATE:RB_EVERYDAY" ;
		Pos = MAP_APPFONT ( 18, 27 ) ;
		Size = MAP_APPFONT ( 160, 10 ) ;
		Text [ en-US ] = "Every Da~y" ;
	};
	RadioButton RB_EVERYWEEK
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_ONLINEUPDATE:RB_EVERYWEEK" ;
		Pos = MAP_APPFONT ( 18, 40 ) ;
		Size = MAP_APPFONT ( 160, 10 ) ;
		Text [ en-US ] = "Every ~Week" ;
	};
	RadioButton RB_EVERYMONTH
	{
		HelpID = "cui:RadioButton:RID_SVXPAGE_ONLINEUPDATE:RB_EVERYMONTH" ;
		Pos = MAP_APPFONT ( 18, 53 ) ;
		Size = MAP_APPFONT ( 160, 10 ) ;
		Text [ en-US ] = "Every ~Month" ;
	};
	FixedText FT_LASTCHECKED
	{
		Pos = MAP_APPFONT ( 12, 69 ) ;
		Size = MAP_APPFONT ( 160, 10 ) ;
		Text [ en-US ] = "Last checked: %DATE%, %TIME%" ;
	};
	PushButton PB_CHECKNOW
	{
		HelpID = "cui:PushButton:RID_SVXPAGE_ONLINEUPDATE:PB_CHECKNOW" ;
		Pos = MAP_APPFONT ( 12, 82 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Text [ en-US ] = "Check ~now" ;
	};
	CheckBox CB_AUTODOWNLOAD
	{
		HelpID = "cui:CheckBox:RID_SVXPAGE_ONLINEUPDATE:CB_AUTODOWNLOAD" ;
		Pos = MAP_APPFONT ( 12, 130 ) ;
		Size = MAP_APPFONT ( 160, 10 ) ;
		Text [ en-US ] = "~Download updates automatically" ;
	};
	FixedText FT_DESTPATHLABEL
	{
		Pos = MAP_APPFONT ( 22, 143 ) ;
		Size = MAP_APPFONT ( 150, 8 ) ;
		Text [ en-US ] = "Download destination:" ;
	};
	FixedText FT_DESTPATH
	{
		Pos = MAP_APPFONT ( 22, 154 ) ;
		Size = MAP_APPFONT ( 138, 8 ) ;
	};
	PushButton PB_CHANGEPATH
	{
		HelpID = "cui:PushButton:RID_SVXPAGE_ONLINEUPDATE:PB_CHANGEPATH" ;
		Pos = MAP_APPFONT ( 162, 151 ) ;
		Size = MAP_APPFONT ( 50, 14 ) ;
		Text [ en-US ] = "Ch~ange..." ;
	};
	String STR_NEVERCHECKED
	{
		Text [ en-US ] = "Last checked: Not yet" ;
	};
};

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