import os, sys
from qt import QSplitter
from qt import SIGNAL
from kdecore import KApplication, KCmdLineArgs
from kdecore import KAboutData
from kdeui import KMainWindow
from kdeui import KTextBrowser

from khtml import KHTMLPart

document = """
<table>
<tr><td>Test Image</td></tr>
<tr><td><img width=16 height=16 src="%s"/></td></tr>
</table>
<a href="flippit">Change Image</a>
<hr>
<a href="refresh">Refresh Page</a>
"""

class CommonBrowser(object):
    def handle_url_click(self, url):
        if url == 'flippit':
            if self.current == 'filenew.png':
                self.current = 'fileopen.png'
            else:
                self.current = 'filenew.png'
            imgfile = file('title.png', 'w')
            imgfile.write(file(self.current).read())
            imgfile.close()
        self.setDocument()

class TestTextBrowser(KTextBrowser, CommonBrowser):
    def __init__(self, parent):
        KTextBrowser.__init__(self, parent, 'TestTextBrowser')
        self.current = 'filenew.png'
        self.setDocument()
        self.setNotifyClick(True)
        
    def setSource(self, url):
        parent = self.parent()
        parent.set_documents(url)
        
    def setDocument(self):
        doc = document % os.path.join(os.getcwd(), 'title.png')
        doc = '%s %s' % (doc, self.current)
        # we have to make a blank page first
        # in order for the image to be updated
        if True:
            self.setText('')
        self.setText(doc)
        

class TestTextPart(KHTMLPart, CommonBrowser):
    def __init__(self, parent):
        KHTMLPart.__init__(self, parent, 'TestTextBrowser')
        self.current = 'filenew.png'
        self.setDocument()
        # KHTMLPart is QObject, not QWidget
        # need to put parent (splitter) here
        self.splitter = parent
        

    def urlSelected(self, url, button, state, target, args):
        self.splitter.set_documents(url)
        
    def setDocument(self):
        doc = document % os.path.join(os.getcwd(), 'title.png')
        doc = '%s %s' % (doc, self.current)
        app = KApplication.kApplication()
        # here we try to make a blank page first
        # as in the KTextBrowser, but this doesn't do the trick
        if True:
            view = self.view()
            view.layout()
            self.begin()
            self.write('')
            self.end()
            app.processEvents()
        app.processEvents()
        self.begin()
        self.setAutoloadImages(True)
        self.write(doc)
        self.end()


class MainSplitter(QSplitter):
    def __init__(self, parent, name='MainSplitter'):
        QSplitter.__init__(self, parent, name)
        self.browser = TestTextBrowser(self)
        self.kpart = TestTextPart(self)
        
    def set_documents(self, url):
        self.browser.handle_url_click(url)
        self.kpart.handle_url_click(url)
        
if __name__ == '__main__':
    appname = 'textbrowser_image'
    version = '-1'
    about = KAboutData(appname, appname, version)
    KCmdLineArgs.init(sys.argv, about)
    app = KApplication()
    win = KMainWindow()
    split = MainSplitter(win)
    win.setCentralWidget(split)
    win.show()

    app.setMainWidget(win)
    app.exec_loop()
    
