/**************************************************************
 * 
 * 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_TRENDLINE_HXX
#define _CHART2_RESOURCE_TRENDLINE_HXX

#include "res_Trendline_IDs.hrc"
#include "HelpIds.hrc"

#define RESOURCE_TRENDLINE(availablewidth, yoffset) \
FixedLine FL_TYPE \
{ \
    Pos = MAP_APPFONT( 6 ,6  ); \
    Size = MAP_APPFONT( availablewidth - 12 ,8 ); \
    Text[ en-US ] = "Regression Type"; \
}; \
RadioButton RB_NONE \
{ \
    HelpId = HID_SCH_TRENDLINE_RB_NONE; \
    Pos = MAP_APPFONT( 29, 22  ); \
    Size = MAP_APPFONT( 100, 10 ); \
    Text[ en-US ] = "~None"; \
}; \
RadioButton RB_LINEAR \
{ \
    HelpId = HID_SCH_TRENDLINE_RB_LINEAR; \
    Pos = MAP_APPFONT( 29, 22 + yoffset ); \
    Size = MAP_APPFONT( 100, 10 ); \
    Text[ en-US ] = "~Linear"; \
}; \
RadioButton RB_LOGARITHMIC \
{ \
    HelpId = HID_SCH_TRENDLINE_RB_LOGARITHMIC; \
    Pos = MAP_APPFONT( 29, 44  + yoffset ); \
    Size = MAP_APPFONT( 100, 10 ); \
    Text[ en-US ] = "L~ogarithmic"; \
}; \
RadioButton RB_EXPONENTIAL \
{ \
    HelpId = HID_SCH_TRENDLINE_RB_EXPONENTIAL; \
    Pos = MAP_APPFONT( 29, 66 + yoffset  ); \
    Size = MAP_APPFONT( 100, 10 ); \
    Text[ en-US ] = "E~xponential"; \
}; \
RadioButton RB_POWER \
{ \
    HelpId = HID_SCH_TRENDLINE_RB_POWER; \
    Pos = MAP_APPFONT( 29, 88 + yoffset ); \
    Size = MAP_APPFONT( 100, 10 ); \
    Text[ en-US ] = "~Power"; \
}; \
FixedImage FI_NONE \
{ \
    Pos = MAP_APPFONT( 10, 18 ); \
    Size = MAP_APPFONT( 18, 18 ); \
}; \
FixedImage FI_LINEAR \
{ \
    Pos = MAP_APPFONT( 10, 18 + yoffset ); \
    Size = MAP_APPFONT( 18, 18 ); \
}; \
FixedImage FI_LOGARITHMIC \
{ \
    Pos = MAP_APPFONT( 10, 40 + yoffset ); \
    Size = MAP_APPFONT( 18, 18 ); \
}; \
FixedImage FI_EXPONENTIAL \
{ \
    Pos = MAP_APPFONT( 10, 62 + yoffset ); \
    Size = MAP_APPFONT( 18, 18 ); \
}; \
FixedImage FI_POWER \
{ \
    Pos = MAP_APPFONT( 10, 84 + yoffset ); \
    Size = MAP_APPFONT( 18, 18 ); \
}; \
FixedLine FL_EQUATION \
{ \
    Pos = MAP_APPFONT( 6, 108 + yoffset ); \
    Size = MAP_APPFONT( availablewidth - 12, 8 ); \
    Text[ en-US ] = "Equation"; \
}; \
CheckBox CB_SHOW_EQUATION \
{ \
    HelpId = HID_SCH_TRENDLINE_SHOW_EQUATION; \
    Pos = MAP_APPFONT( 10, 120 + yoffset ); \
    Size = MAP_APPFONT( availablewidth - 20, 10 ); \
    TabStop = TRUE; \
    Text[ en-US ] = "Show ~equation"; \
}; \
CheckBox CB_SHOW_CORRELATION_COEFF \
{ \
    HelpId = HID_SCH_TRENDLINE_SHOW_R_SQUARED; \
    Pos = MAP_APPFONT( 10, 134 + yoffset ); \
    Size = MAP_APPFONT( availablewidth - 20, 10 ); \
    TabStop = TRUE; \
    Text[ en-US ] = "Show ~coefficient of determination (R²)"; \
};

#endif
