diff --git a/.idea/JDE.iml b/.idea/JDE.iml index 6711606..08b65cd 100644 --- a/.idea/JDE.iml +++ b/.idea/JDE.iml @@ -2,7 +2,7 @@ - + diff --git a/.idea/misc.xml b/.idea/misc.xml index fa16f6a..0d9674f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -26,7 +26,7 @@ - + diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..5c20ca4 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,629 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1466672063402 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/JDE/Interfaces/__pycache__/desktop.cpython-35.pyc b/JDE/Interfaces/__pycache__/desktop.cpython-35.pyc new file mode 100644 index 0000000..7c92002 Binary files /dev/null and b/JDE/Interfaces/__pycache__/desktop.cpython-35.pyc differ diff --git a/JDE/Interfaces/__pycache__/login.cpython-35.pyc b/JDE/Interfaces/__pycache__/login.cpython-35.pyc new file mode 100644 index 0000000..b74ade3 Binary files /dev/null and b/JDE/Interfaces/__pycache__/login.cpython-35.pyc differ diff --git a/JDE/Interfaces/__pycache__/start.cpython-35.pyc b/JDE/Interfaces/__pycache__/start.cpython-35.pyc new file mode 100644 index 0000000..d26bf34 Binary files /dev/null and b/JDE/Interfaces/__pycache__/start.cpython-35.pyc differ diff --git a/JDE/Interfaces/desktop.py b/JDE/Interfaces/desktop.py index 66432ee..0f394b1 100644 --- a/JDE/Interfaces/desktop.py +++ b/JDE/Interfaces/desktop.py @@ -9,8 +9,10 @@ from Programs import jpad from Programs import info from Programs import imageViewer from Programs import minesweeper +from Programs import terminal +from Programs.webEdit import htmlEdit as webEdit -desktopLog = logging.getLogger("desktop.py") +desktopLog = logging.getLogger(__name__) desktopLog.debug("Atempting to read settings file") try: @@ -23,7 +25,7 @@ except Exception as e: class desktop: def box(self, event): - desktopLog.debug("Running box") + desktopLog.debug("Running "+desktop.box.__name__) try: if (self.clicked == False): self.searchvar.set("") @@ -33,7 +35,7 @@ class desktop: desktopLog.error(str(e)) def search_internet(self, event): - desktopLog.debug("Running search_internet") + desktopLog.debug("Running "+desktop.search_internet.__name__) # TODO: Find a way to implement a browser try: webbrowser.open_new_tab("https://www.google.co.uk/#q=" + self.searchvar.get().replace(" ", "+")) @@ -41,7 +43,7 @@ class desktop: desktopLog.error(str(e)) def reposition(self, event): - desktopLog.debug("Running reposition") + desktopLog.debug("Running "+desktop.reposition.__name__) try: self.cHeight = self.window.winfo_height() self.cWidth = self.window.winfo_width() @@ -70,7 +72,7 @@ class desktop: desktopLog.error(str(e)) def fullScreen(self, event): - desktopLog.debug("Running fullscreen") + desktopLog.debug("Running "+desktop.fullScreen.__name__) try: if self.max == 0: self.window.attributes('-fullscreen', True) @@ -82,7 +84,7 @@ class desktop: desktopLog.error(str(e)) def clockTick(self): - desktopLog.debug("Running clockTick") + desktopLog.debug("Running "+desktop.clockTick.__name__) try: self.desktopRefresh() # cTime = time.strftime("%H:%M:%S") @@ -98,7 +100,7 @@ class desktop: desktopLog.error(str(e)) def createSearch(self): - desktopLog.debug("Running createSearch") + desktopLog.debug("Running "+desktop.createSearch.__name__) try: self.searchText = Label(self.window, text="Search for: ") self.searchvar = StringVar() @@ -111,7 +113,7 @@ class desktop: desktopLog.error(str(e)) def contextMenuPopup(self, event): - desktopLog.debug("Running contextMenuPopup") + desktopLog.debug("Running "+desktop.contextMenuPopup.__name__) try: # start.start(self.menuColour, event.x_root, event.y_root) self.contextMenu.post(event.x_root, event.y_root) @@ -126,7 +128,7 @@ class desktop: self.contextMenu.add_command(label=label, command=command, state=state) def createContextMenu(self): - desktopLog.debug("Running createContextMenu") + desktopLog.debug("Running "+desktop.createContextMenu.__name__) try: self.contextMenu = Menu(self.window, tearoff=0, bg=self.contextMenuColour) @@ -142,29 +144,36 @@ class desktop: def viewImage(): imageViewer.imageViewer(self.window) + def runTerminal(): + terminal.terminal(self.window) + + def webEditor(): + webEdit.webEdit(self.window) + self.contextMenu.add_command(label="Refresh", command=self.desktopRefresh) self.contextMenu.add_cascade(label="Games", menu=self.games) self.contextMenu.add_cascade(label="Applications", menu=self.applications) self.applications.add_command(label="Jpad", command=jpadEdit) + self.applications.add_command(label="WebEdit", command=webEditor) self.applications.add_command(label="View Images", command=viewImage) self.games.add_command(label="Minesweeper", command=minesweeperRun) self.applications.add_command(label="File Explorer", state=DISABLED) self.applications.add_command(label="Hardware Monitor", state=DISABLED) self.applications.add_command(label="Music Player", state=DISABLED) self.applications.add_command(label="Info", command=info.info) - self.applications.add_command(label="Terminal", state=DISABLED) + self.applications.add_command(label="Terminal", state=ACTIVE, command=runTerminal) self.applications.add_command(label="Settings", state=DISABLED) self.contextMenu.add_command(label="Restart", state=DISABLED) - self.contextMenu.add_command(label="Shutdown", command=sys.exit) + self.contextMenu.add_command(label="Exit", command=sys.exit) except Exception as e: desktopLog.error(str(e)) def desktopRefresh(self): try: - desktopLog.debug("Running desktopRefresh") + desktopLog.debug("Running "+desktop.desktopRefresh.__name__) self.fileImage = PhotoImage(file="JDE/Images/file.png") self.f = [] self.l = [] @@ -220,14 +229,14 @@ class desktop: desktopLog.error(str(e)) def refresh(self): - desktopLog.debug("Running refresh") + desktopLog.debug("Running "+desktop.refresh.__name__) try: self.desktopRefresh() except Exception as e: desktopLog.error(str(e)) def createStart(self): - desktopLog.debug("Running createStartPic") + desktopLog.debug("Running "+desktop.createStart.__name__) try: start.start(self.menuColour, int(0), int(self.window.winfo_height())) except Exception as e: @@ -235,21 +244,21 @@ class desktop: def createBackground(self): try: - desktopLog.debug("Running createBackground") + desktopLog.debug("Running "+desktop.createBackground.__name__) self.background_image = PhotoImage(file=self.background) self.canvas.create_image(0, 0, image=self.background_image, anchor=NW) except Exception as e: desktopLog.error(str(e)) def createIcon(self): - desktopLog.debug("Running createIcon") + desktopLog.debug("Running"+desktop.createIcon.__name__) try: self.window.wm_iconbitmap("System/JordonOS Logo.ico") except Exception as e: desktopLog.error(str(e)) def createWindow(self): - desktopLog.debug("Running createWindow") + desktopLog.debug("Running "+desktop.createWindow.__name__) try: self.window = Tk() self.window.title("Jordon's Desktop Environment") @@ -291,7 +300,7 @@ class desktop: desktopLog.error(str(e)) def __init__(self, windowTitle="Desktop Environment", width="1920", height="1080", minWidth="", username=""): - desktopLog.debug("Running __init__") + desktopLog.debug("Running "+desktop.__init__.__name__) try: self.width = width self.height = height diff --git a/JDE/Interfaces/login.py b/JDE/Interfaces/login.py index 41b2edc..60a7ef4 100644 --- a/JDE/Interfaces/login.py +++ b/JDE/Interfaces/login.py @@ -1,7 +1,7 @@ import logging from tkinter import * -loginLog = logging.getLogger("login.py") +loginLog = logging.getLogger(__name__) class login: @@ -20,6 +20,7 @@ class login: self.file.close() except: self.message.configure(text="Err: Username or password is incorrect!") + self.file = open(self.userDirs + self.username.lower() + ".profile", "r") self.line = self.file.readlines() diff --git a/JDE/JDE.py b/JDE/JDE.py index c9ad751..a831936 100644 --- a/JDE/JDE.py +++ b/JDE/JDE.py @@ -1,9 +1,16 @@ __author__ = "Jordonbc" import logging import time +import os -logging.basicConfig(filename='JDE/Logs/' + str(time.strftime('%d-%m-%Y-%H-%M%p') + ".log"), level=logging.DEBUG) -jdeLog = logging.getLogger("JDE.py") +if not os.path.exists("JDE/Logs"): + os.mkdir("JDE/Logs") + +logging.basicConfig(filename='JDE/Logs/' + str(time.strftime('%d-%m-%Y-%H-%M%p') + ".log"), level=logging.DEBUG, + datefmt='%I:%M:%S %p', + format='%(asctime)s:%(name)s:%(lineno)d}:%(levelname)s - %(message)s') + +jdeLog = logging.getLogger(__name__) jdeLog.info("Importing tkinter") try: @@ -31,7 +38,7 @@ except Exception as e: jdeLog.info("Importing JDE/Interfaces/desktop") try: - from JDE.Interfaces import desktop + from JDE.Interfaces import desktop as desktop jdeLog.info("Import Successful!") except Exception as e: @@ -45,9 +52,6 @@ try: userFile.close() os.remove("active") - print(username) - - desktopApp = desktop.desktop - desktopApp(username=username) + desktop.desktop(windowTitle="JDE Desktop", username=username) except Exception as e: jdeLog.critical(str(e)) diff --git a/JDE/__pycache__/JDE.cpython-35.pyc b/JDE/__pycache__/JDE.cpython-35.pyc new file mode 100644 index 0000000..fa5a987 Binary files /dev/null and b/JDE/__pycache__/JDE.cpython-35.pyc differ diff --git a/Programs/PyIDE.py b/Programs/PyIDE.py new file mode 100644 index 0000000..43e7dcb --- /dev/null +++ b/Programs/PyIDE.py @@ -0,0 +1,73 @@ +from tkinter import * +import sys +from tkinter.filedialog import askopenfilename, asksaveasfilename + + +def PyIDE(): + def openFile(): + file = askopenfilename(defaultextension=".py", + filetypes=[("Python .py", ".py"), ("Python .pyw", ".pyw")]) + + if file != "": + with open(file, "r") as openfile: + input.delete(0.0, END) + input.insert(0.0, openfile.read()) + + def save(): + file = asksaveasfilename(defaultextension=".py", + filetypes=[("Python .py", ".py"), ("Python .pyw", ".pyw")]) + + if file != "": + with open(file, "w") as saveFile: + saveFile.write(input.get(0.0, END)) + + class TextRedirector(object): + def __init__(self, widget, tag="stdout"): + self.widget = widget + self.tag = tag + + def write(self, str): + output.delete(0.0, END) + self.widget.configure(state="normal") + self.widget.insert("end", str, (self.tag,)) + self.widget.configure(state="disabled") + self.widget.see(END) + + def run(): + exec(input.get(0.0, END)) + + rootInterpreter = Tk() + rootInterpreter.title("Terminal") + rootInterpreter.geometry("200x200") + rootInterpreter.minsize(200, 200) + + menu = Menu(rootInterpreter) + rootInterpreter.config(menu=menu) + filemenu = Menu(menu) + menu.add_cascade(label="File", menu=filemenu) + filemenu.add_command(label="New") + filemenu.add_command(label="Open", command=openFile) + filemenu.add_command(label="Save", command=save) + filemenu.add_command(label="Save As", state=DISABLED) + filemenu.add_separator() + filemenu.add_command(label="Exit", command=sys.exit) + + output = Text(rootInterpreter, state=DISABLED, wrap="word") + output.configure(state=NORMAL) + output.configure(state=DISABLED) + output.pack(side=TOP, expand=YES, fill=BOTH) + + input = Text(rootInterpreter) + input.focus() + input.pack(side=BOTTOM, expand=YES, fill=BOTH) + + sys.stderr = TextRedirector(output, "stderr") + + sys.stdout = TextRedirector(output, "stdout") + + rootInterpreter.mainloop() + + # rootInterpreter.protocol("WM_DELETE_WINDOW", closeApp) + + +PyIDE() diff --git a/Programs/__pycache__/imageViewer.cpython-35.pyc b/Programs/__pycache__/imageViewer.cpython-35.pyc new file mode 100644 index 0000000..dea63f2 Binary files /dev/null and b/Programs/__pycache__/imageViewer.cpython-35.pyc differ diff --git a/Programs/__pycache__/info.cpython-35.pyc b/Programs/__pycache__/info.cpython-35.pyc new file mode 100644 index 0000000..bd74381 Binary files /dev/null and b/Programs/__pycache__/info.cpython-35.pyc differ diff --git a/Programs/__pycache__/jpad.cpython-35.pyc b/Programs/__pycache__/jpad.cpython-35.pyc new file mode 100644 index 0000000..e71ac1c Binary files /dev/null and b/Programs/__pycache__/jpad.cpython-35.pyc differ diff --git a/Programs/__pycache__/minesweeper.cpython-35.pyc b/Programs/__pycache__/minesweeper.cpython-35.pyc new file mode 100644 index 0000000..354f521 Binary files /dev/null and b/Programs/__pycache__/minesweeper.cpython-35.pyc differ diff --git a/Programs/__pycache__/terminal.cpython-35.pyc b/Programs/__pycache__/terminal.cpython-35.pyc new file mode 100644 index 0000000..b41c841 Binary files /dev/null and b/Programs/__pycache__/terminal.cpython-35.pyc differ diff --git a/Programs/jpad.py b/Programs/jpad.py index 2cda7b1..b929b54 100644 --- a/Programs/jpad.py +++ b/Programs/jpad.py @@ -2,7 +2,7 @@ import logging from tkinter import * from tkinter.filedialog import askopenfilename, asksaveasfilename -jpadLog = logging.getLogger("jpad.py") +jpadLog = logging.getLogger(__name__) jpadLog.debug("Atempting to read settings file") try: @@ -15,14 +15,14 @@ except Exception as e: class jpadEditor: def minimize(self): - jpadLog.debug("Running minimize") + jpadLog.debug("Running "+jpadEditor.minimize.__name__) try: self.appFocus = 0 except Exception as e: jpadLog.error(str(e)) def closeApp(self): - jpadLog.debug("Running closeApp") + jpadLog.debug("Running "+jpadEditor.closeApp.__name__) try: # self.appIcon.destroy() self.window.destroy() @@ -30,7 +30,7 @@ class jpadEditor: jpadLog.error(str(e)) def focusApp(self): - jpadLog.debug("Running focusApp") + jpadLog.debug("Running "+jpadEditor.focusApp.__name__) try: if self.appFocus == 0: self.window.focus_force() @@ -43,7 +43,7 @@ class jpadEditor: jpadLog.error(str(e)) def createMenu(self): - jpadLog.debug("Running createMenu") + jpadLog.debug("Running "+jpadEditor.createMenu.__name__) try: self.menu = Menu(self.window) self.window.config(menu=self.menu) @@ -63,7 +63,7 @@ class jpadEditor: jpadLog.error(str(e)) def new(self): - jpadLog.debug("Running new") + jpadLog.debug("Running "+jpadEditor.new.__name__) try: self.window.title("Jpad Text Editor" + " File: New File") self.textPad.delete(0.0, END) @@ -71,14 +71,14 @@ class jpadEditor: jpadLog.error(str(e)) def exit_command(self): - jpadLog.debug("Running exit_command") + jpadLog.debug("Running "+jpadEditor.exit_command.__name__) try: self.closeApp() except Exception as e: jpadLog.error(str(e)) def saveAs_command(self): - jpadLog.debug("Running saveAs_command") + jpadLog.debug("Running "+jpadEditor.saveAs_command.__name__) try: self.jpadFile = asksaveasfilename(defaultextension=".txt", filetypes=[("Text Files", ".txt"), ("Python .py", ".py"), @@ -95,7 +95,7 @@ class jpadEditor: jpadLog.error(str(e)) def save_command(self): - jpadLog.debug("Running save_command") + jpadLog.debug("Running "+jpadEditor.save_command.__name__) try: self.jpadFile = open(str(self.jpadFile), "w") if self.jpadFile != None: @@ -109,7 +109,7 @@ class jpadEditor: jpadLog.error(str(e)) def open_command(self): - jpadLog.debug("Running open_command") + jpadLog.debug("Running "+jpadEditor.open_command.__name__) try: self.jpadFile = askopenfilename(defaultextension=".txt", filetypes=[("Text Files", ".txt"), ("Python .py", ".py"), diff --git a/Programs/terminal.py b/Programs/terminal.py new file mode 100644 index 0000000..28df840 --- /dev/null +++ b/Programs/terminal.py @@ -0,0 +1,110 @@ +__author__ = "Jordonbc" + +__version__ = "1.1.0" +from tkinter import * + +default_stdin = sys.stdin +default_stdout = sys.stdout +default_stderr = sys.stderr + +disabledCommands = ["help()", "exit()", "sys.exit()", "quit()"] +availableCommands = ["set", "bg", "fg", "clear"] + + +def commands(): + print("Available Commands:") + print("set bg [HEX COLOUR]") + print("set fg [HEX COLOUR]") + print("clear") + print("run [file]") + + +class terminal: + class TextRedirector(object): + def __init__(self, widget, tag="stdout"): + self.widget = widget + self.tag = tag + + def write(self, str): + self.widget.configure(state="normal") + self.widget.insert("end", str, (self.tag,)) + self.widget.configure(state="disabled") + self.widget.see(END) + + def __init__(self, master, command=None): + def run(command=None): + if input.get() != "": + print(input.get()) + if input.get().startswith("set "): + if input.get().startswith("set bg "): + try: + output.configure(bg=str(input.get()).replace("set bg ", "").replace("\n", "")) + input.configure(bg=str(input.get()).replace("set bg ", "").replace("\n", "")) + except Exception as e: + print(str(e)) + elif input.get().startswith("set fg "): + try: + if str(input.get()).replace("set fg ", "").replace("\n", "").lower() == "#ffffff": + output.configure(insertbackground="#000000") + input.configure(insertbackground="#000000") + elif str(input.get()).replace("set fg ", "").replace("\n", "").lower() == "#000000": + output.configure(insertbackground="#ffffff") + input.configure(insertbackground="#ffffff") + output.configure(fg=str(input.get()).replace("set fg ", "").replace("\n", "")) + input.configure(fg=str(input.get()).replace("set fg ", "").replace("\n", "")) + except Exception as e: + print(str(e)) + + if input.get() == "clear": + print("\n" * 25) + elif input.get() in disabledCommands: + input.delete(0, END) + print("Command is disabled.") + + elif input.get().startswith("run "): + try: + exec(open(str(input.get()).replace("run ", ""), "r").read()) + except Exception as e: + print(str(e)) + + else: + try: + exec(input.get()) + except Exception as e: + print(str(e)) + + input.delete(0, END) + + def closeApp(): + sys.stdin = default_stdin + sys.stdout = default_stdout + sys.stderr = default_stderr + rootTerminal.destroy() + + rootTerminal = Toplevel(master) + rootTerminal.title("Terminal") + rootTerminal.geometry("400x300") + rootTerminal.minsize(200, 200) + rootTerminal.configure(bg="#000000") + + output = Text(rootTerminal, state=DISABLED, height=10, bg="#000000", fg="#FFFFFF", wrap="word", relief=FLAT) + output.configure(state=NORMAL) + output.insert(END, "JDE Terminal V " + __version__ + "\n") + output.insert(END, "Type commands() to see available commands\n") + output.configure(state=DISABLED) + output.pack(side=TOP, expand=YES, fill=BOTH) + + input = Entry(rootTerminal, width=400, bg="#000000", fg="#FFFFFF", relief=FLAT) + input.focus() + input.bind("", run) + input.pack(side=BOTTOM) + + output.configure(insertbackground="#ffffff") + input.configure(insertbackground="#ffffff") + + sys.stdin = self.TextRedirector(output, "stdin") + sys.stderr = self.TextRedirector(output) + sys.stdout = self.TextRedirector(output) + + rootTerminal.protocol("WM_DELETE_WINDOW", closeApp) + rootTerminal.mainloop() \ No newline at end of file diff --git a/Programs/webEdit/Templates/HTML 5/Default.HET b/Programs/webEdit/Templates/HTML 5/Default.HET new file mode 100644 index 0000000..fd12648 --- /dev/null +++ b/Programs/webEdit/Templates/HTML 5/Default.HET @@ -0,0 +1,9 @@ + + + + NEW WEBSITE + + +

Your Website Text

+ + \ No newline at end of file diff --git a/Programs/webEdit/__pycache__/htmlEdit.cpython-35.pyc b/Programs/webEdit/__pycache__/htmlEdit.cpython-35.pyc new file mode 100644 index 0000000..4f4d195 Binary files /dev/null and b/Programs/webEdit/__pycache__/htmlEdit.cpython-35.pyc differ diff --git a/Programs/webEdit/htmlEdit.py b/Programs/webEdit/htmlEdit.py new file mode 100644 index 0000000..d09d7c1 --- /dev/null +++ b/Programs/webEdit/htmlEdit.py @@ -0,0 +1,175 @@ +__author__ = "Jordonbc" +import os +from tkinter import * +from tkinter.filedialog import * +from tkinter.messagebox import * +from tkinter.simpledialog import askstring +import webbrowser + + + +settings = {} + +try: + exec(open("Programs/webEdit/settings", "r").read(), settings) +except: + print("Settings Currupted!, Resetting") + with open("Programs/webEdit/settings", "w") as file: + file.write("""fgColour = '#000000' +bgColour = '#FFFFFF' +cursor = '#FFFFFF'""") + +class webEdit: + def open(self): + self.saveLocation = askopenfilename(filetypes=[("HTML", "html"), ("All Files", "*")]) + if self.saveLocation != "": + self.textbox.delete(0.0, END) + self.textbox.insert(0.0, open(self.saveLocation, "r").read().strip()) + self.root.title("WebEdit - " + str(self.saveLocation)) + + def save(self): + self.saveLocation = asksaveasfilename(filetypes=[("HTML", "html"), ("All Files", "*")]) + if self.saveLocation != "": + file = open(self.saveLocation, "w") + file.write(str(self.textbox.get(0.0, END)).strip()) + file.close() + self.root.title("WebEdit - " + str(self.saveLocation)) + + def new(self): + if self.textbox.get(0.0, END) == "\n": + # template = askopenfile(defaultextension="HET", filetypes=[("Template", "HET"), ("All Files", "*")]) + template = open("Programs/webEdit/Templates/HTML 5/Default.HET", "r") + if template != None: + template = template.read() + self.textbox.delete(0.0, END) + self.textbox.insert(0.0, template) + else: + if askyesno(title="Sure?", message="Are you sure?"): + # template = askopenfile(defaultextension="HET", filetypes=[("Template", "HET"), ("All Files", "*")]) + template = open("Programs/webEdit/Templates/HTML 5/Default.HET", "r") + if template != None: + template = template.read() + self.textbox.delete(0.0, END) + self.textbox.insert(0.0, template) + self.root.title("WebEdit - New File") + + def createMenu(self): + menu = Menu(self.root) + menu.configure(bg=settings["bgColour"], fg=settings["fgColour"]) + fileMenu = Menu(menu) + fileMenu.configure(bg=settings["bgColour"], fg=settings["fgColour"]) + viewMenu = Menu(menu) + viewMenu.configure(bg=settings["bgColour"], fg=settings["fgColour"]) + snippetsMenu = Menu(menu) + snippetsMenu.configure(bg=settings["bgColour"], fg=settings["fgColour"]) + headlineMenu = Menu(menu) + headlineMenu.configure(bg=settings["bgColour"], fg=settings["fgColour"]) + self.root.configure(menu=menu) + menu.add_cascade(label="File", menu=fileMenu) + menu.add_cascade(label="Code Snippets", menu=snippetsMenu) + + def paragraph(): + self.textbox.insert(INSERT, "

") + + def div(): + self.textbox.insert(INSERT, "
") + + def br(): + self.textbox.insert(INSERT, "
") + + def headline_1(): + self.textbox.insert(INSERT, "

") + + def headline_2(): + self.textbox.insert(INSERT, "

") + + def headline_3(): + self.textbox.insert(INSERT, "

") + + def headline_4(): + self.textbox.insert(INSERT, "

") + + def headline_5(): + self.textbox.insert(INSERT, "
") + + def headline_6(): + self.textbox.insert(INSERT, "
") + + def insertImage(): + location = askstring(title="Image", prompt="Image") + self.textbox.insert(INSERT, "") + + def Link(): + address = askstring(title="Link", prompt="Link Address") + text = askstring(title="Link", prompt="Text") + self.textbox.insert(INSERT, ""+text+"") + + def openSettings(): + self.textbox.delete(0.0, END) + self.textbox.insert(0.0, open("settings").read()) + + def view_default(): + if self.saveLocation != "": + webbrowser.open_new(self.saveLocation) + + snippetsMenu.add_command(label="Paragraph", command=paragraph) + snippetsMenu.add_command(label="Division", command=div) + snippetsMenu.add_command(label="Image", command=insertImage) + snippetsMenu.add_command(label="Link", command=Link) + snippetsMenu.add_command(label="Break", command=br) + snippetsMenu.add_cascade(label="Headline", menu=headlineMenu) + headlineMenu.add_command(label="1", command=headline_1) + headlineMenu.add_command(label="2", command=headline_2) + headlineMenu.add_command(label="3", command=headline_3) + headlineMenu.add_command(label="4", command=headline_4) + headlineMenu.add_command(label="5", command=headline_5) + headlineMenu.add_command(label="6", command=headline_6) + + fileMenu.add_command(label="New", command=self.new) + fileMenu.add_command(label="Save", command=self.save) + fileMenu.add_command(label="Open", command=self.open) + fileMenu.add_separator() + fileMenu.add_command(label="Settings", command=openSettings) + fileMenu.add_separator() + fileMenu.add_command(label="Exit", command=quit) + + menu.add_command(label="View in browser", command=view_default) + + # menu.add_cascade(label="View", menu=viewMenu) + + # viewMenu.add_command(label="Default program", command=view_default) + + def createWidgets(self): + self.scrollbar = Scrollbar(self.root) + self.scrollbar.pack(side=RIGHT, fill=Y) + + self.textbox = Text(self.root) + self.textbox.pack(side=TOP, expand=YES, fill=BOTH) + self.textbox.configure(bg=settings["bgColour"], fg=settings["fgColour"], insertbackground=settings["cursor"], + yscrollcommand=self.scrollbar.set) + + self.scrollbar.config(command=self.textbox.yview) + + def saveShortcut(event): + self.save() + + def openShortcut(event): + self.open() + + def newShortcut(event): + self.new() + + self.textbox.bind("", saveShortcut) + self.textbox.bind("", openShortcut) + self.textbox.bind("", newShortcut) + + def __init__(self, master): + self.saveLocation = "" + self.root = Toplevel(master) + self.root.title("WebEdit") + self.root.configure(bg=settings["bgColour"]) + self.createWidgets() + self.createMenu() + self.new() + + self.root.mainloop() diff --git a/Programs/webEdit/settings b/Programs/webEdit/settings new file mode 100644 index 0000000..6e8c230 --- /dev/null +++ b/Programs/webEdit/settings @@ -0,0 +1,3 @@ +fgColour = '#FFFFFF' +bgColour = '#111111' +cursor = '#FFFFFF' \ No newline at end of file diff --git a/README.md b/README.md index be48dc8..0580b79 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,8 @@ # JDE -Glass OS Reborn! +Jordon's Desktop Environment is a complete rewrite of Glass OS which was one of my previous programs I made. +## What is JDE? +JDE stands for "Jordon's Desktop Environment" and is a complete rewrite of Glass OS which was another desktop environment. This means that JDE is NOT an operating system but is a overlay on top of your existing desktop. +## What are the requirements? +Well, JDE will work on any computer that is capable of running python 3. This means that even the tiny device you call a "raspberry pi" can run it! + +Disclaimer: JDE has NOT been tested on mac, many linux distributions or windows 8.1 and below. \ No newline at end of file