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

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

FloatingWindow RID_BASICIDE_OBJCAT
{
    HelpID = "basctl:FloatingWindow:RID_BASICIDE_OBJCAT";
	OutputSize = TRUE ;
	SVLook = TRUE ;
	Size = MAP_APPFONT ( 191 , 179 ) ;
	Text [ en-US ] = "Objects" ;
	Closeable = TRUE ;
	Moveable = TRUE ;
	Sizeable = TRUE ;
	Zoomable = TRUE ;
	Hide = TRUE ;
	ClipChildren = TRUE ;
	Control RID_TLB_MACROS
	{
		HelpId = HID_BASICIDE_OBJECTCAT ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 3 , 24 ) ;
		Size = MAP_APPFONT ( 185 , 126 ) ;
		TabStop = TRUE ;
	};
	ToolBox RID_TB_TOOLBOX
	{
		HelpId = HID_BASICIDE_OBJECTS ;
		SVLook = TRUE ;
		Align = BOXALIGN_TOP ;
		Pos = MAP_APPFONT ( 4 , 6 ) ;
		ItemImageList = ImageList
		{
    	    Prefix = "im";
			MASKCOLOR
			IdList =
			{
				TBITEM_SHOW ;
			};
		};
		ItemList =
		{
			ToolBoxItem
			{
				Identifier = TBITEM_SHOW ;
				HelpId = HID_BASICIDE_OBJCAT_SHOW ;
				Text [ en-US ] = "Show" ;
			};
		};
	};
    ImageList RID_IMGLST_TB_HC
    {
        Prefix = "imh";
        MASKCOLOR
        IdList =
        {
            TBITEM_SHOW ;
        };
    };
	FixedText RID_FT_MACRODESCR
	{
		WordBreak = TRUE ;
		Pos = MAP_APPFONT ( 3 , 156 ) ;
		Size = MAP_APPFONT ( 185 , 18 ) ;
	};
};

String RID_STR_TLB_MACROS
{
	Text [ en-US ] = "Objects Tree";
};
