#!/usr/bin/env python

# simple ebook reader / JoY/tkt GUI07 X3 / SJ 151107
# skeleton version with TODO marks

import gtk
import pygtk
import gobject


class Reader:
    """Main ebook reader class."""

    def __init__(self):
        """Contructor"""
        self.draw_ui()


    def draw_ui(self):
        """Draw whole UI"""

        self.win = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.win.connect("delete_event", self.delete)
        self.win.set_size_request(600, 600)
        self.win.set_geometry_hints(min_width=100, min_height=100)
        
        mainbox = gtk.VBox()
        self.win.add(mainbox)

        # TODO create menu
        mainbox.pack_start(menu, False, False)

        # TODO create display panel
        mainbox.pack_start(self.disp.create_display())

        # TODO speed control
        mainbox.pack_start(controls, False, False)

        # recursive show all widgets
        self.win.show_all()


    def draw_menu(self):
        """Draw and return menubar"""
        # TODO

        return menu_bar # TODO 


    def draw_controls(self):
        """Draw controls (now only speed slider) of the system.
           Returns tuple frame, speed_adjustement."""
        # TODO
        return frame # TODO


    def close(self, widget=None, data = None):
        """Closes an existing file"""
        # TODO


    def open(self, widget, data=None):
        """Opens a new file selector, connects OK to open_ok()."""
        filesel = gtk.FileSelection("Open new book.")
        filesel.set_filename(self.filename)
        filesel.cancel_button.connect("clicked", lambda w: filesel.destroy())
        filesel.ok_button.connect("clicked", self.open_ok, filesel)
        filesel.show()


    def open_ok(self, widget, filesel):
        """Actually opens the file, called whenever user OKs the file selector."""
        self.filename = filesel.get_filename()
        filesel.destroy()
        booklist = self.readfile(self.filename)
        # TODO


    def readfile(self, filename):
        """Reads a file and returns it as a list of lines."""
        try:
            f = open(filename, 'r')
            booklist = []
            for line in f:
                booklist.append(line)
            f.close()
            return booklist
        except IOError:
            return None

    # TODO

    def adjcallback(self, widget, data=None):
        """Update scrolling when speed slider was changed."""
        if self.speed_adj.get_value() == 0.0:
            self.disp.stopscroll()
        else:
            self.disp.startscroll()


    def delete(self, widget, data=None):
        """Main program quit callback."""
        gtk.main_quit()
        return False

    def main(self):
        """Main program"""
        gtk.main()

# end of class Reader

class Display:
    """Class that manages the actual reader"""
    
    def __init__(self, mainreader):
        self.reader = mainreader
        self.timer = None


    def create_display(self):
        # TODO

        return frame


    def displaybook(self, booklist):
        """Displays a list of strings in self.textbuf"""
        # TODO


    # TODO



    def close(self, widget=None, data = None):
        """Closes an existing file"""
        # TODO

# end of class Display

# Start if called directly
if __name__ == "__main__":
    r = Reader()
    r.main()


