/*
 * Copyright 2008 by Katayama Hirofumi MZ
 *
 * 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 "wordpad.h"

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

LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT

IDD_DATETIME DIALOG 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "日付と時刻"
FONT 10, "MS Shell Dlg"
BEGIN
    LTEXT        "利用できる形式",-1,3,2,100,15
    LISTBOX      IDC_DATETIME,3,12,80,65,LBS_NOINTEGRALHEIGHT | LBS_NOTIFY
    PUSHBUTTON   "&OK",IDOK,87,12,40,12
    PUSHBUTTON   "キャンセル(&C)",IDCANCEL,87,26,40,12
END

IDD_NEWFILE DIALOG 30, 20, 140, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "新規作成"
FONT 10, "MS Shell Dlg"
BEGIN
    LTEXT        "新しい文書形式",-1,3,2,100,15
    LISTBOX      IDC_NEWFILE,3,12,90,65,LBS_NOINTEGRALHEIGHT
    PUSHBUTTON   "&OK",IDOK,97,12,40,12
    PUSHBUTTON   "キャンセル(&C)",IDCANCEL,97,26,40,12
END

IDD_PARAFORMAT DIALOG 30, 20, 200, 110
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "段落の設定"
FONT 9, "MS Shell Dlg"
BEGIN
    GROUPBOX "インデント", -1, 10, 10, 120, 68
    LTEXT "左(&L)", -1, 15, 22, 40, 13
    EDITTEXT IDC_PARA_LEFT, 55, 20, 60, 13
    LTEXT "右(&R)", -1, 15, 40, 40, 13
    EDITTEXT IDC_PARA_RIGHT, 55, 38, 60, 13
    LTEXT "最初の行(&F)", -1, 15, 58, 40, 13
    EDITTEXT IDC_PARA_FIRST, 55, 56, 60, 13
    LTEXT "整列(&A)", -1, 15, 87, 40, 13
    COMBOBOX IDC_PARA_ALIGN, 55, 85, 60, 60, CBS_DROPDOWNLIST
    PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15
    PUSHBUTTON "キャンセル(&C)", IDCANCEL, 137, 33, 50, 15
END

IDD_TABSTOPS DIALOG 30, 20, 200, 110
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "タブの設定"
FONT 9, "MS Shell Dlg"
BEGIN
    GROUPBOX "タブの停止位置(&T)", -1, 10, 10, 120, 90
    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
    DEFPUSHBUTTON "追加(&A)", ID_TAB_ADD, 20, 80, 45, 15
    PUSHBUTTON "削除(&R)", ID_TAB_DEL, 72, 80, 45, 15
    PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15
    PUSHBUTTON "キャンセル(&C)", IDCANCEL, 137, 33, 50, 15
    PUSHBUTTON "すべて削除(&L)", ID_TAB_EMPTY, 137, 51, 50, 15
END

IDD_FORMATOPTS DIALOG 0, 0, 280, 110
STYLE DS_SYSMODAL
CAPTION ""
FONT 9, "MS Shell Dlg"
BEGIN
    GROUPBOX "行の折り返し", -1, 10, 10, 130, 85
    RADIOBUTTON "折り返ししない", IDC_PAGEFMT_WN, 18, 25, 117, 15
    RADIOBUTTON "ウィンドウの境界で折り返す(&W)", IDC_PAGEFMT_WW, 18, 45, 117, 15
    RADIOBUTTON "マージンで折り返す(&M)", IDC_PAGEFMT_WM, 18, 65, 117, 15
    GROUPBOX "ツールバー", -1, 150, 10, 120, 85
    CHECKBOX "ツールバー(&T)", IDC_PAGEFMT_TB, 160, 20, 80, 15
    CHECKBOX "書式バー(&F)", IDC_PAGEFMT_FB, 160, 38, 80, 15
    CHECKBOX "ルーラー(&R)", IDC_PAGEFMT_RU, 160, 56, 80, 15
    CHECKBOX "ステータスバー(&S)", IDC_PAGEFMT_SB, 160, 74, 80, 15
    LTEXT "", IDC_PAGEFMT_ID, 0,0,0,0
END
