From 2cfa5163b673e2eb5ce3c6d47d8c77bd59d9ba50 Mon Sep 17 00:00:00 2001 From: ALittlePatate <48603993+ALittlePatate@users.noreply.github.com> Date: Sat, 5 Sep 2020 12:29:11 +0200 Subject: [PATCH] Add files via upload --- post-it.py | 242 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 242 insertions(+) create mode 100644 post-it.py diff --git a/post-it.py b/post-it.py new file mode 100644 index 0000000..db7db2a --- /dev/null +++ b/post-it.py @@ -0,0 +1,242 @@ +import tkinter as tk +import sys, getopt, traceback, types +import os +from tkinter import * +from tkinter.filedialog import askopenfilename +from tkinter.filedialog import asksaveasfilename +from tkinter.scrolledtext import ScrolledText + +def runAsAdmin(cmdLine=None, wait=True): + + if os.name != 'nt': + raise(RuntimeError, "This function is only implemented on Windows.") + + import win32api, win32con, win32event, win32process + from win32com.shell.shell import ShellExecuteEx + from win32com.shell import shellcon + + python_exe = sys.executable + + if cmdLine is None: + cmdLine = [python_exe] + sys.argv + elif type(cmdLine) not in (types.TupleType,types.ListType): + raise(ValueError, "cmdLine is not a sequence.") + cmd = '"%s"' % (cmdLine[0],) + # XXX TODO: isn't there a function or something we can call to massage command line params? + params = " ".join(['"%s"' % (x,) for x in cmdLine[1:]]) + cmdDir = '' + showCmd = win32con.SW_SHOWNORMAL + #showCmd = win32con.SW_HIDE + lpVerb = 'runas' # causes UAC elevation prompt. + + # print "Running", cmd, params + + # ShellExecute() doesn't seem to allow us to fetch the PID or handle + # of the process, so we can't get anything useful from it. Therefore + # the more complex ShellExecuteEx() must be used. + + # procHandle = win32api.ShellExecute(0, lpVerb, cmd, params, cmdDir, showCmd) + + procInfo = ShellExecuteEx(nShow=showCmd, + fMask=shellcon.SEE_MASK_NOCLOSEPROCESS, + lpVerb=lpVerb, + lpFile=cmd, + lpParameters=params) + + if wait: + procHandle = procInfo['hProcess'] + obj = win32event.WaitForSingleObject(procHandle, win32event.INFINITE) + rc = win32process.GetExitCodeProcess(procHandle) + #print "Process handle %s returned code %s" % (procHandle, rc) + else: + rc = None + + return rc + + +open_file = " " +cwd = os.getcwd() +window = tk.Tk() +window.attributes("-topmost", False) +window.geometry("600x425") +window.minsize(0,0) +window['background']='#fff96d' +window.resizable(99999,99999) +try : + window.iconbitmap("Icon/icon.ico") +except : + pass +window.title("Post-It ! - Untitled") + +def main(argv) : + global open_file + try: + opts, args = getopt.getopt(argv,"hi:o:",["open=","admin"]) + except getopt.GetoptError: + print('python post-it.py -o -a ') + sys.exit(2) + for opt, arg in opts: + if opt == '-h': + print("Usage :") + print('python post-it.py -o -a ') + print(" ") + print('Note : You can theoretically open all types of files with post-it but it may not work.') + sys.exit() + elif opt in ("-o", "--open"): + open_file = arg + elif opt in ("-a", "--admin"): + runAsAdmin() + +def file_assos() : + global cwd + os.system('assoc .post-it="'+cwd+'\post-it.bat"') + +def openfile_arg() : + global current_file + global open_file + + if open_file == " " : + return + + current_file = open_file + window.title("Post-It ! - "+current_file) + + try : + with open(open_file, "r") as file_opened : + file_str = file_opened.read() + except Exception as e: + #print(e) + pass + + text.insert(INSERT, file_str) + +topmost = True +current_file = " " + +def newfile(*args) : + global text + global current_file + current_file = " " + window.title("Post-It ! - Untitled") + text.delete('1.0', END) + +def savefile(*args) : + global text + file_content = text.get('1.0', END) + + try : + with open(current_file, "r+") as file_save : + file_save.write(file_content) + file_save.close() + except FileNotFoundError : + savefileas() + +def savefileas(*args) : + global text + global tkFileDialog + global current_file + file_content = text.get('1.0', END) + + try : + f = asksaveasfilename(title="Save as", initialdir=cwd+"/My Post-it Files", defaultextension=".post-it", filetypes=(("Post-it File", "*.post-it"),("All Files", "*.*"))) + except : + f = asksaveasfilename(title="Save as", defaultextension=".post-it", filetypes=(("Post-it File", "*.post-it"),("All Files", "*.*"))) + if f is None: + return + + current_file = f + window.title("Post-It ! - "+current_file) + + try : + with open(f, "w") as file_save : + file_save.write(file_content) + file_save.close() + except Exception as e: + #print(e) + pass + +def openfile(*args) : + global tkFileDialog + global current_file + + try : + f = askopenfilename(title="Open", initialdir=cwd+"/My Post-it Files", defaultextension=".post-it", filetypes=(("Post-it File", "*.post-it"),("All Files", "*.*"))) + except : + f = askopenfilename(title="Open", defaultextension=".post-it", filetypes=(("Post-it File", "*.post-it"),("All Files", "*.*"))) + if f is None: + return + + current_file = f + window.title("Post-It ! - "+current_file) + text.delete('1.0', END) + + try : + with open(f, "r") as file_opened : + file_str = file_opened.read() + file_opened.close() + text.insert(INSERT, file_str) + except Exception as e: + #print(e) + pass + +def TopMost() : + global topmost + if topmost == True : + print("topmost = False") + window.attributes("-topmost", False) + topmost = False + return topmost + + if topmost == False : + print("Topmost = True") + window.attributes("-topmost", True) + topmost = True + return topmost + + else : + print(str(topmost)) + print("a") + + +text = ScrolledText(window) +text.config(background='#fff96d') +text.pack(fill=BOTH,expand=True) + +topmost_var = tk.IntVar() +case = tk.Checkbutton(variable = topmost_var,activebackground="#fff96d",activeforeground="#fff96d",bg="#fff96d",command=TopMost) +case.config(text="Top Most",background='#fff96d') +case.pack(side=RIGHT, fill=Y) + +menubar = Menu(window) +window.config(menu=menubar) + +filemenu = Menu(menubar, tearoff=0) +filemenu.add_command(label="New", command=newfile, accelerator="Ctrl+N") +filemenu.add_command(label="Open", command=openfile, accelerator="Ctrl+O") +filemenu.add_command(label="Save", command=savefile, accelerator="Ctrl+S") +filemenu.add_command(label="Save as", command=savefileas, accelerator="Ctrl+Alt+S") +filemenu.add_separator() +filemenu.add_command(label="Exit", command=quit, accelerator="Ctrl+Q") +window.bind_all("", quit) +window.bind_all("", newfile) +window.bind_all("", openfile) +window.bind_all("", savefile) +window.bind_all("", savefileas) +menubar.add_cascade(label="File", menu=filemenu) + +settings_menu = Menu(menubar, tearoff=0) +settings_menu.add_command(label="Use Post-it by default for .post-it files", command=file_assos) +menubar.add_cascade(label="Settings", menu=settings_menu) + +topmost = topmost_var.get() + +if __name__ == "__main__": + main(sys.argv[1:]) + +try : + openfile_arg() +except Exception as e: + print(e) + pass + +window.mainloop() \ No newline at end of file