#!/usr/bin/env python

#------------------------------------------------------------------------------
#
#   The Python translation of SoQt-1.2.0/test-code/components/scrollview.py
#
#-- ORIGINAL COPYRIGHT NOTICE -------------------------------------------------
#
#   This file is part of the Coin 3D visualization library.
#   Copyright (C) 1998-2004 by Systems in Motion.  All rights reserved.
#
#   This library is free software; you can redistribute it and/or
#   modify it under the terms of the GNU General Public License
#   ("GPL") version 2 as published by the Free Software Foundation.
#   See the file LICENSE.GPL at the root directory of this source
#   distribution for additional information about the GNU GPL.
#
#   For using Coin with software that can not be combined with the GNU
#   GPL, and for taking advantage of the additional benefits of our
#   support services, please contact Systems in Motion about acquiring
#   a Coin Professional Edition License.
#
#   See <URL:http://www.coin3d.org/> for more information.
#
#   Systems in Motion, Teknobyen, Abels Gate 5, 7030 Trondheim, NORWAY.
#   <URL:http://www.sim.no/>.
#
#------------------------------------------------------------------------------
#
#   Demonstrates embedding of an SoQtRenderArea within a QScrollView.
#
#------------------------------------------------------------------------------

from iv import *
from qt import *
import sys

class MyScrollView(QScrollView):
  
    def __init__(self, parent):
        QScrollView.__init__(self, parent)
        self.resizeContents(10000, 10000)
        self.enableClipper(True)

        # Container widget for the SoQtRenderArea.

        container = QWidget(self)
        container.resize(1000, 1000)

        # Construct a simple scenegraph.

        root = SoSeparator()

        light = SoDirectionalLight()
        light.direction.setValue(-0.5, -0.5, -0.8)
        root.addChild(light)

        camera = SoPerspectiveCamera()
        camera.orientation.setValue(SbRotation(SbVec3f(0, 0, 1), 0))
        root.addChild(camera)
  
        cone = SoCone()
        root.addChild(cone)
  
        # Add the renderarea.

        self.renderarea = SoQtRenderArea(container)
        self.renderarea.setSceneGraph(root)
        camera.viewAll(root, self.renderarea.getViewportRegion())

        self.addChild(container, 100, 100)
        container.show()
        self.renderarea.show()

    # __init__()

    # WARNING: advanced PyQt programming:
    # Since the virtual C++ member function drawContents() is overloaded in
    # in the inheritance tree of QScrollView, it may be called as:
    # 1. QFrame.drawContents(painter)
    # 2. QScrollView.drawContents(painter, cx, cy, cw, ch)
    # Therefore, the Python call must be able to handle 2 and 6 arguments.
    def drawContents(self, *args):
        if len(args) == 5:
            painter, cx, cy, cw, ch = args
            painter.fillRect(cx, cy, cw, ch, QBrush(QColor(40, 80, 0)))
        self.renderarea.scheduleRedraw()

    # drawContents()

# class MyScrollView


def main():
    # Initialize Qt and SoQt.
    app = QApplication(sys.argv)
    SoQt.init(None)

    # Set up scrollview window.
    view = MyScrollView(None)
    view.viewport().setBackgroundMode(QWidget.NoBackground)

    # Map window.
    view.show()
    # Set termination condition.
    QObject.connect(
        qApp, SIGNAL('lastWindowClosed()'), qApp, SLOT('quit()'))
    # Start event loop.
    SoQt.mainLoop()

# main()


if __name__ == '__main__':
    main()

# Local Variables: ***
# mode: python ***
# End: ***