]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/Validator.h
Account for old versions of Pygments
[lyx.git] / src / frontends / qt4 / Validator.h
1 // -*- C++ -*-
2 /**
3  * \file Validator.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author Angus Leeming
8  * \author Richard Heck
9  *
10  * Full author contact details are available in file CREDITS.
11  *
12  * Validators are used to decide upon the legality of some input action.
13  * For example, a "line edit" widget might be used to input a "glue length".
14  * The correct syntax for such a length is "2em + 0.5em". The LengthValidator
15  * below will report whether the input text conforms to this syntax.
16  *
17  * This information is used in LyX primarily to give the user some
18  * feedback on the validity of the input data using the "checked_widget"
19  * concept. For example, if the data is invalid then the label of
20  * a "line edit" widget is changed in colour and the dialog's "Ok"
21  * and "Apply" buttons are disabled. See checked_widgets.[Ch] for
22  * further details.
23  */
24
25 #ifndef VALIDATOR_H
26 #define VALIDATOR_H
27
28 #include "Length.h"
29 #include "Dialog.h" // KernelDocType
30
31 #include <QValidator>
32
33 class QWidget;
34 class QLineEdit;
35
36
37 namespace lyx {
38
39 class LyXRC;
40
41 namespace frontend {
42
43 /** A class to ascertain whether the data passed to the @c validate()
44  *  member function can be interpretted as a GlueLength.
45  */
46 class LengthValidator : public QValidator
47 {
48         Q_OBJECT
49 public:
50         /// Define a validator for widget @c parent.
51         LengthValidator(QWidget * parent);
52
53         /** @returns QValidator::Acceptable if @c data is a GlueLength.
54          *  If not, returns QValidator::Intermediate.
55          */
56         QValidator::State validate(QString & data, int &) const;
57
58         /** @name Bottom
59          *  Set and retrieve the minimum allowed Length value.
60          */
61         //@{
62         void setBottom(Length const &);
63         void setBottom(GlueLength const &);
64         Length bottom() const { return b_; }
65         void setUnsigned(bool const u) { unsigned_ = u; }
66         //@}
67
68 private:
69         Length b_;
70         GlueLength g_;
71         bool no_bottom_;
72         bool glue_length_;
73         bool unsigned_;
74 };
75
76
77 /// @returns a new @c LengthValidator that does not accept negative lengths.
78 LengthValidator * unsignedLengthValidator(QLineEdit *);
79
80
81 /** @returns a new @c LengthValidator that does not accept negative lengths.
82  *  but glue lengths.
83  */
84 LengthValidator * unsignedGlueLengthValidator(QLineEdit *);
85
86
87 /** A class to ascertain whether the data passed to the @c validate()
88  *  member function can be interpretted as a GlueLength or is @param autotext.
89  */
90 class LengthAutoValidator : public LengthValidator
91 {
92         Q_OBJECT
93 public:
94         /// Define a validator for widget @c parent.
95         LengthAutoValidator(QWidget * parent, QString const & autotext);
96
97         /** @returns QValidator::Acceptable if @c data is a GlueLength
98                 * or is "auto". If not, returns QValidator::Intermediate.
99          */
100         QValidator::State validate(QString & data, int &) const;
101
102 private:
103         QString autotext_;
104 };
105
106 /// @returns a new @c LengthAutoValidator that does not accept negative lengths.
107 LengthAutoValidator * unsignedLengthAutoValidator(QLineEdit *, QString const & autotext);
108
109
110 /**
111  * A class to determine whether the passed is a double
112  * or is @param autotext.
113  *
114  */
115 class DoubleAutoValidator : public QDoubleValidator
116 {
117         Q_OBJECT
118 public:
119         DoubleAutoValidator(QWidget * parent, QString const & autotext);
120         DoubleAutoValidator(double bottom, double top, int decimals,
121                 QObject * parent);
122         QValidator::State validate(QString & input, int & pos) const;
123
124 private:
125         QString autotext_;
126 };
127
128
129 // A class to ascertain that no newline characters are passed.
130 class NoNewLineValidator : public QValidator
131 {
132         Q_OBJECT
133 public:
134         // Define a validator.
135         NoNewLineValidator(QWidget *);
136         // Remove newline characters from input.
137         QValidator::State validate(QString &, int &) const;
138 };
139
140
141 /** A class to ascertain whether the data passed to the @c validate()
142  *  member function is a valid file path.
143  *  The test is active only when the path is to be stored in a LaTeX
144  *  file, LaTeX being quite picky about legal names.
145  */
146 class PathValidator : public QValidator
147 {
148         Q_OBJECT
149 public:
150         /** Define a validator for widget @c parent.
151          *  If @c acceptable_if_empty is @c true then an empty path
152          *  is regarded as acceptable.
153          */
154         PathValidator(bool acceptable_if_empty, QWidget * parent);
155
156         /** @returns QValidator::Acceptable if @c data is a valid path.
157          *  If not, returns QValidator::Intermediate.
158          */
159         QValidator::State validate(QString &, int &) const;
160
161         /** Define what checks that @c validate() will perform.
162          *  @param doc_type checks are activated only for @c LATEX docs.
163          *  @param lyxrc contains a @c tex_allows_spaces member that
164          *  is used to define what is legal.
165          */
166         void setChecker(KernelDocType const & doc_type, LyXRC const & lyxrc);
167
168 private:
169         bool acceptable_if_empty_;
170         bool latex_doc_;
171         bool tex_allows_spaces_;
172 };
173
174
175 /// @returns the PathValidator attached to the widget, or 0.
176 PathValidator * getPathValidator(QLineEdit *);
177
178 } // namespace frontend
179 } // namespace lyx
180
181 # endif // NOT VALIDATOR_H