class DistributePlugin(PluginPanel): name='Distribute' title = _("Distribution") def init(self, master): PluginPanel.init(self, master) root=self.mw.root self.var_reference = StringVar(root) self.var_reference.set(SELECT) #--------------------------------------------------------- top = TFrame(self.panel, style='FlatFrame') top.pack(side = TOP, fill=BOTH) #--------------------------------------------------------- label=TLabel(top, text=" "+_("Relative to")+" ", style="FlatLabel") label.pack(side = TOP, fill = BOTH, padx=5) rel_frame=TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=4) rel_frame.pack(side = TOP, fill=X, padx=5, pady=2) button_frame=TFrame(rel_frame, style='FlatFrame') button_frame.pack(side = TOP, fill = BOTH, padx=5) self.reference = TCombobox(button_frame, state='readonly', values=self.make_cs_list(), style='ComboNormal',width=14, textvariable=self.var_reference, postcommand = self.set_cs) self.reference.pack(side = TOP) #--------------------------------------------------------- label=TLabel(top, text=" "+_("Distribute type")+" ", style="FlatLabel") label.pack(side = TOP, fill = BOTH, padx=5) framec=TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=3) framec.pack(side = TOP, fill=X, padx=5, pady=2) framex = TFrame(framec, style='FlatFrame') framex.pack(side = TOP, expand = 0, padx = 5, pady = 5) framey = TFrame(framec, style='FlatFrame') framey.pack(side = TOP, expand = 0, padx = 5, pady = 5) x_pixmaps = ['doleft', 'docenterh', 'dospacingh', 'doright'] y_pixmaps = ['dotop', 'docenterv', 'dospacingv', 'dobottom'] x_tooltips = [_('Distribute left sides equidistantly'), _('Distribute centers equidistantly horizontally'), _('Make horizontal gaps between objects equal'), _('Distribute right sides equidistantly')] y_tooltips = [_('Distribute tops sides equidistantly'), _('Distribute centers equidistantly vertically'), _('Make vertical gaps between objects equal'), _('Distribute bottoms sides equidistantly')] self.var_x = IntVar(top) self.var_x.set(0) self.value_x = 0 self.var_y = IntVar(top) self.var_y.set(0) self.value_y = 0 for i in range(1, 5): button = make_button(framex, image = x_pixmaps[i - 1], value = i, variable = self.var_x, command = self.apply_x) tooltips.AddDescription(button, x_tooltips[i - 1]) button.pack(side = LEFT, padx = 3) button = make_button(framey, image = y_pixmaps[i - 1], value = i, variable = self.var_y, command = self.apply_y) tooltips.AddDescription(button, y_tooltips[i - 1]) button.pack(side = LEFT, padx = 3) #--------------------------------------------------------- # Auto Apply Check self.var_auto_apply = IntVar(top) self.var_auto_apply.set(0) self.auto_apply_check = TCheckbutton(top, text = _("Auto Apply"), variable = self.var_auto_apply, command = self.reset) self.auto_apply_check.pack(side = TOP, anchor=W, padx=5,pady=5) #--------------------------------------------------------- # Button frame self.button_frame = TFrame(top, style='FlatFrame', borderwidth=5) self.button_frame.pack(side = BOTTOM, fill = BOTH) self.update_buttons = [] self.button_apply = TButton(self.button_frame, text = _("Apply"), command = self.apply_distribute) self.apply_button_show(1) self.init_from_doc() self.subscribe_receivers() ############################################################################### def subscribe_receivers(self): self.document.Subscribe(SELECTION, self.Update) def unsubscribe_receivers(self): self.document.Unsubscribe(SELECTION, self.Update) def init_from_doc(self): self.Update() def Update(self, *arg): reference = self.var_reference.get() if self.is_selection(reference): state=NORMAL else: state=DISABLED self.button_apply['state']=state def apply_button_show(self, state): if not state: self.button_apply.pack_forget() else: self.button_apply.pack(side = BOTTOM, expand = 1, fill = X, pady=3) def make_cs_list(self): cs=() cs+=(SELECT,PAGE,EDGE) return cs def set_cs(self): self.Update() def is_selection(self, reference = SELECT): if not self.var_auto_apply.get() and self.value_x==0 and self.value_y==0: return 0 if reference == SELECT: return (len(self.document.selection) > 2) else: return (len(self.document.selection) > 1) def HDistributeSelection(self, x, reference = SELECT): if self.is_selection(reference) and x: self.document.begin_transaction(TRANSACTION) try: try: add_undo = self.document.add_undo objects = self.document.selection.GetObjects() if reference == PAGE: brleft, brbottom, brright, brtop = self.document.PageRect() else: brleft, brbottom, brright, brtop = self.document.selection.coord_rect posh = [] total_width=0 for obj in objects: rect = obj.coord_rect posh.append((rect.left, rect.right - rect.left, obj)) total_width += rect.right - rect.left posh.sort() first_obj_left, first_obj_width, first_obj = posh[0] last_obj_left, last_obj_width, last_obj = posh[-1] # how much influence of the width. 1-no, 0-full part_obj_dict=[None, 1.0, 0.5, 1.0, 0] # influence the width last object first_obj_dict = [None, 0, first_obj_width*0.5, 0, first_obj_width] # influence the width last object last_obj_dict = [None, last_obj_width, last_obj_width*0.5, 0, 0] # influence the width. 0-no , 1-yes width_obj_dict = [None, 0,0,1,0] brleft += first_obj_dict[x] brright -= last_obj_dict[x] brwidth = (brright-brleft - total_width*width_obj_dict[x]) if reference == EDGE: step = config.preferences.handle_jump else: step = brwidth / (len(posh)-1) part=part_obj_dict[x] next = 0 for left, width, obj in posh[0:]: off = Point(next - left +brleft - width + width*part, 0) self.document.add_undo(obj.Translate(off)) next += step+width*width_obj_dict[x] add_undo(self.document.queue_edited()) except: self.document.abort_transaction() finally: self.document.end_transaction() def VDistributeSelection(self, y, reference = SELECT): if self.is_selection(reference) and y: self.document.begin_transaction(TRANSACTION) try: try: add_undo = self.document.add_undo objects = self.document.selection.GetObjects() if reference == PAGE: brleft, brbottom, brright, brtop = self.document.PageRect() else: brleft, brbottom, brright, brtop = self.document.selection.coord_rect posv = [] total_height=0 for obj in objects: rect = obj.coord_rect posv.append((rect.top, rect.bottom - rect.top, obj)) total_height += rect.bottom - rect.top posv.sort() posv.reverse() first_obj_top, first_obj_height, first_obj = posv[0] last_obj_top, last_obj_height, last_obj = posv[-1] # how much influence of the height. 1-no, 0-full part_obj_dict=[None, 1.0, 0.5, 1.0, 0] # influence the height last object first_obj_dict = [None, 0, first_obj_height*0.5, 0, first_obj_height] # influence the height last object last_obj_dict = [None, last_obj_height, last_obj_height*0.5, 0, 0] # influence the height. 0-no , 1-yes height_obj_dict = [None, 0,0,1,0] brtop += first_obj_dict[y] brbottom -= last_obj_dict[y] brwidth = (brbottom-brtop - total_height*height_obj_dict[y]) if reference == EDGE: step = -1*config.preferences.handle_jump else: step = brwidth / (len(posv)-1) part=part_obj_dict[y] next = 0 for top, height, obj in posv[0:]: off = Point(0, next - top +brtop - height + height*part) self.document.add_undo(obj.Translate(off)) next += step+height*height_obj_dict[y] add_undo(self.document.queue_edited()) except: self.document.abort_transaction() finally: self.document.end_transaction() def apply_x(self): x = self.var_x.get() reference = self.var_reference.get() if self.var_auto_apply.get(): self.reset() self.HDistributeSelection(x, reference = reference) else: if self.value_x==x: self.var_x.set(0) self.value_x = 0 else: self.value_x = x self.Update() def apply_y(self): y = self.var_y.get() reference = self.var_reference.get() if self.var_auto_apply.get(): self.reset() self.VDistributeSelection(y, reference = reference) else: if self.value_y==y: self.var_y.set(0) self.value_y = 0 else: self.value_y = y self.Update() def apply_distribute(self): if self.var_auto_apply.get(): return self.document.begin_transaction(TRANSACTION) try: try: reference = self.var_reference.get() x = self.value_x y = self.value_y self.HDistributeSelection(x, reference = reference) self.VDistributeSelection(y, reference = reference) except: self.document.abort_transaction() finally: self.document.end_transaction() def reset(self): self.var_x.set(0) self.value_x = 0 self.var_y.set(0) self.value_y = 0 ## self.apply_button_show(not self.var_auto_apply.get()) self.Update()
class DistributePlugin(PluginPanel): name = 'Distribute' title = _("Distribution") def init(self, master): PluginPanel.init(self, master) root = self.mw.root self.var_reference = StringVar(root) self.var_reference.set(SELECT) #--------------------------------------------------------- top = TFrame(self.panel, style='FlatFrame') top.pack(side=TOP, fill=BOTH) #--------------------------------------------------------- label = TLabel(top, text=" " + _("Relative to") + " ", style="FlatLabel") label.pack(side=TOP, fill=BOTH, padx=5) rel_frame = TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=4) rel_frame.pack(side=TOP, fill=X, padx=5, pady=2) button_frame = TFrame(rel_frame, style='FlatFrame') button_frame.pack(side=TOP, fill=BOTH, padx=5) self.reference = TCombobox(button_frame, state='readonly', values=self.make_cs_list(), style='ComboNormal', width=14, textvariable=self.var_reference, postcommand=self.set_cs) self.reference.pack(side=TOP) #--------------------------------------------------------- label = TLabel(top, text=" " + _("Distribute type") + " ", style="FlatLabel") label.pack(side=TOP, fill=BOTH, padx=5) framec = TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=3) framec.pack(side=TOP, fill=X, padx=5, pady=2) framex = TFrame(framec, style='FlatFrame') framex.pack(side=TOP, expand=0, padx=5, pady=5) framey = TFrame(framec, style='FlatFrame') framey.pack(side=TOP, expand=0, padx=5, pady=5) x_pixmaps = ['doleft', 'docenterh', 'dospacingh', 'doright'] y_pixmaps = ['dotop', 'docenterv', 'dospacingv', 'dobottom'] x_tooltips = [ _('Distribute left sides equidistantly'), _('Distribute centers equidistantly horizontally'), _('Make horizontal gaps between objects equal'), _('Distribute right sides equidistantly') ] y_tooltips = [ _('Distribute tops sides equidistantly'), _('Distribute centers equidistantly vertically'), _('Make vertical gaps between objects equal'), _('Distribute bottoms sides equidistantly') ] self.var_x = IntVar(top) self.var_x.set(0) self.value_x = 0 self.var_y = IntVar(top) self.var_y.set(0) self.value_y = 0 for i in range(1, 5): button = make_button(framex, image=x_pixmaps[i - 1], value=i, variable=self.var_x, command=self.apply_x) tooltips.AddDescription(button, x_tooltips[i - 1]) button.pack(side=LEFT, padx=3) button = make_button(framey, image=y_pixmaps[i - 1], value=i, variable=self.var_y, command=self.apply_y) tooltips.AddDescription(button, y_tooltips[i - 1]) button.pack(side=LEFT, padx=3) #--------------------------------------------------------- # Auto Apply Check self.var_auto_apply = IntVar(top) self.var_auto_apply.set(0) self.auto_apply_check = TCheckbutton(top, text=_("Auto Apply"), variable=self.var_auto_apply, command=self.reset) self.auto_apply_check.pack(side=TOP, anchor=W, padx=5, pady=5) #--------------------------------------------------------- # Button frame self.button_frame = TFrame(top, style='FlatFrame', borderwidth=5) self.button_frame.pack(side=BOTTOM, fill=BOTH) self.update_buttons = [] self.button_apply = TButton(self.button_frame, text=_("Apply"), command=self.apply_distribute) self.apply_button_show(1) self.init_from_doc() self.subscribe_receivers() ############################################################################### def subscribe_receivers(self): self.document.Subscribe(SELECTION, self.Update) def unsubscribe_receivers(self): self.document.Unsubscribe(SELECTION, self.Update) def init_from_doc(self): self.Update() def Update(self, *arg): reference = self.var_reference.get() if self.is_selection(reference): state = NORMAL else: state = DISABLED self.button_apply['state'] = state def apply_button_show(self, state): if not state: self.button_apply.pack_forget() else: self.button_apply.pack(side=BOTTOM, expand=1, fill=X, pady=3) def make_cs_list(self): cs = () cs += (SELECT, PAGE, EDGE) return cs def set_cs(self): self.Update() def is_selection(self, reference=SELECT): if not self.var_auto_apply.get( ) and self.value_x == 0 and self.value_y == 0: return 0 if reference == SELECT: return (len(self.document.selection) > 2) else: return (len(self.document.selection) > 1) def HDistributeSelection(self, x, reference=SELECT): if self.is_selection(reference) and x: self.document.begin_transaction(TRANSACTION) try: try: add_undo = self.document.add_undo objects = self.document.selection.GetObjects() if reference == PAGE: brleft, brbottom, brright, brtop = self.document.PageRect( ) else: brleft, brbottom, brright, brtop = self.document.selection.coord_rect posh = [] total_width = 0 for obj in objects: rect = obj.coord_rect posh.append((rect.left, rect.right - rect.left, obj)) total_width += rect.right - rect.left posh.sort() first_obj_left, first_obj_width, first_obj = posh[0] last_obj_left, last_obj_width, last_obj = posh[-1] # how much influence of the width. 1-no, 0-full part_obj_dict = [None, 1.0, 0.5, 1.0, 0] # influence the width last object first_obj_dict = [ None, 0, first_obj_width * 0.5, 0, first_obj_width ] # influence the width last object last_obj_dict = [ None, last_obj_width, last_obj_width * 0.5, 0, 0 ] # influence the width. 0-no , 1-yes width_obj_dict = [None, 0, 0, 1, 0] brleft += first_obj_dict[x] brright -= last_obj_dict[x] brwidth = (brright - brleft - total_width * width_obj_dict[x]) if reference == EDGE: step = config.preferences.handle_jump else: step = brwidth / (len(posh) - 1) part = part_obj_dict[x] next = 0 for left, width, obj in posh[0:]: off = Point( next - left + brleft - width + width * part, 0) self.document.add_undo(obj.Translate(off)) next += step + width * width_obj_dict[x] add_undo(self.document.queue_edited()) except: self.document.abort_transaction() finally: self.document.end_transaction() def VDistributeSelection(self, y, reference=SELECT): if self.is_selection(reference) and y: self.document.begin_transaction(TRANSACTION) try: try: add_undo = self.document.add_undo objects = self.document.selection.GetObjects() if reference == PAGE: brleft, brbottom, brright, brtop = self.document.PageRect( ) else: brleft, brbottom, brright, brtop = self.document.selection.coord_rect posv = [] total_height = 0 for obj in objects: rect = obj.coord_rect posv.append((rect.top, rect.bottom - rect.top, obj)) total_height += rect.bottom - rect.top posv.sort() posv.reverse() first_obj_top, first_obj_height, first_obj = posv[0] last_obj_top, last_obj_height, last_obj = posv[-1] # how much influence of the height. 1-no, 0-full part_obj_dict = [None, 1.0, 0.5, 1.0, 0] # influence the height last object first_obj_dict = [ None, 0, first_obj_height * 0.5, 0, first_obj_height ] # influence the height last object last_obj_dict = [ None, last_obj_height, last_obj_height * 0.5, 0, 0 ] # influence the height. 0-no , 1-yes height_obj_dict = [None, 0, 0, 1, 0] brtop += first_obj_dict[y] brbottom -= last_obj_dict[y] brwidth = (brbottom - brtop - total_height * height_obj_dict[y]) if reference == EDGE: step = -1 * config.preferences.handle_jump else: step = brwidth / (len(posv) - 1) part = part_obj_dict[y] next = 0 for top, height, obj in posv[0:]: off = Point( 0, next - top + brtop - height + height * part) self.document.add_undo(obj.Translate(off)) next += step + height * height_obj_dict[y] add_undo(self.document.queue_edited()) except: self.document.abort_transaction() finally: self.document.end_transaction() def apply_x(self): x = self.var_x.get() reference = self.var_reference.get() if self.var_auto_apply.get(): self.reset() self.HDistributeSelection(x, reference=reference) else: if self.value_x == x: self.var_x.set(0) self.value_x = 0 else: self.value_x = x self.Update() def apply_y(self): y = self.var_y.get() reference = self.var_reference.get() if self.var_auto_apply.get(): self.reset() self.VDistributeSelection(y, reference=reference) else: if self.value_y == y: self.var_y.set(0) self.value_y = 0 else: self.value_y = y self.Update() def apply_distribute(self): if self.var_auto_apply.get(): return self.document.begin_transaction(TRANSACTION) try: try: reference = self.var_reference.get() x = self.value_x y = self.value_y self.HDistributeSelection(x, reference=reference) self.VDistributeSelection(y, reference=reference) except: self.document.abort_transaction() finally: self.document.end_transaction() def reset(self): self.var_x.set(0) self.value_x = 0 self.var_y.set(0) self.value_y = 0 ## self.apply_button_show(not self.var_auto_apply.get()) self.Update()
class AlignPlugin(PluginPanel): name = 'Alignment' title = _("Alignment") def init(self, master): PluginPanel.init(self, master) root = self.mw.root self.var_reference = StringVar(root) self.var_reference.set(SELECT) #--------------------------------------------------------- top = TFrame(self.panel, style='FlatFrame') top.pack(side=TOP, fill=BOTH) #--------------------------------------------------------- label = TLabel(top, text=" " + _("Relative to") + " ", style="FlatLabel") label.pack(side=TOP, fill=BOTH, padx=5) rel_frame = TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=3) rel_frame.pack(side=TOP, fill=X, padx=5, pady=2) self.reference = TCombobox(rel_frame, state='readonly', values=self.make_cs_list(), style='ComboNormal', width=14, textvariable=self.var_reference, postcommand=self.set_cs) self.reference.pack(side=TOP) #--------------------------------------------------------- label = TLabel(top, text=" " + _("Alignment type") + " ", style="FlatLabel") label.pack(side=TOP, fill=BOTH, padx=5) framec = TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=3) framec.pack(side=TOP, fill=X, padx=5, pady=2) framex = TFrame(framec, style='FlatFrame') framex.pack(side=TOP, expand=0, padx=5, pady=5) framey = TFrame(framec, style='FlatFrame') framey.pack(side=TOP, expand=0, padx=5, pady=5) x_pixmaps = ['aoleft', 'aocenterh', 'aoright'] y_pixmaps = ['aotop', 'aocenterv', 'aobottom'] x_tooltips = [ _('Align left sides'), _('Center on vertical axis'), _('Align right sides') ] y_tooltips = [ _('Align tops'), _('Center on horizontal axis'), _('Align bottoms') ] self.var_x = IntVar(top) self.var_x.set(0) self.value_x = 0 self.var_y = IntVar(top) self.var_y.set(0) self.value_y = 0 for i in range(1, 4): button = make_button(framex, image=x_pixmaps[i - 1], value=i, variable=self.var_x, command=self.apply_x) tooltips.AddDescription(button, x_tooltips[i - 1]) button.pack(side=LEFT, padx=3) button = make_button(framey, image=y_pixmaps[i - 1], value=i, variable=self.var_y, command=self.apply_y) tooltips.AddDescription(button, y_tooltips[i - 1]) button.pack(side=LEFT, padx=3) #--------------------------------------------------------- # Auto Apply Check self.var_auto_apply = IntVar(top) self.var_auto_apply.set(0) self.auto_apply_check = TCheckbutton(top, text=_("Auto Apply"), variable=self.var_auto_apply, command=self.reset) self.auto_apply_check.pack(side=TOP, anchor=W, padx=5, pady=5) #--------------------------------------------------------- # Button frame self.button_frame = TFrame(top, style='FlatFrame', borderwidth=5) self.button_frame.pack(side=BOTTOM, fill=BOTH) self.update_buttons = [] self.button_apply = TButton(self.button_frame, text=_("Apply"), command=self.apply) self.apply_button_show(1) self.init_from_doc() self.subscribe_receivers() ############################################################################### def subscribe_receivers(self): self.document.Subscribe(SELECTION, self.Update) def unsubscribe_receivers(self): self.document.Unsubscribe(SELECTION, self.Update) def init_from_doc(self): self.Update() self.issue(SELECTION) def Update(self, *arg): reference = self.var_reference.get() if self.is_selection(reference): state = NORMAL else: state = DISABLED self.button_apply['state'] = state def apply_button_show(self, state): if not state: self.button_apply.pack_forget() else: self.button_apply.pack(side=BOTTOM, expand=1, fill=X, pady=3) def make_cs_list(self): cs = () cs += (SELECT, LOWERMOST, PAGE) return cs def set_cs(self): self.Update() def is_selection(self, reference=SELECT): if not self.var_auto_apply.get( ) and self.value_x == 0 and self.value_y == 0: return 0 if reference == PAGE: return (len(self.document.selection) > 0) else: return (len(self.document.selection) > 1) def apply_x(self): x = self.var_x.get() if self.var_auto_apply.get(): self.reset() self.apply(x=x) else: if self.value_x == x: self.var_x.set(0) self.value_x = 0 else: self.value_x = x self.Update() def apply_y(self): y = self.var_y.get() if self.var_auto_apply.get(): self.reset() self.apply(y=y) else: if self.value_y == y: self.var_y.set(0) self.value_y = 0 else: self.value_y = y self.Update() def apply(self, x=None, y=None, reference=None): reference = self.var_reference.get() if not self.is_selection(reference): return if x is None: x = self.var_x.get() if y is None: y = self.var_y.get() if reference is None: reference = self.var_reference.get() reference = self.reference_command(reference) self.document.AlignSelection(x, y, reference=reference) def reference_command(self, reference): if reference == SELECT: return 'selection' if reference == LOWERMOST: return 'lowermost' if reference == PAGE: return 'page' def reset(self): self.var_x.set(0) self.value_x = 0 self.var_y.set(0) self.value_y = 0 ## self.apply_button_show(not self.var_auto_apply.get()) self.Update()
class AlignPlugin(PluginPanel): name='Alignment' title = _("Alignment") def init(self, master): PluginPanel.init(self, master) root=self.mw.root self.var_reference = StringVar(root) self.var_reference.set(SELECT) #--------------------------------------------------------- top = TFrame(self.panel, style='FlatFrame') top.pack(side = TOP, fill=BOTH) #--------------------------------------------------------- label=TLabel(top, text=" "+_("Relative to")+" ", style="FlatLabel") label.pack(side = TOP, fill = BOTH, padx=5) rel_frame=TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=3) rel_frame.pack(side = TOP, fill=X, padx=5, pady=2) self.reference = TCombobox(rel_frame, state='readonly', values=self.make_cs_list(), style='ComboNormal',width=14, textvariable=self.var_reference, postcommand = self.set_cs) self.reference.pack(side = TOP) #--------------------------------------------------------- label=TLabel(top, text=" "+_("Alignment type")+" ", style="FlatLabel") label.pack(side = TOP, fill = BOTH, padx=5) framec=TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=3) framec.pack(side = TOP, fill=X, padx=5, pady=2) framex = TFrame(framec, style='FlatFrame') framex.pack(side = TOP, expand = 0, padx = 5, pady = 5) framey = TFrame(framec, style='FlatFrame') framey.pack(side = TOP, expand = 0, padx = 5, pady = 5) x_pixmaps = ['aoleft', 'aocenterh', 'aoright'] y_pixmaps = ['aotop', 'aocenterv', 'aobottom'] x_tooltips = [_('Align left sides'), _('Center on vertical axis'), _('Align right sides')] y_tooltips = [_('Align tops'), _('Center on horizontal axis'), _('Align bottoms')] self.var_x = IntVar(top) self.var_x.set(0) self.value_x = 0 self.var_y = IntVar(top) self.var_y.set(0) self.value_y = 0 for i in range(1, 4): button = make_button(framex, image = x_pixmaps[i - 1], value = i, variable = self.var_x, command = self.apply_x) tooltips.AddDescription(button, x_tooltips[i - 1]) button.pack(side = LEFT, padx = 3) button = make_button(framey, image = y_pixmaps[i - 1], value = i, variable = self.var_y, command = self.apply_y) tooltips.AddDescription(button, y_tooltips[i - 1]) button.pack(side = LEFT, padx = 3) #--------------------------------------------------------- # Auto Apply Check self.var_auto_apply = IntVar(top) self.var_auto_apply.set(0) self.auto_apply_check = TCheckbutton(top, text = _("Auto Apply"), variable = self.var_auto_apply, command = self.reset) self.auto_apply_check.pack(side = TOP, anchor=W, padx=5,pady=5) #--------------------------------------------------------- # Button frame self.button_frame = TFrame(top, style='FlatFrame', borderwidth=5) self.button_frame.pack(side = BOTTOM, fill = BOTH) self.update_buttons = [] self.button_apply = TButton(self.button_frame, text = _("Apply"), command = self.apply) self.apply_button_show(1) self.init_from_doc() self.subscribe_receivers() ############################################################################### def subscribe_receivers(self): self.document.Subscribe(SELECTION, self.Update) def unsubscribe_receivers(self): self.document.Unsubscribe(SELECTION, self.Update) def init_from_doc(self): self.Update() self.issue(SELECTION) def Update(self, *arg): reference = self.var_reference.get() if self.is_selection(reference): state=NORMAL else: state=DISABLED self.button_apply['state']=state def apply_button_show(self, state): if not state: self.button_apply.pack_forget() else: self.button_apply.pack(side = BOTTOM, expand = 1, fill = X, pady=3) def make_cs_list(self): cs=() cs+=(SELECT,LOWERMOST,PAGE) return cs def set_cs(self): self.Update() def is_selection(self, reference = SELECT): if not self.var_auto_apply.get() and self.value_x==0 and self.value_y==0: return 0 if reference == PAGE: return (len(self.document.selection) > 0) else: return (len(self.document.selection) > 1) def apply_x(self): x = self.var_x.get() if self.var_auto_apply.get(): self.reset() self.apply(x=x) else: if self.value_x==x: self.var_x.set(0) self.value_x = 0 else: self.value_x = x self.Update() def apply_y(self): y = self.var_y.get() if self.var_auto_apply.get(): self.reset() self.apply(y=y) else: if self.value_y==y: self.var_y.set(0) self.value_y = 0 else: self.value_y = y self.Update() def apply(self, x=None, y=None, reference = None): reference = self.var_reference.get() if not self.is_selection(reference): return if x is None: x = self.var_x.get() if y is None: y = self.var_y.get() if reference is None: reference = self.var_reference.get() reference = self.reference_command(reference) self.document.AlignSelection(x, y, reference = reference) def reference_command(self, reference): if reference == SELECT: return 'selection' if reference == LOWERMOST: return 'lowermost' if reference == PAGE: return 'page' def reset(self): self.var_x.set(0) self.value_x = 0 self.var_y.set(0) self.value_y = 0 ## self.apply_button_show(not self.var_auto_apply.get()) self.Update()