from tkinter import Tk, TOP, BOTH, X, LEFT, END, INSERT, Button, Frame, messagebox, filedialog
from tkinter.filedialog import asksaveasfilename, askopenfilename
from tkinter.scrolledtext import ScrolledText


class Application(Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.initUI()
        self.create_buttons()
        self.create_editor()

    def initUI(self):
        self.master.title("Pacil Editor")
        self.frame = Frame(self.master)
        self.frame.pack()

    def create_buttons(self):
        self.open = Button(self.frame, text="Open File",
                           command=self.load_file)
        self.open.grid(column=0, row=0)
        self.save = Button(self.frame, text="Save File",
                           command=self.save_file)
        self.save.grid(column=1, row=0)
        self.quit = Button(self.frame, text="Quit Program",
                           command=self.master.destroy)
        self.quit.grid(column=2, row=0)

    def create_editor(self):
        self.edit = ScrolledText(self.master)
        self.master.bind("<Control_L><o>", self.load_file)
        self.master.bind("<Control_L><s>", self.save_file)
        self.edit.pack()

    def load_file(self, event):
        self.load_file()

    def save_file(self, event):
        self.save_file()

    def load_file(self):
        file_name = askopenfilename(
            filetypes=[("All files", "*")]
        )
        if not file_name:
            return
        text_file = open(file_name, 'r', encoding="utf-8")
        result = text_file.read()

    def save_file(self):
        file_name = asksaveasfilename(
        )
        if not file_name:
            return
        target_file = open(file_name, 'w', encoding="utf-8")
        teks = self.get_text()
        target_file.write(teks)
        target_file.close()

    def set_text(self, text=''):
        self.edit.delete('1.0', END)
        self.edit.insert('1.0', text)
        self.edit.mark_set(INSERT, '1.0')
        self.edit.focus()

    def get_text(self):
        return self.edit.get('1.0', END+'-1c')


if __name__ == "__main__":
    root = Tk()
    app = Application(master=root)
    app.mainloop()
