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

//  RID_SIDEBAR_POSSIZE_PANEL--------------------------------------------------------------
#define FT_WIDTH                                            1
#define MTR_FLD_WIDTH										2
#define FT_HEIGHT                                           3
#define MTR_FLD_HEIGHT										4
#define CBX_SCALE										    5
#define FT_SBSHAPE_HORIZONTAL                               7
#define MF_SBSHAPE_HORIZONTAL                               8
#define FT_SBSHAPE_VERTICAL                                 9
#define MF_SBSHAPE_VERTICAL                                 10
#define FT_SBSHAPE_POSREFERENCE                             11
#define CTL_SBSHAPE_POSREFERENCE                            12
#define FT_ANGLE											13
#define MTR_FLD_ANGLE										14
#define TBX_FLIP                                            15
#define DIAL_CONTROL										17
#define FLIP_HORIZONTAL										18
#define FLIP_VERTICAL										19
#define FT_FLIP												22
#define STR_QH_HORI_FLIP									23
#define STR_QH_VERT_FLIP									24

#define MBOX_WIDTH						50
#define TEXT_WIDTH                      40
#define FLIP_BUTTON_SIZE                13
#define ALIGNMENT_TBX_HEIGHT  17
#define ALIGNMENT_TBX_WIDTH   13

#define FT_POSITION_X_X							SECTIONPAGE_MARGIN_HORIZONTAL
#define FT_POSITION_X_Y							SECTIONPAGE_MARGIN_VERTICAL_TOP
#define MF_POSITION_X_X							FT_POSITION_X_X
#define MF_POSITION_X_Y							FT_POSITION_X_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL
#define FT_POSITION_Y_X							FT_POSITION_X_X + MBOX_WIDTH + CONTROL_SPACING_HORIZONTAL
#define FT_POSITION_Y_Y							FT_POSITION_X_Y
#define MF_POSITION_Y_X							FT_POSITION_Y_X
#define MF_POSITION_Y_Y							MF_POSITION_X_Y

#define FT_WIDTH_X								SECTIONPAGE_MARGIN_HORIZONTAL
#define FT_WIDTH_Y								MF_POSITION_X_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL
#define FLD_WIDTH_X								FT_WIDTH_X
#define FLD_WIDTH_Y								FT_WIDTH_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL
#define FT_HEIGHT_X								FT_WIDTH_X + MBOX_WIDTH + CONTROL_SPACING_HORIZONTAL				
#define FT_HEIGHT_Y								FT_WIDTH_Y
#define FLD_HEIGHT_X							FT_HEIGHT_X
#define FLD_HEIGHT_Y							FLD_WIDTH_Y
#define CBX_X                                   FT_WIDTH_X
#define CBX_Y									FLD_WIDTH_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL
/////////////////////
#define FT_ROTATION_X							FT_WIDTH_X			
#define FT_ROTATION_Y							CBX_Y + CONTROL_SPACING_VERTICAL + TEXT_HEIGHT

#define MF_ROTATION_X							FT_ROTATION_X + 40 + CONTROL_SPACING_HORIZONTAL
#define MF_ROTATION_Y							FT_ROTATION_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL

#define ROTATE_CONTROL_X						FT_ROTATION_X
#define ROTATE_CONTROL_Y						MF_ROTATION_Y + 4

#define FT_FLIP_X                               MF_ROTATION_X
#define FT_FLIP_Y								MF_ROTATION_Y + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL + 5

#define BTN_FLIP_HORI_X                         PROPERTYPAGE_WIDTH - SECTIONPAGE_MARGIN_HORIZONTAL - TOOLBOX_ITEM_WIDTH * 2 - 1   // wj for 7926
#define BTN_FLIP_HORI_Y							FT_FLIP_Y - 5
////////////////////////////////

#define FT_ANGLE_X                              FLD_WIDTH_X
#define FT_ANGLE_Y								FLD_WIDTH_Y + 4

#define MF_ANGLE_X2								MF_ROTATION_X
#define MF_ANGLE_Y2								FT_ANGLE_Y + TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL

#define ROTATE_CONTROL_X2						FT_ANGLE_X
#define ROTATE_CONTROL_Y2						MF_ANGLE_Y2 + 4

#define FT_FLIP_X2                              MF_ANGLE_X2
#define FT_FLIP_Y2								MF_ANGLE_Y2 + MBOX_HEIGHT + CONTROL_SPACING_VERTICAL + 5

#define FLIP_HORI_X2							PROPERTYPAGE_WIDTH - SECTIONPAGE_MARGIN_HORIZONTAL - TOOLBOX_ITEM_WIDTH * 2		//FT_FLIP_X2 + 22
#define FLIP_HORI_Y2							FT_FLIP_Y2 - 5

#define PS_SECTIONPAGE_HEIGHT                   BTN_FLIP_HORI_Y + ALIGNMENT_TBX_HEIGHT + SECTIONPAGE_MARGIN_VERTICAL_BOT + 2
#define PS_SECTIONPAGE_HEIGHT2                  FLIP_HORI_Y2 + ALIGNMENT_TBX_HEIGHT + SECTIONPAGE_MARGIN_VERTICAL_BOT + 2
#define PS_SECTIONPAGE_HEIGHT3                  FT_WIDTH_Y + TEXT_HEIGHT + SECTIONPAGE_MARGIN_VERTICAL_BOT
#define PS_SECTIONPAGE_HEIGHT4                  CBX_Y + CBOX_HEIGHT + SECTIONPAGE_MARGIN_VERTICAL_BOT

// eof
