
# https://www.globalsino.com/ICs/
# Screenshot: save screenshot to a pre-defined file name; ScreenShot_FileTile: make screenshot with a tile input from the dialog box
# ConfirmPPTfile: confirm if there is such a ppt file; ScreenShotAndText: save screenshot to a pre-defined file name together with input text.

from tkinter import *
from tkinter import simpledialog
import pyautogui
import datetime
import pyperclip as pc
import time
import os

class Application(): # 1st call
    def createScreenAndText(self): # 2cd call
        self.master_screen.deiconify()
        root.withdraw()
        self.screenCanvas = Canvas(self.picture_frame, cursor="cross", bg="grey11")
        self.screenCanvas.pack(fill=BOTH, expand=YES)
        self.screenCanvas.bind("<ButtonPress-1>", self.on_button_pressAndTex) # call "3rd call"
        self.screenCanvas.bind("<B1-Motion>", self.on_move_pressAndTex) # call "4th call"
        self.screenCanvas.bind("<ButtonRelease-1>", self.on_button_releaseAndTex) # call "5th call"
        self.master_screen.attributes('-fullscreen', True)
        self.master_screen.attributes('-alpha', .3)
        self.master_screen.lift()
        self.master_screen.attributes("-topmost", True)


    def takeBoundedScreenShotAndText(self, x1, y1, x2, y2): # 6th call
        aText = simpledialog.askstring("String", "Text to write into PowerPoint:                                       ")
        # print(aText)
        if len(aText):
            # print(len(aText))
            im = pyautogui.screenshot(region=(x1, y1, x2, y2))
            x = datetime.datetime.now()
            fileName = pc.paste()        
            My_image = os.path.join(r"C:\0Python\0testingCodes", fileName + ".png")
            im.save(My_image)
            import page4350CheckPPTXexisting
            page4350CheckPPTXexisting.PPTandAddText(My_image, fileName, aText)

    def on_button_releaseAndTex(self, event): # 5th call # call "6th call"
        if self.start_x <= self.curX and self.start_y <= self.curY:
            self.takeBoundedScreenShotAndText(self.start_x, self.start_y, self.curX - self.start_x, self.curY - self.start_y)
        elif self.start_x >= self.curX and self.start_y <= self.curY:
            self.takeBoundedScreenShotAndText(self.curX, self.start_y, self.start_x - self.curX, self.curY - self.start_y)
        elif self.start_x <= self.curX and self.start_y >= self.curY:
            self.takeBoundedScreenShotAndText(self.start_x, self.curY, self.curX - self.start_x, self.start_y - self.curY)
        elif self.start_x >= self.curX and self.start_y >= self.curY:
            self.takeBoundedScreenShotAndText(self.curX, self.curY, self.start_x - self.curX, self.start_y - self.curY)
        self.exitScreenshotModeAndTex() # Call "7th call"
        return event

    def exitScreenshotModeAndTex(self): # 7th call
        self.screenCanvas.destroy()
        self.master_screen.withdraw()
        root.deiconify()

    # def exit_application(self):
    #    root.quit()

    def on_button_pressAndTex(self, event): # 3rd call
        # save mouse drag start position
        self.start_x = self.screenCanvas.canvasx(event.x)
        self.start_y = self.screenCanvas.canvasy(event.y)
        self.rect = self.screenCanvas.create_rectangle(self.x, self.y, 1, 1, outline='red', width=3, fill="blue")

    def on_move_pressAndTex(self, event): # 4th call
        self.curX, self.curY = (event.x, event.y)
        # expand rectangle as you drag the mouse
        self.screenCanvas.coords(self.rect, self.start_x, self.start_y, self.curX, self.curY)


    def createScreenAndText_C(self): # 2cd call
        FileName = simpledialog.askstring("String", "Check file name:                                       ")
        thePPTfilePath = os.path.join(r"C:\0Python\0testingCodes", FileName + ".pptx")
        from os.path import exists
        if exists(thePPTfilePath) == True:
            print("There is such a file.")
        else:
            print("No such a file!")



    # ScreenShot_FileTitle
    def createScreenWithFileTitle(self): # 2cd call
        self.master_screen.deiconify()
        root.withdraw()
        self.screenCanvas = Canvas(self.picture_frame, cursor="cross", bg="grey11")
        self.screenCanvas.pack(fill=BOTH, expand=YES)
        self.screenCanvas.bind("<ButtonPress-1>", self.on_button_pressAndTex) # call "3rd call"
        self.screenCanvas.bind("<B1-Motion>", self.on_move_pressAndTex) # call "4th call"
        self.screenCanvas.bind("<ButtonRelease-1>", self.on_button_releaseAndTex_B) # call "5th call"
        self.master_screen.attributes('-fullscreen', True)
        self.master_screen.attributes('-alpha', .3)
        self.master_screen.lift()
        self.master_screen.attributes("-topmost", True)
    def on_button_releaseAndTex_B(self, event): # 5th call # call "6th call"
        if self.start_x <= self.curX and self.start_y <= self.curY:
            self.takeBoundedScreenShotAndText_B(self.start_x, self.start_y, self.curX - self.start_x, self.curY - self.start_y)
        elif self.start_x >= self.curX and self.start_y <= self.curY:
            self.takeBoundedScreenShotAndText_B(self.curX, self.start_y, self.start_x - self.curX, self.curY - self.start_y)
        elif self.start_x <= self.curX and self.start_y >= self.curY:
            self.takeBoundedScreenShotAndText_B(self.start_x, self.curY, self.curX - self.start_x, self.start_y - self.curY)
        elif self.start_x >= self.curX and self.start_y >= self.curY:
            self.takeBoundedScreenShotAndText_B(self.curX, self.curY, self.start_x - self.curX, self.start_y - self.curY)
        self.exitScreenshotModeAndTex() # Call "7th call"
        return event
    def takeBoundedScreenShotAndText_B(self, x1, y1, x2, y2): # 6th call
        aText = simpledialog.askstring("String", "Text to write into PowerPoint:                                       ")
        # print(aText)
        if len(aText):
            # print(len(aText))
            im = pyautogui.screenshot(region=(x1, y1, x2, y2))
            x = datetime.datetime.now()
            fileName = pc.paste()        
            My_image = os.path.join(r"C:\0Python\0testingCodes", fileName + ".png")
            im.save(My_image)
            import page4350CheckPPTXexisting
            page4350CheckPPTXexisting.PPTandAddText(My_image, aText, "")

    #============================ 1

    def __init__(self, master):
        self.master = master
        self.rect = None
        self.x = self.y = 0
        self.start_x = None
        self.start_y = None
        self.curX = None
        self.curY = None

        root.attributes("-transparent", "red")
        root.geometry('280x80+200+200')  # set new geometry
        root.title('PPT prep')
        self.menu_frame = Frame(master, bg="blue")
        self.menu_frame.pack(fill=BOTH, expand=YES)
        self.buttonBar = Frame(self.menu_frame,bg="")
        self.buttonBar.pack(fill=BOTH,expand=YES)
        self.snipButton = Button(self.buttonBar, text = "ScreenShot", width=8, command=self.createScreenCanvas, background="white") # call "2cd call"
        # self.snipButton.pack(side=LEFT)
        self.snipButton.place(x=10, y=10)

        self.snipButton2 = Button(self.buttonBar, text = "ScreenShotAndText", width=16, command = self.createScreenAndText, background="white") # call "2cd call"
        # self.snipButton2.pack(side=RIGHT)
        self.snipButton2.place(x=150, y=50)

        self.snipButton2 = Button(self.buttonBar, text = "ConfirmPPTfile", width=16, command = self.createScreenAndText_C, background="white") # call "2cd call"
        # self.snipButton2.pack(side=RIGHT)
        self.snipButton2.place(x=10, y=50)


        self.snipButton3 = Button(self.buttonBar, text = "ScreenShot_FileTitle", width=16, command = self.createScreenWithFileTitle, background="white") # call "2cd call"
        #self.snipButton3.pack(side=BOTTOM)
        self.snipButton3.place(x=150, y=10)
        
        self.master_screen = Toplevel(root)
        self.master_screen.withdraw()
        self.master_screen.attributes("-transparent", "blue")
        self.picture_frame = Frame(self.master_screen, background = "blue")
        self.picture_frame.pack(fill=BOTH, expand=YES)


    def takeBoundedScreenShot(self, x1, y1, x2, y2): # 6th call ==============done
        im = pyautogui.screenshot(region=(x1, y1, x2, y2))
        x = datetime.datetime.now()
        fileName = pc.paste()        
        My_image = os.path.join(r"C:\0Python\0testingCodes", fileName + ".png")
        im.save(My_image)
        import page4350CheckPPTXexisting
        page4350CheckPPTXexisting.SamplePPT(My_image, fileName)

    def createScreenCanvas(self): # 2cd call ==============done
        self.master_screen.deiconify()
        root.withdraw()
        self.screenCanvas = Canvas(self.picture_frame, cursor="cross", bg="grey11")
        self.screenCanvas.pack(fill=BOTH, expand=YES)
        self.screenCanvas.bind("<ButtonPress-1>", self.on_button_press) # call "3rd call"
        self.screenCanvas.bind("<B1-Motion>", self.on_move_press) # call "4th call"
        self.screenCanvas.bind("<ButtonRelease-1>", self.on_button_release) # call "5th call"
        self.master_screen.attributes('-fullscreen', True)
        self.master_screen.attributes('-alpha', .3)
        self.master_screen.lift()
        self.master_screen.attributes("-topmost", True)

    def on_button_release(self, event): # 5th call # call "6th call" ==============done
        if self.start_x <= self.curX and self.start_y <= self.curY:
            self.takeBoundedScreenShot(self.start_x, self.start_y, self.curX - self.start_x, self.curY - self.start_y)
        elif self.start_x >= self.curX and self.start_y <= self.curY:
            self.takeBoundedScreenShot(self.curX, self.start_y, self.start_x - self.curX, self.curY - self.start_y)
        elif self.start_x <= self.curX and self.start_y >= self.curY:
            self.takeBoundedScreenShot(self.start_x, self.curY, self.curX - self.start_x, self.start_y - self.curY)
        elif self.start_x >= self.curX and self.start_y >= self.curY:
            self.takeBoundedScreenShot(self.curX, self.curY, self.start_x - self.curX, self.start_y - self.curY)
        self.exitScreenshotMode() # Call "7th call"
        return event

    def exitScreenshotMode(self): # 7th call ==============done
        self.screenCanvas.destroy()
        self.master_screen.withdraw()
        root.deiconify()

    # def exit_application(self):
    #    root.quit()

    def on_button_press(self, event): # 3rd call ==============done
        # save mouse drag start position
        self.start_x = self.screenCanvas.canvasx(event.x)
        self.start_y = self.screenCanvas.canvasy(event.y)
        self.rect = self.screenCanvas.create_rectangle(self.x, self.y, 1, 1, outline='red', width=3, fill="blue")

    def on_move_press(self, event): # 4th call
        self.curX, self.curY = (event.x, event.y)
        # expand rectangle as you drag the mouse
        self.screenCanvas.coords(self.rect, self.start_x, self.start_y, self.curX, self.curY)
        
if __name__ == '__main__':
    root = Tk()
    app = Application(root)
    root.mainloop()

    
