/**************************************************************
 *
 * 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 <svx/svxids.hrc>
#include "app.hrc"

 //----------------------------------------------------------------------------
String RID_APPTITLE
{
    Text = "%PRODUCTNAME %PRODUCTVERSION %PRODUCTEXTENSION" ;
};

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

ErrorBox RID_ERRBOX_MODULENOTINSTALLED
{
	Buttons = WB_OK ;
	Message [ en-US ] = "The action could not be executed. The %PRODUCTNAME program module needed for this action is currently not installed.";
};

#define IMAGE_ID_LIST\
	IdList = {\
		SID_HLINKBAR_LINK; \
		SID_HLINKBAR_SEARCH; \
		SID_HLINKBAR_TARGET; \
		SID_HYPERLINK_DIALOG; \
    };\
	IdCount = {\
        4;\
	};

ImageList RID_DEFAULTIMAGELIST_SC
{
    Prefix = "sc";
	MASKCOLOR
	IMAGE_ID_LIST
};

ImageList RID_DEFAULTIMAGELIST_LC
{
    Prefix = "lc";
	MASKCOLOR
	IMAGE_ID_LIST
};

ImageList RID_DEFAULTIMAGELIST_SCH
{
    Prefix = "sch";
    MASKCOLOR
    IMAGE_ID_LIST
};

ImageList RID_DEFAULTIMAGELIST_LCH
{
    Prefix = "lch";
    MASKCOLOR
    IMAGE_ID_LIST
};

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

String RID_DESKTOP
{
	Text = "%PRODUCTNAME" ;
};
