"""Routines that actually speak Qt to drive its web views."""

import sys
from PyQt4 import QtCore, QtGui, QtWebKit

print QtCore.QT_VERSION_STR
print QtCore.PYQT_VERSION_STR

class SimpleTest(object):
    def __init__(self):
        self.current_callback = self.callback1

    def step(self):
        next = self.current_callback()
        if next is not None:
            self.current_callback = next

    def findAll(self, selector):
        ret = list(self.webview.page().mainFrame().findAllElements(selector))
        print selector, ret
        return ret

    def click(self, element):
        element.evaluateJavaScript(
            "var event = document.createEvent('MouseEvents');"
            "event.initEvent('click', true, true);"
            "this.dispatchEvent(event);"
            )

    def callback1(self):
        print "callback1"
        self.webview = QtWebKit.QWebView()
        self.webview.show()
        self.webview.load(QtCore.QUrl(
                'http://ec2-184-73-115-78.compute-1.amazonaws.com/simple/'
                ))
        self.webview.loadFinished.connect(self.callback1done)

    def callback1done(self):
        print "callback1done"
        self.current_callback = self.callback2

    def callback2(self):
        elist = self.findAll('div#content > p > a')
        if elist:
            self.click(elist[0])
            return self.callback3

    def callback3(self):
        elist = self.findAll('div#ferns-info > h2 > a')
        if elist:
            self.click(elist[0])
            return self.callback4

    def callback4(self):
        elist = self.findAll('div#lycophytes-info > h2 > a')
        if elist:
            self.click(elist[0])
            return self.callback5

    def callback5(self):
        pass

# The Qt application itself.

app = QtGui.QApplication(sys.argv)
tester = SimpleTest()
timer = QtCore.QTimer()
timer.timeout.connect(tester.step)
timer.start(50)
sys.exit(app.exec_())
