package cjqt.widgets

import cjqt.core.*
import cjqt.tools.ScrollBarPolicy

//C
foreign func nativeAbstractScrollAreaCreate(parentPtr: Int64): Int64
foreign func nativeAbstractScrollAreaDelete(ptr: Int64): Unit
foreign func nativeAbstractScrollAreaAddScrollBarWidget(ptr: Int64, widgetPtr: Int64, alignment: Int16): Unit
foreign func nativeAbstractScrollAreaCornerWidget(ptr: Int64): Int64
foreign func nativeAbstractScrollAreaHorizontalScrollBar(ptr: Int64): Int64
foreign func nativeAbstractScrollAreaHorizontalScrollBarPolicy(ptr: Int64): Int32
foreign func nativeAbstractScrollAreaMaximumVieportSize(ptr: Int64): Int64

/******************
   QWidgetList nativeAbstractScrollAreaScrollBarWidgets(ptr:Int64, short alignment)
   {
       QAbstractScrollArea *instance = reinterpret_cast<QAbstractScrollArea *>(static_cast<uintptr_t>(ptr));
       return instance->scrollBarWidgets(Qt::Alignment(alignment));
   }
 * ********************/
foreign func nativeAbstractScrollAreaSetCornerWidget(ptr: Int64, widgetPtr: Int64): Unit
foreign func nativeAbstractScrollAreaSetHorizontalScrollBar(ptr: Int64, scrollBarPtr: Int64): Unit
foreign func nativeAbstractScrollAreaSetHorizontalScrollBarPolicy(ptr: Int64, policy: Int32): Unit
foreign func nativeAbstractScrollAreaSetSizeAdjustPolicy(ptr: Int64, policy: Int32): Unit
foreign func nativeAbstractScrollAreaSetVerticalScrollBar(ptr: Int64, scrollBarPtr: Int64): Unit
foreign func nativeAbstractScrollAreaSetVerticalScrollBarPolicy(ptr: Int64, policy: Int32): Unit
foreign func nativeAbstractScrollAreaSetViewreport(ptr: Int64, widgetPtr: Int64): Unit
foreign func nativeAbstractScrollAreaSetupViewport(ptr: Int64, viewportPtr: Int64): Unit

/*******************
   int nativeAbstractScrollAreaSizeAdjustPolicy(ptr:Int64)
   {
       QAbstractScrollArea *instance = reinterpret_cast<QAbstractScrollArea *>(static_cast<uintptr_t>(ptr));
       return instance->sizeAdjustPolicy();
   }
   uintptr_t nativeAbstractScrollAreaVerticalScrollBar(ptr:Int64)
   {
       QAbstractScrollArea *instance = reinterpret_cast<QAbstractScrollArea *>(static_cast<uintptr_t>(ptr));
       QScrollBar *scrollbar = instance->verticalScrollBar();
       return reinterpret_cast<uintptr_t>(scrollbar);
   }
   int nativeAbstractScrollAreaVerticalScrollBarPolicy(ptr:Int64)
   {
       QAbstractScrollArea *instance = reinterpret_cast<QAbstractScrollArea *>(static_cast<uintptr_t>(ptr));
       return instance->verticalScrollBarPolicy();
   }
   uintptr_t nativeAbstractScrollAreaViewport(ptr:Int64)
   {
       QAbstractScrollArea *instance = reinterpret_cast<QAbstractScrollArea *>(static_cast<uintptr_t>(ptr));
       QWidget *widget = instance->viewport();
       return reinterpret_cast<uintptr_t>(widget);
   }
   uintptr_t nativeAbstractScrollAreaMinimumSizeHint(ptr:Int64)
   {
       QAbstractScrollArea *instance = reinterpret_cast<QAbstractScrollArea *>(static_cast<uintptr_t>(ptr));
       QSize size = instance->minimumSizeHint();
       return reinterpret_cast<uintptr_t>(&size);
   }
   uintptr_t nativeAbstractScrollAreaSizeHint(ptr:Int64)
   {
       QAbstractScrollArea *instance = reinterpret_cast<QAbstractScrollArea *>(static_cast<uintptr_t>(ptr));
       QSize size = instance->sizeHint();
       return reinterpret_cast<uintptr_t>(&size);
   }
 * *****************/
public open class QAbstractScrollArea <: QFrame {
    public init() {
        super(
            unsafe {
                nativeAbstractScrollAreaCreate(0)
            }
        )
    }
    public init(ptr: Int64) {
        super(ptr)
    }
    public init(parent: QWidget) {
        super(
            unsafe {
                nativeAbstractScrollAreaCreate(parent.ptr)
            }
        )
    }
    public open override func delete(): Unit {
        return unsafe {
            nativeAbstractScrollAreaDelete(this.ptr)
        }
    }

    public func addScrollBarWidget(widget: QWidget, alignment: Alignment): Unit {
        return unsafe {
            nativeAbstractScrollAreaAddScrollBarWidget(this.ptr, widget.ptr, alignment.value())
        }
    }

    public func setHorizontalScrollBarPolicy(policy: ScrollBarPolicy): Unit {
        return unsafe {
            nativeAbstractScrollAreaSetHorizontalScrollBarPolicy(this.ptr, policy.value())
        }
    }

    public func setVerticalScrollBarPolicy(policy: ScrollBarPolicy): Unit {
        return unsafe {
            nativeAbstractScrollAreaSetVerticalScrollBarPolicy(this.ptr, policy.value())
        }
    }


    public func cornerWidget(): QWidget {
        let widgetPtr = unsafe {
            nativeAbstractScrollAreaCornerWidget(this.ptr)
        }
        return QWidget(widgetPtr)
    }
}
//foreign func nativeAbstractScrollAreaHorizontalScrollBar(ptr: Int64): Int64
//foreign func nativeAbstractScrollAreaHorizontalScrollBarPolicy(ptr: Int64): Int32
//foreign func nativeAbstractScrollAreaMaximumVieportSize(ptr: Int64): Int64