/*
 * Help Viewer (Russian resources)
 *
 * Copyright 2003 Igor Stepin
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include "winhelp_res.h"

/* UTF-8 */
#pragma code_page(65001)

LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT

/* Menu */

MAIN_MENU MENU
{
 POPUP "&Файл" {
  MENUITEM "&Открыть", MNID_FILE_OPEN
  MENUITEM SEPARATOR
  MENUITEM "&Печатать", MNID_FILE_PRINT
  MENUITEM "Настройка &принтера...", MNID_FILE_SETUP
   MENUITEM SEPARATOR
  MENUITEM "&Выход", MNID_FILE_EXIT
 }
 POPUP "&Правка" {
   MENUITEM "&Копировать...", MNID_EDIT_COPYDLG
   MENUITEM SEPARATOR
   MENUITEM "&Заметки...", MNID_EDIT_ANNOTATE
 }
 POPUP "&Закладка" {
   MENUITEM "&Определить...", MNID_BKMK_DEFINE
 }
 POPUP "&Настройки" {
   POPUP	"Видимость окна справки"
   BEGIN
     MENUITEM "По умолчанию",	MNID_OPTS_HELP_DEFAULT
     MENUITEM "Наверху",	MNID_OPTS_HELP_VISIBLE
     MENUITEM "Не наверху",	MNID_OPTS_HELP_NONVISIBLE
  END
  MENUITEM "История",		MNID_OPTS_HISTORY
  POPUP    "Шрифт"
  BEGIN
    MENUITEM "Мелкий",		MNID_OPTS_FONTS_SMALL
    MENUITEM "Обычный",    	MNID_OPTS_FONTS_NORMAL
    MENUITEM "Крупный",     	MNID_OPTS_FONTS_LARGE
  END
  MENUITEM "Использовать системные цвета",	MNID_OPTS_SYSTEM_COLORS
 }
 POPUP "&Справка" {
   MENUITEM "Помощь &по помощи", MNID_HELP_HELPON
   MENUITEM "Всегда &сверху", MNID_HELP_HELPTOP
   MENUITEM SEPARATOR
   MENUITEM "&Информация...", MNID_HELP_ABOUT
 }
}

IDD_INDEX DIALOG 0, 0, 200, 190
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Указатель"
{
    LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER
}

IDD_SEARCH DIALOG 0, 0, 200, 190
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg"
CAPTION "Поиск"
{
    LTEXT  "Не реализовано", -1, 10, 10, 180, 150
}

/* Strings */
STRINGTABLE
{
STID_WINE_HELP, 	"Справка Wine"
STID_WHERROR, 		"ОШИБКА"
STID_WARNING,  		"ВНИМАНИЕ"
STID_INFO,  		"Информация"
STID_NOT_IMPLEMENTED, 	"Не реализовано"
STID_HLPFILE_ERROR_s, 	"Ошибка при чтении файла помощи `%s'"
STID_INDEX, 		"&Содержание"
STID_CONTENTS,		"Начало"
STID_BACK, 		"&Назад"
STID_ALL_FILES, 	"Все файлы (*.*)"
STID_HELP_FILES_HLP, 	"Файлы справки (*.hlp)"
STID_FILE_NOT_FOUND_s	"Не могу найти '%s'. Вы хотите найти этот файл самостоятельно?"
STID_NO_RICHEDIT	"Не могу найти richedit"
STID_PSH_INDEX,		"Содержание: "
}

CONTEXT_MENU MENU
BEGIN
	POPUP ""
	BEGIN
		MENUITEM "Заметки...",       MNID_CTXT_ANNOTATE
		MENUITEM "Копировать",                MNID_CTXT_COPY
		MENUITEM "Печать...",            MNID_CTXT_PRINT
		POPUP    "Шрифт"
		BEGIN
			MENUITEM "Мелкий",       MNID_CTXT_FONTS_SMALL
			MENUITEM "Обычный",      MNID_CTXT_FONTS_NORMAL
			MENUITEM "Крупный",       MNID_CTXT_FONTS_LARGE
		END
		POPUP   "Видимость окна справки"
		BEGIN
			MENUITEM "По умолчанию",     MNID_CTXT_HELP_DEFAULT
			MENUITEM "Наверху",     MNID_CTXT_HELP_VISIBLE
			MENUITEM "Не наверху", MNID_CTXT_HELP_NONVISIBLE
		END
		MENUITEM "Использовать системные цвета",   MNID_CTXT_SYSTEM_COLORS
	END
END
