/**************************************************************
 *
 * 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.
 *
 *************************************************************/


#ifndef _CHART2_RESOURCE_HXX
#define _CHART2_RESOURCE_HXX

#define BUTTONS_OK_CANCEL_HELP( xPos, yPos, xOffset, yOffset ) \
OKButton BTN_OK \
{ \
	Pos = MAP_APPFONT ( xPos , yPos ) ; \
	Size = MAP_APPFONT ( 50 , 14 ) ; \
	TabStop = TRUE ; \
	DefButton = TRUE ; \
}; \
CancelButton BTN_CANCEL \
{ \
	Pos = MAP_APPFONT ( xPos+xOffset , yPos+yOffset  ) ; \
	Size = MAP_APPFONT ( 50 , 14 ) ; \
	TabStop = TRUE ; \
}; \
HelpButton BTN_HELP \
{ \
	Pos = MAP_APPFONT ( xPos+xOffset+xOffset , yPos+yOffset+yOffset  ) ; \
	Size = MAP_APPFONT ( 50 , 14 ) ; \
	TabStop = TRUE ; \
};

#define BUTTONS_OK_CANCEL_HELP_STACKED( xPos ) \
BUTTONS_OK_CANCEL_HELP( xPos, 6, 0, 17 )

#define BUTTONS_HELP_OK_CANCEL( xPos, yPos, xOffset, yOffset ) \
HelpButton BTN_HELP \
{ \
    Pos = MAP_APPFONT ( xPos , yPos ) ; \
	Size = MAP_APPFONT ( 50 , 14 ) ; \
	TabStop = TRUE ; \
}; \
OKButton BTN_OK \
{ \
	Pos = MAP_APPFONT ( xPos+xOffset , yPos+yOffset  ) ; \
	Size = MAP_APPFONT ( 50 , 14 ) ; \
	TabStop = TRUE ; \
	DefButton = TRUE ; \
}; \
CancelButton BTN_CANCEL \
{ \
	Pos = MAP_APPFONT ( xPos+xOffset+xOffset , yPos+yOffset+yOffset  ) ; \
	Size = MAP_APPFONT ( 50 , 14 ) ; \
	TabStop = TRUE ; \
};

#define BUTTONS_HELP_OK_CANCEL_NEXT( xPos, yPos ) \
BUTTONS_HELP_OK_CANCEL( xPos, yPos, 53, 0 )


#endif
