/*
 * Serialui
 * French language support
 *
 * Copyright 2000 Mike McCormack
 * Copyright 2003 Vincent Béron
 * Copyright 2009 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 "serialui.h"

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

LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL

IDD_SERIALUICONFIG DIALOG DISCARDABLE 0, 0, 180, 150
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "Propriétés pour "
FONT 8, "MS Shell Dlg"
BEGIN
  LTEXT         "Vitesse de transmission (bauds)", -1,5,19,70,18
  COMBOBOX      IDC_BAUD, 80, 20, 90, 15, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_BORDER | WS_VSCROLL | WS_TABSTOP
  LTEXT         "Parité", -1,5,42,55,10
  COMBOBOX      IDC_PARITY, 80, 40, 90, 15, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_BORDER | WS_VSCROLL | WS_TABSTOP
  LTEXT         "Contrôle de flux", -1,5,62,55,10
  COMBOBOX      IDC_FLOW, 80, 60, 90, 15, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_BORDER | WS_VSCROLL | WS_TABSTOP
  LTEXT         "Bits de données", -1,5,82,55,10
  COMBOBOX      IDC_DATA, 80, 80, 90, 15, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_BORDER | WS_VSCROLL | WS_TABSTOP
  LTEXT         "Bits d'arrêt", -1,5,102,55,10
  COMBOBOX      IDC_STOP, 80, 100, 90, 15, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_BORDER | WS_VSCROLL | WS_TABSTOP
  DEFPUSHBUTTON "OK",     IDOK,30,125,50,14
  PUSHBUTTON    "Annuler", IDCANCEL,93,125,50,14
  /* these two buttons are for testing Get/SetDefaultCommConfig */
  /* PUSHBUTTON    "GetDefault", ID_GETDEFAULT,30,115,50,14 */
  /* PUSHBUTTON    "SetDefault", ID_SETDEFAULT,85,115,50,14 */
END
