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