source: branches/vendor/trolltech/qt/current/tools/xmlpatterns/qapplicationargument.cpp @ 2

Last change on this file since 2 was 2, checked in by Dmitry A. Kuminov, 13 years ago

Initially imported qt-all-opensource-src-4.5.1 from Trolltech.

File size: 9.4 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4** Contact: Qt Software Information (qt-info@nokia.com)
5**
6** This file is part of the tools applications of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial Usage
10** Licensees holding valid Qt Commercial licenses may use this file in
11** accordance with the Qt Commercial License Agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and Nokia.
14**
15** GNU Lesser General Public License Usage
16** Alternatively, this file may be used under the terms of the GNU Lesser
17** General Public License version 2.1 as published by the Free Software
18** Foundation and appearing in the file LICENSE.LGPL included in the
19** packaging of this file.  Please review the following information to
20** ensure the GNU Lesser General Public License version 2.1 requirements
21** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
22**
23** In addition, as a special exception, Nokia gives you certain
24** additional rights. These rights are described in the Nokia Qt LGPL
25** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
26** package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file.  Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you are unsure which license is appropriate for your use, please
37** contact the sales department at qt-sales@nokia.com.
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#include <QHash>
43#include <QString>
44
45#include "qapplicationargument_p.h"
46
47QT_BEGIN_NAMESPACE
48
49/*!
50 \class QApplicationArgument
51 \brief The QApplicationArgument class is a declared of a command line
52        argument for QApplicationArgumentParser.
53 \reentrant
54 \internal
55 \since 4.4
56
57 QApplicationArgument describes a valid command line argument,
58 by having a set of characteristics:
59
60 \table
61   \header
62        \o Characteristic
63        \o Functions
64    \row
65        \o A name. For instance, "backend"
66        \o setName() and name()
67    \row
68        \o A description, for human consumption.
69        \o setDescription() and description()
70    \row
71        \o How many times the argument can occur. For instance, whether the argument is optional or not.
72        \o setMinimumOccurrence() & minimumOccurrence(), setMaximumOccurrence() & maximumOccurrence()
73    \row
74        \o The type of the argument's value, if it has one. For instance, \c int or \c bool.
75        \o setType() and type()
76    \row
77        \o The value that should be used in case the argument isn't used.
78        \o setDefaultValue() and defaultValue()
79 \endtable
80
81 \sa QApplicationArgumentParser
82 */
83
84class QApplicationArgumentPrivate
85{
86public:
87    inline QApplicationArgumentPrivate(const QString &newName,
88                                       const QString &desc,
89                                       const int newType) : name(newName)
90                                                          , description(desc)
91                                                          , type(newType)
92                                                          , minimum(0)
93                                                          , maximum(1)
94                                                          , isNameless(false)
95    {
96    }
97
98    QString         name;
99    QString         description;
100    int             type;
101    QVariant        defaultValue;
102    int             minimum;
103    int             maximum;
104    bool            isNameless;
105};
106
107/*!
108  Constructs an invalid QApplicationArgument instance.
109 */
110QApplicationArgument::QApplicationArgument() : d_ptr(new QApplicationArgumentPrivate(QString(), QString(), QVariant::Invalid))
111{
112}
113
114/*!
115 Constructs an QApplicationArgument instance that is a copy of \a other.
116 */
117QApplicationArgument::QApplicationArgument(const QApplicationArgument &other) : d_ptr(new QApplicationArgumentPrivate(*other.d_ptr))
118{
119}
120
121/*!
122 Destructs this QApplicationArgument instance.
123 */
124QApplicationArgument::~QApplicationArgument()
125{
126    delete d_ptr;
127}
128
129/*!
130 Constructs an argument that has the name \a name and is of type
131 \a aType.
132
133 Calling this constructor is equivalent to calling setName() and setType()
134 on a default constructed QApplicationArgument instance.
135
136 \sa setName(), setType()
137 */
138QApplicationArgument::QApplicationArgument(const QString &name,
139                                           const QString &description,
140                                           int aType) : d_ptr(new QApplicationArgumentPrivate(name, description, aType))
141{
142}
143
144/*!
145 Assigns \a other to this QApplicationArgument instance.
146 */
147QApplicationArgument &QApplicationArgument::operator=(const QApplicationArgument &other)
148{
149    if(this != &other)
150        *d_ptr = *other.d_ptr;
151
152    return *this;
153}
154
155// TODO is this really what we want?
156/*!
157 Returns true if this QApplicationArgument instance is equal to \a other.
158
159 Equalness is defined to only consider name(). If for instance the type() differs
160 but the names are equal, this operator will return \c true.
161 */
162bool QApplicationArgument::operator==(const QApplicationArgument &other) const
163{
164    return name() == other.name();
165}
166
167/*!
168  \fn qHash(const QApplicationArgument &);
169  \internal
170
171  Returns a hash index of \a argument. This function is used when QApplicationArgument
172  is used with QHash.
173
174  The hash index is computed on name(). The other properties are ignored.
175
176 \relates QApplicationArgument
177 */
178
179/*!
180 Sets this argument's name to \a newName. The name does not
181 include any dash, or other prefix that is used by the parser.
182 */
183void QApplicationArgument::setName(const QString &newName)
184{
185    d_ptr->name = newName;
186}
187
188/*!
189 Returns the name that this argument has.
190
191 \sa setName()
192 */
193QString QApplicationArgument::name() const
194{
195    return d_ptr->name;
196}
197
198/*!
199 Sets the tupe to \a newType.
200
201 If \a newType is QVariant::Invalid, it signals that this
202 argument does not accept a value at all.
203
204 \a newType can be a QVariant::type() value, or QVariant::userType().
205
206 \sa type()
207 */
208void QApplicationArgument::setType(int newType)
209{
210    d_ptr->type = newType;
211}
212
213/*!
214 Returns the type that the value of this argument has. If it
215 is QVariant::Invalid, it means this argument cannot have a value
216 and is a switch only.
217
218 The type is by default QVariant::Invalid.
219\sa setType()
220 */
221int QApplicationArgument::type() const
222{
223    return d_ptr->type;
224}
225
226void QApplicationArgument::setDefaultValue(const QVariant &value)
227{
228    d_ptr->defaultValue = value;
229}
230
231QVariant QApplicationArgument::defaultValue() const
232{
233    return d_ptr->defaultValue;
234}
235
236/*!
237 Sets the minimum amount of times this argument can occur, to \a minimum.
238 For instance, if \a minimum is 2, the argument must be used at least two times.
239
240 If \a minimum is zero, it means the argument is optional.
241
242 \sa minimumOccurrence(), setMaximumOccurrence()
243 */
244void QApplicationArgument::setMinimumOccurrence(int minimum)
245{
246    Q_ASSERT_X(minimum >= 0, Q_FUNC_INFO,
247           "The minimum cannot be less than zero.");
248    d_ptr->minimum = minimum;
249}
250
251/*!
252 Returns the minimum amount of times an an argument must occur.
253
254 The default is 0.
255
256 \sa setMinimumOccurrence(), maximumOccurrence()
257 */
258int QApplicationArgument::minimumOccurrence() const
259{
260    return d_ptr->minimum;
261}
262
263/*!
264 Sets the maximum occurrence to \a maximum.
265
266 If \a maximum is -1, it means the argument can appear an unlimited
267 amount of times. Setting it to zero or less than -1, yields
268 undefined behavior.
269
270\sa maximumOccurrence(), setMinimumOccurrence()
271 */
272void QApplicationArgument::setMaximumOccurrence(int maximum)
273{
274    Q_ASSERT_X(maximum == -1 || maximum >= 1, Q_FUNC_INFO,
275           "The maximum can only be -1 or 1 or larger.");
276    d_ptr->maximum = maximum;
277}
278
279/*!
280 Returns the maximum amount of times this argument can occur. For instance,
281 if the maximum occurrence is 2, it would be an error if 3 were specified
282 on the command line.
283
284 If the maximum occurrence is -1, it signals the argument can appear an unlimited
285 amount of times.
286
287 The default is 1.
288
289 \sa setMaximumOccurrence()
290 */
291int QApplicationArgument::maximumOccurrence() const
292{
293    return d_ptr->maximum;
294}
295
296/*!
297 Sets the description to \a newDescription. The description
298 should describe the argument in a sentence or two. It is used
299 when displaying a help message, if requested.
300
301 The description should be terminated as if it was a paragraph. This
302 typically means a period.
303
304 The description should be translated by wrapping the
305 string literal in a call to tr().
306
307 */
308void QApplicationArgument::setDescription(const QString &newDescription)
309{
310    d_ptr->description = newDescription;
311}
312
313/*!
314 Returns the description of this argument.
315
316 \sa setDescription()
317 */
318QString QApplicationArgument::description() const
319{
320    return d_ptr->description;
321}
322
323/*!
324 \internal
325 \relates QApplicationArgument
326
327 Computes a hash key on \a argument's name and returns it.
328 */
329uint qHash(const QApplicationArgument &argument)
330{
331    return qHash(argument.name());
332}
333
334void QApplicationArgument::setNameless(bool value)
335{
336    d_ptr->isNameless = value;
337}
338
339bool QApplicationArgument::isNameless() const
340{
341    return d_ptr->isNameless;
342}
343
344QT_END_NAMESPACE
Note: See TracBrowser for help on using the repository browser.