diff --git a/dr1p1m4g3_dev.py b/dr1p1m4g3_dev.py index 05d8818..1a70909 100644 --- a/dr1p1m4g3_dev.py +++ b/dr1p1m4g3_dev.py @@ -1,24 +1,79 @@ +########################################################################################################################################### +###################### /*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::. ########################## +#################### /mMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNd- ######################## +################### -MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN` ####################### +################### /MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM- ####################### +################### /MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmNMMMMMMMMMMMmMMMMMMMMMMMMMMMMMMMMMMMMMMMMM- ####################### +################### /MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh:NMMMMMMMMMMoyMMMMMMMMMMMMMMMMMMMMMMMMMMMM- ####################### +################### /MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMm -NMMMMMMMMMs.NMMMMMMMMMMMMMMMMMMMMMMMMMMM- ####################### +################### /MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMy -hmmmmmNNm- sMMMMMMMMMMMMMMMMMMMMMMMMMMM- ####################### +################### /MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmdyo+:` ```````.` .NMMMymMMMMMMMMMMMMMMMMMMMMM- ####################### +################### /MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmy+-.` -hNm-+MMMMMMMMMMMMMMMMMMMMM- ####################### +################### /MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMms:` `.. /MMMMMMMMMMMMMMMMMMMMM- ####################### +################### /MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh/. /MMMMMMMMMMMMMMMMMMMMM- ####################### +################### /MMMMMMMMMMMMMMMMMMMmMMMMMMMMMMMmhN:` /MMMMMMMMMMMMMMMMMMMMM- ####################### +################### /MMMMMMMMMMMMMMMMMMM+sNMMMMMMMMMN-h: `-+syyys/- -NMMMMMMMMMMMMMMMMMMMM- ####################### +################### /MMMMMMMMMMMMMMMMMMMs +NMMMMMMMhm--d` :. -sdNMMMMMNNmy. :ydMMMMMMMMMMMMMMMMMM- ####################### +################### /MMMMMMMMMMMMMMMMMMM+ :yhyyyhhso` os yhshNMMMMMMMh+:-:. :s- .NMMMMMMMMMMMMMMMMM- ####################### +################### /MMMMMMMMMMMMMMMMmho` ` `yo.h:sMMMMMMMMMMNd+. -NNs- yMMMMMMMMMMMMMMMMM- ####################### +################### /MMMMMMMMMMMMMNh/. :++`-MMMMMMMMMMMMMm+` :ymds. -NMMMMMMMMMMMMMMMM- ####################### +################### /MMMMMMMMMMMmo- .MMMMMMMMMMMMMMMdo. `.-` yMMMMMMMMMMMMMMMM- ####################### +################### /MMMMMMMMMmo. `NMMMMMMMMMMMMMMMMNy/.` `mMMMMMMMMMMMMMMM- ####################### +################### /MMMMMMMNs. hMMMMMMMMMMMMMMMMMMMNho-` :NMMMMMMMMMMMMMM- ####################### +################### /MMMMMMm: ./syyyo- -hmNMMMMMMMMMMMMMMMMMMMMmho:.` /NMMMMMMMMMMMMM- ####################### +################### /MMMMMd. .smMMMNNNms` ` `+MMMMMMMMMMMMMMMMMMMMMMMMNdy/ `.yMMMMMMMMMMMMM- ####################### +################### /MMMMd. /mMMMMMy/:--` so. `mMMMMMMMMMMMMMMMMMMMMMMMNdo--:+sdNMMMMMMMMMMMMMM- ####################### +################### /MMMN- /NMMMMMMMMdo. oMm+. /MMMMMMMMMMMMMMMMdNMMMMMMNNNMMmMMMMMMMMMMMMMMMMM- ####################### +################### /MMMo -NMMMMMMMMMMdso-` /hmm+ sMMMMMMMMMMMMMMMs-mMMMMMMMMMM:dMMMMMMMMMMMMMMMM- ####################### +################### /MMN. sMMMMMMMMMMMo .os/.``.. `dMMMMMMMMMMMMMMs -NMMMMMMMMM-:MMMMMMMMMMMMMMMM- ####################### +################### /MMd mMMMMMMMMMMM/ `:os+-` .dMMMMMMMMMMMNm. -soosyhdms `mMMMMMMMMMMMMMMM- ####################### +################### /MMs mMMMMMMMMMMM: .hNhs/.` .dMMMMNmhs+:-` +MMMNoMMMMMMMMMM- ####################### +################### /MMy hMMMMMMMMMMM: oMMMMMNdyo/. .mNh+-` +mNy`mMMMMMMMMM- ####################### +################### /MMd +MMMMMMMMMMM/ :MMMMMMMMNs.`.:ohh/` ` mMMMMMMMMM- ####################### +################### /MMN. `mMMMMMMMMMMo `NMMMMMMNhhdNMMh: mMMMMMMMMM- ####################### +################### /MMM+ /MMMMMMMMMMh yMMMMMMMMMMMN+ `NMMMMMMMMM- ####################### +################### /MMMm` +MMMMMMMMMN` .NMMMMMMMMMN- :sdmNNNdy+` dMMMMMMMMM- ####################### +################### /MMMMo +MMMMMMMMM+ +MMMMMMMMM/ -dMMMMMMNmmNN/ .sdMMMMMMM- ####################### +################### /MMMMN: :mMMMMMMMm` oMMMMMMMh .mMMMMMMMms- `` /o` `mMMMMMM- ####################### +################### /MMMMMm. .yMMMMMMMo oMMMMMM/ sMMMMMMMMMMMh: :NNo. sMMMMMM- ####################### +################### /MMMMMMm. -hMMMMMN: /NMMMM. dMMMMMMMMMMMMMh- :hmNy` .NMMMMM- ####################### +################### /MMMMMMMm- -yNMMMm. .yMMM. dMMMMMMMMMMMMMMNh:` `..` yMMMMM- ####################### +################### /MMMMMMMMN+ .+hNMd. :hM: dMMMMMMMMMMMMMMMMNmo- .NMMMM- ####################### +################### /MMMMMMMMMMh- ./ss. `:: sMMMMMMMMMMMMMMMMMMMNms/. /MMMM- ####################### +################### /MMMMMMMMMMMNo. ` :MMMMMMMMMMMMMMMMMMMMMMMNdo:.` oMMM- ####################### +################### /MMMMMMMMMMMMMmo. `mMMMMMMMMMMMMMMMMMMMMMMMMMMNmh: .dMM- ####################### +################### /MMMMMMMMMMMMMMMNy:` +MMMMMMMMMMMMMMMMMMMMMMMMMMNh+::/+sdNMMM- ####################### +################### /MMMMMMMMMMMMMMMMMNdo- `dMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNMMMMMMMM- ####################### +################### /MMMMMMMMMMMMMMMMMMMMNd+-` -NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM- ####################### +################### -NMMMMMMMMMMMMMMMMMMMMMMNdo:` /NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd` ####################### +#################### -ymNNNNNNNNNNNNNNNNNNNNNNNNdo-` +NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNmy. ######################## +###################### ............................ .-..............................*/ ########################## +####################### `````` ````````` `````````````` `````````` ````` ############################# +########################################################################################################################################### imports +import curses ####################################################################################################################################### SOF import os import shutil import sys from curses import (A_REVERSE, KEY_DOWN, KEY_ENTER, KEY_LEFT, KEY_RIGHT, KEY_UP, ascii, wrapper) -import curses from imghdr import what as is_file_an_image from os import chdir, listdir, path from pathlib import Path -from random import randint, shuffle +from random import choice, randint, shuffle from time import sleep from tkinter import * -from tkinter import filedialog, ttk, font +from tkinter import filedialog, font, ttk from tkinter.filedialog import askopenfile - -from PIL import Image, ImageTk - ########################################################################################################################################### +from PIL import Image, ImageTk +from rich.color import ANSI_COLOR_NAMES +from rich.console import Console +########################################################################################################################################### globals +global STARTUP_DIRECTORY_OVERRIDE; STARTUP_DIRECTORY_OVERRIDE=['/Users/dr1p/dr1p1m4g3/grids'] +########################################################################################################################################### class dr1p1m4g3 class DR1P1M4G3(): - ######################################################################################################################################### + ######################################################################################################################################### __init__ <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< __init__ class def __init__(self,USERPATH=None,IMGINDEX=None,RENDMODE=None,PUMPMODE=None,PUMPTIME=None,USERSHUF=None): ####################################################################################################################################### if USERPATH: @@ -65,6 +120,8 @@ class DR1P1M4G3(): self.USERSHUF=False self.USER_USERSHUF=False ####################################################################################################################################### + self.LOGINIT=0 + self.LOGFILE="dr1pt_pr0be.log" self.REFRESH=0 self.RENDER_TEXT=True self.LAST_DIRECTION=-1 @@ -88,8 +145,39 @@ class DR1P1M4G3(): self.NORMAL_TEXT_FONT=self.NORMAL_TEXT_FONTS[randint(0,len(self.NORMAL_TEXT_FONTS)-1)] self.NORMAL_TEXT_SIZE=25 self.AUTOCOLOR={'N':[0,0,0],'L':[['blue2','red2','purple2'],['midnight blue','navy blue'],['goldenrod1','goldenrod2','goldenrod3']]} + self.FIRST_INDEX=False + self.AUTO_GRID=True + self.logfile='resolutions_database.txt' + self.colors=[] + self.basename=0 + for _ in ANSI_COLOR_NAMES: + if _.lower().find('black') == -1: + self.colors.append(_) + ########### self.main() - ######################################################################################################################################### + ######################################################################################################################################### l0g + def l0g(self,s): + c=Console() + if not self.LOGINIT: + if path.isfile(self.LOGFILE): os.remove(self.LOGFILE) + f=open(self.LOGFILE,'w');f.write('');f.close();self.LOGINIT=1; + f=open(self.LOGFILE,'a');f.write(f'{s}\n');f.close(); + _s=s.split() + s='' + FULL_COLOR=False # False for half-color, True for full-color + for _ in _s: + color=choice(self.colors) + msg=f'[{color}]{_}[/{color}]' + s+=f'{msg} ' + c.print(s) + if FULL_COLOR: + _s='' + for _ in s: + color=choice(self.colors) + msg=f'[{color}]{_}[/{color}]' + _s+=f'{msg}' + c.print(_s) + ######################################################################################################################################### randofontcolors def randofontcolors(self,n): self.NORMAL_TEXT_COLOR=f'#{hex(randint(0,255))[2:].zfill(2)}{hex(randint(0,255))[2:].zfill(2)}{hex(randint(0,255))[2:].zfill(2)}' self.NORMAL_TEXT_FONTS=list(font.families()) @@ -101,8 +189,8 @@ class DR1P1M4G3(): [ self.canvas.delete(x) for x in self.canvas.find_all() if not 'activeimage' in self.canvas.itemconfig(x) ] self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=self.NORMAL_TEXT_COLOR,justify='center',font=(self.NORMAL_TEXT_FONT, self.NORMAL_TEXT_SIZE)) self.root.title(Buffer) - self.root.update() - ######################################################################################################################################### + self.root.update() + ######################################################################################################################################### autocolor def autocolor(self,n): try: self.AUTOCOLOR['N'][n]+=1 @@ -110,27 +198,27 @@ class DR1P1M4G3(): return self.AUTOCOLOR['L'][n][self.AUTOCOLOR['N'][n]] except: return -1.666 - ######################################################################################################################################### + ######################################################################################################################################### fliptext def fliptext(self,s): self.RENDER_TEXT=not self.RENDER_TEXT if self.RENDER_TEXT: - print(f"<<<<< text rendering enabled >>>>>") + self.l0g(f"<<<<< text rendering enabled >>>>>") self.canvas.delete('all') self.loadimage() else: - print(f"<<<<< text rendering disabled >>>>>") + self.l0g(f"<<<<< text rendering disabled >>>>>") self.canvas.delete('all') self.loadimage() - ######################################################################################################################################### + ######################################################################################################################################### isave def isave(self,s): if not self.MARKED: if self.MARKED_FILES[self.IMAGE_INDEX]==1: - print(f"<<<<< unmarking from save {self.IMAGE_LIST[self.IMAGE_INDEX]} >>>>>") + self.l0g(f"<<<<< unmarking from save {self.IMAGE_LIST[self.IMAGE_INDEX]} >>>>>") self.MARKED_FILES[self.IMAGE_INDEX]=0 self.loadimage() return - else: - print(f"<<<<< marked to save {self.IMAGE_LIST[self.IMAGE_INDEX]} >>>>>") + else: + self.l0g(f"<<<<< marked to save {self.IMAGE_LIST[self.IMAGE_INDEX]} >>>>>") self.MARKED_FILES[self.IMAGE_INDEX]=1 if self.LAST_DIRECTION: self.right(self) @@ -142,21 +230,22 @@ class DR1P1M4G3(): if not os.path.exists(self.ISAVE_DIRECTORY[self.IMAGE_DIR_INDEX[SIN]]): os.mkdir(self.ISAVE_DIRECTORY[self.IMAGE_DIR_INDEX[SIN]]) shutil.move(self.IMAGE_LIST[SIN],self.ISAVE_DIRECTORY[self.IMAGE_DIR_INDEX[SIN]]) - print(f"<<<<< moved {self.IMAGE_LIST[SIN]} to {self.ISAVE_DIRECTORY[self.IMAGE_DIR_INDEX[SIN]]} >>>>>") - ######################################################################################################################################### + self.l0g(f"<<<<< moved {self.IMAGE_LIST[SIN]} to {self.ISAVE_DIRECTORY[self.IMAGE_DIR_INDEX[SIN]]} >>>>>") + ######################################################################################################################################### idrop def idrop(self,s): if not self.MARKED: if self.MARKED_FILES[self.IMAGE_INDEX]==-1: - print(f"<<<<< unmarking from drop {self.IMAGE_LIST[self.IMAGE_INDEX]} >>>>>") + self.l0g(f"<<<<< unmarking from drop {self.IMAGE_LIST[self.IMAGE_INDEX]} >>>>>") self.MARKED_FILES[self.IMAGE_INDEX]=0 self.loadimage() return else: - print(f"<<<<< marked to drop {self.IMAGE_LIST[self.IMAGE_INDEX]} >>>>>") + self.l0g(f"<<<<< marked to drop {self.IMAGE_LIST[self.IMAGE_INDEX]} >>>>>") self.MARKED_FILES[self.IMAGE_INDEX]=-1 if self.LAST_DIRECTION: self.right(self) else: + self.left(self) else: for DIN,VAL in enumerate(self.MARKED_FILES): @@ -164,23 +253,23 @@ class DR1P1M4G3(): if not os.path.exists(self.IDROP_DIRECTORY[self.IMAGE_DIR_INDEX[DIN]]): os.mkdir(self.IDROP_DIRECTORY[self.IMAGE_DIR_INDEX[DIN]]) shutil.move(self.IMAGE_LIST[DIN],self.IDROP_DIRECTORY[self.IMAGE_DIR_INDEX[DIN]]) - print(f"<<<<< moved {self.IMAGE_LIST[DIN]} to {self.IDROP_DIRECTORY[self.IMAGE_DIR_INDEX[DIN]]} >>>>>") - ######################################################################################################################################### + self.l0g(f"<<<<< moved {self.IMAGE_LIST[DIN]} to {self.IDROP_DIRECTORY[self.IMAGE_DIR_INDEX[DIN]]} >>>>>") + ######################################################################################################################################### shuffling def shuffling(self,s): self.USER_USERSHUF=not self.USER_USERSHUF if self.USER_USERSHUF: self.getfilelist() self.loadimage() - print(f"<<<<< image shuffling enabled >>>>>") + self.l0g(f"<<<<< image shuffling enabled >>>>>") else: - print(f"<<<<< image shuffling disabled >>>>>") - ######################################################################################################################################## + self.l0g(f"<<<<< image shuffling disabled >>>>>") + ######################################################################################################################################### escaped def escaped(self,s): self.root.destroy() sys.exit(0) - ######################################################################################################################################### + ######################################################################################################################################### markedlist def markedlist(self,s): - print(f"<<<<< batch processing marked list >>>>>") + self.l0g(f"<<<<< batch processing marked list >>>>>") self.MARKED=True self.isave(self) self.idrop(self) @@ -190,7 +279,109 @@ class DR1P1M4G3(): self.right(self) else: self.left(self) - ######################################################################################################################################### + ######################################################################################################################################### autogrid <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< autogrid + def ripgrid(self,s): + self.l0g(f'<<< ripgrid >>>') + try: + icount=0 + for __y in range(self.GY): + for __x in range(self.GX): + self.xy[0]=__x; self.xy[1]=__y; self.movecell() + self.image_gridcell.save(f'ripgrid_{str(self.basename).zfill(8)}_{str(icount).zfill(4)}_.png') + icount+=1 + ###################### + self.basename+=1 + self.GRID(self) + self.AUTO_GRID=True + if self.LAST_DIRECTION: + self.right(self) + else: + self.left(self) + except: + self.l0g(f'error: ripgrid saving preview') + ######################################################################################################################################### autogrid <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< autogrid + def flipautogrid(self,s): + self.AUTO_GRID=not self.AUTO_GRID + self.l0g(f'<<< autogrid mode: {self.AUTO_GRID} >>>') + ######################################################################################################################################### autogrid <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< autogrid + def autogrid(self,s): + self.l0g(f'<<< autogrid mode: enabled >>>') + ####################################################################################################################################### + if not self.REDIMENSION==2: + self.REDIMENSION=2 + self.loadimage() + ####################################################################################################################################### + reso=self.calcreso(f'{self.image.width}x{self.image.height}') + agx=0; agy=0; + try: + AGX,AGY=[reso[x] for x in reso.keys()] + except: + AGXY=[reso[x] for x in reso.keys()] + AGX=AGXY; AGY=AGXY + if 1024 in AGX and 1024 in AGY: + agx=self.image.width/1024 + agy=self.image.height/1024 + elif 1024 in AGX and 768 in AGY: + agx=self.image.width/1024 + agy=self.image.height/768 + elif 768 in AGX and 1024 in AGY: + agx=self.image.width/768 + agy=self.image.height/1024 + elif 768 in AGX and 768 in AGY: + agx=self.image.width/768 + agy=self.image.height/768 + elif 768 in AGX and 512 in AGY: + agx=self.image.width/768 + agy=self.image.height/512 + elif 512 in AGX and 768 in AGY: + agx=self.image.width/512 + agy=self.image.height/768 + elif 512 in AGX and 512 in AGY: + agx=self.image.width/512 + agy=self.image.height/512 + else: + inx=0; iny=-1; + for n in range(len(reso[self.image.width])): + inx-=1 + agx=self.image.width/reso[self.image.width][inx] + agy=self.image.height/reso[self.image.height][iny] + if agx>=agy: + print(f'{agx}x{agy}') + break + self.gx=int(agx) + self.GX=int(agx) + self.gy=int(agy) + self.GY=int(agy) + _x=self.root.winfo_screenwidth()/self.GX + _y=self.root.winfo_screenheight()/self.GY + ####################################################################################################################################### + [ self.canvas.delete(x) for x in self.canvas.find_all() if not 'activeimage' in self.canvas.itemconfig(x) ] + ####################################################################################################################################### + self.cellrect[0]=self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth()-1,self.root.winfo_screenheight()-1, outline='red2', width=1) + _x=self.root.winfo_screenwidth()/self.GX; _y=self.root.winfo_screenheight()/self.GY + for Y in range(self.gy+1): + for X in range(self.gx): + self.cellrect[1].append(self.canvas.create_rectangle((_x*X),(_y*Y),(_x*X)+_x,(_y*Y)+_y,outline=self.autocolor(1),width=1)) + self.cellrect[2].append(self.canvas.create_rectangle((_x*X)+3,(_y*Y)+3,(_x*X)+_x-2,(_y*Y)+_y-2,outline=self.autocolor(0),width=4)) + ####################################################################################################################################### + x_x=self.root.winfo_screenwidth()/2 + y_y=self.root.winfo_screenheight()/2 + ####################################################################################################################################### + if self.RENDER_TEXT: + if self.MARKED_FILES[self.IMAGE_INDEX]==0: COLOR=self.NORMAL_TEXT_COLOR + elif self.MARKED_FILES[self.IMAGE_INDEX]==1: COLOR='green' + elif self.MARKED_FILES[self.IMAGE_INDEX]==-1: COLOR='red' + ##################################################################################################################################### + Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],self.REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,self.root.winfo_screenwidth()-self.image.width,self.root.winfo_screenheight()-self.image.height,self.XX,self.YY,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL) + self.l0g('break <-> here here here here here here here here here here here here here here here here here here here here here here here') + ##################################################################################################################################### + self.canvas.create_text(x_x,85,text=Buffer,fill=COLOR,justify='center'); self.root.title(Buffer) + ####################################################################################################################################### + self.root.update() #################################################################################################################### + self.AUTO_GRID=False + self.GRID_MODE=True + self.grid(self) + ######################################################################################################################################### autopump def autopump(self,s): self.PUMP_AUTO = not self.PUMP_AUTO if self.PUMP_AUTO: @@ -198,14 +389,14 @@ class DR1P1M4G3(): self.right(self) if self.PUMP_INTERVAL < 0.01: self.PUMP_INTERVAL+=0.5 sleep(self.PUMP_INTERVAL) - print(self.PUMP_AUTO) - ######################################################################################################################################### + self.l0g(self.PUMP_AUTO) + ######################################################################################################################################### redimension def redimension(self,s): self.canvas.delete('all') self.REDIMENSION+=1 if self.REDIMENSION>4: self.REDIMENSION=0 self.loadimage() - ######################################################################################################################################### + ######################################################################################################################################### loadimage <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< loadimage def loadimage(self): self.canvas.delete('all') try: @@ -254,8 +445,8 @@ class DR1P1M4G3(): self.left(self) self.XX=xx; self.YY=yy Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,x-IMG_X_OG,y-IMG_Y_OG,xx,yy,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL) - Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}' - if self.RENDER_TEXT: + Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}' + if self.RENDER_TEXT: COLOR='' if self.MARKED_FILES[self.IMAGE_INDEX]==0: COLOR=self.NORMAL_TEXT_COLOR @@ -267,7 +458,7 @@ class DR1P1M4G3(): self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth(),self.root.winfo_screenheight(), outline=COLOR, width=25,) self.texting=self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=COLOR,justify='center',font=(self.NORMAL_TEXT_FONT, self.NORMAL_TEXT_SIZE)) self.root.title(Buffer) - self.root.update() + self.root.update() ##################################################################################################################################### elif self.REDIMENSION==1: self.canvas.delete('all') @@ -301,9 +492,9 @@ class DR1P1M4G3(): self.canvas.create_image(0,0,anchor=NW,image=self.photo_resized) self.canvas.configure(bg='black') self.XX=xx; self.YY=yy - Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,x-IMG_X_OG,y-IMG_Y_OG,xx,yy,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL) - Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}' - if self.RENDER_TEXT: + Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,x-IMG_X_OG,y-IMG_Y_OG,xx,yy,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL) + Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}' + if self.RENDER_TEXT: COLOR='' if self.MARKED_FILES[self.IMAGE_INDEX]==0: COLOR=self.NORMAL_TEXT_COLOR @@ -315,7 +506,7 @@ class DR1P1M4G3(): self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth(),self.root.winfo_screenheight(), outline=COLOR, width=25,) self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=COLOR,justify='center',font=("Arial", 25)) self.root.title(Buffer) - print(f"{offset} / {x} - {i}") + self.l0g(f"{offset} / {x} - {i}") self.root.update() else: self.resized_image=self.image.resize((xx,yy),Image.LANCZOS) @@ -325,7 +516,7 @@ class DR1P1M4G3(): self.canvas.configure(bg='black') self.XX=xx; self.YY=yy Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,x-IMG_X_OG,y-IMG_Y_OG,xx,yy,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL) - Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}' + Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}' if self.RENDER_TEXT: COLOR='' if self.MARKED_FILES[self.IMAGE_INDEX]==0: @@ -339,7 +530,7 @@ class DR1P1M4G3(): self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=COLOR,justify='center',font=("Arial", 25)) self.root.title(Buffer) try: - print(f"{offset} / {x} - {i}") + self.l0g(f"{offset} / {x} - {i}") except: pass if self.REDIMENSION==1: @@ -353,8 +544,8 @@ class DR1P1M4G3(): self.canvas.create_image(0,0,anchor=NW,image=self.photo_resized) self.XX=xx; self.YY=yy Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,x-IMG_X_OG,y-IMG_Y_OG,xx,yy,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL) - Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}' - if self.RENDER_TEXT: + Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}' + if self.RENDER_TEXT: COLOR='' if self.MARKED_FILES[self.IMAGE_INDEX]==0: COLOR=self.NORMAL_TEXT_COLOR @@ -366,7 +557,9 @@ class DR1P1M4G3(): self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth(),self.root.winfo_screenheight(), outline=COLOR, width=25,) self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=COLOR,justify='center',font=("Arial", 25)) self.root.title(Buffer) - self.root.update() + self.root.update() + if self.AUTO_GRID: + self.autogrid(self) ##################################################################################################################################### elif self.REDIMENSION==3: self.canvas.delete('all') @@ -380,8 +573,8 @@ class DR1P1M4G3(): self.canvas.create_image(x/2-xx/2,0,anchor=NW,image=self.photo) self.XX=xx; self.YY=yy Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,x-IMG_X_OG,y-IMG_Y_OG,xx,yy,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL) - Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}' - if self.RENDER_TEXT: + Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}' + if self.RENDER_TEXT: COLOR='' if self.MARKED_FILES[self.IMAGE_INDEX]==0: COLOR=self.NORMAL_TEXT_COLOR @@ -393,7 +586,7 @@ class DR1P1M4G3(): self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth(),self.root.winfo_screenheight(), outline=COLOR, width=25,) self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=COLOR,justify='center',font=("Arial", 25)) self.root.title(Buffer) - self.root.update() + self.root.update() ##################################################################################################################################### elif self.REDIMENSION==4: self.canvas.delete('all') @@ -402,8 +595,8 @@ class DR1P1M4G3(): self.canvas.create_image(x/2-xx/2,0,anchor=NW,image=self.photo) self.XX=xx; self.YY=yy Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,x-IMG_X_OG,y-IMG_Y_OG,xx,yy,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL) - Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}' - if self.RENDER_TEXT: + Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}' + if self.RENDER_TEXT: COLOR='' if self.MARKED_FILES[self.IMAGE_INDEX]==0: COLOR=self.NORMAL_TEXT_COLOR @@ -415,12 +608,12 @@ class DR1P1M4G3(): self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth(),self.root.winfo_screenheight(), outline=COLOR, width=25,) self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=COLOR,justify='center') self.root.title(Buffer) - self.root.update() + self.root.update() ##################################################################################################################################### self.canvas.configure(bg='black') global Name Name ='' - if self.RENDER_TEXT: + if self.RENDER_TEXT: COLOR='' if self.MARKED_FILES[self.IMAGE_INDEX]==0: COLOR=self.NORMAL_TEXT_COLOR @@ -430,17 +623,29 @@ class DR1P1M4G3(): elif self.MARKED_FILES[self.IMAGE_INDEX]==-1: COLOR='red' self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth(),self.root.winfo_screenheight(), outline=COLOR, width=25,) - self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Name,fill=COLOR,justify='center',font=("Arial", 25)) + self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2,85,text=Name,fill=COLOR,justify='center',font=(self.NORMAL_TEXT_FONT, self.NORMAL_TEXT_SIZE)) self.root.title(Name) self.root.update() except IOError: - print(f"error: non-picture, skipping past - {self.IMAGE_LIST[self.IMAGE_INDEX]}") + self.l0g(f"error: non-picture, skipping past - {self.IMAGE_LIST[self.IMAGE_INDEX]}") if self.LAST_DIRECTION: self.right(self) else: self.left(self) - print('<< dr1p1m4g3 >> screen: {}x{} - image: {}x{} - file: {}/{} - interval: {} - filename: {}'.format(self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL,self.IMAGE_LIST[self.IMAGE_INDEX])) - ######################################################################################################################################### + self.l0g('<< dr1p1m4g3 >> screen: {}x{} - image: {}x{} - file: {}/{} - interval: {} - filename: {}'.format(self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL,self.IMAGE_LIST[self.IMAGE_INDEX])) + ######################################################################################################################################### log + def log(self,s): + f=open(self.logfile,'a') + f.write(f'{s}\n') + f.close() + ######################################################################################################################################### calcreso <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< calcreso + def calcreso(self,s): + x,y=s.split('x');X=[];Y=[] + for i in range(256,1024): + if not (int(x)/i) % 1: X.append(i) + if not (int(y)/i) % 1: Y.append(i) + return {int(x):X,int(y):Y} + ######################################################################################################################################### getfilelist <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< getfilelist def getfilelist(self): # self.IMAGE_LIST=[ x for x in Path(self.IMAGE_DIR+'/').rglob('*') if not str(x).endswith('.txt') and not "intermediates" in x.name ] if self.REFRESH==0: @@ -448,28 +653,40 @@ class DR1P1M4G3(): FILE_LIST=[] self.IMAGE_DIR_INDEX=[] for i,_ in enumerate(self.DIR_IMAGE_LIST): - print(f'<<< generating image list recursively from base directory: {_}/* >>>') + self.l0g(f'<<< generating image list recursively from base directory: {_}/* >>>') _FILE_LIST=[ x for x in Path(_+'/').rglob('*') ] FILE_LIST+=_FILE_LIST self.IMAGE_DIR_INDEX+=[i]*len(_FILE_LIST) self.IMAGE_LIST=[] IMAGE_DIR_INDEX=[] + self.resodb=[] for i,x in enumerate(FILE_LIST): try: - if is_file_an_image(str(x)): - self.IMAGE_LIST.append(x) - IMAGE_DIR_INDEX+=[self.IMAGE_DIR_INDEX[i]] - print(f'added: {str(x)}') + # if is_file_an_image(str(x)): + self.IMAGE_LIST.append(x) + IMAGE_DIR_INDEX+=[self.IMAGE_DIR_INDEX[i]] + self.l0g(f'added: {str(x)}') + reso_x,reso_y=Image.open(x).size except Exception as e: - print(f'skipped: {str(x)} - reason: {e}') + self.l0g(f'skipped: {str(x)} - reason: {e}') + ####################################################### + try: + self.l0g('<<< writing image resolution database >>>') + self.resodb=sorted(set(self.resodb)) # <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + #for _ in self.resodb: self.log(_) # <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + except Exception as e: + self.l0g('error writing image resolution database: {e}') + ####################################################### + self.root.deiconify() + ####################################################### self.IMAGE_DIR_INDEX=IMAGE_DIR_INDEX self.MARKED_FILES=[0]*len(IMAGE_DIR_INDEX) if self.USER_USERSHUF: shuffle(self.IMAGE_LIST) self.IMAGE_INDEX=randint(0,len(self.IMAGE_LIST)-1) - print(f'index:{self.IMAGE_LIST[self.IMAGE_INDEX]}/{len(self.IMAGE_LIST)} - filename:{self.IMAGE_LIST[self.IMAGE_INDEX]} - size:{self.image.size}: [ width:{self.image.width} / height:{self.image.height} ]') + self.l0g(f'index:{self.IMAGE_LIST[self.IMAGE_INDEX]}/{len(self.IMAGE_LIST)} - filename:{self.IMAGE_LIST[self.IMAGE_INDEX]} - size:{self.image.size}: [ width:{self.image.width} / height:{self.image.height} ]') self.IMAGE_LIST=sorted(self.IMAGE_LIST) - ######################################################################################################################################### + ######################################################################################################################################### movecell <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< movecell def movecell(self): _x=self.root.winfo_screenwidth()/self.GX _y=self.root.winfo_screenheight()/self.GY @@ -479,17 +696,17 @@ class DR1P1M4G3(): except: pass ####### - + [ self.canvas.delete(x) for x in self.canvas.find_all() if not 'activeimage' in self.canvas.itemconfig(x) ] - + self.moverect = self.canvas.create_rectangle((self.xy[0]*_x)+5,(self.xy[1]*_y)+5,(self.xy[0]*_x)+_x-5,(self.xy[1]*_y)+_y-5,outline=self.autocolor(2),width=8) _x=self.image.width/self.GX _y=self.image.height/self.GY - image_gridcell=self.image.crop([ (_x*self.xy[0]),(_y*self.xy[1]),(_x*self.xy[0])+_x,(_y*self.xy[1])+_y ]) - self.image_preview=ImageTk.PhotoImage(image_gridcell) + self.image_gridcell=self.image.crop([ (_x*self.xy[0]),(_y*self.xy[1]),(_x*self.xy[0])+_x,(_y*self.xy[1])+_y ]) + self.image_preview=ImageTk.PhotoImage(self.image_gridcell) x_x=self.root.winfo_screenwidth()/2 y_y=self.root.winfo_screenheight()/2 - + self.cellrect[0]=self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth()-1,self.root.winfo_screenheight()-1, outline='red2', width=1) _x=self.root.winfo_screenwidth()/self.GX; _y=self.root.winfo_screenheight()/self.GY for Y in range(self.gy+1): @@ -499,7 +716,7 @@ class DR1P1M4G3(): self.preview=self.canvas.create_image(x_x,y_y,image=self.image_preview) - if self.RENDER_TEXT: + if self.RENDER_TEXT: COLOR='' if self.MARKED_FILES[self.IMAGE_INDEX]==0: COLOR=self.NORMAL_TEXT_COLOR @@ -509,12 +726,12 @@ class DR1P1M4G3(): COLOR='red' Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],self.REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,self.root.winfo_screenwidth()-self.image.width,self.root.winfo_screenheight()-self.image.height,self.XX,self.YY,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL) Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY} - {self.image.width/self.GX}x{self.image.height/self.GY} ' - + self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=COLOR,justify='center') self.root.title(Buffer) self.root.update() - ######################################################################################################################################### + ######################################################################################################################################### up def up(self,s): if not self.GRID_MODE: ###################### @@ -526,7 +743,7 @@ class DR1P1M4G3(): if self.xy[1]<0: self.xy[1]=0 ################ self.movecell() - ######################################################################################################################################### + ######################################################################################################################################### down def down(self,s): if not self.GRID_MODE: ###################### @@ -538,7 +755,7 @@ class DR1P1M4G3(): if self.xy[1]>self.gy: self.xy[1]=self.gy ###################### self.movecell() - ######################################################################################################################################### + ######################################################################################################################################### left def left(self,s): if not self.GRID_MODE: ###################### @@ -555,7 +772,7 @@ class DR1P1M4G3(): if self.xy[0]<0: self.xy[0]=0 ################ self.movecell() - ######################################################################################################################################### + ######################################################################################################################################### right def right(self,s): if not self.GRID_MODE: ###################### @@ -572,128 +789,20 @@ class DR1P1M4G3(): if self.xy[0]>=self.gx: self.xy[0]=self.gx-1 ###################### self.movecell() - ######################################################################################################################################### - - ######################################################################################################################################### - - # A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - AUTOGRID - # A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - AUTOGRID - # A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - AUTOGRID - # A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - AUTOGRID - # A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - AUTOGRID - - ######################################################################################################################################### - - ##################### ################################################################################################################### - ##################### ################################################################################################################### - def autogrid(self,s): ################################################################################################################### - ##################### ################################################################################################################### - ##################### ################################################################################################################### - - ####################################################################################################################################### - print(f'<<< autogrid mode: enabled >>>') - - TABLES={ '1536x1024':512x512','3584x3072':'512x512','2560x2048':'512x512','2048x1536':'512x512','4000x444':'444x444','1760x880':'880x440','3520x2640':'660x660','1760x1760':'880x880','2640x1760':'600x440','6640x9920':'664x992'} - ####################################################################################################################################### - if not self.REDIMENSION==2: - self.REDIMENSION=2 - self.loadimage() - ####################################################################################################################################### - self.gx-=1; print(f'<<< grid mode: removed x grid cell. x={self.gx},y={self.gy} >>>') - self.gy-=1; print(f'<<< grid mode: removed y grid cell. x={self.gx},y={self.gy} >>>') - self.gx+=1; print(f'<<< grid mode: added x grid cell. x={self.gx},y={self.gy} >>>') - self.gy+=1; print(f'<<< grid mode: added y grid cell. x={self.gx},y={self.gy} >>>') - ####################################################################################################################################### - self.GX-=1; print(f'<<< grid mode: x division cell height decreased x={self.GX},y={self.GY} >>>') - self.GY-=1; print(f'<<< grid mode: y division cell height decreaded x={self.GX},y={self.GY} >>>') - self.GX+=1; print(f'<<< grid mode: x division cell height increased x={self.GX},y={self.GY} >>>') - self.GY+=1; print(f'<<< grid mode: y division cell height increased x={self.GX},y={self.GY} >>>') - ####################################################################################################################################### - self.xy[1]-=1 - if self.xy[1]<0: self.xy[1]=0 - self.xy[1]+=1 - if self.xy[1]>self.gy: self.xy[1]=self.gy - self.xy[0]-=1 - if self.xy[0]<0: self.xy[0]=0 - self.xy[0]+=1 - if self.xy[0]>=self.gx: self.xy[0]=self.gx-1 - self.movecell() - ####################################################################################################################################### - _x=self.root.winfo_screenwidth()/self.GX - _y=self.root.winfo_screenheight()/self.GY - ####################################################################################################################################### - [ self.canvas.delete(x) for x in self.canvas.find_all() if not 'activeimage' in self.canvas.itemconfig(x) ] - ####################################################################################################################################### - self.moverect = self.canvas.create_rectangle((self.xy[0]*_x)+5,(self.xy[1]*_y)+5,(self.xy[0]*_x)+_x-5,(self.xy[1]*_y)+_y-5,outline=self.autocolor(2),width=8) - _x=self.image.width/self.GX - _y=self.image.height/self.GY - image_gridcell=self.image.crop([ (_x*self.xy[0]),(_y*self.xy[1]),(_x*self.xy[0])+_x,(_y*self.xy[1])+_y ]) - self.image_preview=ImageTk.PhotoImage(image_gridcell) - x_x=self.root.winfo_screenwidth()/2 - y_y=self.root.winfo_screenheight()/2 - ####################################################################################################################################### - self.cellrect[0]=self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth()-1,self.root.winfo_screenheight()-1, outline='red2', width=1) - _x=self.root.winfo_screenwidth()/self.GX; _y=self.root.winfo_screenheight()/self.GY - for Y in range(self.gy+1): - for X in range(self.gx): - self.cellrect[1].append(self.canvas.create_rectangle((_x*X),(_y*Y),(_x*X)+_x,(_y*Y)+_y,outline=self.autocolor(1),width=1)) - self.cellrect[2].append(self.canvas.create_rectangle((_x*X)+3,(_y*Y)+3,(_x*X)+_x-2,(_y*Y)+_y-2,outline=self.autocolor(0),width=4)) - ####################################################################################################################################### - self.preview=self.canvas.create_image(x_x,y_y,image=self.image_preview) - ####################################################################################################################################### - if self.RENDER_TEXT: - if self.MARKED_FILES[self.IMAGE_INDEX]==0: COLOR=self.NORMAL_TEXT_COLOR - elif self.MARKED_FILES[self.IMAGE_INDEX]==1: COLOR='green' - elif self.MARKED_FILES[self.IMAGE_INDEX]==-1: COLOR='red' - ##################################################################################################################################### - Buffer = f'filename: {self.IMAGE_LIST[self.IMAGE_INDEX]}\n' - Buffer+= f'redimension: {self.IMAGE_LIST[self.IMAGE_INDEX]}' + ' - ' - Buffer+= f'screen: {self.REDIMENSION}x{self.root.winfo_screenwidth()}' + ' - ' - Buffer+= f'image: {self.root.winfo_screenheight()}x{self.image.width}' + ' - ' - Buffer+= f'diff: {self.image.height}x{self.root.winfo_screenwidth()-self.image.width}' + ' - ' - Buffer+= f'resize: {self.root.winfo_screenheight()-self.image.height}x{self.XX}\n' - Buffer+= f'file: {self.YY}/{self.IMAGE_INDEX} - interval: {len(self.IMAGE_LIST)-1} - wrong {self.PUMP_INTERVAL}\n' - Buffer+= f'{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY} - {self.image.width/self.GX}x{self.image.height/self.GY}' - ##################################################################################################################################### - print('break <-> here here here here here here here here here here here here here here here here here here here here here here here') - Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],self.REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,self.root.winfo_screenwidth()-self.image.width,self.root.winfo_screenheight()-self.image.height,self.XX,self.YY,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL) - print('break <-> here here here here here here here here here here here here here here here here here here here here here here here') - ##################################################################################################################################### - self.canvas.create_text(x_x,85,text=Buffer,fill=COLOR,justify='center'); self.root.title(Buffer) - ##################################################################################################################################### - ####################################################################################################################################### - - ################## #################################################################################################################### - ################## #################################################################################################################### - self.root.update() #################################################################################################################### - ################## #################################################################################################################### - ################## #################################################################################################################### - - ######################################################################################################################################### - - # A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - AUTOGRID - # A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - AUTOGRID - # A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - AUTOGRID - # A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - AUTOGRID - # A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - AUTOGRID - - ######################################################################################################################################### - - ################# + ######################################################################################################################################### grid <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< grid def grid(self,s): ################# - - if not self.GRID_MODE: + if not self.GRID_MODE: self.GRID_MODE=True - if not s in ['x','y', 'X', 'Y']: + if not s in ['x','y', 'X', 'Y']: self.REDIMENSION=2 self.loadimage() elif s in ['X', 'Y']: - for _ in self.cellrect[1]: - print(f'<<< deleting grid rect: {_} >>>') + for _ in self.cellrect[1]: + self.l0g(f'<<< deleting grid rect: {_} >>>') self.canvas.delete(_) - for _ in self.cellrect[2]: - print(f'<<< deleting grid rect: {_} >>>') + for _ in self.cellrect[2]: + self.l0g(f'<<< deleting grid rect: {_} >>>') self.canvas.delete(_) self.cellrect[0]=self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth()-1,self.root.winfo_screenheight()-1, outline='red2', width=1) _x=self.root.winfo_screenwidth()/self.GX; _y=self.root.winfo_screenheight()/self.GY @@ -702,12 +811,12 @@ class DR1P1M4G3(): self.cellrect[1].append(self.canvas.create_rectangle((_x*X),(_y*Y),(_x*X)+_x,(_y*Y)+_y,outline=self.autocolor(1),width=1)) self.cellrect[2].append(self.canvas.create_rectangle((_x*X)+3,(_y*Y)+3,(_x*X)+_x-2,(_y*Y)+_y-2,outline=self.autocolor(0),width=4)) self.root.update() - - - print(f'<<< grid mode: enabled >>>') - - - ######################################################################################################################################### + self.l0g(f'<<< grid mode: enabled >>>') + ######################################################################################################################################### GRID + def halting(self,s): + print(f'gx{self.gx}GX{self.GX}xy[0]{self.xy[0]}/gy{self.gy}GY{self.GY}xy[1]{self.xy[1]}') + pass + ######################################################################################################################################### GRID def GRID(self,s): if self.GRID_MODE: self.GRID_MODE=False @@ -716,33 +825,33 @@ class DR1P1M4G3(): self.gx=0 self.loadimage() self.root.update() - print(f'<<< grid mode: disabled >>>') - ######################################################################################################################################### + self.l0g(f'<<< grid mode: disabled >>>') + ######################################################################################################################################### gridx def gridx(self,s): ###################### - if not self.GRID_MODE: + if not self.GRID_MODE: self.REDIMENSION=2 self.loadimage() self.GRID_MODE=True ###################### self.gx+=1 self.grid('x') - print(f'<<< grid mode: added x grid cell. x={self.gx},y={self.gy} >>>') - ######################################################################################################################################### + self.l0g(f'<<< grid mode: added x grid cell. x={self.gx},y={self.gy} >>>') + ######################################################################################################################################### gridy def gridy(self,s): ###################### - if not self.GRID_MODE: + if not self.GRID_MODE: self.REDIMENSION=2 self.loadimage() self.GRID_MODE=True ###################### self.gy+=1 self.grid('y') - print(f'<<< grid mode: added y grid cell. x={self.gx},y={self.gy} >>>') - ######################################################################################################################################### + self.l0g(f'<<< grid mode: added y grid cell. x={self.gx},y={self.gy} >>>') + ######################################################################################################################################### gridX def gridX(self,s): ###################### - if not self.GRID_MODE: + if not self.GRID_MODE: self.REDIMENSION=2 self.loadimage() self.GRID_MODE=True @@ -750,11 +859,11 @@ class DR1P1M4G3(): self.gx-=1 if self.gx < 0: self.gx=0 self.grid('X') - print(f'<<< grid mode: removed x cell. x={self.gx},y={self.gy} >>>') - ######################################################################################################################################### + self.l0g(f'<<< grid mode: removed x cell. x={self.gx},y={self.gy} >>>') + ######################################################################################################################################### gridY def gridY(self,s): ###################### - if not self.GRID_MODE: + if not self.GRID_MODE: self.REDIMENSION=2 self.loadimage() self.GRID_MODE=True @@ -762,18 +871,18 @@ class DR1P1M4G3(): self.gy-=1 if self.gy < 0: self.gy=0 self.grid('Y') - print(f'<<< grid mode: removed y cell. x={self.gx},y={self.gy} >>>') - ######################################################################################################################################### + self.l0g(f'<<< grid mode: removed y cell. x={self.gx},y={self.gy} >>>') + ######################################################################################################################################### grid_cell_up_y def grid_cell_up_y(self,s): ###################### - if not self.GRID_MODE: + if not self.GRID_MODE: self.REDIMENSION=2 self.loadimage() self.GRID_MODE=True ###################### self.GY+=1 - print(f'<<< grid mode: y division cell height increased. x={self.GX},y={self.GY} >>>') - if self.RENDER_TEXT: + self.l0g(f'<<< grid mode: y division cell height increased. x={self.GX},y={self.GY} >>>') + if self.RENDER_TEXT: COLOR='' if self.MARKED_FILES[self.IMAGE_INDEX]==0: COLOR=self.NORMAL_TEXT_COLOR @@ -788,17 +897,17 @@ class DR1P1M4G3(): self.root.title(Buffer) self.root.update() self.grid(self) - ######################################################################################################################################### + ######################################################################################################################################### grid_cell_down_y def grid_cell_down_y(self,s): ###################### - if not self.GRID_MODE: + if not self.GRID_MODE: self.REDIMENSION=2 self.loadimage() self.GRID_MODE=True ###################### self.GY-=1 - print(f'<<< grid mode: y division cell height decreased. x={self.GX},y={self.GY} >>>') - if self.RENDER_TEXT: + self.l0g(f'<<< grid mode: y division cell height decreased. x={self.GX},y={self.GY} >>>') + if self.RENDER_TEXT: COLOR='' if self.MARKED_FILES[self.IMAGE_INDEX]==0: COLOR=self.NORMAL_TEXT_COLOR @@ -813,17 +922,17 @@ class DR1P1M4G3(): self.root.title(Buffer) self.root.update() self.grid(self) - ######################################################################################################################################### + ######################################################################################################################################### grid_cell_up_x def grid_cell_up_x(self,s): ###################### - if not self.GRID_MODE: + if not self.GRID_MODE: self.REDIMENSION=2 self.loadimage() self.GRID_MODE=True ###################### self.GX-=1 - print(f'<<< grid mode: x division cell width decreased. x={self.GX},y={self.GY} >>>') - if self.RENDER_TEXT: + self.l0g(f'<<< grid mode: x division cell width decreased. x={self.GX},y={self.GY} >>>') + if self.RENDER_TEXT: COLOR='' if self.MARKED_FILES[self.IMAGE_INDEX]==0: COLOR=self.NORMAL_TEXT_COLOR @@ -838,17 +947,17 @@ class DR1P1M4G3(): self.root.title(Buffer) self.root.update() self.grid(self) - ######################################################################################################################################### + ######################################################################################################################################### grid_cell_down_x def grid_cell_down_x(self,s): ###################### - if not self.GRID_MODE: + if not self.GRID_MODE: self.REDIMENSION=2 self.loadimage() self.GRID_MODE=True ###################### self.GX+=1 - print(f'<<< grid mode: x division cell width increased. x={self.GX},y={self.GY} >>>') - if self.RENDER_TEXT: + self.l0g(f'<<< grid mode: x division cell width increased. x={self.GX},y={self.GY} >>>') + if self.RENDER_TEXT: COLOR='' if self.MARKED_FILES[self.IMAGE_INDEX]==0: COLOR=self.NORMAL_TEXT_COLOR @@ -861,9 +970,9 @@ class DR1P1M4G3(): [ self.canvas.delete(x) for x in self.canvas.find_all() if not 'activeimage' in self.canvas.itemconfig(x) ] self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=COLOR,justify='center') self.root.title(Buffer) - self.root.update() + self.root.update() self.grid(self) - ######################################################################################################################################### + ######################################################################################################################################### main <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< mainloop with binds def main(self): ####################################################################################################################################### try: @@ -874,8 +983,9 @@ class DR1P1M4G3(): self.root.eval('tk::PlaceWindow . center') #self.root.overrideredirect(True) self.root.wm_attributes("-topmost",True) - self.root.wm_attributes("-transparent",True) - self.root.config(bg='systemTransparent') + self.root.withdraw() + #self.root.wm_attributes("-transparent",True) + #self.root.config(bg='systemTransparent') self.image=Image.new(mode='RGB', size=(self.root.winfo_screenwidth(),self.root.winfo_screenheight())) self.photo=ImageTk.PhotoImage(self.image) self.canvas=Canvas(self.root,width=self.root.winfo_screenwidth(),height=self.root.winfo_screenheight(),bd=0,highlightthickness=0) @@ -885,10 +995,13 @@ class DR1P1M4G3(): self.IMAGE_INDEX=(0+int(self.USER_IMGINDEX)) self.PUMP_AUTO=self.USER_PUMPMODE self.getfilelist() + self.canvas.bind("",self.ripgrid) + self.canvas.bind("",self.flipautogrid) self.canvas.bind("",self.shuffling) self.canvas.bind("",self.autogrid) self.canvas.bind("",self.grid) self.canvas.bind("",self.GRID) + self.canvas.bind("",self.halting) self.canvas.bind("",self.gridx) self.canvas.bind("",self.gridy) self.canvas.bind("",self.gridX) @@ -920,8 +1033,8 @@ class DR1P1M4G3(): self.root.mainloop() ####################################################################################################################################### except Exception as err: - print(f"main(): {err}") -########################################################################################################################################### + self.l0g(f"main(): {err}") +########################################################################################################################################### main def main(screen): DIR_IMAGE_LIST=[] curses.start_color() @@ -980,13 +1093,16 @@ def main(screen): curses.endwin() DIR_IMAGE_LIST.append(os.getcwd()) return DIR_IMAGE_LIST -########################################################################################################################################### +########################################################################################################################################### __name__ if __name__=="__main__": - ######################################################################################################################################### + ######################################################################################################################################### DEBUG=True if DEBUG: - USERPATH=['/Users/dr1p/dr1p1m4g3/grids'] #wrapper(main) - IMGINDEX=int(0) + if STARTUP_DIRECTORY_OVERRIDE: + USERPATH=STARTUP_DIRECTORY_OVERRIDE + else: + USERPATH=wrapper(main) + IMGINDEX=int(3) RENDMODE=int(1) PUMPMODE=int(1) PUMPTIME=10 @@ -1045,5 +1161,37 @@ if __name__=="__main__": print(f'[ no shuffle mode specified: defaulting to being turned off ]') ######################################################################################################################################### dr1p1m4g3=DR1P1M4G3(USERPATH,IMGINDEX,RENDMODE,PUMPMODE,PUMPTIME,USERSHUF) - ######################################################################################################################################### ####################################################################################################################################### EOF +########################################################################################################################################### +########################################################################################################################################### +###################MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh+MMMMMMMMMMMMMMhsMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMm/ oMMMMMMMMMMMMMMm +NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMy` yMMMMMMMMMMMMMMM- -mMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMMMMMMMMMMs+dMMMMMMMMMM+ sMMMMMMMMMMMMMMM- `dMMMMMMMMMMms/NMMMMMMMMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMMMMMMMMMMM+ .omMMMMMM: -MMMMMMMMMMMMMMo `yMMMMMMMy: `dMMMMMMMMMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMMMMMMMMMMMM- /dMMM+ sMMMMMMMMMMMMh `hMMMNo` sMMMMMMMMMMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMMMMMMMMMMMMd :dm `mMMMMMMMMMMN. .NNo` .MMMMMMMMMMMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMMMMMMMMMMMMM: - :MMMMMMMMMMs :` sMMMMMMMMMMMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMMMMMMMMMMMMMs ymNMMMMMNm. NMMMMMMMMMMMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMMMMMMMMMMMMMy `-/-` .MMMMMMMMMMMMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMMMMMMMMMMMMMo .NMMMMMMMMMMMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMMMMMMMMMNh+. :sdMMMMMMMMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMMMhso+:. `-/+syMMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMMM- dMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMMM` `.:+/. `/s+:. sMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMNo -oms. .//-` `:/:` `+md+` .hMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMNs` .odNdo. .ohmd+` :dMMMMMMMMMMM####################### +###################MMMMMMMMMMNo` .. .- :hMMMMMMMMM####################### +###################MMMMMMMMd+` -sNMMMMMM####################### +###################MMMMMNs- `.. `/-. `+dMMMM####################### +###################MMNy: ./sdNMMMh: `sNMMMNds/. .odM####################### +###################M+ :ymMMMMMMMMMMh. +NMMMMMMMMMMmo- /####################### +###################MMh: .sNMMMMMMMMMMMMMMN- `hMMMMMMMMMMMMMMMm+` :hM####################### +###################MMMMd:` ``-:+shmMMMMMMMMMMMMMMMMMMN. hMMMMMMMMMMMMMMMMMMMmhs+/-..``````./dMMM####################### +###################MMMMMMMMNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMo .MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMy .MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN. /MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN+` `+NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNs. -hMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM####################### +###################MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMdyymMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM#######################