/*
 * Copyright 2006-2009 by Jonathan Ernst
 * Copyright 2010      by Frédéric Delanoy
 *
 * 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_FRENCH, SUBLANG_NEUTRAL

IDD_DATETIME DIALOG 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Date et heure"
FONT 10, "MS Sans Serif"
BEGIN
    LTEXT        "Formats disponibles",-1,3,2,100,15
    LISTBOX      IDC_DATETIME,3,12,80,65,LBS_NOINTEGRALHEIGHT | LBS_NOTIFY
    PUSHBUTTON   "&OK",IDOK,87,12,40,12
    PUSHBUTTON   "&Annuler",IDCANCEL,87,26,40,12
END

IDD_NEWFILE DIALOG 30, 20, 140, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Nouveau"
FONT 10, "MS Sans Serif"
BEGIN
    LTEXT        "Nouveau type de document",-1,3,2,100,15
    LISTBOX      IDC_NEWFILE,3,12,90,65,LBS_NOINTEGRALHEIGHT
    PUSHBUTTON   "&OK",IDOK,97,12,40,12
    PUSHBUTTON   "&Annuler",IDCANCEL,97,26,40,12
END

IDD_PARAFORMAT DIALOG 30, 20, 200, 110
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Format de paragraphe"
FONT 8, "MS Shell Dlg"
BEGIN
    GROUPBOX "Indentation", -1, 10, 10, 120, 68
    LTEXT "Gauche", -1, 15, 22, 40, 13
    EDITTEXT IDC_PARA_LEFT, 55, 20, 60, 13
    LTEXT "Droite", -1, 15, 40, 40, 13
    EDITTEXT IDC_PARA_RIGHT, 55, 38, 60, 13
    LTEXT "Première ligne", -1, 15, 58, 40, 18
    EDITTEXT IDC_PARA_FIRST, 55, 56, 60, 13
    LTEXT "Alignement", -1, 15, 87, 40, 13
    COMBOBOX IDC_PARA_ALIGN, 55, 85, 60, 60, CBS_DROPDOWNLIST
    PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15
    PUSHBUTTON "&Annuler", IDCANCEL, 137, 33, 50, 15
END

IDD_TABSTOPS DIALOG 30, 20, 200, 110
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Tabulations"
FONT 8, "MS SHell DLg"
BEGIN
    GROUPBOX "Taquets de tabulation", -1, 10, 10, 120, 90
    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
    DEFPUSHBUTTON "A&jouter", ID_TAB_ADD, 20, 80, 45, 15
    PUSHBUTTON "&Supprimer", ID_TAB_DEL, 72, 80, 45, 15
    PUSHBUTTON "&OK", IDOK, 137, 15, 56, 15
    PUSHBUTTON "&Annuler", IDCANCEL, 137, 33, 56, 15
    PUSHBUTTON "Supprimer &tous", ID_TAB_EMPTY, 137, 51, 56, 15
END

IDD_FORMATOPTS DIALOG 0, 0, 280, 110
STYLE DS_SYSMODAL
CAPTION ""
FONT 8, "MS Shell Dlg"
BEGIN
    GROUPBOX "Passage à la ligne automatique", -1, 10, 10, 140, 85
    RADIOBUTTON "&Aucun", IDC_PAGEFMT_WN, 18, 25, 127, 15
    RADIOBUTTON "Au niveau de la bordure de fe&nêtre", IDC_PAGEFMT_WW, 18, 45, 127, 15
    RADIOBUTTON "Au niveau de la &marge", IDC_PAGEFMT_WM, 18, 65, 127, 15
    GROUPBOX "Barres d'outils", -1, 156, 10, 115, 85
    CHECKBOX "&Barre d'outils", IDC_PAGEFMT_TB, 166, 20, 80, 15
    CHECKBOX "Barre de &format", IDC_PAGEFMT_FB, 166, 38, 80, 15
    CHECKBOX "&Règle", IDC_PAGEFMT_RU, 166, 56, 80, 15
    CHECKBOX "Barre de &statut", IDC_PAGEFMT_SB, 166, 74, 80, 15
    LTEXT "", IDC_PAGEFMT_ID, 0,0,0,0
END
