1 #include <QtScript/QScriptClassPropertyIterator>
2 
3 #include "VideoFilter.h"
4 #include "VideoFilterCollection.h"
5 #include "VideoFilterCollectionPrototype.h"
6 
7 namespace ADM_qtScript
8 {
9     class VideoFilterCollectionClassPropertyIterator : public QScriptClassPropertyIterator
10     {
11     public:
12         VideoFilterCollectionClassPropertyIterator(const QScriptValue &object);
13         ~VideoFilterCollectionClassPropertyIterator();
14 
15         bool hasNext() const;
16         void next();
17 
18         bool hasPrevious() const;
19         void previous();
20 
21         void toFront();
22         void toBack();
23 
24         QScriptString name() const;
25         uint id() const;
26 
27     private:
28         unsigned int _index;
29         unsigned int _last;
30     };
31 
VideoFilterCollection(QScriptEngine * engine,IEditor * editor)32     VideoFilterCollection::VideoFilterCollection(QScriptEngine *engine, IEditor *editor) :
33         QObject(engine), QScriptClass(engine)
34     {
35         this->_editor = editor;
36 		this->_prototype = engine->newQObject(
37 							   new VideoFilterCollectionPrototype(this, editor), QScriptEngine::ScriptOwnership,
38 							   QScriptEngine::SkipMethodsInEnumeration | QScriptEngine::ExcludeSuperClassMethods |
39 							   QScriptEngine::ExcludeSuperClassProperties);
40     }
41 
name() const42 	QString VideoFilterCollection::name() const
43 	{
44 		return QLatin1String("VideoFilterCollection");
45 	}
46 
newIterator(const QScriptValue & object)47 	QScriptClassPropertyIterator* VideoFilterCollection::newIterator(const QScriptValue &object)
48 	{
49 		return new VideoFilterCollectionClassPropertyIterator(object);
50 	}
51 
property(const QScriptValue & object,const QScriptString & name,uint id)52 	QScriptValue VideoFilterCollection::property(
53 		const QScriptValue &object,	const QScriptString &name, uint id)
54 	{
55 		if (id >= ADM_VideoFilters.size())
56 		{
57 			return QScriptValue();
58 		}
59 
60         return this->engine()->newQObject(
61 				   new VideoFilter(this->engine(), this->_editor, &(ADM_VideoFilters[id])), QScriptEngine::ScriptOwnership);
62 	}
63 
propertyFlags(const QScriptValue & object,const QScriptString & name,uint id)64 	QScriptValue::PropertyFlags VideoFilterCollection::propertyFlags(
65 		const QScriptValue &object, const QScriptString &name, uint id)
66 	{
67 		return QScriptValue::Undeletable;
68 	}
69 
prototype() const70 	QScriptValue VideoFilterCollection::prototype() const
71 	{
72 		return this->_prototype;
73 	}
74 
queryProperty(const QScriptValue & object,const QScriptString & name,QueryFlags flags,uint * id)75 	QScriptClass::QueryFlags VideoFilterCollection::queryProperty(
76 		const QScriptValue &object, const QScriptString &name, QueryFlags flags, uint *id)
77 	{
78 		bool isArrayIndex;
79 		quint32 pos = name.toArrayIndex(&isArrayIndex);
80 
81 		if (!isArrayIndex)
82 		{
83 			return 0;
84 		}
85 
86 		*id = pos;
87 
88 		if (pos >= ADM_VideoFilters.size())
89 		{
90 			return 0;
91 		}
92 
93 		return flags;
94 	}
95 
VideoFilterCollectionClassPropertyIterator(const QScriptValue & object)96     VideoFilterCollectionClassPropertyIterator::VideoFilterCollectionClassPropertyIterator(
97         const QScriptValue &object) : QScriptClassPropertyIterator(object)
98     {
99         this->toFront();
100     }
101 
~VideoFilterCollectionClassPropertyIterator()102     VideoFilterCollectionClassPropertyIterator::~VideoFilterCollectionClassPropertyIterator() { }
103 
hasNext() const104     bool VideoFilterCollectionClassPropertyIterator::hasNext() const
105     {
106         return _index < ADM_VideoFilters.size();
107     }
108 
next()109     void VideoFilterCollectionClassPropertyIterator::next()
110     {
111         _last = _index;
112         ++_index;
113     }
114 
hasPrevious() const115     bool VideoFilterCollectionClassPropertyIterator::hasPrevious() const
116     {
117         return (_index > 0);
118     }
119 
previous()120     void VideoFilterCollectionClassPropertyIterator::previous()
121     {
122         --_index;
123         _last = _index;
124     }
125 
toFront()126     void VideoFilterCollectionClassPropertyIterator::toFront()
127     {
128         _index = 0;
129         _last = -1;
130     }
131 
toBack()132     void VideoFilterCollectionClassPropertyIterator::toBack()
133     {
134         _index = ADM_VideoFilters.size();
135         _last = -1;
136     }
137 
name() const138     QScriptString VideoFilterCollectionClassPropertyIterator::name() const
139     {
140         return object().engine()->toStringHandle(QString::number(_last));
141     }
142 
id() const143     uint VideoFilterCollectionClassPropertyIterator::id() const
144     {
145         return _last;
146     }
147 }
148