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

#include <svtools/controldims.hrc>

// defines for positions and sizes ---------------------------------------

#define WHOLE_WIDTH				248

#define COLSPACE				RSC_SP_CTRL_DESC_X
#define COL0					6
#define COL1					(COL0+6)
#define COL2					(COL1+140)			// width text before control
#define COL3					(COL2+COLSPACE)
#define COL4					(COL3+30)			// width control
#define COL5					(COL4+COLSPACE)
#define COL6					(WHOLE_WIDTH)		// width text after control (unit)

#define ROWSPACE				RSC_SP_CTRL_DESC_Y
#define ROW0					3
#define ROW1					( ROW0+RSC_CD_FIXEDLINE_HEIGHT+ROWSPACE )
#define ROW2					( ROW1+RSC_CD_TEXTBOX_HEIGHT+ROWSPACE )
#define ROW3					( ROW2+RSC_CD_FIXEDLINE_HEIGHT+ROWSPACE )
#define ROW4					( ROW3+RSC_CD_TEXTBOX_HEIGHT+ROWSPACE )
#define ROW5					( ROW4+RSC_CD_TEXTBOX_HEIGHT+ROWSPACE )
#define ROW6					( ROW5+RSC_CD_TEXTBOX_HEIGHT+ROWSPACE )
#define ROW7					( ROW6+RSC_CD_FIXEDLINE_HEIGHT+ROWSPACE )
#define ROW8					( ROW7+RSC_CD_TEXTBOX_HEIGHT+ROWSPACE )
#define ROW9					( ROW8+RSC_CD_FIXEDLINE_HEIGHT+ROWSPACE )

#define DIFF(v1,v2)				(v2-v1)
#define OFFS_TEXTBOX_FIXEDTEXT(base)	(base+(RSC_CD_TEXTBOX_HEIGHT-RSC_CD_FIXEDTEXT_HEIGHT)/2)

#define WIDTH1					DIFF( COL1, COL2 )
#define WIDTH2					DIFF( COL3, COL4 )
#define WIDTH3					DIFF( COL5, COL6 )
// tabpage memory --------------------------------------------------------

#define GB_UNDO							10
#define FT_UNDO							11
#define ED_UNDO							12
#define GB_GRAPHICCACHE					13
#define FT_GRAPHICCACHE					14
#define FT_GRAPHICCACHE_UNIT			15
#define FT_GRAPHICOBJECTCACHE_UNIT		16
#define FT_GRAPHICOBJECTTIME_UNIT		17
#define NF_GRAPHICCACHE					18
#define FT_GRAPHICOBJECTCACHE			19
#define NF_GRAPHICOBJECTCACHE			20
#define FT_GRAPHICOBJECTTIME			21
#define TF_GRAPHICOBJECTTIME			22
#define GB_OLECACHE						23
#define FT_OLECACHE						24
#define NF_OLECACHE                 	25
#define FL_QUICKLAUNCH					26
#define CB_QUICKLAUNCH					27
#define STR_QUICKLAUNCH_UNX 				28

#endif // #ifndef _OFA_OPTMEMORY_HRC
