# -*-coding:utf-8 -* import tkinter as tk from tkinter import messagebox from tkinter import simpledialog from pdfembannersrc import subwindows import logging logger = logging.getLogger() class InterfaceEdit(tk.Toplevel): """ Edition window """ def __init__(self, parent, fichobj, **kwargs): tk.Toplevel.__init__(self, parent) self.transient(parent) self.grab_set() self.geometry("800x400") self.bind("", self.ok) self.fich = fichobj self.title("Edit {}".format(self.fich.name)) if(self.fich.use is None): self.fich.use = [] if(self.fich.order is None): self.fich.order = [] self.pages = [] self.f = tk.Frame(self, width=768, height=576, **kwargs) self.f.pack(fill=tk.BOTH) # Création de nos widgets self.f.columnconfigure(7, weight=1) self.f.rowconfigure(3, weight=1) info1 = tk.Label(self.f, text="Choose used pages :", fg="white", padx=20, bg="blue") info1.grid(row=0, column=0, columnspan=10, sticky=tk.W) tk.Button(self.f, text="Select all", command=self.selectall).grid(row=1, column=0) tk.Button(self.f, text="Unselect all", command=self.deselectall).grid(row=2, column=0) tk.Button(self.f, text="Select range", command=self.selectrange).grid(row=1, column=1) tk.Button(self.f, text="Unselect range", command=self.deselectrange).grid(row=2, column=1) tk.Button(self.f, text="Select pair", command=self.selectpair).grid(row=1, column=2) tk.Button(self.f, text="Unselect pair", command=self.unselectpair).grid(row=2, column=2) tk.Button(self.f, text="Select impair", command=self.selectimpair).grid(row=1, column=3) tk.Button(self.f, text="Unselect impair", command=self.unselectimpair).grid(row=2, column=3) tk.Button(self.f, text="Toggle", command=self.toggle).grid(row=1, column=4) tk.Button(self.f, text="Add blank page", command=self.addblankpage).grid(row=1, column=10) vsb = tk.Scrollbar(self.f, orient=tk.VERTICAL) vsb.grid(row=3, column=11, sticky=tk.N+tk.S) self.c = tk.Canvas(self.f, yscrollcommand=vsb.set) self.c.grid(row=3, column=0, columnspan=10, sticky="news") vsb.config(command=self.c.yview) self.frame_pages = tk.Frame(self.c) self.frame_pages.columnconfigure(4, weight=1) for e in range(self.fich.npages+self.fich.nblankpages): if(len(self.fich.use)<=e): self.fich.use.append(True) if(len(self.fich.order)<=e): self.fich.order.append(e) page = Page(self, e) self.pages.append(page) page.add_widgets(self.frame_pages) self.c.create_window(0, 0, window=self.frame_pages, anchor=tk.NW) self.frame_pages.update_idletasks() self.c.config(scrollregion=self.c.bbox("all")) info1 = tk.Label(self.f, text="Options on the whole file :", fg="white", padx=20, bg="blue") info1.grid(row=4, column=0, columnspan=10, sticky=tk.W) tk.Button(self.f, text="Rotate", command=self.rotate).grid(row=5, column=0) tk.Button(self.f, text="Crop", command=self.crop).grid(row=5, column=1) tk.Button(self.f, text="Ok", command=self.ok).grid(row=6, column=10) self.message = tk.Label(self.f, text="Editing {}".format(self.fich.name)) self.message.grid(row=7, column=0, columnspan=11, sticky=tk.W) def ok(self, *args): """ Save and quit """ self.message["text"] = "Done" self.quit() self.destroy() def up(self, i): pos = self.fich.order[i] if(pos>0 and pos0 and int(e1[0])<=len(self.fich.use)): i = int(e1[0]) self.fich.use[i-1] = True self.pages[i-1].select() elif(len(e1)==2 and e1[0].isdigit() and e1[1].isdigit()): i = int(e1[0]) j = int(e1[1]) if(i>0 and i0 and int(e1[0])<=len(self.fich.use)): i = int(e1[0]) self.fich.use[i-1] = False self.pages[i-1].deselect() elif(len(e1)==2 and e1[0].isdigit() and e1[1].isdigit()): i = int(e1[0]) j = int(e1[1]) if(i>0 and i0): added=0 for e in values["after"]: e = e+added # Decalage vers le bas des pages suivantes for i in range(e,len(self.fich.order)): self.pages[self.fich.order[i]].unset_i_widgets() self.pages[self.fich.order[i]].set_i_widgets(i+1+values["nr"]) # Ajout des pages blanches part1 = self.fich.order[:e] part2 = self.fich.order[e:] for i in range(values["nr"]): self.fich.use.append(True) self.fich.nblankpages+=1 added+=1 self.fich.order.append(self.fich.npages+self.fich.nblankpages-1) page = Page(self, self.fich.npages+self.fich.nblankpages-1) self.pages.append(page) page.add_widgets(self.frame_pages) page.unset_i_widgets() page.set_i_widgets(e+i) part1.append(self.fich.npages+self.fich.nblankpages-1) self.fich.order = part1 + part2 self.frame_pages.update_idletasks() self.c.config(scrollregion=self.c.bbox("all")) class Page: def __init__(self, parent, i): self.num = i self.parent = parent self.Wlabel = None self.Wcheck = None self.Wup = None self.Wdown = None def add_widgets(self, frame): if self.num>=self.parent.fich.npages: self.Wlabel = tk.Label(frame, text="Blank page") else: self.Wlabel = tk.Label(frame, text="Page {}".format(self.num+1)) self.Wnum = tk.Label(frame, text="{}.".format(self.num+1)) self.Wup = tk.Button(frame, text="Up", command=lambda: self.parent.up(self.num)) self.Wdown = tk.Button(frame, text="Down", command=lambda: self.parent.down(self.num)) self.Wcheck = tk.Checkbutton(frame, command=self.toggle) if(self.parent.fich.use[self.num]): self.select() else: self.deselect() self.set_i_widgets(self.parent.fich.order[self.num]) def set_i_widgets(self, i): self.Wnum["text"] = "{}.".format(i+1) self.Wnum.grid(row=i, column=0, sticky=tk.W) self.Wlabel.grid(row=i, column=4) self.Wcheck.grid(row=i, column=1) self.Wup.grid(row=i, column=2) self.Wdown.grid(row=i, column=3) def unset_i_widgets(self): self.Wnum.grid_forget() self.Wlabel.grid_forget() self.Wcheck.grid_forget() self.Wup.grid_forget() self.Wdown.grid_forget() def toggle(self): if(self.parent.fich.use[self.num]): self.deselect() self.parent.fich.use[self.num] = False else: self.select() self.parent.fich.use[self.num] = True def select(self): self.Wlabel.config(fg="black") self.Wcheck.select() def deselect(self): self.Wlabel.config(fg="grey") self.Wcheck.deselect()