Shadow Agency Code

From Chrysalis Archive
Jump to navigation Jump to search


main.py

©XenoEngineer 17:34, 12 May 2024 (UTC)

import tkinter as tk
from tkinter import filedialog
import webbrowser
from prompt_engineer.utils.ini_file import INIFile

class PromptEngineerApp(tk.Tk):
    def __init__(self, config_file):
        super().__init__()
        self.config = INIFile(config_file)
        self.load_window_settings()
        self.create_widgets()
        self.create_menu()
        self.file_path = None

    def load_window_settings(self):
        self.geometry(self.config.get('Window', 'geometry', '800x600'))
        self.title(self.config.get('Window', 'title', 'PromptEngineer'))

    def create_widgets(self):
        self.text_area = tk.Text(self)
        self.text_area.pack(fill=tk.BOTH, expand=True)

    def save_window_settings(self):
        self.config.set('Window', 'geometry', self.geometry())
        self.config.save()

    def destroy(self):
        self.save_window_settings()
        super().destroy()

    def create_menu(self):
        menubar = tk.Menu(self)
        self.configure(menu=menubar)

        self.create_file_menu(menubar)
        self.create_tools_menu(menubar)

    def create_file_menu(self, menubar):
        file_menu = tk.Menu(menubar, tearoff=0)
        menubar.add_cascade(label="File", menu=file_menu)
        file_menu.add_command(label="Open", command=self.file_open)
        file_menu.add_command(label="Save", command=self.file_save)
        file_menu.add_command(label="Save As", command=self.file_save_as)
        file_menu.add_command(label="Close", command=self.file_close)
        file_menu.add_separator()
        file_menu.add_command(label="Exit", command=self.destroy)

    def create_tools_menu(self, menubar):
        tools_menu = tk.Menu(menubar, tearoff=0)
        menubar.add_cascade(label="Tools", menu=tools_menu)
        tools_menu.add_command(label="Home Site", command=self.open_home_site)
        tools_menu.add_command(label="Help", command=self.open_help)

    def open_home_site(self):
        url = "https://groupKOS.com/chrysalis/Prompt_Engineer"
        webbrowser.open(url)

    def open_help(self):
        file_path = "docs/README.md"
        try:
            with open(file_path, 'r') as file:
                content = file.read()
                self.text_area.delete(1.0, tk.END)
                self.text_area.insert(tk.END, content)
        except FileNotFoundError:
            self.text_area.delete(1.0, tk.END)
            self.text_area.insert(tk.END, "Help file not found.")

    def file_open(self):
        file_path = filedialog.askopenfilename()
        if file_path:
            try:
                with open(file_path, 'r') as file:
                    content = file.read()
                    self.text_area.delete(1.0, tk.END)
                    self.text_area.insert(tk.END, content)
                    self.file_path = file_path
            except FileNotFoundError:
                self.text_area.delete(1.0, tk.END)
                self.text_area.insert(tk.END, "File not found.")

    def file_save(self):
        if self.file_path:
            content = self.text_area.get(1.0, tk.END)
            try:
                with open(self.file_path, 'w') as file:
                    file.write(content)
            except IOError:
                self.text_area.delete(1.0, tk.END)
                self.text_area.insert(tk.END, "Error occurred while saving the file.")
        else:
            self.file_save_as()

    def file_save_as(self):
        file_path = filedialog.asksaveasfilename(defaultextension='.txt')
        if file_path:
            content = self.text_area.get(1.0, tk.END)
            try:
                with open(file_path, 'w') as file:
                    file.write(content)
                    self.file_path = file_path
            except IOError:
                self.text_area.delete(1.0, tk.END)
                self.text_area.insert(tk.END, "Error occurred while saving the file.")

    def file_close(self):
        self.file_path = None
        self.text_area.delete(1.0, tk.END)


def main():
    app = PromptEngineerApp('prompt_engineer/utils/config.ini')
    app.mainloop()


if __name__ == '__main__':
    main()