1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 2016 Wayne Stambaugh, stambaughw@gmail.com
5  * Copyright (C) 2016-2021 KiCad Developers, see AUTHORS.txt for contributors.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, you may find one here:
19  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20  * or you may search the http://www.gnu.org website for the version 2 license,
21  * or you may write to the Free Software Foundation, Inc.,
22  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
23  */
24 
25 /**
26  * @file sch_validators.h
27  * @brief Definitions of control validators for schematic dialogs.
28  */
29 
30 #ifndef _SCH_VALIDATORS_H_
31 #define _SCH_VALIDATORS_H_
32 
33 #include <wx/valtext.h>
34 #include <validators.h>
35 
36 #define FIELD_NAME  -1
37 #define FIELD_VALUE -2
38 
39 #define SHEETNAME_V      100    // We can't use SHEETNAME and SHEETFILENAME because they
40 #define SHEETFILENAME_V  101    //   overlap with REFERENCE_FIELD and VALUE_FIELD
41 #define SHEETUSERFIELD_V 102
42 
43 /**
44  * A text control validator used for validating the text allowed in library and
45  * schematic symbol fields.
46  *
47  * - The reference field does not accept spaces.
48  * - The value field does not accept spaces in the symbol library editor because in symbol
49  *   libraries, the value field is the symbol name in the library.
50  */
51 class SCH_FIELD_VALIDATOR : public wxTextValidator
52 {
53 public:
54     SCH_FIELD_VALIDATOR( bool aIsLibEditor, int aFieldId, wxString* aValue = nullptr );
55 
56     SCH_FIELD_VALIDATOR( const SCH_FIELD_VALIDATOR& aValidator );
57 
Clone()58     virtual wxObject* Clone() const override { return new SCH_FIELD_VALIDATOR( *this ); }
59 
60     /**
61      * Override the default Validate() function provided by wxTextValidator to provide
62      * better error messages.
63      *
64      * @param aParent is the parent window of the error message dialog.
65      * @return true if the text in the control is valid otherwise false.
66      */
67     virtual bool Validate( wxWindow *aParent ) override;
68 
69 private:
70     int  m_fieldId;
71     bool m_isLibEditor;
72 };
73 
74 
75 /*
76  * A refinement of the NETNAME_VALIDATOR which also allows (and checks) bus definitions.
77  */
78 class SCH_NETNAME_VALIDATOR : public NETNAME_VALIDATOR
79 {
80 public:
81     SCH_NETNAME_VALIDATOR( wxString* aVal = nullptr ) :
NETNAME_VALIDATOR(aVal)82             NETNAME_VALIDATOR( aVal )
83     { }
84 
SCH_NETNAME_VALIDATOR(bool aAllowSpaces)85     SCH_NETNAME_VALIDATOR( bool aAllowSpaces ) :
86             NETNAME_VALIDATOR( aAllowSpaces )
87     { }
88 
SCH_NETNAME_VALIDATOR(const SCH_NETNAME_VALIDATOR & aValidator)89     SCH_NETNAME_VALIDATOR( const SCH_NETNAME_VALIDATOR& aValidator ) :
90             NETNAME_VALIDATOR( aValidator )
91     { }
92 
Clone()93     virtual wxObject* Clone() const override { return new SCH_NETNAME_VALIDATOR( *this ); }
94 
95 protected:
96     /// @return the error message if the contents of \a aVal are invalid.
97     wxString IsValid( const wxString& aVal ) const override;
98 
99 private:
100     static wxRegEx m_busGroupRegex;
101 };
102 
103 #endif // _SCH_VALIDATORS_H_
104