/*
 * Portuguese Language File
 *
 * Copyright 2008 Ricardo Filipe
 * Copyright 2010 Gustavo Henrique Milaré
 *
 * 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"

#pragma code_page(65001)

LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL

IDD_DATETIME DIALOG 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Data e hora"
FONT 10, "MS Sans Serif"
BEGIN
    LTEXT        "Formatos Disponíveis",-1,3,2,100,15
    LISTBOX      IDC_DATETIME,3,12,80,65,LBS_NOINTEGRALHEIGHT | LBS_NOTIFY
    PUSHBUTTON   "&OK",IDOK,87,12,40,12
    PUSHBUTTON   "&Cancelar",IDCANCEL,87,26,40,12
END

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

IDD_PARAFORMAT DIALOG 30, 20, 220, 110
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Parágrafo"
FONT 8, "MS Shell Dlg"
BEGIN
    GROUPBOX "Identação", -1, 10, 10, 140, 68
    LTEXT "Esquerda", -1, 15, 22, 60, 13
    EDITTEXT IDC_PARA_LEFT, 75, 20, 60, 13
    LTEXT "Direita", -1, 15, 40, 60, 13
    EDITTEXT IDC_PARA_RIGHT, 75, 38, 60, 13
    LTEXT "Primeira Linha", -1, 15, 58, 60, 13
    EDITTEXT IDC_PARA_FIRST, 75, 56, 60, 13
    LTEXT "Alinhamento", -1, 15, 87, 50, 13
    COMBOBOX IDC_PARA_ALIGN, 65, 85, 70, 60, CBS_DROPDOWNLIST
    PUSHBUTTON "&OK", IDOK, 157, 15, 50, 15
    PUSHBUTTON "&Cancelar", IDCANCEL, 157, 33, 50, 15
END

IDD_TABSTOPS DIALOG 30, 20, 200, 110
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Tabulações"
FONT 8, "MS SHell DLg"
BEGIN
    GROUPBOX "Marca de tabulação", -1, 10, 10, 120, 90
    COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
    DEFPUSHBUTTON "&Adicionar", ID_TAB_ADD, 20, 80, 45, 15
    PUSHBUTTON "&Remover", ID_TAB_DEL, 72, 80, 45, 15
    PUSHBUTTON "&OK", IDOK, 135, 15, 55, 15
    PUSHBUTTON "&Cancelar", IDCANCEL, 135, 33, 55, 15
    PUSHBUTTON "Remover &todos", ID_TAB_EMPTY, 135, 51, 55, 15
END

IDD_FORMATOPTS DIALOG 0, 0, 280, 110
STYLE DS_SYSMODAL
CAPTION ""
FONT 8, "MS Shell Dlg"
BEGIN
    GROUPBOX "Moldar o texto", -1, 10, 10, 130, 85
    RADIOBUTTON "&Sem moldagem", IDC_PAGEFMT_WN, 18, 25, 117, 15
    RADIOBUTTON "&Moldar à janela", IDC_PAGEFMT_WW, 18, 45, 117, 15
    RADIOBUTTON "Moldar pela &régua", IDC_PAGEFMT_WM, 18, 65, 117, 15
    GROUPBOX "Barras de Ferramentas", -1, 150, 10, 120, 85
    CHECKBOX "&Barra de Ferramentas", IDC_PAGEFMT_TB, 160, 20, 90, 15
    CHECKBOX "Barra de &Formatação", IDC_PAGEFMT_FB, 160, 38, 90, 15
    CHECKBOX "&Régua", IDC_PAGEFMT_RU, 160, 56, 90, 15
    CHECKBOX "Barra de &Estado", IDC_PAGEFMT_SB, 160, 74, 90, 15
    LTEXT "", IDC_PAGEFMT_ID, 0,0,0,0
END
