#!/usr/bin/env python
# Most of this file has been taken from the PyGTK 2.0 Tutorial
# from John Finlay

import pygtk
pygtk.require('2.0')
import gtk

class LogShow(gtk.ScrolledWindow):
        
    def __init__(self):
        gtk.ScrolledWindow.__init__(self)
        self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        self.textview=gtk.TextView(buffer=None)
        self.add_with_viewport(self.textview)
        self.textview.show()
        
    def addLine(self, line):
        buffer = self.textview.get_buffer()
        buffer.insert_at_cursor(line)
            
class StatusBar(gtk.Statusbar):

    def __init__(self):
        gtk.Statusbar.__init__(self)

    def addLine(self,line):
        context_id = self.get_context_id("Statusbar")
        statusbar.push(context_id,line)

class WpGui:                

    # Obligatory basic callback
    def print_hello(self, w, data):
        print "Hello, World!"
    def get_main_menu(self, window):
        accel_group = gtk.AccelGroup()
        item_factory = gtk.ItemFactory(gtk.MenuBar, "<main>", accel_group)
        item_factory.create_items(self.menu_items)
        window.add_accel_group(accel_group)
        self.item_factory = item_factory
        return item_factory.get_widget("<main>")

    def _logMessage(self, message):
        self.textbox.addLine(message)

    def _changeStatusbar(self, message, timeout=None):
        self.statusbar.addLine(message)

    LOG = 1
    BAR = 2
    
    def __init__(self):
        self.menu_items = (
            ( "/_File",
              None,
              None, 0, "<Branch>" ),
            ( "/File/_Open Browser",
              "<control>O", self.print_hello, 0, None ),
            ( "/File/Quit",
              "<control>Q", gtk.main_quit, 0, None ),
            ( "/_Options",
              None,
              None, 0, "<Branch>" ),
            ( "/Options/Test", None,
              None, 0, None ),
            ( "/_Help",
              None,
              None, 0, "<LastBranch>" ),
            ( "/_Help/About", None,
              None, 0, None ),
            )
        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        window.connect("destroy", lambda w: gtk.main_quit())
        window.set_title("Item Factory")
        window.set_size_request(300, 200)
        main_vbox = gtk.VBox(False, 1)
        main_vbox.set_border_width(1)
        window.add(main_vbox)
        main_vbox.show()
        menubar = self.get_main_menu(window)
        self.textbox = LogShow()
        self.statusbar = StatusBar()
        main_vbox.pack_start(menubar, False, True, 0)
        main_vbox.pack_start(self.textbox, True, True, 0)
        main_vbox.pack_start(self.statusbar, False, True, 0)
        self.textbox.show()
        menubar.show()
        window.show()
        self.statusbar.show()
        self.textbox.addLine("test")

    def send(self, type, *payload):
        self.methods[type](self, *payload)


    methods = {
	LOG: _logMessage,
	BAR: _changeStatusbar,
        }

def main():
    gtk.main()
    return 0

if __name__ == "__main__":
    WpGui()
    main()
