#!/usr/bin/python
# -*- encoding: utf-8 -*-

import gtk

# local imports
import previewpane
import texpane

#import dialogs
#import preferences

from constants import *

# TODO: Documentation

class MainWindow:

    def __init__(self):
        self.builder = gtk.Builder()
        self.builder.add_from_file(UI_DIR + 'mainwindow.ui')
        self.builder.connect_signals(self)
        self.window = self.builder.get_object('mainwindow')

        self.texview = texpane.TexView()

        preview_area = self.builder.get_object('preview_drawingarea')
        preview_toolbar = self.builder.get_object('preview_toolbar')
        pdffile = '/home/thomas/Documents/pcm.pdf' # TODO: placefiller pdf
        self.previewpane = previewpane.PreviewPane(preview_area,
                                                   preview_toolbar, pdffile)

        texscroll = self.builder.get_object('editor_scrolledwindow')
        texscroll.add(self.texview)
        texscroll.show_all()

        self.window.show()
        gtk.main()

    def new(self):
        pass

    def open(self):
        pass

    def save(self):
        pass

    def saveas(self):
        pass

    def revert(self):
        pass

    def quit(self):
        # TODO: Check if we need to save the document first
        print '   ___   '
        print '  {o,o}  ', 'Thank you for using Gummi!'
        print '  |)_(|  ', 'We welcome your feedback at'
        print ' --"-"-- ', 'http://gummi.googlecode.com\n'
        gtk.main_quit()

    def undo(self):
        self.texview.undo()

    def redo(self):
        self.texview.redo()

    def cut(self):
        self.texview.cut()

    def copy(self):
        self.texview.copy()

    def paste(self):
        self.texview.paste()

    def delete(self):
        self.texview.delete()

    def select_all(self):
        self.texview.select_all()

    def deselect_all(self):
        self.texview.deselect_all()

    def find(self):
        pass

    def find_next(self):
        pass

    def find_previous(self):
        pass

    def find_and_replace(self):
        pass

    def insert_image(self):
        pass

    def insert_table(self):
        pass

    def insert_matrix(self):
        pass

    def toolbar_toggle(self, value):
        toolbar = self.builder.get_object('toolbar')
        if value:
            toolbar.show()
        else:
            toolbar.hide()
        pass

    def statusbar_toggle(self, value):
        statusbar = self.builder.get_object('statusbar')
        if value:
            statusbar.show()
        else:
            statusbar.hide()

    def preview_toggle(self, value):
        preview = self.builder.get_object('preview_panel')
        if value:
            preview.show()
            print 'show'
        else:
            preview.hide()
            print 'hide'
        pass

    def fullscreen_toggle(self, enable):
        if enable:
            self.window.fullscreen()
        else:
            self.window.unfullscreen()

    def about(self):
        pass

####################
#    Menu Items    #
####################

# File

    def on_new_menuitem_activate(self, menuitem):
        self.new()

    def on_open_menuitem_activate(self, menuitem):
        self.open()

    def on_save_menuitem_activate(self, menuitem):
        self.save()

    def on_saveas_menuitem_activate(self, menuitem):
        self.saveas()

    def on_revert_menuitem_activate(self, menuitem):
        self.revert()

    def main_quit(self, menuitem):
        self.quit()

# Edit

    def on_undo_menuitem_activate(self, menuitem):
        self.undo()

    def on_redo_menuitem_activate(self, menuitem):
        self.redo()

    def on_cut_menuitem_activate(self, menuitem):
        self.cut()

    def on_copy_menuitem_activate(self, menuitem):
        self.copy()

    def on_paste_menuitem_activate(self, menuitem):
        self.paste()

    def on_delete_menuitem_activate(self, menuitem):
        self.delete()

    def on_selectall_menuitem_activate(self, menuitem):
        self.select_all()

    def on_deselectall_menuitem_activate(self, menuitem):
        self.deselect_all()

    def on_find_menuitem_activate(self, menuitem):
        self.find()

    def on_findnext_menuitem_activate(self, menuitem):
        self.find_next()

    def on_findprevious_menuitem_activate(self, menuitem):
        self.find_previous()

    def on_findandreplace_menuitem_activate(self, menuitem):
        self.find_and_replace()

    def on_preferences_menuitem_activate(self, menuitem):
        pass # TODO

# View
    def on_toolbar_menuitem_toggled(self, menuitem):
        self.toolbar_toggle(menuitem.get_active())

    def on_statusbar_menuitem_toggled(self, menuitem):
        self.statusbar_toggle(menuitem.get_active())

    def on_preview_menuitem_toggled(self, menuitem):
        self.preview_toggle(menuitem.get_active())

    def on_fullscreen_menuitem_toggled(self, menuitem):
        self.fullscreen_toggle(menuitem.get_active())

# Insert
    def on_image_menuitem_activate(self, menuitem):
        self.insert_image()

    def on_table_menuitem_activate(self, menuitem):
        self.insert_table()

    def on_matrix_menuitem_activate(self, menuitem):
        self.insert_matrix()

# Help

    def on_about_menuitem_activate(self, menuitem):
        pass


####################
#   Toolbar Items  #
####################

    def on_new_toolbutton_clicked(self, menuitem):
        self.new()

    def on_open_toolbutton_clicked(self, menuitem):
        self.open()

    def on_save_toolbutton_clicked(self, menuitem):
        self.save()

    def on_cut_toolbutton_clicked(self, menuitem):
        self.cut()

    def on_copy_toolbutton_clicked(self, menuitem):
        self.copy()

    def on_paste_toolbutton_clicked(self, menuitem):
        self.paste()

    def on_undo_toolbutton_clicked(self, menuitem):
        self.undo()

    def on_redo_toolbutton_clicked(self, menuitem):
        self.redo()

    def on_preview_pane_close_button_clicked(self, button):
        self.preview_toggle(False)


if __name__ == '__main__':
    MainWindow()
else:
    pass