Files
wxWidgets/src/common/valtext.cpp
Robert Roebling 1ecc4d808e Added scrollbar size to settings
Added tetsing for cursor keys to wxTextValidator
  Correcte misspelled colour in wxColourDialog
  Made print dialogs look nicer
  Made wxStatixBox transparent (in the middle) for mouse
    actions (very useful for DialogEd)
  Corrected colour setting in DialogEd not to set any colour
    when using standard colour
  Corretced unresponding scrollbar in DialogEd


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1179 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
1998-12-12 16:42:43 +00:00

317 lines
6.9 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: valtext.cpp
// Purpose: wxTextValidator
// Author: Julian Smart
// Modified by:
// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart and Markus Holzem
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma implementation "valtext.h"
#endif
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include <stdio.h>
#include "wx/textctrl.h"
#include "wx/utils.h"
#include "wx/msgdlg.h"
#include "wx/intl.h"
#endif
#include "wx/valtext.h"
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxTextValidator, wxValidator)
BEGIN_EVENT_TABLE(wxTextValidator, wxValidator)
EVT_CHAR(wxTextValidator::OnChar)
END_EVENT_TABLE()
#endif
static bool wxIsNumeric(const wxString& val);
wxTextValidator::wxTextValidator(long style, wxString *val)
{
m_validatorStyle = style ;
m_stringValue = val ;
/*
m_refData = new wxVTextRefData;
M_VTEXTDATA->m_validatorStyle = style ;
M_VTEXTDATA->m_stringValue = val ;
*/
}
wxTextValidator::wxTextValidator(const wxTextValidator& val)
{
Copy(val);
}
bool wxTextValidator::Copy(const wxTextValidator& val)
{
wxValidator::Copy(val);
m_validatorStyle = val.m_validatorStyle ;
m_stringValue = val.m_stringValue ;
wxNode *node = val.m_includeList.First() ;
while ( node )
{
char *s = (char *)node->Data();
m_includeList.Add(s);
node = node->Next();
}
node = val.m_excludeList.First() ;
while ( node )
{
char *s = (char *)node->Data();
m_excludeList.Add(s);
node = node->Next();
}
return TRUE;
}
wxTextValidator::~wxTextValidator()
{
}
static bool wxIsAlpha(const wxString& val)
{
int i;
for ( i = 0; i < (int)val.Length(); i++)
{
if (!isalpha(val[i]))
return FALSE;
}
return TRUE;
}
static bool wxIsAlphaNumeric(const wxString& val)
{
int i;
for ( i = 0; i < (int)val.Length(); i++)
{
if (!isalnum(val[i]))
return FALSE;
}
return TRUE;
}
// Called when the value in the window must be validated.
// This function can pop up an error message.
bool wxTextValidator::Validate(wxWindow *parent)
{
if ( !m_validatorWindow )
return FALSE;
if ( !m_validatorWindow->IsKindOf(CLASSINFO(wxTextCtrl)) )
return FALSE;
if ( !m_stringValue )
return FALSE;
wxTextCtrl *control = (wxTextCtrl *) m_validatorWindow ;
// If window is disabled, don't validate
if ( !control->Enabled() )
return FALSE;
wxString val(control->GetValue());
if ( m_validatorStyle & wxFILTER_INCLUDE_LIST )
{
if ( !m_includeList.Member(val) )
{
m_validatorWindow->SetFocus();
char buf[512];
sprintf(buf, _("%s is invalid."), (const char *)val);
wxMessageBox(buf, _("Validation conflict"), wxOK | wxICON_EXCLAMATION, parent);
return FALSE;
}
}
if ( m_validatorStyle & wxFILTER_EXCLUDE_LIST )
{
if ( m_excludeList.Member(val) )
{
m_validatorWindow->SetFocus();
char buf[512];
sprintf(buf, _("%s is invalid."), (const char *)val);
wxMessageBox(buf, _("Validation conflict"), wxOK | wxICON_EXCLAMATION, parent);
return FALSE;
}
}
if ( (m_validatorStyle & wxFILTER_ASCII) && !val.IsAscii() )
{
m_validatorWindow->SetFocus();
char buf[512];
sprintf(buf, _("%s should only contain ASCII characters."), (const char *)val);
wxMessageBox(buf, _("Validation conflict"), wxOK | wxICON_EXCLAMATION, parent);
return FALSE;
}
if ( (m_validatorStyle & wxFILTER_ALPHA) && !wxIsAlpha(val) )
{
m_validatorWindow->SetFocus();
char buf[512];
sprintf(buf, _("%s should only contain alphabetic characters."), (const char *)val);
wxMessageBox(buf, _("Validation conflict"), wxOK | wxICON_EXCLAMATION, parent);
return FALSE;
}
if ( (m_validatorStyle & wxFILTER_ALPHANUMERIC) && !wxIsAlphaNumeric(val))
{
m_validatorWindow->SetFocus();
char buf[512];
sprintf(buf, _("%s should only contain alphabetic or numeric characters."), (const char *)val);
wxMessageBox(buf,_("Validation conflict"), wxOK | wxICON_EXCLAMATION, parent);
return FALSE;
}
if ( (m_validatorStyle & wxFILTER_NUMERIC) && !wxIsNumeric(val))
{
m_validatorWindow->SetFocus();
char buf[512];
sprintf(buf, _("%s should be numeric."), (const char *)val);
wxMessageBox(buf, _("Validation conflict"), wxOK | wxICON_EXCLAMATION, parent);
return FALSE;
}
return TRUE ;
}
// Called to transfer data to the window
bool wxTextValidator::TransferToWindow(void)
{
if ( !m_validatorWindow )
return FALSE;
if ( !m_validatorWindow->IsKindOf(CLASSINFO(wxTextCtrl)) )
return FALSE;
if ( !m_stringValue )
return FALSE;
wxTextCtrl *control = (wxTextCtrl *) m_validatorWindow ;
control->SetValue(* m_stringValue) ;
return TRUE;
}
// Called to transfer data to the window
bool wxTextValidator::TransferFromWindow(void)
{
if ( !m_validatorWindow )
return FALSE;
if ( !m_validatorWindow->IsKindOf(CLASSINFO(wxTextCtrl)) )
return FALSE;
if ( !m_stringValue )
return FALSE;
wxTextCtrl *control = (wxTextCtrl *) m_validatorWindow ;
* m_stringValue = control->GetValue() ;
return TRUE;
}
void wxTextValidator::SetIncludeList(const wxStringList& list)
{
/*
if ( !M_VTEXTDATA )
return;
*/
m_includeList.Clear();
// TODO: replace with =
wxNode *node = list.First() ;
while ( node )
{
char *s = (char *)node->Data();
m_includeList.Add(s);
node = node->Next();
}
}
void wxTextValidator::SetExcludeList(const wxStringList& list)
{
/*
if ( !M_VTEXTDATA )
return;
*/
m_excludeList.Clear();
// TODO: replace with =
wxNode *node = list.First() ;
while ( node )
{
char *s = (char *)node->Data();
m_excludeList.Add(s);
node = node->Next();
}
}
void wxTextValidator::OnChar(wxKeyEvent& event)
{
/*
if ( !M_VTEXTDATA )
return;
*/
if ( !m_validatorWindow )
return;
wxTextCtrl *textCtrl = (wxTextCtrl *)m_validatorWindow;
int keyCode = event.KeyCode();
if (keyCode == WXK_DELETE || keyCode == WXK_RETURN || keyCode == WXK_BACK ||
keyCode == WXK_HOME || keyCode == WXK_LEFT || keyCode == WXK_UP ||
keyCode == WXK_RIGHT || keyCode == WXK_DOWN || keyCode == WXK_PRIOR ||
keyCode == WXK_NEXT || keyCode == WXK_END || keyCode == WXK_HOME)
{
textCtrl->wxTextCtrl::OnChar(event);
return ;
}
if ( (m_validatorStyle & wxFILTER_ASCII) && !isascii(keyCode) )
{
wxBell();
return;
}
if ( (m_validatorStyle & wxFILTER_ALPHA) && !isalpha(keyCode) )
{
wxBell();
return;
}
if ( (m_validatorStyle & wxFILTER_ALPHANUMERIC) && !isalnum(keyCode) )
{
wxBell();
return;
}
if ( (m_validatorStyle & wxFILTER_NUMERIC) && !isdigit(keyCode) && keyCode != '.' )
{
wxBell();
return;
}
textCtrl->wxTextCtrl::OnChar(event);
}
static bool wxIsNumeric(const wxString& val)
{
int i;
for ( i = 0; i < (int)val.Length(); i++)
{
if ((!isdigit(val[i])) && (val[i] != '.'))
return FALSE;
}
return TRUE;
}