//Auto-generated by kalyptus. DO NOT EDIT.
namespace Qyoto {
    using System;
    using System.Collections.Generic;
    [SmokeClass("QIconEngineV2")]
    public class QIconEngineV2 : QIconEngine, IDisposable {
        protected QIconEngineV2(Type dummy) : base((Type) null) {}
        [SmokeClass("QIconEngineV2::AvailableSizesArgument")]
        public class AvailableSizesArgument : Object, IDisposable {
            protected SmokeInvocation interceptor = null;
            private IntPtr smokeObject;
            protected AvailableSizesArgument(Type dummy) {}
            protected void CreateProxy() {
                interceptor = new SmokeInvocation(typeof(AvailableSizesArgument), this);
            }
            public QIcon.Mode Mode {
                get { return (QIcon.Mode) interceptor.Invoke("mode", "mode()", typeof(QIcon.Mode)); }
                set { interceptor.Invoke("setMode$", "setMode(QIcon::Mode)", typeof(void), typeof(QIcon.Mode), value); }
            }
            public QIcon.State State {
                get { return (QIcon.State) interceptor.Invoke("state", "state()", typeof(QIcon.State)); }
                set { interceptor.Invoke("setState$", "setState(QIcon::State)", typeof(void), typeof(QIcon.State), value); }
            }
            public List<QSize> Sizes {
                get { return (List<QSize>) interceptor.Invoke("sizes", "sizes()", typeof(List<QSize>)); }
                set { interceptor.Invoke("setSizes?", "setSizes(QList<QSize>)", typeof(void), typeof(List<QSize>), value); }
            }
            public AvailableSizesArgument() : this((Type) null) {
                CreateProxy();
                interceptor.Invoke("AvailableSizesArgument", "AvailableSizesArgument()", typeof(void));
            }
            ~AvailableSizesArgument() {
                interceptor.Invoke("~AvailableSizesArgument", "~AvailableSizesArgument()", typeof(void));
            }
            public void Dispose() {
                interceptor.Invoke("~AvailableSizesArgument", "~AvailableSizesArgument()", typeof(void));
            }
        }
        protected new void CreateProxy() {
            interceptor = new SmokeInvocation(typeof(QIconEngineV2), this);
        }
        public enum IconEngineHook {
            AvailableSizesHook = 1,
        }
        [SmokeMethod("key() const")]
        public virtual string Key() {
            return (string) interceptor.Invoke("key", "key() const", typeof(string));
        }
        [SmokeMethod("clone() const")]
        public virtual QIconEngineV2 Clone() {
            return (QIconEngineV2) interceptor.Invoke("clone", "clone() const", typeof(QIconEngineV2));
        }
        [SmokeMethod("read(QDataStream&)")]
        public virtual bool Read(QDataStream arg1) {
            return (bool) interceptor.Invoke("read#", "read(QDataStream&)", typeof(bool), typeof(QDataStream), arg1);
        }
        [SmokeMethod("write(QDataStream&) const")]
        public virtual bool Write(QDataStream arg1) {
            return (bool) interceptor.Invoke("write#", "write(QDataStream&) const", typeof(bool), typeof(QDataStream), arg1);
        }
        public List<QSize> AvailableSizes(QIcon.Mode mode, QIcon.State state) {
            return (List<QSize>) interceptor.Invoke("availableSizes$$", "availableSizes(QIcon::Mode, QIcon::State)", typeof(List<QSize>), typeof(QIcon.Mode), mode, typeof(QIcon.State), state);
        }
        public List<QSize> AvailableSizes(QIcon.Mode mode) {
            return (List<QSize>) interceptor.Invoke("availableSizes$", "availableSizes(QIcon::Mode)", typeof(List<QSize>), typeof(QIcon.Mode), mode);
        }
        public List<QSize> AvailableSizes() {
            return (List<QSize>) interceptor.Invoke("availableSizes", "availableSizes()", typeof(List<QSize>));
        }
        public QIconEngineV2() : this((Type) null) {
            CreateProxy();
            interceptor.Invoke("QIconEngineV2", "QIconEngineV2()", typeof(void));
        }
        // WARNING: Unimplemented C++ pure virtual - DO NOT CALL
        [SmokeMethod("paint(QPainter*, const QRect&, QIcon::Mode, QIcon::State)")]
        public override void Paint(QPainter painter, QRect rect, QIcon.Mode mode, QIcon.State state) {
            interceptor.Invoke("paint##$$", "paint(QPainter*, const QRect&, QIcon::Mode, QIcon::State)", typeof(void), typeof(QPainter), painter, typeof(QRect), rect, typeof(QIcon.Mode), mode, typeof(QIcon.State), state);
        }
        ~QIconEngineV2() {
            interceptor.Invoke("~QIconEngineV2", "~QIconEngineV2()", typeof(void));
        }
        public void Dispose() {
            interceptor.Invoke("~QIconEngineV2", "~QIconEngineV2()", typeof(void));
        }
    }
}
