source: trunk/tools/linguist/shared/proitems.h

Last change on this file was 846, checked in by Dmitry A. Kuminov, 14 years ago

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

File size: 6.2 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation (qt-info@nokia.com)
6**
7** This file is part of the Qt Linguist of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this 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 have questions regarding the use of this file, please contact
37** Nokia at qt-info@nokia.com.
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#ifndef PROITEMS_H
43#define PROITEMS_H
44
45#include <QtCore/QString>
46#include <QtCore/QList>
47
48QT_BEGIN_NAMESPACE
49
50struct AbstractProItemVisitor;
51
52class ProItem
53{
54public:
55 enum ProItemKind {
56 ValueKind,
57 FunctionKind,
58 ConditionKind,
59 OperatorKind,
60 BlockKind
61 };
62
63 enum ProItemReturn {
64 ReturnFalse,
65 ReturnTrue,
66 ReturnBreak,
67 ReturnNext,
68 ReturnLoop,
69 ReturnSkip,
70 ReturnReturn
71 };
72
73 ProItem() : m_lineNumber(0) {}
74 virtual ~ProItem() {}
75
76 virtual ProItemKind kind() const = 0;
77
78 void setComment(const QString &comment);
79 QString comment() const;
80
81 virtual ProItemReturn Accept(AbstractProItemVisitor *visitor) = 0;
82 int lineNumber() const { return m_lineNumber; }
83 void setLineNumber(int lineNumber) { m_lineNumber = lineNumber; }
84
85private:
86 QString m_comment;
87 int m_lineNumber;
88};
89
90class ProBlock : public ProItem
91{
92public:
93 enum ProBlockKind {
94 NormalKind = 0x00,
95 ScopeKind = 0x01,
96 ScopeContentsKind = 0x02,
97 VariableKind = 0x04,
98 ProFileKind = 0x08,
99 FunctionBodyKind = 0x10,
100 SingleLine = 0x80
101 };
102
103 ProBlock(ProBlock *parent);
104 ~ProBlock();
105
106 void appendItem(ProItem *proitem);
107 void setItems(const QList<ProItem *> &proitems);
108 QList<ProItem *> items() const;
109
110 void setBlockKind(int blockKind);
111 int blockKind() const;
112
113 void setParent(ProBlock *parent);
114 ProBlock *parent() const;
115
116 void ref() { ++m_refCount; }
117 void deref() { if (!--m_refCount) delete this; }
118
119 ProItem::ProItemKind kind() const;
120
121 virtual ProItemReturn Accept(AbstractProItemVisitor *visitor);
122protected:
123 QList<ProItem *> m_proitems;
124private:
125 ProBlock *m_parent;
126 int m_blockKind;
127 int m_refCount;
128};
129
130class ProVariable : public ProBlock
131{
132public:
133 enum VariableOperator {
134 AddOperator = 0,
135 RemoveOperator = 1,
136 ReplaceOperator = 2,
137 SetOperator = 3,
138 UniqueAddOperator = 4
139 };
140
141 ProVariable(const QString &name, ProBlock *parent);
142
143 void setVariableOperator(VariableOperator variableKind);
144 VariableOperator variableOperator() const;
145
146 void setVariable(const QString &name);
147 QString variable() const;
148
149 virtual ProItemReturn Accept(AbstractProItemVisitor *visitor);
150private:
151 VariableOperator m_variableKind;
152 QString m_variable;
153};
154
155class ProValue : public ProItem
156{
157public:
158 ProValue(const QString &value, ProVariable *variable);
159
160 void setValue(const QString &value);
161 QString value() const;
162
163 void setVariable(ProVariable *variable);
164 ProVariable *variable() const;
165
166 ProItem::ProItemKind kind() const;
167
168 virtual ProItemReturn Accept(AbstractProItemVisitor *visitor);
169private:
170 QString m_value;
171 ProVariable *m_variable;
172};
173
174class ProFunction : public ProItem
175{
176public:
177 explicit ProFunction(const QString &text);
178
179 void setText(const QString &text);
180 QString text() const;
181
182 ProItem::ProItemKind kind() const;
183
184 virtual ProItemReturn Accept(AbstractProItemVisitor *visitor);
185private:
186 QString m_text;
187};
188
189class ProCondition : public ProItem
190{
191public:
192 explicit ProCondition(const QString &text);
193
194 void setText(const QString &text);
195 QString text() const;
196
197 ProItem::ProItemKind kind() const;
198
199 virtual ProItemReturn Accept(AbstractProItemVisitor *visitor);
200private:
201 QString m_text;
202};
203
204class ProOperator : public ProItem
205{
206public:
207 enum OperatorKind {
208 OrOperator = 1,
209 NotOperator = 2
210 };
211
212 explicit ProOperator(OperatorKind operatorKind);
213
214 void setOperatorKind(OperatorKind operatorKind);
215 OperatorKind operatorKind() const;
216
217 ProItem::ProItemKind kind() const;
218
219 virtual ProItemReturn Accept(AbstractProItemVisitor *visitor);
220private:
221 OperatorKind m_operatorKind;
222};
223
224class ProFile : public ProBlock
225{
226public:
227 explicit ProFile(const QString &fileName);
228 ~ProFile();
229
230 QString displayFileName() const;
231 QString fileName() const;
232 QString directoryName() const;
233
234 void setModified(bool modified);
235 bool isModified() const;
236
237 virtual ProItemReturn Accept(AbstractProItemVisitor *visitor);
238
239private:
240 QString m_fileName;
241 QString m_displayFileName;
242 QString m_directoryName;
243 bool m_modified;
244};
245
246QT_END_NAMESPACE
247
248#endif // PROITEMS_H
Note: See TracBrowser for help on using the repository browser.