/**************************************************************
 *
 * 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 ---------------------------------------------------------------
#include <cuires.hrc>
#include "postdlg.hrc"
#include "helpid.hrc"
#include <svx/dialogs.hrc> // for RID_SVXDLG_POSTIT

// RID_SVXDLG_POSTIT -----------------------------------------------------
ModalDialog RID_SVXDLG_POSTIT
{
	HelpId = HID_POSTIT_DIALOG ;
	OutputSize = TRUE ;
	SvLook = TRUE ;
	Size = MAP_APPFONT ( 228, 120 ) ;
	Text [ en-US ] = "Comments" ;
	Moveable = TRUE ;
	FixedText FT_LASTEDITLABEL
	{
		Pos = MAP_APPFONT ( 12, 14 ) ;
		Size = MAP_APPFONT ( 34, 8 ) ;
		Text [ en-US ] = "Author:" ;
		Left = TRUE ;
	};
	FixedText FT_LASTEDIT
	{
		Pos = MAP_APPFONT ( 45, 14 ) ;
		Size = MAP_APPFONT ( 120, 8 ) ;
		Left = TRUE ;
	};
	FixedText FT_EDIT
	{
		Pos = MAP_APPFONT ( 12, 27 ) ;
		Size = MAP_APPFONT ( 100, 8 ) ;
		Text [ en-US ] = "~Text" ;
		Left = TRUE ;
	};
	MultiLineEdit ED_EDIT
	{
		HelpID = "cui:MultiLineEdit:RID_SVXDLG_POSTIT:ED_EDIT" ;
		Border = TRUE ;
		Pos = MAP_APPFONT ( 12, 38 ) ;
		Size = MAP_APPFONT ( 153, 75 ) ;
		Left = TRUE ;
		VScroll = TRUE ;
		HScroll = TRUE ;
		IgnoreTab = TRUE ;
	};
	FixedLine FL_POSTIT
	{
		Pos = MAP_APPFONT ( 6, 3 ) ;
		Size = MAP_APPFONT ( 159, 8 ) ;
		Text [ en-US ] = "Contents" ;
	};
	OKButton BTN_POST_OK
	{
		Pos = MAP_APPFONT ( 171, 6 ) ;
		Size = MAP_APPFONT ( 50, 15 ) ;
		DefButton = TRUE ;
	};
	CancelButton BTN_POST_CANCEL
	{
		Pos = MAP_APPFONT ( 171, 23 ) ;
		Size = MAP_APPFONT ( 50, 15 ) ;
	};
	HelpButton BTN_POST_HELP
	{
		Pos = MAP_APPFONT ( 171, 40 ) ;
		Size = MAP_APPFONT ( 50, 15 ) ;
	};
	ImageButton BTN_PREV
	{
		HelpID = "cui:ImageButton:RID_SVXDLG_POSTIT:BTN_PREV" ;
		Pos = MAP_APPFONT ( 171, 60 ) ;
		Size = MAP_APPFONT ( 24, 14 ) ;
		Symbol = IMAGEBUTTON_ARROW_LEFT ;
	};
	ImageButton BTN_NEXT
	{
		HelpID = "cui:ImageButton:RID_SVXDLG_POSTIT:BTN_NEXT" ;
		Pos = MAP_APPFONT ( 197, 60 ) ;
		Size = MAP_APPFONT ( 24, 14 ) ;
		Symbol = IMAGEBUTTON_ARROW_RIGHT ;
	};
// TODO: cleanup code for these unused elements
//	FixedText FT_AUTHOR
//	{
//		Pos = MAP_APPFONT ( 12, 116 ) ;
//		Size = MAP_APPFONT ( 60, 8 ) ;
//		Text [ en-US ] = "~Insert" ;
//	};
//	PushButton BTN_AUTHOR
//	{
//		HelpID = "cui:PushButton:RID_SVXDLG_POSTIT:BTN_AUTHOR" ;
//		Pos = MAP_APPFONT ( 75, 114 ) ;
//		Size = MAP_APPFONT ( 60, 14 ) ;
//		Text [ en-US ] = "Author" ;
//	};
//	// local strings
//	String STR_NOTIZ_EDIT
//	{
//		Text [ en-US ] = "Edit Note" ;
//	};
//	String STR_NOTIZ_INSERT
//	{
//		Text [ en-US ] = "Insert note" ;
//	};
};

// ********************************************************************** EOF
