class GraphWindow(Toplevel):
    def __init__(self, parent=None, title=None, **kwargs):
        Toplevel.__init__(self, parent)
        if title != None:
            self.title(title)
        self.parent = parent
        self.paned_parent = PanedWindow(self)
        self.graph_frame = None
        if 'plot' in kwargs:
            if 'df' in kwargs:
                if 'plot_title' in kwargs:
                    if 'y_label' in kwargs:
                        self.graph_frame = GraphFrame(self, self.paned_parent, plot=kwargs['plot'], df=kwargs['df'], plot_title=kwargs['plot_title'], y_label=kwargs['y_label'], log_filename=kwargs['log_filename'])
                    else:
                        self.graph_frame = GraphFrame(self, self.paned_parent, plot=kwargs['plot'], df=kwargs['df'], plot_title=kwargs['plot_title'], log_filename=kwargs['log_filename'])
                else:
                    self.graph_frame = GraphFrame(self, self.paned_parent, plot=kwargs['plot'], df=kwargs['df'], log_filename=kwargs['log_filename'])

        self.protocol('WM_DELETE_WINDOW', self.on_close)

        # NOTE: Keep the window from being resized because child widgets don't seem to fit properly
        #self.resizable(width=False, height=False)
        self.bind('<Configure>', self.on_resize)

    def set_grid(self):
        #self.grid()
        self.paned_parent.pack(expand=True, fill=Tkinter.BOTH)
        if self.graph_frame != None:
            self.graph_frame.set_grid()

    def unset_grid(self):
        #self.grid_forget()
        self.paned_parent.pack_forget()
        if self.graph_frame != None:
            self.graph_frame.unset_grid()

    def on_close(self):
        self.parent.notify_of_close(self)
        self.withdraw()
        self.destroy()

    def on_resize(self, event):
        #print 'In on_resize'
        if isinstance(event.widget, Toplevel):
            #print 'Resizing window'
            self.unset_grid()
            self.set_grid()
            self.update()