/*
 * Copyright 2000 Mike McCormack
 * Copyright 2010 Yaron Shahrabani <sh.yaron@gmail.com>
 *
 * 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"

#pragma code_page(65001)

LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT

IDD_SERIALUICONFIG DIALOG 0, 0, 160, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
EXSTYLE WS_EX_LAYOUTRTL
CAPTION "מאפיינים עבור "
FONT 8, "MS Shell Dlg"
BEGIN
  LTEXT         "קצב שידור", -1,5,20,55,10
  COMBOBOX      IDC_BAUD, 60, 20, 90, 36, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_BORDER | WS_VSCROLL | WS_TABSTOP
  LTEXT         "זוגיות", -1,5,40,55,10
  COMBOBOX      IDC_PARITY, 60, 40, 90, 36, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_BORDER | WS_VSCROLL | WS_TABSTOP
  LTEXT         "בקרת ציפה", -1,5,60,55,10
  COMBOBOX      IDC_FLOW, 60, 60, 90, 36, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_BORDER | WS_VSCROLL | WS_TABSTOP
  LTEXT         "סיביות נתונים", -1,5,80,55,10
  COMBOBOX      IDC_DATA, 60, 80, 90, 36, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_BORDER | WS_VSCROLL | WS_TABSTOP
  LTEXT         "סיביות עצירה", -1,5,100,55,10
  COMBOBOX      IDC_STOP, 60, 100, 90, 36, CBS_DROPDOWNLIST|CBS_AUTOHSCROLL|WS_BORDER | WS_VSCROLL | WS_TABSTOP
  DEFPUSHBUTTON "אישור",     IDOK,30,138,50,14
  PUSHBUTTON    "ביטול", IDCANCEL,85,138,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
