def init(self, master): PluginPanel.init(self, master) top = TFrame(self.panel, style='FlatFrame', borderwidth=5) top.pack(side = TOP, fill=BOTH) sign = TFrame(top, style='RoundedFrame', borderwidth=5) sign.pack(side = TOP) self.sign=TLabel(sign, image='shaping_trim') self.sign.pack(side=TOP) button = UpdatedButton(top, text = _("Apply"), command = self.apply_action, sensitivecb = self.is_correct_selection) button.pack(side = BOTTOM, expand = 1, fill = X) self.Subscribe(SELECTION, button.Update) button_frame = TFrame(top, style='FlatFrame', borderwidth=1) button_frame.pack(side = BOTTOM, fill=X, pady=5) self.var_originals = IntVar(top) self.var_originals.set(0) self.autoupdate_check = TCheckbutton(button_frame, text = _("Leave originals"), variable = self.var_originals) self.autoupdate_check.pack(side = LEFT, anchor=W, padx=10) self.init_from_doc() self.subscribe_receivers()
def init(self, master): PluginPanel.init(self, master) top = TFrame(self.panel, style='FlatFrame', borderwidth=7) top.pack(side = TOP, fill=BOTH) sign = TFrame(top, style='RoundedFrame', borderwidth=5) sign.pack(side=TOP) self.sign = TLabel(sign, image='color_converter') self.sign.pack(side=TOP) self.cs_name = StringVar(top) self.cs_name.set(RGB) label = TLabel(top, text=_("Colorspace:")+" ") label.pack(side = TOP, anchor=W) self.colorspaces = TCombobox(top, state='readonly', postcommand = self.set_cs, values=self.make_cs_list(), width=14, style='ComboNormal', textvariable=self.cs_name) self.colorspaces.pack(side = TOP, fill=X, pady=3) button = UpdatedButton(top, text = _("Apply"), command = self.apply_colorspace, sensitivecb = self.is_selection) button.pack(side = BOTTOM, expand = 1, fill = X, pady=3) self.Subscribe(SELECTION, button.Update) self.init_from_doc() self.subscribe_receivers()
def init(self, master): PluginPanel.init(self, master) top = TFrame(self.panel, style='FlatFrame', borderwidth=5) top.pack(side = TOP, fill=BOTH) sign = TFrame(top, style='RoundedFrame', borderwidth=5) sign.pack(side = TOP) self.sign=TLabel(sign, image='shaping_divide') self.sign.pack(side=TOP) button = UpdatedButton(top, text = _("Apply"), command = self.apply_action, sensitivecb = self.is_correct_selection) button.pack(side = BOTTOM, expand = 1, fill = X) self.Subscribe(SELECTION, button.Update) button_frame = TFrame(top, style='FlatFrame', borderwidth=1) button_frame.pack(side = BOTTOM, fill=X, pady=5) self.var_originals = IntVar(top) self.var_originals.set(1) self.autoupdate_check = TCheckbutton(button_frame, text = _("Leave originals"), variable = self.var_originals) self.autoupdate_check.pack(side = LEFT, anchor=W, padx=10) self.init_from_doc() self.subscribe_receivers()
def create_std_buttons(self, master, update_from=1): button_frame = Frame(master) button = Checkbutton(button_frame, text=_("Auto Update"), variable=self.var_auto_update) button.pack(side=TOP, expand=1, fill=X) if update_from: button = UpdatedButton(button_frame, text=_("Update From..."), command=self.update_from_object) button.pack(side=TOP, expand=1, fill=X) button = UpdatedButton(button_frame, text=_("Apply"), command=self.do_apply, sensitivecb=self.can_apply) button.pack(side=LEFT, expand=1, fill=X) self.Subscribe(SELECTION, button.Update) button = UpdatedButton(button_frame, text=_("Close"), command=self.close_dlg) button.pack(side=RIGHT, expand=1, fill=X) return button_frame
def build_dlg(self): root = self.top top = TFrame(root, style='FlatFrame', borderwidth=10) top.pack(side=TOP, fill=BOTH, expand=1) frame = TFrame(top, name='top', style='FlatFrame') frame.pack(side=TOP, fill=BOTH, expand=1) label = TLabel(frame, image='messagebox_' + self.image, style='FlatLabel') label.pack(side=LEFT, padx=5, pady=5) label = TLabel(frame, text=self.message, name='msg', style='FlatLabel', justify='center', anchor='center') label.pack(side=RIGHT, fill=BOTH, expand=1) frame = TFrame(top, name='bot', style='FlatFrame') frame.pack(side=BOTTOM)#, fill = X, expand = 1) command = self.ok for i in range(len(self.buttons)): button = UpdatedButton(frame, text=' ' + self.buttons[i] + ' ', command=command, args=i) button.grid(column=i, row=0, sticky='ew', padx=10, pady=0) if i == self.default: if TkVersion >= 8.0: button['default'] = 'active' self.focus_widget = button else: if TkVersion >= 8.0: button['default'] = 'normal' if self.default is not None: top.bind('<Return>', self.invoke_default) frame = TFrame(top, name='mid', style='FlatFrame', borderwidth=1) frame.pack(side=TOP, fill=X) root.resizable (width=0, height=0)
def init(self, master): PluginPanel.init(self, master) self.initial_color = self.default_color self.current_color = copy.copy(self.initial_color) top = TFrame(self.panel, style='FlatFrame', borderwidth=5) top.pack(side=TOP, fill=BOTH) self.selector = ColorSpaceSelector(top, self.refresh_widgets, self.current_color, self.sign) self.selector.pack(side=TOP, expand=1, fill=X) self.picker = ColorChooserWidget(top, self.refresh_widgets, self.current_color) self.picker.pack(side=TOP, expand=1, fill=X) self.digitizer = ColorDigitizer(top, self.refresh_widgets, self.current_color) self.digitizer.pack(side=TOP, expand=1, fill=X) button = UpdatedButton(top, text=_("Apply"), command=self.apply_pattern, sensitivecb=self.is_selection) button.pack(side=BOTTOM, expand=1, fill=X) self.Subscribe(SELECTION, button.Update) button_frame = TFrame(top, style='FlatFrame', borderwidth=1) button_frame.pack(side=BOTTOM, fill=X, pady=5) button = TButton(button_frame, style='TSmallbutton', text=' ', image='small_colorpicker', command=self.copy_from) button.pack(side=LEFT) tooltips.AddDescription(button, _("Copy From...")) button = TButton(button_frame, style='TSmallbutton', text=' ', image='restore_color', command=self.restore_color) button.pack(side=LEFT, padx=5) tooltips.AddDescription(button, _("Restore color")) self.var_autoupdate = IntVar(top) self.var_autoupdate.set(1) self.autoupdate_check = TCheckbutton(button_frame, text=_("Auto Update"), variable=self.var_autoupdate, command=self.init_from_doc) self.autoupdate_check.pack(side=RIGHT, anchor=W, padx=10) self.init_from_doc() self.subscribe_receivers()
def create_std_buttons(self, master): frame = Frame(master, borderwidth=2) button = UpdatedButton(frame, text=_("Apply"), command=self.do_apply, sensitivecb=self.can_apply, width=15) button.pack(side=TOP) return frame
def build_dlg(self): root = self.top top = TFrame(root, style='FlatFrame', borderwidth=10) top.pack(side=TOP, fill=BOTH, expand=1) frame = TFrame(top, name='top', style='FlatFrame') frame.pack(side=TOP, fill=BOTH, expand=1) label = TLabel(frame, image='messagebox_' + self.image, style='FlatLabel') label.pack(side=LEFT, padx=5, pady=5) label = TLabel(frame, text=self.message, name='msg', style='FlatLabel', justify='center', anchor='center') label.pack(side=RIGHT, fill=BOTH, expand=1) frame = TFrame(top, name='bot', style='FlatFrame') frame.pack(side=BOTTOM) #, fill = X, expand = 1) command = self.ok for i in range(len(self.buttons)): button = UpdatedButton(frame, text=' ' + self.buttons[i] + ' ', command=command, args=i) button.grid(column=i, row=0, sticky='ew', padx=10, pady=0) if i == self.default: if TkVersion >= 8.0: button['default'] = 'active' self.focus_widget = button else: if TkVersion >= 8.0: button['default'] = 'normal' if self.default is not None: top.bind('<Return>', self.invoke_default) frame = TFrame(top, name='mid', style='FlatFrame', borderwidth=1) frame.pack(side=TOP, fill=X) root.resizable(width=0, height=0)
def init(self, master): PluginPanel.init(self, master) top = TFrame(self.panel, style='FlatFrame', borderwidth=5) top.pack(side = TOP, fill=BOTH) sign = TFrame(top, style='RoundedFrame', borderwidth=5) sign.pack(side = TOP) self.sign=TLabel(sign, image='messagebox_construct') self.sign.pack(side=TOP) button = UpdatedButton(top, text = _("Apply"), command = self.apply_action, sensitivecb = self.is_correct_selection) button.pack(side = BOTTOM, expand = 1, fill = X) self.Subscribe(SELECTION, button.Update) self.init_from_doc() self.subscribe_receivers()
def init(self, master): PluginPanel.init(self, master) top = TFrame(self.panel, style='FlatFrame', borderwidth=5) top.pack(side=TOP, fill=BOTH) sign = TFrame(top, style='RoundedFrame', borderwidth=5) sign.pack(side=TOP) self.sign = TLabel(sign, image='messagebox_construct') self.sign.pack(side=TOP) button = UpdatedButton(top, text=_("Apply"), command=self.apply_action, sensitivecb=self.is_correct_selection) button.pack(side=BOTTOM, expand=1, fill=X) self.Subscribe(SELECTION, button.Update) self.init_from_doc() self.subscribe_receivers()
class MovePanel(PluginPanel): name='Move' title = _("Move") def init(self, master): PluginPanel.init(self, master) root=self.mw.root self.var_width_number=DoubleVar(root) self.var_height_number=DoubleVar(root) self.var_width_base=DoubleVar(root) self.var_height_base=DoubleVar(root) var_width_unit = StringVar(root) var_height_unit = StringVar(root) unit = config.preferences.default_unit self.var_width = LengthVar(10, unit, self.var_width_number, var_width_unit) self.var_height = LengthVar(10, unit,self.var_height_number,var_height_unit) jump=config.preferences.default_unit_jump self.var_width.set(0) self.var_height.set(0) self.var_width_base.set(0) self.var_height_base.set(0) self.var_position = StringVar(root) self.var_position.set(ABSOLUTE) self.var_basepoint = StringVar(root) self.var_basepoint.set('C') #--------------------------------------------------------- top = TFrame(self.panel, style='FlatFrame') top.pack(side = TOP, fill=BOTH) #--------------------------------------------------------- # Horisontal size size_frameH = TFrame(top, style='FlatFrame', borderwidth=3) size_frameH.pack(side = TOP, fill = BOTH) label = TLabel(size_frameH, style='FlatLabel', image='move_h') label.pack(side = LEFT, padx=5) self.entry_width = TSpinbox(size_frameH, var=0, vartype=1, textvariable = self.var_width_number, min = -50000, max = 50000, step = jump, width = 10, command=self.apply_move) self.entry_width.pack(side = LEFT) self.labelwunit = TLabel(size_frameH, style='FlatLabel', text = self.var_width.unit) self.labelwunit.pack(side = LEFT, padx=5) #--------------------------------------------------------- # Vertical size_frameV = TFrame(top, style='FlatFrame', borderwidth=3) size_frameV.pack(side = TOP, fill = BOTH) label = TLabel(size_frameV, style='FlatLabel', image='move_v') label.pack(side = LEFT, padx=5) self.entry_height = TSpinbox(size_frameV, var=0, vartype=1, textvariable = self.var_height_number, min = -50000, max = 50000, step = jump, width = 10, command=self.apply_move) self.entry_height.pack(side = LEFT) self.labelhunit = TLabel(size_frameV, style='FlatLabel', text = self.var_height.unit) self.labelhunit.pack(side = LEFT, padx=5) #--------------------------------------------------------- # position chek self.position_check = TCheckbutton(top, text = _("Absolute Coordinates"), variable = self.var_position, onvalue=ABSOLUTE, offvalue=RELATIVE, command = self.position) self.position_check.pack(side = TOP, anchor=W, padx=5,pady=5) #--------------------------------------------------------- # Basepoint check label = TLabel(top, style='FlatLabel', text = _("Basepoint:")) label.pack(side = TOP, fill = BOTH, padx=5) basepoint_frame=TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=4) basepoint_frame.pack(side = TOP, fill=X, padx=5, pady=2) self.Basepoint = BasePointSelector(basepoint_frame, anchor=self.var_basepoint, command = self.apply_basepoint) self.Basepoint.pack(side = LEFT, fill = BOTH, padx=5) label = TLabel(basepoint_frame, style='FlatLabel', image = 'coordinate_sys') label.pack(side = LEFT, fill = BOTH, padx=10) #--------------------------------------------------------- # Button frame button_frame = TFrame(top, style='FlatFrame', borderwidth=5) button_frame.pack(side = BOTTOM, fill = BOTH) self.update_buttons = [] self.button = UpdatedButton(top, text = _("Apply"), command = self.apply_move) self.button.pack(in_ = button_frame, side = BOTTOM, expand = 1, fill = X, pady=3) self.button_copy = UpdatedButton(top, text = _("Apply to Copy"), command = self.apply_to_copy) self.button_copy.pack(in_ = button_frame, side = BOTTOM, expand = 1, fill = X) self.init_from_doc() self.subscribe_receivers() ############################################################################### def subscribe_receivers(self): self.document.Subscribe(SELECTION, self.Update) self.document.Subscribe(EDITED, self.update_var) config.preferences.Subscribe(CHANGED, self.update_pref) def unsubscribe_receivers(self): self.document.Unsubscribe(SELECTION, self.Update) self.document.Unsubscribe(EDITED, self.update_var) config.preferences.Unsubscribe(CHANGED, self.update_pref) def init_from_doc(self, *arg): self.Update() def Update(self, *arg): if self.is_selection(): self.entry_width.set_state(NORMAL) self.entry_height.set_state(NORMAL) self.position_check['state']=NORMAL self.button['state']=NORMAL self.button_copy['state']=NORMAL else: self.entry_width.set_state(DISABLED) self.entry_height.set_state(DISABLED) self.position_check['state']=DISABLED self.button['state']=DISABLED self.button_copy['state']=DISABLED self.update_pref() def apply_basepoint(self): self.Update() def position(self): if self.var_position.get()==ABSOLUTE and self.var_basepoint.get()=='USER': self.var_basepoint.set('C') self.update_var() def apply_move(self, *arg): if self.button["state"]==DISABLED: return try: var_x=self.var_width.get() var_y=self.var_height.get() except: return x, y = self.coordinates(self.var_position.get()) if self.var_position.get()==RELATIVE: if self.var_width_base != self.var_width.get() or self.var_height_base != self.var_height.get(): self.var_basepoint.set('USER') x,y = var_x, var_y else: x,y = var_x-x, var_y-y if arg and arg[0] == 'Duplicate': self.document.MoveAndCopy(x, y, Point(0,0)) else: self.document.MoveSelected(x, y) def apply_to_copy(self): self.apply_move('Duplicate') def coordinates(self, position): br=self.document.selection.coord_rect hor_sel=br.right - br.left ver_sel=br.top - br.bottom if position == RELATIVE: left, bottom = -hor_sel/2, -ver_sel/2 else: left, bottom = br.left, br.bottom cnt_x,cnt_y=self.Basepoint.get_basepoint(hor_sel,ver_sel,left,bottom) if position == RELATIVE and cnt_x!=None: return cnt_x*2, cnt_y*2 else: return cnt_x, cnt_y def update_pref(self, *arg): self.labelwunit['text']=config.preferences.default_unit self.labelhunit['text']=config.preferences.default_unit self.entry_width.step=config.preferences.default_unit_jump self.entry_height.step=config.preferences.default_unit_jump self.update_var() def update_var(self, *arg): if len(self.document.selection.GetInfo()): if self.var_basepoint.get() == 'USER': x=self.var_width.get() y=self.var_height.get() self.var_width.unit=config.preferences.default_unit self.var_height.unit=config.preferences.default_unit self.var_width.set(x) self.var_height.set(y) else: self.var_width.unit=config.preferences.default_unit self.var_height.unit=config.preferences.default_unit x, y = self.coordinates(self.var_position.get()) self.var_width.set(x) self.var_height.set(y) self.var_width_base=self.var_width.get() self.var_height_base=self.var_height.get() def is_selection(self): return (len(self.document.selection) > 0)
def init(self, master): PluginPanel.init(self, master) top = TFrame(self.panel, style='FlatFrame', borderwidth=5) top.pack(side=TOP, fill=BOTH) sign = TFrame(top, style='RoundedFrame', borderwidth=5) sign.pack(side=TOP) self.sign = TLabel(sign, image='effects_blend') self.sign.pack(side=TOP) button_frame = TFrame(top, style='FlatFrame') button_frame.pack(side=BOTTOM, fill=BOTH, expand=1) self.update_buttons = [] button = UpdatedButton(top, text=_("Apply"), command=self.apply_blend, sensitivecb=self.doc_can_blend) button.pack(in_=button_frame, side=LEFT, expand=1, fill=X) self.document.Subscribe(SELECTION, button.Update) self.update_buttons.append(button) steps_frame = TFrame(top, style='FlatFrame', borderwidth=15) steps_frame.pack(side=TOP) label = TLabel(steps_frame, text=" " + _("Steps:") + " ") label.pack(side=LEFT, anchor=E) self.var_steps = IntVar(top) self.var_steps.set(config.preferences.blend_panel_default_steps) self.entry = TSpinbox(steps_frame, var=10, vartype=0, textvariable=self.var_steps, min=1, max=100000, step=1, width=6, command=self.apply_blend) self.entry.pack(side=LEFT, anchor=E) button = UpdatedButton(top, text=_("Select Start"), sensitivecb=self.can_select, command=self.select_control, args=SelectStart) button.pack(side=BOTTOM, fill=X, expand=1, pady=3) self.document.Subscribe(SELECTION, button.Update) self.update_buttons.append(button) button = UpdatedButton(top, text=_("Select End"), sensitivecb=self.can_select, command=self.select_control, args=SelectEnd) button.pack(side=BOTTOM, fill=X, expand=1) self.document.Subscribe(SELECTION, button.Update) self.update_buttons.append(button) self.init_from_doc() self.subscribe_receivers()
def init(self, master): PluginPanel.init(self, master) self.top = self.panel root = self.top self.USER_SPECIFIC = _("<Custom Size>") top_root = TFrame(root, borderwidth=2, style='FlatFrame') top_root.pack(side = TOP, expand = 1, fill = X) top=TLabelframe(top_root, text='Page format') top.pack(side = TOP, fill=X, pady=2) var_width_number = DoubleVar(root) var_height_number = DoubleVar(root) var_width_unit = StringVar(root) var_height_unit = StringVar(root) unit = config.preferences.default_unit self.var_width = LengthVar(10, unit, var_width_number, var_width_unit) self.var_height = LengthVar(10, unit,var_height_number,var_height_unit) # =========================================================== format_frame = TFrame(top, borderwidth=0, style='FlatFrame') format_frame.pack(side = TOP, expand = 1, fill = X, pady = 4) format_names = map(lambda t: t[0], PapersizesList) format_names.append(self.USER_SPECIFIC) self.var_format_name = StringVar(root) format_menu =TComboSmall(format_frame, format_names, command = self.choose_format, variable = self.var_format_name, width=17) format_menu.configure(width = max(map(len, format_names))) format_menu.pack(side = RIGHT, expand = 1, fill = X) # ===================== size_frame = TFrame(top, borderwidth=0, style='FlatFrame') size_frame.pack(side = TOP, fill = X, expand = 1, padx = 4, pady = 4) label = TLabel(size_frame, text ="H: ", style='FlatLabel') self.widthentry = TSpinbox(size_frame, textvariable = var_width_number, command = self.var_width.UpdateNumber, vartype=1, min = 5, max = 50000, step = 1, width = 7) self.widthentry.pack(side = RIGHT, anchor = E, padx = 5) label.pack(side = RIGHT, anchor = E) size_frame = TFrame(top, borderwidth=0, style='FlatFrame') size_frame.pack(side = TOP, fill = X, expand = 1, padx = 4, pady = 4) label = TLabel(size_frame, text = "V: ", style='FlatLabel') self.heightentry = TSpinbox(size_frame, textvariable =var_height_number, command = self.var_height.UpdateNumber, vartype=1, min = 5, max = 50000, step = 1, width = 7) self.heightentry.pack(side = RIGHT, anchor = E, padx = 5) label.pack(side = RIGHT, anchor = E) size_frame = TFrame(top, borderwidth=0, style='FlatFrame') size_frame.pack(side = TOP, fill = X, expand = 1, padx = 4, pady = 4) def CallBoth(arg, x = self.var_width, y = self.var_height): x.UpdateUnit(arg) y.UpdateUnit(arg) optmenu = create_unit_menu(size_frame, CallBoth, variable = var_width_unit, width = 3) optmenu.pack(side = RIGHT, padx = 5) label = TLabel(size_frame, text = "Units: ", style='FlatLabel') label.pack(side = RIGHT) #--------------------------------------------------------------------------------------------------------------------- middle=TLabelframe(top_root, text='Page orientation') middle.pack(side = TOP, fill=X, pady=2) self.label = TLabel(middle, image = 'portrait', style='FlatLabel') self.label.pack(side = LEFT, padx=4) orientation_frame = TFrame(middle, borderwidth=0, style='FlatFrame') orientation_frame.pack(side = LEFT, expand = 1, fill = X) self.var_orientation = IntVar(root) radio = UpdatedRadiobutton(orientation_frame, text = _("Portrait"), variable = self.var_orientation, value = Portrait, command = self.choose_orientation) radio.pack(side = TOP, anchor=W) radio = UpdatedRadiobutton(orientation_frame, text = _("Landscape"), variable = self.var_orientation, value = Landscape, command = self.choose_orientation) radio.pack(side = TOP, anchor=W) #--------------------------------------------------------------------------------------------------------------------- button_frame = TFrame(top_root, borderwidth=1, style='FlatFrame') button_frame.pack(side = BOTTOM, fill = BOTH, pady=2) button = UpdatedButton(button_frame, text = _("Apply"), command = self.apply_settings, width=15) button.pack(side = BOTTOM) app.mw.docmanager.activedoc.Subscribe(LAYOUT, self.init_from_doc) app.mw.Subscribe(DOCUMENT, self.init_from_doc)
class ScalePanel(PluginPanel): name = 'ScaleAndMirror' title = _("Scale and Mirror") def init(self, master): PluginPanel.init(self, master) self.width_priority = 1 root = self.mw.root self.var_width = DoubleVar(root) self.var_height = DoubleVar(root) unit = '%' jump = 5 self.var_proportional = IntVar(root) self.var_proportional.set(0) self.var_basepoint = StringVar(root) self.var_basepoint.set('C') #--------------------------------------------------------- top = TFrame(self.panel, style='FlatFrame') top.pack(side=TOP, fill=BOTH) #--------------------------------------------------------- # Horisontal size size_frameH = TFrame(top, style='FlatFrame', borderwidth=3) size_frameH.pack(side=TOP, fill=BOTH) label = TLabel(size_frameH, style='FlatLabel', image='size_h') label.pack(side=LEFT, padx=5) self.entry_width = TSpinbox(size_frameH, var=100, vartype=1, textvariable=self.var_width, min=-30000, max=30000, step=jump, width=6, command=self.apply_scale) self.entry_width.pack(side=LEFT) self.entry_width.down_button.bind('<ButtonRelease>', self.entry_width_chang) self.entry_width.down_button.bind('<KeyRelease>', self.entry_width_chang) self.entry_width.up_button.bind('<ButtonRelease>', self.entry_width_chang) self.entry_width.up_button.bind('<KeyRelease>', self.entry_width_chang) self.entry_width.entry.bind('<ButtonRelease>', self.entry_width_chang) self.entry_width.entry.bind('<KeyRelease>', self.entry_width_chang) self.entry_width.entry.bind('<FocusOut>', self.entry_width_chang) self.entry_width.entry.bind('<FocusIn>', self.entry_width_FocusIn) self.labelwunit = TLabel(size_frameH, style='FlatLabel', text=unit) self.labelwunit.pack(side=LEFT, padx=5) self.hflip = BooleanVar(root) self.hflip.set(0) button = TCheckbutton(size_frameH, image="pstrip_hflip", style='ToolBarCheckButton', variable=self.hflip, command=None) button.pack(side=LEFT) #--------------------------------------------------------- # Vertical size_frameV = TFrame(top, style='FlatFrame', borderwidth=3) size_frameV.pack(side=TOP, fill=BOTH) label = TLabel(size_frameV, style='FlatLabel', image='size_v') label.pack(side=LEFT, padx=5) self.entry_height = TSpinbox(size_frameV, var=100, vartype=1, textvariable=self.var_height, min=-30000, max=30000, step=jump, width=6, command=self.apply_scale) self.entry_height.pack(side=LEFT) self.entry_height.down_button.bind('<ButtonRelease>', self.entry_height_chang) self.entry_height.down_button.bind('<KeyRelease>', self.entry_height_chang) self.entry_height.up_button.bind('<ButtonRelease>', self.entry_height_chang) self.entry_height.up_button.bind('<KeyRelease>', self.entry_height_chang) self.entry_height.entry.bind('<ButtonRelease>', self.entry_height_chang) self.entry_height.entry.bind('<KeyRelease>', self.entry_height_chang) self.entry_height.entry.bind('<FocusOut>', self.entry_height_chang) self.entry_height.entry.bind('<FocusIn>', self.entry_height_FocusIn) self.labelhunit = TLabel(size_frameV, style='FlatLabel', text=unit) self.labelhunit.pack(side=LEFT, padx=5) self.vflip = BooleanVar(root) self.vflip.set(0) button = TCheckbutton(size_frameV, image="pstrip_vflip", style='ToolBarCheckButton', variable=self.vflip, command=None) button.pack(side=LEFT) #--------------------------------------------------------- # Proportional chek self.proportional_check = TCheckbutton(top, text=_("Proportional"), variable=self.var_proportional, command=self.proportional) self.proportional_check.pack(side=TOP, anchor=W, padx=5, pady=5) #--------------------------------------------------------- # Basepoint check label = TLabel(top, style='FlatLabel', text=_("Basepoint:")) label.pack(side=TOP, fill=BOTH, padx=5) basepoint_frame = TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=4) basepoint_frame.pack(side=TOP, fill=X, padx=5, pady=2) self.Basepoint = BasePointSelector(basepoint_frame, anchor=self.var_basepoint) self.Basepoint.pack(side=LEFT, fill=BOTH, padx=5) label = TLabel(basepoint_frame, style='FlatLabel', image='coordinate_sys') label.pack(side=LEFT, fill=BOTH, padx=10) #--------------------------------------------------------- # Button frame button_frame = TFrame(top, style='FlatFrame', borderwidth=5) button_frame.pack(side=BOTTOM, fill=BOTH) self.update_buttons = [] self.button = UpdatedButton(top, text=_("Apply"), command=self.apply_scale) self.button.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X, pady=3) self.button_copy = UpdatedButton(top, text=_("Apply to Copy"), command=self.apply_to_copy) self.button_copy.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X) 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, *arg): self.Update() def Update(self, *arg): if self.is_selection(): self.entry_width.set_state(NORMAL) self.entry_height.set_state(NORMAL) self.proportional_check['state'] = NORMAL self.button['state'] = NORMAL self.button_copy['state'] = NORMAL else: self.entry_width.set_state(DISABLED) self.entry_height.set_state(DISABLED) self.proportional_check['state'] = DISABLED self.button['state'] = DISABLED self.button_copy['state'] = DISABLED def entry_width_FocusIn(self, *arg): self.width_priority = 1 def entry_height_FocusIn(self, *arg): self.width_priority = 0 def ScaleSelected(self, h, v, cnt_x=None, cnt_y=None): text = _("Scale") if self.document.selection: self.document.begin_transaction(text) try: try: br = self.document.selection.coord_rect hor_sel = br.right - br.left ver_sel = br.top - br.bottom if cnt_x is None: cnt_x = hor_sel / 2 + br.left if cnt_y is None: cnt_y = ver_sel / 2 + br.bottom trafo = Trafo(h, 0, 0, v, cnt_x - cnt_x * h, cnt_y - cnt_y * v) self.document.TransformSelected(trafo, text) except: self.document.abort_transaction() finally: self.document.end_transaction() def ScaleAndCopy(self, h, v, cnt_x=None, cnt_y=None): text = _("Scale&Copy") if self.document.selection: self.document.begin_transaction(text) try: try: br = self.document.selection.coord_rect hor_sel = br.right - br.left ver_sel = br.top - br.bottom if cnt_x is None: cnt_x = hor_sel / 2 + br.left if cnt_y is None: cnt_y = ver_sel / 2 + br.bottom trafo = Trafo(h, 0, 0, v, cnt_x - cnt_x * h, cnt_y - cnt_y * v) self.document.ApplyToDuplicate() self.document.TransformSelected(trafo, text) except: self.document.abort_transaction() finally: self.document.end_transaction() def entry_height_chang(self, *arg): if self.var_proportional.get(): self.var_width.set(self.var_height.get()) def entry_width_chang(self, *arg): if self.var_proportional.get(): self.var_height.set(self.var_width.get()) def proportional(self): if self.width_priority: self.entry_width_chang() else: self.entry_height_chang() def apply_scale(self, *arg): if self.button["state"] == DISABLED: return self.proportional() width = self.var_width.get() height = self.var_height.get() br = self.document.selection.coord_rect hor_sel = br.right - br.left ver_sel = br.top - br.bottom cnt_x, cnt_y = self.Basepoint.get_basepoint(hor_sel, ver_sel, br.left, br.bottom) h = width / 100 if h == 0: h = 1 if self.hflip.get(): h = -1 * h v = height / 100 if v == 0: v = 1 if self.vflip.get(): v = -1 * v if arg and arg[0] == 'Duplicate': self.ScaleAndCopy(h, v, cnt_x, cnt_y) else: self.ScaleSelected(h, v, cnt_x, cnt_y) def apply_to_copy(self): self.apply_scale('Duplicate') def is_selection(self): return (len(self.document.selection) > 0)
class MovePanel(PluginPanel): name = 'Move' title = _("Move") def init(self, master): PluginPanel.init(self, master) root = self.mw.root self.var_width_number = DoubleVar(root) self.var_height_number = DoubleVar(root) self.var_width_base = DoubleVar(root) self.var_height_base = DoubleVar(root) var_width_unit = StringVar(root) var_height_unit = StringVar(root) unit = config.preferences.default_unit self.var_width = LengthVar(10, unit, self.var_width_number, var_width_unit) self.var_height = LengthVar(10, unit, self.var_height_number, var_height_unit) jump = config.preferences.default_unit_jump self.var_width.set(0) self.var_height.set(0) self.var_width_base.set(0) self.var_height_base.set(0) self.var_position = StringVar(root) self.var_position.set(ABSOLUTE) self.var_basepoint = StringVar(root) self.var_basepoint.set('C') #--------------------------------------------------------- top = TFrame(self.panel, style='FlatFrame') top.pack(side=TOP, fill=BOTH) #--------------------------------------------------------- # Horisontal size size_frameH = TFrame(top, style='FlatFrame', borderwidth=3) size_frameH.pack(side=TOP, fill=BOTH) label = TLabel(size_frameH, style='FlatLabel', image='move_h') label.pack(side=LEFT, padx=5) self.entry_width = TSpinbox(size_frameH, var=0, vartype=1, textvariable=self.var_width_number, min=-50000, max=50000, step=jump, width=10, command=self.apply_move) self.entry_width.pack(side=LEFT) self.labelwunit = TLabel(size_frameH, style='FlatLabel', text=self.var_width.unit) self.labelwunit.pack(side=LEFT, padx=5) #--------------------------------------------------------- # Vertical size_frameV = TFrame(top, style='FlatFrame', borderwidth=3) size_frameV.pack(side=TOP, fill=BOTH) label = TLabel(size_frameV, style='FlatLabel', image='move_v') label.pack(side=LEFT, padx=5) self.entry_height = TSpinbox(size_frameV, var=0, vartype=1, textvariable=self.var_height_number, min=-50000, max=50000, step=jump, width=10, command=self.apply_move) self.entry_height.pack(side=LEFT) self.labelhunit = TLabel(size_frameV, style='FlatLabel', text=self.var_height.unit) self.labelhunit.pack(side=LEFT, padx=5) #--------------------------------------------------------- # position chek self.position_check = TCheckbutton(top, text=_("Absolute Coordinates"), variable=self.var_position, onvalue=ABSOLUTE, offvalue=RELATIVE, command=self.position) self.position_check.pack(side=TOP, anchor=W, padx=5, pady=5) #--------------------------------------------------------- # Basepoint check label = TLabel(top, style='FlatLabel', text=_("Basepoint:")) label.pack(side=TOP, fill=BOTH, padx=5) basepoint_frame = TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=4) basepoint_frame.pack(side=TOP, fill=X, padx=5, pady=2) self.Basepoint = BasePointSelector(basepoint_frame, anchor=self.var_basepoint, command=self.apply_basepoint) self.Basepoint.pack(side=LEFT, fill=BOTH, padx=5) label = TLabel(basepoint_frame, style='FlatLabel', image='coordinate_sys') label.pack(side=LEFT, fill=BOTH, padx=10) #--------------------------------------------------------- # Button frame button_frame = TFrame(top, style='FlatFrame', borderwidth=5) button_frame.pack(side=BOTTOM, fill=BOTH) self.update_buttons = [] self.button = UpdatedButton(top, text=_("Apply"), command=self.apply_move) self.button.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X, pady=3) self.button_copy = UpdatedButton(top, text=_("Apply to Copy"), command=self.apply_to_copy) self.button_copy.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X) self.init_from_doc() self.subscribe_receivers() ############################################################################### def subscribe_receivers(self): self.document.Subscribe(SELECTION, self.Update) self.document.Subscribe(EDITED, self.update_var) config.preferences.Subscribe(CHANGED, self.update_pref) def unsubscribe_receivers(self): self.document.Unsubscribe(SELECTION, self.Update) self.document.Unsubscribe(EDITED, self.update_var) config.preferences.Unsubscribe(CHANGED, self.update_pref) def init_from_doc(self, *arg): self.Update() def Update(self, *arg): if self.is_selection(): self.entry_width.set_state(NORMAL) self.entry_height.set_state(NORMAL) self.position_check['state'] = NORMAL self.button['state'] = NORMAL self.button_copy['state'] = NORMAL else: self.entry_width.set_state(DISABLED) self.entry_height.set_state(DISABLED) self.position_check['state'] = DISABLED self.button['state'] = DISABLED self.button_copy['state'] = DISABLED self.update_pref() def apply_basepoint(self): self.Update() def position(self): if self.var_position.get() == ABSOLUTE and self.var_basepoint.get( ) == 'USER': self.var_basepoint.set('C') self.update_var() def apply_move(self, *arg): if self.button["state"] == DISABLED: return try: var_x = self.var_width.get() var_y = self.var_height.get() except: return x, y = self.coordinates(self.var_position.get()) if self.var_position.get() == RELATIVE: if self.var_width_base != self.var_width.get( ) or self.var_height_base != self.var_height.get(): self.var_basepoint.set('USER') x, y = var_x, var_y else: x, y = var_x - x, var_y - y if arg and arg[0] == 'Duplicate': self.document.MoveAndCopy(x, y, Point(0, 0)) else: self.document.MoveSelected(x, y) def apply_to_copy(self): self.apply_move('Duplicate') def coordinates(self, position): br = self.document.selection.coord_rect hor_sel = br.right - br.left ver_sel = br.top - br.bottom if position == RELATIVE: left, bottom = -hor_sel / 2, -ver_sel / 2 else: left, bottom = br.left, br.bottom cnt_x, cnt_y = self.Basepoint.get_basepoint(hor_sel, ver_sel, left, bottom) if position == RELATIVE and cnt_x != None: return cnt_x * 2, cnt_y * 2 else: return cnt_x, cnt_y def update_pref(self, *arg): self.labelwunit['text'] = config.preferences.default_unit self.labelhunit['text'] = config.preferences.default_unit self.entry_width.step = config.preferences.default_unit_jump self.entry_height.step = config.preferences.default_unit_jump self.update_var() def update_var(self, *arg): if len(self.document.selection.GetInfo()): if self.var_basepoint.get() == 'USER': x = self.var_width.get() y = self.var_height.get() self.var_width.unit = config.preferences.default_unit self.var_height.unit = config.preferences.default_unit self.var_width.set(x) self.var_height.set(y) else: self.var_width.unit = config.preferences.default_unit self.var_height.unit = config.preferences.default_unit x, y = self.coordinates(self.var_position.get()) self.var_width.set(x) self.var_height.set(y) self.var_width_base = self.var_width.get() self.var_height_base = self.var_height.get() def is_selection(self): return (len(self.document.selection) > 0)
def init(self, master): PluginPanel.init(self, master) self.width_priority = 1 root = self.mw.root self.var_angleX = DoubleVar(root) self.var_angleY = DoubleVar(root) jump = 5 self.var_angleX.set(0) self.var_angleY.set(0) self.var_proportional = IntVar(root) self.var_proportional.set(0) self.var_basepoint = StringVar(root) self.var_basepoint.set('C') #--------------------------------------------------------- top = TFrame(self.panel, style='FlatFrame') top.pack(side=TOP, fill=BOTH) #--------------------------------------------------------- # Horisontal size_frameH = TFrame(top, style='FlatFrame', borderwidth=3) size_frameH.pack(side=TOP, fill=BOTH) label = TLabel(size_frameH, style='FlatLabel', image='skew_h') label.pack(side=LEFT, padx=5) self.entry_angleX = TSpinbox(size_frameH, var=0, vartype=1, textvariable=self.var_angleX, min=-75, max=75, step=jump, width=10, command=self.apply_skew) self.entry_angleX.pack(side=LEFT) self.labelwunit = TLabel(size_frameH, style='FlatLabel', text=_("deg")) self.labelwunit.pack(side=LEFT, padx=5) #--------------------------------------------------------- # Vertical size_frameV = TFrame(top, style='FlatFrame', borderwidth=3) size_frameV.pack(side=TOP, fill=BOTH) label = TLabel(size_frameV, style='FlatLabel', image='skew_v') label.pack(side=LEFT, padx=5) self.entry_angleY = TSpinbox(size_frameV, var=0, vartype=1, textvariable=self.var_angleY, min=-75, max=75, step=jump, width=10, command=self.apply_skew) self.entry_angleY.pack(side=LEFT) self.labelhunit = TLabel(size_frameV, style='FlatLabel', text=_("deg")) self.labelhunit.pack(side=LEFT, padx=5) #--------------------------------------------------------- # Basepoint check label = TLabel(top, style='FlatLabel', text=_("Basepoint:")) label.pack(side=TOP, fill=BOTH, padx=5) basepoint_frame = TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=4) basepoint_frame.pack(side=TOP, fill=X, padx=5, pady=2) self.Basepoint = BasePointSelector(basepoint_frame, anchor=self.var_basepoint) self.Basepoint.pack(side=LEFT, fill=BOTH, padx=5) label = TLabel(basepoint_frame, style='FlatLabel', image='coordinate_deg') label.pack(side=LEFT, fill=BOTH, padx=10) #--------------------------------------------------------- # Button frame button_frame = TFrame(top, style='FlatFrame', borderwidth=5) button_frame.pack(side=BOTTOM, fill=BOTH) self.update_buttons = [] self.button = UpdatedButton(top, text=_("Apply"), command=self.apply_skew) self.button.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X, pady=3) self.button_copy = UpdatedButton(top, text=_("Apply to Copy"), command=self.apply_to_copy) self.button_copy.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X) self.init_from_doc() self.subscribe_receivers()
def init(self, master): PluginPanel.init(self, master) self.width_priority=1 root=self.mw.root self.var_width_number=DoubleVar(root) self.var_height_number=DoubleVar(root) var_width_unit = StringVar(root) var_height_unit = StringVar(root) unit = config.preferences.default_unit self.var_width = LengthVar(10, unit, self.var_width_number, var_width_unit) self.var_height = LengthVar(10, unit,self.var_height_number,var_height_unit) jump=config.preferences.default_unit_jump self.var_width.set(0) self.var_height.set(0) self.var_proportional = IntVar(root) self.var_proportional.set(0) self.var_basepoint = StringVar(root) self.var_basepoint.set('C') #--------------------------------------------------------- top = TFrame(self.panel, style='FlatFrame') top.pack(side = TOP, fill=BOTH) #--------------------------------------------------------- # Horisontal size size_frameH = TFrame(top, style='FlatFrame', borderwidth=3) size_frameH.pack(side = TOP, fill = BOTH) label = TLabel(size_frameH, style='FlatLabel', image='size_h') label.pack(side = LEFT, padx=5) self.entry_width = TSpinbox(size_frameH, var=0, vartype=1, textvariable = self.var_width_number, min = 0, max = 50000, step = jump, width = 10, command=self.apply_resize) self.entry_width.pack(side = LEFT) self.entry_width.down_button.bind('<ButtonRelease>', self.entry_width_chang) self.entry_width.down_button.bind('<KeyRelease>', self.entry_width_chang) self.entry_width.up_button.bind('<ButtonRelease>', self.entry_width_chang) self.entry_width.up_button.bind('<KeyRelease>', self.entry_width_chang) self.entry_width.entry.bind('<ButtonRelease>', self.entry_width_chang) self.entry_width.entry.bind('<KeyRelease>', self.entry_width_chang) self.entry_width.entry.bind('<FocusOut>', self.entry_width_chang) self.entry_width.entry.bind('<FocusIn>', self.entry_width_FocusIn) self.labelwunit = TLabel(size_frameH, style='FlatLabel', text = self.var_width.unit) self.labelwunit.pack(side = LEFT, padx=5) #--------------------------------------------------------- # Vertical size_frameV = TFrame(top, style='FlatFrame', borderwidth=3) size_frameV.pack(side = TOP, fill = BOTH) label = TLabel(size_frameV, style='FlatLabel', image='size_v') label.pack(side = LEFT, padx=5) self.entry_height = TSpinbox(size_frameV, var=0, vartype=1, textvariable = self.var_height_number, min = 0, max = 50000, step = jump, width = 10, command=self.apply_resize) self.entry_height.pack(side = LEFT) self.entry_height.down_button.bind('<ButtonRelease>', self.entry_height_chang) self.entry_height.down_button.bind('<KeyRelease>', self.entry_height_chang) self.entry_height.up_button.bind('<ButtonRelease>', self.entry_height_chang) self.entry_height.up_button.bind('<KeyRelease>', self.entry_height_chang) self.entry_height.entry.bind('<ButtonRelease>', self.entry_height_chang) self.entry_height.entry.bind('<KeyRelease>', self.entry_height_chang) self.entry_height.entry.bind('<FocusOut>', self.entry_height_chang) self.entry_height.entry.bind('<FocusIn>', self.entry_height_FocusIn) self.labelhunit = TLabel(size_frameV, style='FlatLabel', text = self.var_height.unit) self.labelhunit.pack(side = LEFT, padx=5) #--------------------------------------------------------- # Proportional chek self.proportional_check = TCheckbutton(top, text = _("Proportional"), variable = self.var_proportional, command = self.proportional) self.proportional_check.pack(side = TOP, anchor=W, padx=5,pady=5) #--------------------------------------------------------- # Basepoint check label = TLabel(top, style='FlatLabel', text = _("Basepoint:")) label.pack(side = TOP, fill = BOTH, padx=5) basepoint_frame=TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=4) basepoint_frame.pack(side = TOP, fill=X, padx=5, pady=2) self.Basepoint = BasePointSelector(basepoint_frame, anchor=self.var_basepoint) self.Basepoint.pack(side = LEFT, fill = BOTH, padx=5) label = TLabel(basepoint_frame, style='FlatLabel', image = 'coordinate_sys') label.pack(side = LEFT, fill = BOTH, padx=10) #--------------------------------------------------------- # Button frame button_frame = TFrame(top, style='FlatFrame', borderwidth=5) button_frame.pack(side = BOTTOM, fill = BOTH) self.update_buttons = [] self.button = UpdatedButton(top, text = _("Apply"), command = self.apply_resize) self.button.pack(in_ = button_frame, side = BOTTOM, expand = 1, fill = X, pady=3) self.button_copy = UpdatedButton(top, text = _("Apply to Copy"), command = self.apply_to_copy) self.button_copy.pack(in_ = button_frame, side = BOTTOM, expand = 1, fill = X) self.subscribe_receivers() self.Update()
def init(self, master): PluginPanel.init(self, master) root = self.mw.root top = TFrame(self.panel, style='FlatFrame', borderwidth=5) top.pack(side=TOP, fill=BOTH) ########### APPLY BUTTON ################################################ button = UpdatedButton(top, text=_("Apply"), command=self.apply_properties, sensitivecb=self.is_correct_selection) button.pack(side=BOTTOM, expand=1, fill=X) self.Subscribe(SELECTION, button.Update) ########### COLOR BUTTON ################################################ color_frame = TFrame(top, style='FlatFrame', borderwidth=3) color_frame.pack(side=TOP) label = TLabel(color_frame, style='FlatLabel', text=_('Color:')) label.pack(side=LEFT, padx=5) self.color_button = TColorButton(color_frame, command=self.show_outline_color) self.color_button.pack(side=LEFT, padx=5) self.color_button.set_color((255, 0, 0)) ########### LINE WIDTH ################################################## self.var_width_number = DoubleVar(root) self.var_width_base = DoubleVar(root) var_width_unit = StringVar(root) unit = config.preferences.default_unit self.var_width = LengthVar(10, unit, self.var_width_number, var_width_unit) line_width_frame = TFrame(top, style='FlatFrame', borderwidth=3) line_width_frame.pack(side=TOP, fill=BOTH) self.labelwunit = TLabel(line_width_frame, style='FlatLabel', text=self.var_width.unit) self.labelwunit.pack(side=RIGHT, padx=5) self.entry_width = TSpinbox(line_width_frame, var=0, vartype=1, textvariable=self.var_width_number, min=0, max=50000, step=.1, width=8, command=self.update_pattern) self.entry_width.pack(side=RIGHT) label = TLabel(line_width_frame, style='FlatLabel', text=_('Line width:')) label.pack(side=RIGHT, padx=5) ########### LINE STYLE ################################################# style_frame = TFrame(top, style='FlatFrame', borderwidth=5) style_frame.pack(side=TOP, fill=X) for item in range(1, 12): self.dashlist.append("dash%d" % (item)) self.style_button = TOptionMenu(style_frame, self.dashlist, command=self.set_dash, entry_type='image', style='TComboSmall') self.style_button.pack(side=RIGHT, fill=X) label = TLabel(style_frame, style='FlatLabel', text=_('Style:')) label.pack(side=RIGHT, padx=5) ######################################################################## selection_frame = TFrame(top, style='FlatFrame', borderwidth=1) selection_frame.pack(side=TOP) ########### CORNERS ##################################################### label = TLabel(selection_frame, text=" " + _("Corners:") + " ", style="FlatLabel") label.pack() corners_frame = TLabelframe(selection_frame, labelwidget=label, style='Labelframe', borderwidth=8) corners_frame.pack(side=LEFT, fill=Y, pady=1, padx=1) self.var_corner = IntVar(root) radio = UpdatedRadiobutton(corners_frame, image="join_miter", variable=self.var_corner, value=const.JoinMiter, command=self.update_pattern) radio.pack(side=TOP, anchor=W, pady=2) radio = UpdatedRadiobutton(corners_frame, image="join_round", variable=self.var_corner, value=const.JoinRound, command=self.update_pattern) radio.pack(side=TOP, anchor=W, pady=2) radio = UpdatedRadiobutton(corners_frame, image="join_bevel", variable=self.var_corner, value=const.JoinBevel, command=self.update_pattern) radio.pack(side=TOP, anchor=W, pady=2) ########### LINE CAPS ################################################### label = TLabel(selection_frame, text=" " + _("Line caps:") + " ", style="FlatLabel") label.pack() caps_frame = TLabelframe(selection_frame, labelwidget=label, style='Labelframe', borderwidth=8) caps_frame.pack(side=RIGHT, fill=Y, pady=1, padx=1) self.var_caps = IntVar(root) radio = UpdatedRadiobutton(caps_frame, image="cap_butt", variable=self.var_caps, value=const.CapButt, command=self.update_pattern) radio.pack(side=TOP, anchor=W, pady=2) radio = UpdatedRadiobutton(caps_frame, image="cap_round", variable=self.var_caps, value=const.CapRound, command=self.update_pattern) radio.pack(side=TOP, anchor=W, pady=2) radio = UpdatedRadiobutton(caps_frame, image="cap_projecting", variable=self.var_caps, value=const.CapProjecting, command=self.update_pattern) radio.pack(side=TOP, anchor=W, pady=2) self.var_caps.set(0) ############ BOTTOM BUTTONS ############################################# button_frame = TFrame(top, style='FlatFrame', borderwidth=1) button_frame.pack(side=BOTTOM, fill=X, pady=5) button = TButton(button_frame, style='TSmallbutton', text=' ', image='small_colorpicker', command=self.copy_from) button.pack(side=LEFT) tooltips.AddDescription(button, _("Copy From...")) button = TButton(button_frame, style='TSmallbutton', text=' ', image='restore_color', command=self.restore_properties) button.pack(side=LEFT, padx=5) tooltips.AddDescription(button, _("Restore properties")) self.var_autoupdate = IntVar(top) self.var_autoupdate.set(1) self.autoupdate_check = TCheckbutton(button_frame, text=_("Auto Update"), variable=self.var_autoupdate, command=self.init_from_doc) self.autoupdate_check.pack(side=RIGHT, anchor=W, padx=10) ####################################################################### self.set_default_style() self.init_from_doc() self.subscribe_receivers()
def init(self, master): PluginPanel.init(self, master) root=self.mw.root top = TFrame(self.panel, style='FlatFrame', borderwidth=5) top.pack(side = TOP, fill=BOTH) ########### APPLY BUTTON ################################################ button = UpdatedButton(top, text = _("Apply"), command = self.apply_properties, sensitivecb = self.is_correct_selection) button.pack(side = BOTTOM, expand = 1, fill = X) self.Subscribe(SELECTION, button.Update) ########### COLOR BUTTON ################################################ color_frame = TFrame(top, style='FlatFrame', borderwidth=3) color_frame.pack(side = TOP) label = TLabel(color_frame, style='FlatLabel', text=_('Color:')) label.pack(side = LEFT, padx=5) self.color_button = TColorButton(color_frame, command=self.show_outline_color) self.color_button.pack(side = LEFT, padx=5) self.color_button.set_color((255,0,0)) ########### LINE WIDTH ################################################## self.var_width_number=DoubleVar(root) self.var_width_base=DoubleVar(root) var_width_unit = StringVar(root) unit = config.preferences.default_unit self.var_width = LengthVar(10, unit, self.var_width_number, var_width_unit) line_width_frame = TFrame(top, style='FlatFrame', borderwidth=3) line_width_frame.pack(side = TOP, fill = BOTH) self.labelwunit = TLabel(line_width_frame, style='FlatLabel', text = self.var_width.unit) self.labelwunit.pack(side = RIGHT, padx=5) self.entry_width = TSpinbox(line_width_frame, var=0, vartype=1, textvariable = self.var_width_number, min = 0, max = 50000, step = .1, width = 8, command=self.update_pattern) self.entry_width.pack(side = RIGHT) label = TLabel(line_width_frame, style='FlatLabel', text=_('Line width:')) label.pack(side = RIGHT, padx=5) ########### LINE STYLE ################################################# style_frame = TFrame(top, style='FlatFrame', borderwidth=5) style_frame.pack(side = TOP, fill=X) for item in range(1,12): self.dashlist.append("dash%d"%(item)) self.style_button = TOptionMenu(style_frame, self.dashlist, command = self.set_dash, entry_type = 'image', style='TComboSmall') self.style_button.pack(side = RIGHT, fill=X) label = TLabel(style_frame, style='FlatLabel', text=_('Style:')) label.pack(side = RIGHT, padx=5) ######################################################################## selection_frame = TFrame(top, style='FlatFrame', borderwidth=1) selection_frame.pack(side = TOP) ########### CORNERS ##################################################### label=TLabel(selection_frame, text=" "+_("Corners:")+" ", style="FlatLabel") label.pack() corners_frame=TLabelframe(selection_frame, labelwidget=label, style='Labelframe', borderwidth=8) corners_frame.pack(side = LEFT, fill=Y, pady=1, padx=1) self.var_corner = IntVar(root) radio = UpdatedRadiobutton(corners_frame, image = "join_miter", variable = self.var_corner, value = const.JoinMiter, command = self.update_pattern) radio.pack(side = TOP, anchor=W, pady=2) radio = UpdatedRadiobutton(corners_frame, image = "join_round", variable = self.var_corner, value = const.JoinRound, command = self.update_pattern) radio.pack(side = TOP, anchor=W, pady=2) radio = UpdatedRadiobutton(corners_frame, image = "join_bevel", variable = self.var_corner, value = const.JoinBevel, command = self.update_pattern) radio.pack(side = TOP, anchor=W, pady=2) ########### LINE CAPS ################################################### label=TLabel(selection_frame, text=" "+_("Line caps:")+" ", style="FlatLabel") label.pack() caps_frame=TLabelframe(selection_frame, labelwidget=label, style='Labelframe', borderwidth=8) caps_frame.pack(side = RIGHT, fill=Y, pady=1, padx=1) self.var_caps = IntVar(root) radio = UpdatedRadiobutton(caps_frame, image = "cap_butt", variable = self.var_caps, value = const.CapButt, command = self.update_pattern) radio.pack(side = TOP, anchor=W, pady=2) radio = UpdatedRadiobutton(caps_frame, image = "cap_round", variable = self.var_caps, value = const.CapRound, command = self.update_pattern) radio.pack(side = TOP, anchor=W, pady=2) radio = UpdatedRadiobutton(caps_frame, image = "cap_projecting", variable = self.var_caps, value = const.CapProjecting, command = self.update_pattern) radio.pack(side = TOP, anchor=W, pady=2) self.var_caps.set(0) ############ BOTTOM BUTTONS ############################################# button_frame = TFrame(top, style='FlatFrame', borderwidth=1) button_frame.pack(side = BOTTOM, fill=X, pady=5) button = TButton(button_frame, style='TSmallbutton', text=' ', image='small_colorpicker', command = self.copy_from) button.pack(side = LEFT) tooltips.AddDescription(button, _("Copy From...")) button = TButton(button_frame, style='TSmallbutton', text=' ', image='restore_color', command = self.restore_properties) button.pack(side = LEFT, padx=5) tooltips.AddDescription(button, _("Restore properties")) self.var_autoupdate = IntVar(top) self.var_autoupdate.set(1) self.autoupdate_check = TCheckbutton(button_frame, text = _("Auto Update"), variable = self.var_autoupdate, command=self.init_from_doc) self.autoupdate_check.pack(side = RIGHT, anchor=W, padx=10) ####################################################################### self.set_default_style() self.init_from_doc() self.subscribe_receivers()
class RotatePanel(PluginPanel): name = 'Rotate' title = _("Rotate") def init(self, master): PluginPanel.init(self, master) root = self.mw.root self.var_angle = DoubleVar(root) self.var_angle.set(0) self.var_width_number = DoubleVar(root) self.var_height_number = DoubleVar(root) self.var_width_base = DoubleVar(root) self.var_height_base = DoubleVar(root) self.cnt_x_absolute = None self.cnt_y_absolute = None var_width_unit = StringVar(root) var_height_unit = StringVar(root) unit = config.preferences.default_unit self.var_width = LengthVar(10, unit, self.var_width_number, var_width_unit) self.var_height = LengthVar(10, unit, self.var_height_number, var_height_unit) jump = config.preferences.default_unit_jump self.var_width.set(0) self.var_height.set(0) self.var_width_base.set(0) self.var_height_base.set(0) self.var_position = StringVar(root) self.var_position.set(ABSOLUTE) self.var_basepoint = StringVar(root) self.var_basepoint.set('C') #--------------------------------------------------------- top = TFrame(self.panel, style='FlatFrame') top.pack(side=TOP, fill=BOTH) #--------------------------------------------------------- angle_frame = TFrame(top, style='FlatFrame', borderwidth=3) angle_frame.pack(side=TOP, fill=BOTH) label = TLabel(angle_frame, style='FlatLabel', text=" " + _("Angle:") + " ") label.pack(side=LEFT, padx=5) self.entry_angle = TSpinbox(angle_frame, var=0, vartype=1, textvariable=self.var_angle, min=-360, max=360, step=5, width=6, command=self.apply_rotate) self.entry_angle.pack(side=LEFT, anchor=E) label = TLabel(angle_frame, style='FlatLabel', text=_("deg")) label.pack(side=LEFT, padx=5) #--------------------------------------------------------- label = TLabel(top, style='FlatLabel', text=_("Center:")) label.pack(side=TOP, fill=BOTH, padx=5) #--------------------------------------------------------- # Horisontal size_frameH = TFrame(top, style='FlatFrame', borderwidth=3) size_frameH.pack(side=TOP, fill=BOTH) label = TLabel(size_frameH, style='FlatLabel', image='center_h') label.pack(side=LEFT, padx=5) self.entry_width = TSpinbox(size_frameH, var=0, vartype=1, textvariable=self.var_width_number, min=-50000, max=50000, step=jump, width=10, command=self.apply_rotate) self.entry_width.pack(side=LEFT) self.labelwunit = TLabel(size_frameH, style='FlatLabel', text=self.var_width.unit) self.labelwunit.pack(side=LEFT, padx=5) #--------------------------------------------------------- # Vertical size_frameV = TFrame(top, style='FlatFrame', borderwidth=3) size_frameV.pack(side=TOP, fill=BOTH) label = TLabel(size_frameV, style='FlatLabel', image='center_v') label.pack(side=LEFT, padx=5) self.entry_height = TSpinbox(size_frameV, var=0, vartype=1, textvariable=self.var_height_number, min=-50000, max=50000, step=jump, width=10, command=self.apply_rotate) self.entry_height.pack(side=LEFT) self.labelhunit = TLabel(size_frameV, style='FlatLabel', text=self.var_height.unit) self.labelhunit.pack(side=LEFT, padx=5) #--------------------------------------------------------- # position chek self.position_check = TCheckbutton(top, text=_("Absolute Center"), variable=self.var_position, onvalue=ABSOLUTE, offvalue=RELATIVE, command=self.position) self.position_check.pack(side=TOP, anchor=W, padx=5, pady=5) #--------------------------------------------------------- # Basepoint check label = TLabel(top, style='FlatLabel', text=_("Basepoint:")) label.pack(side=TOP, fill=BOTH, padx=5) basepoint_frame = TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=4) basepoint_frame.pack(side=TOP, fill=X, padx=5, pady=2) self.Basepoint = BasePointSelector(basepoint_frame, anchor=self.var_basepoint, command=self.apply_basepoint) self.Basepoint.pack(side=LEFT, fill=BOTH, padx=5) label = TLabel(basepoint_frame, style='FlatLabel', image='coordinate_deg') label.pack(side=LEFT, fill=BOTH, padx=10) self.position_check.pack(side=TOP, anchor=W, padx=5, pady=5) #--------------------------------------------------------- # Button frame button_frame = TFrame(top, style='FlatFrame', borderwidth=5) button_frame.pack(side=BOTTOM, fill=BOTH) self.update_buttons = [] self.button = UpdatedButton(top, text=_("Apply"), command=self.apply_rotate) self.button.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X, pady=3) self.button_copy = UpdatedButton(top, text=_("Apply to Copy"), command=self.apply_to_copy) self.button_copy.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X) self.init_from_doc() self.subscribe_receivers() ############################################################################### def subscribe_receivers(self): self.document.Subscribe(SELECTION, self.Update) self.document.Subscribe(EDITED, self.update_var) config.preferences.Subscribe(CHANGED, self.update_pref) def unsubscribe_receivers(self): self.document.Unsubscribe(SELECTION, self.Update) self.document.Unsubscribe(EDITED, self.update_var) config.preferences.Unsubscribe(CHANGED, self.update_pref) def init_from_doc(self, *arg): self.Update() def Update(self, *arg): if self.is_selection(): self.entry_angle.set_state(NORMAL) self.entry_width.set_state(NORMAL) self.entry_height.set_state(NORMAL) self.position_check['state'] = NORMAL self.button['state'] = NORMAL self.button_copy['state'] = NORMAL self.TestBasepoint() else: self.entry_angle.set_state(DISABLED) self.entry_width.set_state(DISABLED) self.entry_height.set_state(DISABLED) self.position_check['state'] = DISABLED self.button['state'] = DISABLED self.button_copy['state'] = DISABLED self.update_pref() def apply_basepoint(self): self.update_var() def position(self): self.update_var() def RotateSelected(self, angle, cnt=None): text = _("Rotation") if self.document.selection: self.document.begin_transaction(text) try: try: if cnt is None: cnt = self.document.selection.coord_rect.center() angle = angle * degrees trafo = Rotation(angle, cnt) self.document.TransformSelected(trafo, text) except: self.document.abort_transaction() finally: self.document.end_transaction() def RotateAndCopy(self, angle, cnt=None): text = _("Rotation&Copy") if self.document.selection: self.document.begin_transaction(text) try: try: if cnt is None: cnt = self.document.selection.coord_rect.center() angle = angle * degrees trafo = Rotation(angle, cnt) self.document.ApplyToDuplicate() self.document.TransformSelected(trafo, text) except: self.document.abort_transaction() finally: self.document.end_transaction() def apply_rotate(self, *arg): if self.button["state"] == DISABLED: return try: var_x = self.var_width.get() var_y = self.var_height.get() var_a = self.var_angle.get() except: return if var_a < 0: if var_a < -360: var_a += int(var_a / 360) * 360 var_a += 360 if self.var_basepoint.get() != 'USER': self.cnt_x_absolute, self.cnt_y_absolute = self.coordinates( ABSOLUTE) self.var_basepoint.set('USER') if self.var_width_base != var_x or self.var_height_base != var_y: if self.var_position.get() == ABSOLUTE: self.cnt_x_absolute = var_x self.cnt_y_absolute = var_y else: x, y = self.coordinates(ABSOLUTE, 'C') self.cnt_x_absolute = var_x + x self.cnt_y_absolute = var_y + y self.var_basepoint.set('USER') if arg and arg[0] == 'Duplicate': self.RotateAndCopy(var_a, Point(self.cnt_x_absolute, self.cnt_y_absolute)) else: self.RotateSelected( var_a, Point(self.cnt_x_absolute, self.cnt_y_absolute)) def apply_to_copy(self): self.apply_rotate('Duplicate') def coordinates(self, position, anchor=None): br = self.document.selection.coord_rect hor_sel = br.right - br.left ver_sel = br.top - br.bottom if position == RELATIVE: left, bottom = -hor_sel / 2.0, -ver_sel / 2.0 else: left, bottom = br.left, br.bottom cnt_x, cnt_y = self.Basepoint.get_basepoint(hor_sel, ver_sel, left, bottom, anchor) return cnt_x, cnt_y def TestBasepoint(self): if self.cnt_x_absolute is None: return base = ['C', 'NW', 'N', 'NE', 'W', 'E', 'SW', 'S', 'SE'] for b in xrange(len(base)): cnt_x, cnt_y = self.coordinates(ABSOLUTE, base[b]) if round(cnt_x,2) == round(self.cnt_x_absolute,2) and \ round(cnt_y,2) == round(self.cnt_y_absolute,2): self.var_basepoint.set(base[b]) return self.var_basepoint.set('USER') def update_pref(self, *arg): self.labelwunit['text'] = config.preferences.default_unit self.labelhunit['text'] = config.preferences.default_unit self.entry_width.step = config.preferences.default_unit_jump self.entry_height.step = config.preferences.default_unit_jump self.update_var() def update_var(self, *arg): if len(self.document.selection.GetInfo()): self.var_width.unit = config.preferences.default_unit self.var_height.unit = config.preferences.default_unit if self.var_basepoint.get() == 'USER': if self.var_position.get() == ABSOLUTE: self.var_width.set(self.cnt_x_absolute) self.var_height.set(self.cnt_y_absolute) else: x, y = self.coordinates(ABSOLUTE, 'C') self.var_width.set(self.cnt_x_absolute - x) self.var_height.set(self.cnt_y_absolute - y) else: x, y = self.coordinates(self.var_position.get()) self.var_width.set(x) self.var_height.set(y) self.var_width_base = self.var_width.get() self.var_height_base = self.var_height.get() def is_selection(self): return (len(self.document.selection) > 0)
def init(self, master): PluginPanel.init(self, master) root = self.mw.root self.var_angle = DoubleVar(root) self.var_angle.set(0) self.var_width_number = DoubleVar(root) self.var_height_number = DoubleVar(root) self.var_width_base = DoubleVar(root) self.var_height_base = DoubleVar(root) self.cnt_x_absolute = None self.cnt_y_absolute = None var_width_unit = StringVar(root) var_height_unit = StringVar(root) unit = config.preferences.default_unit self.var_width = LengthVar(10, unit, self.var_width_number, var_width_unit) self.var_height = LengthVar(10, unit, self.var_height_number, var_height_unit) jump = config.preferences.default_unit_jump self.var_width.set(0) self.var_height.set(0) self.var_width_base.set(0) self.var_height_base.set(0) self.var_position = StringVar(root) self.var_position.set(ABSOLUTE) self.var_basepoint = StringVar(root) self.var_basepoint.set('C') #--------------------------------------------------------- top = TFrame(self.panel, style='FlatFrame') top.pack(side=TOP, fill=BOTH) #--------------------------------------------------------- angle_frame = TFrame(top, style='FlatFrame', borderwidth=3) angle_frame.pack(side=TOP, fill=BOTH) label = TLabel(angle_frame, style='FlatLabel', text=" " + _("Angle:") + " ") label.pack(side=LEFT, padx=5) self.entry_angle = TSpinbox(angle_frame, var=0, vartype=1, textvariable=self.var_angle, min=-360, max=360, step=5, width=6, command=self.apply_rotate) self.entry_angle.pack(side=LEFT, anchor=E) label = TLabel(angle_frame, style='FlatLabel', text=_("deg")) label.pack(side=LEFT, padx=5) #--------------------------------------------------------- label = TLabel(top, style='FlatLabel', text=_("Center:")) label.pack(side=TOP, fill=BOTH, padx=5) #--------------------------------------------------------- # Horisontal size_frameH = TFrame(top, style='FlatFrame', borderwidth=3) size_frameH.pack(side=TOP, fill=BOTH) label = TLabel(size_frameH, style='FlatLabel', image='center_h') label.pack(side=LEFT, padx=5) self.entry_width = TSpinbox(size_frameH, var=0, vartype=1, textvariable=self.var_width_number, min=-50000, max=50000, step=jump, width=10, command=self.apply_rotate) self.entry_width.pack(side=LEFT) self.labelwunit = TLabel(size_frameH, style='FlatLabel', text=self.var_width.unit) self.labelwunit.pack(side=LEFT, padx=5) #--------------------------------------------------------- # Vertical size_frameV = TFrame(top, style='FlatFrame', borderwidth=3) size_frameV.pack(side=TOP, fill=BOTH) label = TLabel(size_frameV, style='FlatLabel', image='center_v') label.pack(side=LEFT, padx=5) self.entry_height = TSpinbox(size_frameV, var=0, vartype=1, textvariable=self.var_height_number, min=-50000, max=50000, step=jump, width=10, command=self.apply_rotate) self.entry_height.pack(side=LEFT) self.labelhunit = TLabel(size_frameV, style='FlatLabel', text=self.var_height.unit) self.labelhunit.pack(side=LEFT, padx=5) #--------------------------------------------------------- # position chek self.position_check = TCheckbutton(top, text=_("Absolute Center"), variable=self.var_position, onvalue=ABSOLUTE, offvalue=RELATIVE, command=self.position) self.position_check.pack(side=TOP, anchor=W, padx=5, pady=5) #--------------------------------------------------------- # Basepoint check label = TLabel(top, style='FlatLabel', text=_("Basepoint:")) label.pack(side=TOP, fill=BOTH, padx=5) basepoint_frame = TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=4) basepoint_frame.pack(side=TOP, fill=X, padx=5, pady=2) self.Basepoint = BasePointSelector(basepoint_frame, anchor=self.var_basepoint, command=self.apply_basepoint) self.Basepoint.pack(side=LEFT, fill=BOTH, padx=5) label = TLabel(basepoint_frame, style='FlatLabel', image='coordinate_deg') label.pack(side=LEFT, fill=BOTH, padx=10) self.position_check.pack(side=TOP, anchor=W, padx=5, pady=5) #--------------------------------------------------------- # Button frame button_frame = TFrame(top, style='FlatFrame', borderwidth=5) button_frame.pack(side=BOTTOM, fill=BOTH) self.update_buttons = [] self.button = UpdatedButton(top, text=_("Apply"), command=self.apply_rotate) self.button.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X, pady=3) self.button_copy = UpdatedButton(top, text=_("Apply to Copy"), command=self.apply_to_copy) self.button_copy.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X) self.init_from_doc() self.subscribe_receivers()
def init(self, master): PluginPanel.init(self, master) top = self.panel grid_top = TFrame(top, borderwidth=2, style='FlatFrame') grid_top.pack(side=TOP, expand=1, fill=X) var_number = DoubleVar(top) var_unit = StringVar(top) self.var_pos = LengthVar(1.0, config.preferences.default_unit, var_number, var_unit, command=self.set_pos) top1 = TFrame(top, style='FlatFrame') top1.pack(side=TOP, expand=0, fill=BOTH) list_frame = TFrame(top1, style="RoundedFrame", borderwidth=5) list_frame.pack(side=TOP, expand=1, fill=BOTH) sb_vert = TScrollbar(list_frame) sb_vert.pack(side=RIGHT, fill=Y) guides = UpdatedListbox(list_frame, bg='white', borderwidth=0, selectborderwidth=0, width=20, height=8) guides.pack(expand=1, fill=BOTH) guides.Subscribe(SELECTION, self.select_guide) sb_vert['command'] = (guides, 'yview') guides['yscrollcommand'] = (sb_vert, 'set') self.guides = guides self.selected = None pos_frame = TFrame(top1, style='FlatFrame') pos_frame.pack(side=TOP, expand=0) top2 = TFrame(pos_frame, height=15, style='FlatFrame') top2.pack(side=TOP, expand=0, fill=X) self.var_label = StringVar(top) self.var_label.set('X: ') labelunit = UnitLabel(pos_frame) labelunit.pack(side=RIGHT, expand=0, anchor=W) label = TLabel(pos_frame, image='space_6', style='FlatLabel') label.pack(side=RIGHT) self.entry = TSpinbox(pos_frame, var=0, vartype=1, min=-50000, max=50000, step=.1, width=6, command=self.pos_changed) self.entry.pack(side=RIGHT, expand=0, anchor=E) label = TLabel(pos_frame, textvariable=self.var_label, style='FlatLabel') label.pack(side=RIGHT, expand=0, anchor=E) frame = TFrame(top1, style='FlatFrame') frame.pack(side=TOP, fill=X) top2 = TFrame(frame, height=15, width=120, style='FlatFrame') top2.pack(side=TOP) button = UpdatedButton(frame, text=_("Add Horizontal Guide"), command=self.add_guide, args=1) button.pack(side=TOP) top2 = TFrame(frame, height=3, style='FlatFrame') top2.pack(side=TOP, expand=0, fill=X) button = UpdatedButton(frame, text=_("Add Vertical Guide"), command=self.add_guide, args=0) button.pack(side=TOP) top2 = TFrame(frame, height=3, style='FlatFrame') top2.pack(side=TOP, expand=0, fill=X) button = UpdatedButton(frame, text=_("Delete Guide"), command=self.del_guide) button.pack(side=TOP) top2 = TFrame(frame, height=5, style='FlatFrame') top2.pack(side=TOP, expand=0, fill=X) app.mw.docmanager.activedoc.Subscribe(GUIDE_LINES, self.init_from_doc) app.mw.Subscribe(DOCUMENT, self.init_from_doc) self.init_from_doc()
class SkewPanel(PluginPanel): name = "Skew" title = _("Skew") def init(self, master): PluginPanel.init(self, master) self.width_priority = 1 root = self.mw.root self.var_angleX = DoubleVar(root) self.var_angleY = DoubleVar(root) jump = 5 self.var_angleX.set(0) self.var_angleY.set(0) self.var_proportional = IntVar(root) self.var_proportional.set(0) self.var_basepoint = StringVar(root) self.var_basepoint.set("C") # --------------------------------------------------------- top = TFrame(self.panel, style="FlatFrame") top.pack(side=TOP, fill=BOTH) # --------------------------------------------------------- # Horisontal size_frameH = TFrame(top, style="FlatFrame", borderwidth=3) size_frameH.pack(side=TOP, fill=BOTH) label = TLabel(size_frameH, style="FlatLabel", image="skew_h") label.pack(side=LEFT, padx=5) self.entry_angleX = TSpinbox( size_frameH, var=0, vartype=1, textvariable=self.var_angleX, min=-75, max=75, step=jump, width=10, command=self.apply_skew, ) self.entry_angleX.pack(side=LEFT) self.labelwunit = TLabel(size_frameH, style="FlatLabel", text=_("deg")) self.labelwunit.pack(side=LEFT, padx=5) # --------------------------------------------------------- # Vertical size_frameV = TFrame(top, style="FlatFrame", borderwidth=3) size_frameV.pack(side=TOP, fill=BOTH) label = TLabel(size_frameV, style="FlatLabel", image="skew_v") label.pack(side=LEFT, padx=5) self.entry_angleY = TSpinbox( size_frameV, var=0, vartype=1, textvariable=self.var_angleY, min=-75, max=75, step=jump, width=10, command=self.apply_skew, ) self.entry_angleY.pack(side=LEFT) self.labelhunit = TLabel(size_frameV, style="FlatLabel", text=_("deg")) self.labelhunit.pack(side=LEFT, padx=5) # --------------------------------------------------------- # Basepoint check label = TLabel(top, style="FlatLabel", text=_("Basepoint:")) label.pack(side=TOP, fill=BOTH, padx=5) basepoint_frame = TLabelframe(top, labelwidget=label, style="Labelframe", borderwidth=4) basepoint_frame.pack(side=TOP, fill=X, padx=5, pady=2) self.Basepoint = BasePointSelector(basepoint_frame, anchor=self.var_basepoint) self.Basepoint.pack(side=LEFT, fill=BOTH, padx=5) label = TLabel(basepoint_frame, style="FlatLabel", image="coordinate_deg") label.pack(side=LEFT, fill=BOTH, padx=10) # --------------------------------------------------------- # Button frame button_frame = TFrame(top, style="FlatFrame", borderwidth=5) button_frame.pack(side=BOTTOM, fill=BOTH) self.update_buttons = [] self.button = UpdatedButton(top, text=_("Apply"), command=self.apply_skew) self.button.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X, pady=3) self.button_copy = UpdatedButton(top, text=_("Apply to Copy"), command=self.apply_to_copy) self.button_copy.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X) 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): if self.is_selection(): self.entry_angleX.set_state(NORMAL) self.entry_angleY.set_state(NORMAL) self.button["state"] = NORMAL self.button_copy["state"] = NORMAL else: self.entry_angleX.set_state(DISABLED) self.entry_angleY.set_state(DISABLED) self.button["state"] = DISABLED self.button_copy["state"] = DISABLED def SkewSelected(self, axisX=0, axisY=0): if self.document.selection: self.document.begin_transaction() try: try: br = self.document.selection.coord_rect hor_sel = br.right - br.left ver_sel = br.top - br.bottom cnt_x, cnt_y = self.Basepoint.get_basepoint(hor_sel, ver_sel, br.left, br.bottom) text = _("Skew") ax, ay = tan(axisX), tan(axisY) sx = 1.0 sy = 1.0 - (ax * ay) tx = cnt_x * ax ty = cnt_y * ax * ay - cnt_y * ay # Move the selection in the coordinates x0 y0 trafo = Trafo(1, 0, 0, 1, -cnt_x, -cnt_y) # Skew and Scaling trafo = Trafo(sx, ay, -ax, sy, 0, 0)(trafo) # Move the selection in the coordinates basepoint trafo = Trafo(1, 0, 0, 1, cnt_x, cnt_y)(trafo) self.document.TransformSelected(trafo, text) except: self.document.abort_transaction() finally: self.document.end_transaction() def apply_skew(self, *arg): if self.button["state"] == DISABLED: return try: angleX = self.var_angleX.get() * degrees angleY = self.var_angleY.get() * degrees self.SkewSelected(angleX, angleY) except: return def apply_to_copy(self): if self.button["state"] == DISABLED: return self.document.begin_transaction(_("Skew&Copy")) try: try: self.document.ApplyToDuplicate() self.apply_skew() except: self.document.abort_transaction() finally: self.document.end_transaction() def is_selection(self): return len(self.document.selection) > 0
def init(self, master): PluginPanel.init(self, master) root = self.mw.root self.var_angle = DoubleVar(root) self.var_angle.set(0) self.var_width_number = DoubleVar(root) self.var_height_number = DoubleVar(root) self.var_width_base = DoubleVar(root) self.var_height_base = DoubleVar(root) self.cnt_x_absolute = None self.cnt_y_absolute = None var_width_unit = StringVar(root) var_height_unit = StringVar(root) unit = config.preferences.default_unit self.var_width = LengthVar(10, unit, self.var_width_number, var_width_unit) self.var_height = LengthVar(10, unit, self.var_height_number, var_height_unit) jump = config.preferences.default_unit_jump self.var_width.set(0) self.var_height.set(0) self.var_width_base.set(0) self.var_height_base.set(0) self.var_position = StringVar(root) self.var_position.set(ABSOLUTE) self.var_basepoint = StringVar(root) self.var_basepoint.set("C") # --------------------------------------------------------- top = TFrame(self.panel, style="FlatFrame") top.pack(side=TOP, fill=BOTH) # --------------------------------------------------------- angle_frame = TFrame(top, style="FlatFrame", borderwidth=3) angle_frame.pack(side=TOP, fill=BOTH) label = TLabel(angle_frame, style="FlatLabel", text=" " + _("Angle:") + " ") label.pack(side=LEFT, padx=5) self.entry_angle = TSpinbox( angle_frame, var=0, vartype=1, textvariable=self.var_angle, min=-360, max=360, step=5, width=6, command=self.apply_rotate, ) self.entry_angle.pack(side=LEFT, anchor=E) label = TLabel(angle_frame, style="FlatLabel", text=_("deg")) label.pack(side=LEFT, padx=5) # --------------------------------------------------------- label = TLabel(top, style="FlatLabel", text=_("Center:")) label.pack(side=TOP, fill=BOTH, padx=5) # --------------------------------------------------------- # Horisontal size_frameH = TFrame(top, style="FlatFrame", borderwidth=3) size_frameH.pack(side=TOP, fill=BOTH) label = TLabel(size_frameH, style="FlatLabel", image="center_h") label.pack(side=LEFT, padx=5) self.entry_width = TSpinbox( size_frameH, var=0, vartype=1, textvariable=self.var_width_number, min=-50000, max=50000, step=jump, width=10, command=self.apply_rotate, ) self.entry_width.pack(side=LEFT) self.labelwunit = TLabel(size_frameH, style="FlatLabel", text=self.var_width.unit) self.labelwunit.pack(side=LEFT, padx=5) # --------------------------------------------------------- # Vertical size_frameV = TFrame(top, style="FlatFrame", borderwidth=3) size_frameV.pack(side=TOP, fill=BOTH) label = TLabel(size_frameV, style="FlatLabel", image="center_v") label.pack(side=LEFT, padx=5) self.entry_height = TSpinbox( size_frameV, var=0, vartype=1, textvariable=self.var_height_number, min=-50000, max=50000, step=jump, width=10, command=self.apply_rotate, ) self.entry_height.pack(side=LEFT) self.labelhunit = TLabel(size_frameV, style="FlatLabel", text=self.var_height.unit) self.labelhunit.pack(side=LEFT, padx=5) # --------------------------------------------------------- # position chek self.position_check = TCheckbutton( top, text=_("Absolute Center"), variable=self.var_position, onvalue=ABSOLUTE, offvalue=RELATIVE, command=self.position, ) self.position_check.pack(side=TOP, anchor=W, padx=5, pady=5) # --------------------------------------------------------- # Basepoint check label = TLabel(top, style="FlatLabel", text=_("Basepoint:")) label.pack(side=TOP, fill=BOTH, padx=5) basepoint_frame = TLabelframe(top, labelwidget=label, style="Labelframe", borderwidth=4) basepoint_frame.pack(side=TOP, fill=X, padx=5, pady=2) self.Basepoint = BasePointSelector(basepoint_frame, anchor=self.var_basepoint, command=self.apply_basepoint) self.Basepoint.pack(side=LEFT, fill=BOTH, padx=5) label = TLabel(basepoint_frame, style="FlatLabel", image="coordinate_deg") label.pack(side=LEFT, fill=BOTH, padx=10) self.position_check.pack(side=TOP, anchor=W, padx=5, pady=5) # --------------------------------------------------------- # Button frame button_frame = TFrame(top, style="FlatFrame", borderwidth=5) button_frame.pack(side=BOTTOM, fill=BOTH) self.update_buttons = [] self.button = UpdatedButton(top, text=_("Apply"), command=self.apply_rotate) self.button.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X, pady=3) self.button_copy = UpdatedButton(top, text=_("Apply to Copy"), command=self.apply_to_copy) self.button_copy.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X) self.init_from_doc() self.subscribe_receivers()
class RotatePanel(PluginPanel): name = "Rotate" title = _("Rotate") def init(self, master): PluginPanel.init(self, master) root = self.mw.root self.var_angle = DoubleVar(root) self.var_angle.set(0) self.var_width_number = DoubleVar(root) self.var_height_number = DoubleVar(root) self.var_width_base = DoubleVar(root) self.var_height_base = DoubleVar(root) self.cnt_x_absolute = None self.cnt_y_absolute = None var_width_unit = StringVar(root) var_height_unit = StringVar(root) unit = config.preferences.default_unit self.var_width = LengthVar(10, unit, self.var_width_number, var_width_unit) self.var_height = LengthVar(10, unit, self.var_height_number, var_height_unit) jump = config.preferences.default_unit_jump self.var_width.set(0) self.var_height.set(0) self.var_width_base.set(0) self.var_height_base.set(0) self.var_position = StringVar(root) self.var_position.set(ABSOLUTE) self.var_basepoint = StringVar(root) self.var_basepoint.set("C") # --------------------------------------------------------- top = TFrame(self.panel, style="FlatFrame") top.pack(side=TOP, fill=BOTH) # --------------------------------------------------------- angle_frame = TFrame(top, style="FlatFrame", borderwidth=3) angle_frame.pack(side=TOP, fill=BOTH) label = TLabel(angle_frame, style="FlatLabel", text=" " + _("Angle:") + " ") label.pack(side=LEFT, padx=5) self.entry_angle = TSpinbox( angle_frame, var=0, vartype=1, textvariable=self.var_angle, min=-360, max=360, step=5, width=6, command=self.apply_rotate, ) self.entry_angle.pack(side=LEFT, anchor=E) label = TLabel(angle_frame, style="FlatLabel", text=_("deg")) label.pack(side=LEFT, padx=5) # --------------------------------------------------------- label = TLabel(top, style="FlatLabel", text=_("Center:")) label.pack(side=TOP, fill=BOTH, padx=5) # --------------------------------------------------------- # Horisontal size_frameH = TFrame(top, style="FlatFrame", borderwidth=3) size_frameH.pack(side=TOP, fill=BOTH) label = TLabel(size_frameH, style="FlatLabel", image="center_h") label.pack(side=LEFT, padx=5) self.entry_width = TSpinbox( size_frameH, var=0, vartype=1, textvariable=self.var_width_number, min=-50000, max=50000, step=jump, width=10, command=self.apply_rotate, ) self.entry_width.pack(side=LEFT) self.labelwunit = TLabel(size_frameH, style="FlatLabel", text=self.var_width.unit) self.labelwunit.pack(side=LEFT, padx=5) # --------------------------------------------------------- # Vertical size_frameV = TFrame(top, style="FlatFrame", borderwidth=3) size_frameV.pack(side=TOP, fill=BOTH) label = TLabel(size_frameV, style="FlatLabel", image="center_v") label.pack(side=LEFT, padx=5) self.entry_height = TSpinbox( size_frameV, var=0, vartype=1, textvariable=self.var_height_number, min=-50000, max=50000, step=jump, width=10, command=self.apply_rotate, ) self.entry_height.pack(side=LEFT) self.labelhunit = TLabel(size_frameV, style="FlatLabel", text=self.var_height.unit) self.labelhunit.pack(side=LEFT, padx=5) # --------------------------------------------------------- # position chek self.position_check = TCheckbutton( top, text=_("Absolute Center"), variable=self.var_position, onvalue=ABSOLUTE, offvalue=RELATIVE, command=self.position, ) self.position_check.pack(side=TOP, anchor=W, padx=5, pady=5) # --------------------------------------------------------- # Basepoint check label = TLabel(top, style="FlatLabel", text=_("Basepoint:")) label.pack(side=TOP, fill=BOTH, padx=5) basepoint_frame = TLabelframe(top, labelwidget=label, style="Labelframe", borderwidth=4) basepoint_frame.pack(side=TOP, fill=X, padx=5, pady=2) self.Basepoint = BasePointSelector(basepoint_frame, anchor=self.var_basepoint, command=self.apply_basepoint) self.Basepoint.pack(side=LEFT, fill=BOTH, padx=5) label = TLabel(basepoint_frame, style="FlatLabel", image="coordinate_deg") label.pack(side=LEFT, fill=BOTH, padx=10) self.position_check.pack(side=TOP, anchor=W, padx=5, pady=5) # --------------------------------------------------------- # Button frame button_frame = TFrame(top, style="FlatFrame", borderwidth=5) button_frame.pack(side=BOTTOM, fill=BOTH) self.update_buttons = [] self.button = UpdatedButton(top, text=_("Apply"), command=self.apply_rotate) self.button.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X, pady=3) self.button_copy = UpdatedButton(top, text=_("Apply to Copy"), command=self.apply_to_copy) self.button_copy.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X) self.init_from_doc() self.subscribe_receivers() ############################################################################### def subscribe_receivers(self): self.document.Subscribe(SELECTION, self.Update) self.document.Subscribe(EDITED, self.update_var) config.preferences.Subscribe(CHANGED, self.update_pref) def unsubscribe_receivers(self): self.document.Unsubscribe(SELECTION, self.Update) self.document.Unsubscribe(EDITED, self.update_var) config.preferences.Unsubscribe(CHANGED, self.update_pref) def init_from_doc(self, *arg): self.Update() def Update(self, *arg): if self.is_selection(): self.entry_angle.set_state(NORMAL) self.entry_width.set_state(NORMAL) self.entry_height.set_state(NORMAL) self.position_check["state"] = NORMAL self.button["state"] = NORMAL self.button_copy["state"] = NORMAL self.TestBasepoint() else: self.entry_angle.set_state(DISABLED) self.entry_width.set_state(DISABLED) self.entry_height.set_state(DISABLED) self.position_check["state"] = DISABLED self.button["state"] = DISABLED self.button_copy["state"] = DISABLED self.update_pref() def apply_basepoint(self): self.update_var() def position(self): self.update_var() def RotateSelected(self, angle, cnt=None): text = _("Rotation") if self.document.selection: self.document.begin_transaction(text) try: try: if cnt is None: cnt = self.document.selection.coord_rect.center() angle = angle * degrees trafo = Rotation(angle, cnt) self.document.TransformSelected(trafo, text) except: self.document.abort_transaction() finally: self.document.end_transaction() def RotateAndCopy(self, angle, cnt=None): text = _("Rotation&Copy") if self.document.selection: self.document.begin_transaction(text) try: try: if cnt is None: cnt = self.document.selection.coord_rect.center() angle = angle * degrees trafo = Rotation(angle, cnt) self.document.ApplyToDuplicate() self.document.TransformSelected(trafo, text) except: self.document.abort_transaction() finally: self.document.end_transaction() def apply_rotate(self, *arg): if self.button["state"] == DISABLED: return try: var_x = self.var_width.get() var_y = self.var_height.get() var_a = self.var_angle.get() except: return if var_a < 0: if var_a < -360: var_a += int(var_a / 360) * 360 var_a += 360 if self.var_basepoint.get() != "USER": self.cnt_x_absolute, self.cnt_y_absolute = self.coordinates(ABSOLUTE) self.var_basepoint.set("USER") if self.var_width_base != var_x or self.var_height_base != var_y: if self.var_position.get() == ABSOLUTE: self.cnt_x_absolute = var_x self.cnt_y_absolute = var_y else: x, y = self.coordinates(ABSOLUTE, "C") self.cnt_x_absolute = var_x + x self.cnt_y_absolute = var_y + y self.var_basepoint.set("USER") if arg and arg[0] == "Duplicate": self.RotateAndCopy(var_a, Point(self.cnt_x_absolute, self.cnt_y_absolute)) else: self.RotateSelected(var_a, Point(self.cnt_x_absolute, self.cnt_y_absolute)) def apply_to_copy(self): self.apply_rotate("Duplicate") def coordinates(self, position, anchor=None): br = self.document.selection.coord_rect hor_sel = br.right - br.left ver_sel = br.top - br.bottom if position == RELATIVE: left, bottom = -hor_sel / 2.0, -ver_sel / 2.0 else: left, bottom = br.left, br.bottom cnt_x, cnt_y = self.Basepoint.get_basepoint(hor_sel, ver_sel, left, bottom, anchor) return cnt_x, cnt_y def TestBasepoint(self): if self.cnt_x_absolute is None: return base = ["C", "NW", "N", "NE", "W", "E", "SW", "S", "SE"] for b in xrange(len(base)): cnt_x, cnt_y = self.coordinates(ABSOLUTE, base[b]) if round(cnt_x, 2) == round(self.cnt_x_absolute, 2) and round(cnt_y, 2) == round(self.cnt_y_absolute, 2): self.var_basepoint.set(base[b]) return self.var_basepoint.set("USER") def update_pref(self, *arg): self.labelwunit["text"] = config.preferences.default_unit self.labelhunit["text"] = config.preferences.default_unit self.entry_width.step = config.preferences.default_unit_jump self.entry_height.step = config.preferences.default_unit_jump self.update_var() def update_var(self, *arg): if len(self.document.selection.GetInfo()): self.var_width.unit = config.preferences.default_unit self.var_height.unit = config.preferences.default_unit if self.var_basepoint.get() == "USER": if self.var_position.get() == ABSOLUTE: self.var_width.set(self.cnt_x_absolute) self.var_height.set(self.cnt_y_absolute) else: x, y = self.coordinates(ABSOLUTE, "C") self.var_width.set(self.cnt_x_absolute - x) self.var_height.set(self.cnt_y_absolute - y) else: x, y = self.coordinates(self.var_position.get()) self.var_width.set(x) self.var_height.set(y) self.var_width_base = self.var_width.get() self.var_height_base = self.var_height.get() def is_selection(self): return len(self.document.selection) > 0
def init(self, master): PluginPanel.init(self, master) self.width_priority = 1 root = self.mw.root self.var_angleX = DoubleVar(root) self.var_angleY = DoubleVar(root) jump = 5 self.var_angleX.set(0) self.var_angleY.set(0) self.var_proportional = IntVar(root) self.var_proportional.set(0) self.var_basepoint = StringVar(root) self.var_basepoint.set("C") # --------------------------------------------------------- top = TFrame(self.panel, style="FlatFrame") top.pack(side=TOP, fill=BOTH) # --------------------------------------------------------- # Horisontal size_frameH = TFrame(top, style="FlatFrame", borderwidth=3) size_frameH.pack(side=TOP, fill=BOTH) label = TLabel(size_frameH, style="FlatLabel", image="skew_h") label.pack(side=LEFT, padx=5) self.entry_angleX = TSpinbox( size_frameH, var=0, vartype=1, textvariable=self.var_angleX, min=-75, max=75, step=jump, width=10, command=self.apply_skew, ) self.entry_angleX.pack(side=LEFT) self.labelwunit = TLabel(size_frameH, style="FlatLabel", text=_("deg")) self.labelwunit.pack(side=LEFT, padx=5) # --------------------------------------------------------- # Vertical size_frameV = TFrame(top, style="FlatFrame", borderwidth=3) size_frameV.pack(side=TOP, fill=BOTH) label = TLabel(size_frameV, style="FlatLabel", image="skew_v") label.pack(side=LEFT, padx=5) self.entry_angleY = TSpinbox( size_frameV, var=0, vartype=1, textvariable=self.var_angleY, min=-75, max=75, step=jump, width=10, command=self.apply_skew, ) self.entry_angleY.pack(side=LEFT) self.labelhunit = TLabel(size_frameV, style="FlatLabel", text=_("deg")) self.labelhunit.pack(side=LEFT, padx=5) # --------------------------------------------------------- # Basepoint check label = TLabel(top, style="FlatLabel", text=_("Basepoint:")) label.pack(side=TOP, fill=BOTH, padx=5) basepoint_frame = TLabelframe(top, labelwidget=label, style="Labelframe", borderwidth=4) basepoint_frame.pack(side=TOP, fill=X, padx=5, pady=2) self.Basepoint = BasePointSelector(basepoint_frame, anchor=self.var_basepoint) self.Basepoint.pack(side=LEFT, fill=BOTH, padx=5) label = TLabel(basepoint_frame, style="FlatLabel", image="coordinate_deg") label.pack(side=LEFT, fill=BOTH, padx=10) # --------------------------------------------------------- # Button frame button_frame = TFrame(top, style="FlatFrame", borderwidth=5) button_frame.pack(side=BOTTOM, fill=BOTH) self.update_buttons = [] self.button = UpdatedButton(top, text=_("Apply"), command=self.apply_skew) self.button.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X, pady=3) self.button_copy = UpdatedButton(top, text=_("Apply to Copy"), command=self.apply_to_copy) self.button_copy.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X) self.init_from_doc() self.subscribe_receivers()
class ResizePanel(PluginPanel): name='Resize' title = _("Resize") def init(self, master): PluginPanel.init(self, master) self.width_priority=1 root=self.mw.root self.var_width_number=DoubleVar(root) self.var_height_number=DoubleVar(root) var_width_unit = StringVar(root) var_height_unit = StringVar(root) unit = config.preferences.default_unit self.var_width = LengthVar(10, unit, self.var_width_number, var_width_unit) self.var_height = LengthVar(10, unit,self.var_height_number,var_height_unit) jump=config.preferences.default_unit_jump self.var_width.set(0) self.var_height.set(0) self.var_proportional = IntVar(root) self.var_proportional.set(0) self.var_basepoint = StringVar(root) self.var_basepoint.set('C') #--------------------------------------------------------- top = TFrame(self.panel, style='FlatFrame') top.pack(side = TOP, fill=BOTH) #--------------------------------------------------------- # Horisontal size size_frameH = TFrame(top, style='FlatFrame', borderwidth=3) size_frameH.pack(side = TOP, fill = BOTH) label = TLabel(size_frameH, style='FlatLabel', image='size_h') label.pack(side = LEFT, padx=5) self.entry_width = TSpinbox(size_frameH, var=0, vartype=1, textvariable = self.var_width_number, min = 0, max = 50000, step = jump, width = 10, command=self.apply_resize) self.entry_width.pack(side = LEFT) self.entry_width.down_button.bind('<ButtonRelease>', self.entry_width_chang) self.entry_width.down_button.bind('<KeyRelease>', self.entry_width_chang) self.entry_width.up_button.bind('<ButtonRelease>', self.entry_width_chang) self.entry_width.up_button.bind('<KeyRelease>', self.entry_width_chang) self.entry_width.entry.bind('<ButtonRelease>', self.entry_width_chang) self.entry_width.entry.bind('<KeyRelease>', self.entry_width_chang) self.entry_width.entry.bind('<FocusOut>', self.entry_width_chang) self.entry_width.entry.bind('<FocusIn>', self.entry_width_FocusIn) self.labelwunit = TLabel(size_frameH, style='FlatLabel', text = self.var_width.unit) self.labelwunit.pack(side = LEFT, padx=5) #--------------------------------------------------------- # Vertical size_frameV = TFrame(top, style='FlatFrame', borderwidth=3) size_frameV.pack(side = TOP, fill = BOTH) label = TLabel(size_frameV, style='FlatLabel', image='size_v') label.pack(side = LEFT, padx=5) self.entry_height = TSpinbox(size_frameV, var=0, vartype=1, textvariable = self.var_height_number, min = 0, max = 50000, step = jump, width = 10, command=self.apply_resize) self.entry_height.pack(side = LEFT) self.entry_height.down_button.bind('<ButtonRelease>', self.entry_height_chang) self.entry_height.down_button.bind('<KeyRelease>', self.entry_height_chang) self.entry_height.up_button.bind('<ButtonRelease>', self.entry_height_chang) self.entry_height.up_button.bind('<KeyRelease>', self.entry_height_chang) self.entry_height.entry.bind('<ButtonRelease>', self.entry_height_chang) self.entry_height.entry.bind('<KeyRelease>', self.entry_height_chang) self.entry_height.entry.bind('<FocusOut>', self.entry_height_chang) self.entry_height.entry.bind('<FocusIn>', self.entry_height_FocusIn) self.labelhunit = TLabel(size_frameV, style='FlatLabel', text = self.var_height.unit) self.labelhunit.pack(side = LEFT, padx=5) #--------------------------------------------------------- # Proportional chek self.proportional_check = TCheckbutton(top, text = _("Proportional"), variable = self.var_proportional, command = self.proportional) self.proportional_check.pack(side = TOP, anchor=W, padx=5,pady=5) #--------------------------------------------------------- # Basepoint check label = TLabel(top, style='FlatLabel', text = _("Basepoint:")) label.pack(side = TOP, fill = BOTH, padx=5) basepoint_frame=TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=4) basepoint_frame.pack(side = TOP, fill=X, padx=5, pady=2) self.Basepoint = BasePointSelector(basepoint_frame, anchor=self.var_basepoint) self.Basepoint.pack(side = LEFT, fill = BOTH, padx=5) label = TLabel(basepoint_frame, style='FlatLabel', image = 'coordinate_sys') label.pack(side = LEFT, fill = BOTH, padx=10) #--------------------------------------------------------- # Button frame button_frame = TFrame(top, style='FlatFrame', borderwidth=5) button_frame.pack(side = BOTTOM, fill = BOTH) self.update_buttons = [] self.button = UpdatedButton(top, text = _("Apply"), command = self.apply_resize) self.button.pack(in_ = button_frame, side = BOTTOM, expand = 1, fill = X, pady=3) self.button_copy = UpdatedButton(top, text = _("Apply to Copy"), command = self.apply_to_copy) self.button_copy.pack(in_ = button_frame, side = BOTTOM, expand = 1, fill = X) self.subscribe_receivers() self.Update() ############################################################################### def subscribe_receivers(self): self.document.Subscribe(SELECTION, self.Update) self.document.Subscribe(EDITED, self.update_var) config.preferences.Subscribe(CHANGED, self.update_pref) def unsubscribe_receivers(self): self.document.Unsubscribe(SELECTION, self.Update) self.document.Unsubscribe(EDITED, self.update_var) config.preferences.Unsubscribe(CHANGED, self.update_pref) def init_from_doc(self, *arg): self.Update() def Update(self, *arg): if self.is_selection(): self.entry_width.set_state(NORMAL) self.entry_height.set_state(NORMAL) self.proportional_check['state']=NORMAL self.button['state']=NORMAL self.button_copy['state']=NORMAL else: self.entry_width.set_state(DISABLED) self.entry_height.set_state(DISABLED) self.proportional_check['state']=DISABLED self.button['state']=DISABLED self.button_copy['state']=DISABLED self.var_width.set(0) self.var_height.set(0) self.update_pref() def entry_width_FocusIn(self, *arg): self.width_priority=1 def entry_height_FocusIn(self, *arg): self.width_priority=0 def ResizeSelected(self, h, v, cnt_x=None, cnt_y=None): text = _("Resize") if self.document.selection: self.document.begin_transaction(text) try: try: br=self.document.selection.coord_rect hor_sel=br.right - br.left ver_sel=br.top - br.bottom if cnt_x is None: cnt_x=hor_sel/2+br.left if cnt_y is None: cnt_y=ver_sel/2+br.bottom trafo = Trafo(h, 0, 0, v, cnt_x-cnt_x*h, cnt_y-cnt_y*v) self.document.TransformSelected(trafo, text) except: self.document.abort_transaction() finally: self.document.end_transaction() def ResizeAndCopy(self, h, v, cnt_x=None, cnt_y=None): text = _("Resize&Copy") if self.document.selection: self.document.begin_transaction(text) try: try: br=self.document.selection.coord_rect hor_sel=br.right - br.left ver_sel=br.top - br.bottom if cnt_x is None: cnt_x=hor_sel/2+br.left if cnt_y is None: cnt_y=ver_sel/2+br.bottom trafo = Trafo(h, 0, 0, v, cnt_x-cnt_x*h, cnt_y-cnt_y*v) self.document.ApplyToDuplicate() self.document.TransformSelected(trafo, text) except: self.document.abort_transaction() finally: self.document.end_transaction() def entry_height_chang(self, *arg): if self.var_proportional.get(): try: height=self.var_height.get() br=self.document.selection.coord_rect hor_sel=br.right - br.left ver_sel=br.top - br.bottom self.var_width.set(hor_sel * height/ver_sel) except ZeroDivisionError: return def entry_width_chang(self, *arg): if self.var_proportional.get(): try: width=self.var_width.get() br=self.document.selection.coord_rect hor_sel=br.right - br.left ver_sel=br.top - br.bottom self.var_height.set(ver_sel * width/hor_sel) except ZeroDivisionError: return def proportional(self): if self.width_priority: self.entry_width_chang() else: self.entry_height_chang() def apply_resize(self, *arg): if self.button["state"]==DISABLED: return self.proportional() width=self.var_width.get() height=self.var_height.get() br=self.document.selection.coord_rect hor_sel=br.right - br.left ver_sel=br.top - br.bottom cnt_x,cnt_y=self.Basepoint.get_basepoint(hor_sel,ver_sel,br.left,br.bottom) try: h=width/hor_sel except ZeroDivisionError: h=0 try: v=height/ver_sel except ZeroDivisionError: v=0 if arg and arg[0] == 'Duplicate': self.ResizeAndCopy(h, v, cnt_x, cnt_y) else: self.ResizeSelected(h, v, cnt_x, cnt_y) self.update_var() def apply_to_copy(self): self.apply_resize('Duplicate') def update_pref(self, *arg): self.labelwunit['text']=config.preferences.default_unit self.labelhunit['text']=config.preferences.default_unit self.var_width.unit=config.preferences.default_unit self.var_height.unit=config.preferences.default_unit self.entry_width.step=config.preferences.default_unit_jump self.entry_height.step=config.preferences.default_unit_jump self.update_var() def update_var(self, *arg): if len(self.document.selection.GetInfo()): br=self.document.selection.coord_rect width=br.right - br.left height=br.top - br.bottom self.var_width.set(width) self.var_height.set(height) def is_selection(self): return (len(self.document.selection) > 0)
def build_dlg(self): root = self.top top = TFrame(root, borderwidth=2, style='FlatFrame') top.pack(side=TOP, expand=0, fill=BOTH) top2 = TFrame(top, height=3, style='FlatFrame') top2.pack(side=BOTTOM, expand=0, fill=X) button = UpdatedButton(top, text=_("Apply style"), command=self.apply_style, sensitivecb=self.can_apply, width=15) button.pack(side=BOTTOM, expand=0) self.Subscribe(SELECTION, button.Update) top2 = TFrame(top, height=3, style='FlatFrame') top2.pack(side=BOTTOM, expand=0, fill=X) button = UpdatedButton(top, text=_("Delete style"), command=self.remove_style, sensitivecb=self.can_remove, width=15) button.pack(side=BOTTOM, expand=0) top2 = TFrame(top, height=3, style='FlatFrame') top2.pack(side=BOTTOM, expand=0, fill=X) button = UpdatedButton(top, text=_("Create new style"), command=self.CreateStyleFromSelection, sensitivecb=self.main_window.document.CanCreateStyle, width=15) button.pack(side=BOTTOM, expand=0) self.Subscribe(SELECTION, button.Update) top2 = TFrame(top, height=5, style='FlatFrame') top2.pack(side=BOTTOM, expand=0, fill=X) list_frame = TFrame(top, style="RoundedFrame", borderwidth=5) list_frame.pack(side=TOP, expand=1, fill=BOTH) sb_vert = TScrollbar(list_frame, takefocus=0) sb_vert.pack(side=RIGHT, fill=Y) styles = UpdatedListbox(list_frame, bg='white', borderwidth=0, selectborderwidth=0) styles.pack(expand=1, fill=BOTH) styles.Subscribe(COMMAND, self.apply_style) sb_vert['command'] = (styles, 'yview') styles['yscrollcommand'] = (sb_vert, 'set') self.styles = styles root.resizable(width=0, height=0)
class SkewPanel(PluginPanel): name = 'Skew' title = _("Skew") def init(self, master): PluginPanel.init(self, master) self.width_priority = 1 root = self.mw.root self.var_angleX = DoubleVar(root) self.var_angleY = DoubleVar(root) jump = 5 self.var_angleX.set(0) self.var_angleY.set(0) self.var_proportional = IntVar(root) self.var_proportional.set(0) self.var_basepoint = StringVar(root) self.var_basepoint.set('C') #--------------------------------------------------------- top = TFrame(self.panel, style='FlatFrame') top.pack(side=TOP, fill=BOTH) #--------------------------------------------------------- # Horisontal size_frameH = TFrame(top, style='FlatFrame', borderwidth=3) size_frameH.pack(side=TOP, fill=BOTH) label = TLabel(size_frameH, style='FlatLabel', image='skew_h') label.pack(side=LEFT, padx=5) self.entry_angleX = TSpinbox(size_frameH, var=0, vartype=1, textvariable=self.var_angleX, min=-75, max=75, step=jump, width=10, command=self.apply_skew) self.entry_angleX.pack(side=LEFT) self.labelwunit = TLabel(size_frameH, style='FlatLabel', text=_("deg")) self.labelwunit.pack(side=LEFT, padx=5) #--------------------------------------------------------- # Vertical size_frameV = TFrame(top, style='FlatFrame', borderwidth=3) size_frameV.pack(side=TOP, fill=BOTH) label = TLabel(size_frameV, style='FlatLabel', image='skew_v') label.pack(side=LEFT, padx=5) self.entry_angleY = TSpinbox(size_frameV, var=0, vartype=1, textvariable=self.var_angleY, min=-75, max=75, step=jump, width=10, command=self.apply_skew) self.entry_angleY.pack(side=LEFT) self.labelhunit = TLabel(size_frameV, style='FlatLabel', text=_("deg")) self.labelhunit.pack(side=LEFT, padx=5) #--------------------------------------------------------- # Basepoint check label = TLabel(top, style='FlatLabel', text=_("Basepoint:")) label.pack(side=TOP, fill=BOTH, padx=5) basepoint_frame = TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=4) basepoint_frame.pack(side=TOP, fill=X, padx=5, pady=2) self.Basepoint = BasePointSelector(basepoint_frame, anchor=self.var_basepoint) self.Basepoint.pack(side=LEFT, fill=BOTH, padx=5) label = TLabel(basepoint_frame, style='FlatLabel', image='coordinate_deg') label.pack(side=LEFT, fill=BOTH, padx=10) #--------------------------------------------------------- # Button frame button_frame = TFrame(top, style='FlatFrame', borderwidth=5) button_frame.pack(side=BOTTOM, fill=BOTH) self.update_buttons = [] self.button = UpdatedButton(top, text=_("Apply"), command=self.apply_skew) self.button.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X, pady=3) self.button_copy = UpdatedButton(top, text=_("Apply to Copy"), command=self.apply_to_copy) self.button_copy.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X) 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): if self.is_selection(): self.entry_angleX.set_state(NORMAL) self.entry_angleY.set_state(NORMAL) self.button['state'] = NORMAL self.button_copy['state'] = NORMAL else: self.entry_angleX.set_state(DISABLED) self.entry_angleY.set_state(DISABLED) self.button['state'] = DISABLED self.button_copy['state'] = DISABLED def SkewSelected(self, axisX=0, axisY=0): if self.document.selection: self.document.begin_transaction() try: try: br = self.document.selection.coord_rect hor_sel = br.right - br.left ver_sel = br.top - br.bottom cnt_x, cnt_y = self.Basepoint.get_basepoint( hor_sel, ver_sel, br.left, br.bottom) text = _("Skew") ax, ay = tan(axisX), tan(axisY) sx = 1.0 sy = 1.0 - (ax * ay) tx = cnt_x * ax ty = cnt_y * ax * ay - cnt_y * ay # Move the selection in the coordinates x0 y0 trafo = Trafo(1, 0, 0, 1, -cnt_x, -cnt_y) # Skew and Scaling trafo = Trafo(sx, ay, -ax, sy, 0, 0)(trafo) # Move the selection in the coordinates basepoint trafo = Trafo(1, 0, 0, 1, cnt_x, cnt_y)(trafo) self.document.TransformSelected(trafo, text) except: self.document.abort_transaction() finally: self.document.end_transaction() def apply_skew(self, *arg): if self.button["state"] == DISABLED: return try: angleX = self.var_angleX.get() * degrees angleY = self.var_angleY.get() * degrees self.SkewSelected(angleX, angleY) except: return def apply_to_copy(self): if self.button["state"] == DISABLED: return self.document.begin_transaction(_("Skew&Copy")) try: try: self.document.ApplyToDuplicate() self.apply_skew() except: self.document.abort_transaction() finally: self.document.end_transaction() def is_selection(self): return (len(self.document.selection) > 0)
class ScalePanel(PluginPanel): name='ScaleAndMirror' title = _("Scale and Mirror") def init(self, master): PluginPanel.init(self, master) self.width_priority=1 root=self.mw.root self.var_width=DoubleVar(root) self.var_height=DoubleVar(root) unit='%' jump=5 self.var_proportional = IntVar(root) self.var_proportional.set(0) self.var_basepoint = StringVar(root) self.var_basepoint.set('C') #--------------------------------------------------------- top = TFrame(self.panel, style='FlatFrame') top.pack(side = TOP, fill=BOTH) #--------------------------------------------------------- # Horisontal size size_frameH = TFrame(top, style='FlatFrame', borderwidth=3) size_frameH.pack(side = TOP, fill = BOTH) label = TLabel(size_frameH, style='FlatLabel', image='size_h') label.pack(side = LEFT, padx=5) self.entry_width = TSpinbox(size_frameH, var=100, vartype=1, textvariable = self.var_width, min = -30000, max = 30000, step = jump, width = 6, command=self.apply_scale) self.entry_width.pack(side = LEFT) self.entry_width.down_button.bind('<ButtonRelease>', self.entry_width_chang) self.entry_width.down_button.bind('<KeyRelease>', self.entry_width_chang) self.entry_width.up_button.bind('<ButtonRelease>', self.entry_width_chang) self.entry_width.up_button.bind('<KeyRelease>', self.entry_width_chang) self.entry_width.entry.bind('<ButtonRelease>', self.entry_width_chang) self.entry_width.entry.bind('<KeyRelease>', self.entry_width_chang) self.entry_width.entry.bind('<FocusOut>', self.entry_width_chang) self.entry_width.entry.bind('<FocusIn>', self.entry_width_FocusIn) self.labelwunit = TLabel(size_frameH, style='FlatLabel', text = unit) self.labelwunit.pack(side = LEFT, padx=5) self.hflip=BooleanVar(root) self.hflip.set(0) button = TCheckbutton(size_frameH, image = "pstrip_hflip", style='ToolBarCheckButton', variable = self.hflip, command = None) button.pack(side = LEFT) #--------------------------------------------------------- # Vertical size_frameV = TFrame(top, style='FlatFrame', borderwidth=3) size_frameV.pack(side = TOP, fill = BOTH) label = TLabel(size_frameV, style='FlatLabel', image='size_v') label.pack(side = LEFT, padx=5) self.entry_height = TSpinbox(size_frameV, var=100, vartype=1, textvariable = self.var_height, min = -30000, max = 30000, step = jump, width = 6, command=self.apply_scale) self.entry_height.pack(side = LEFT) self.entry_height.down_button.bind('<ButtonRelease>', self.entry_height_chang) self.entry_height.down_button.bind('<KeyRelease>', self.entry_height_chang) self.entry_height.up_button.bind('<ButtonRelease>', self.entry_height_chang) self.entry_height.up_button.bind('<KeyRelease>', self.entry_height_chang) self.entry_height.entry.bind('<ButtonRelease>', self.entry_height_chang) self.entry_height.entry.bind('<KeyRelease>', self.entry_height_chang) self.entry_height.entry.bind('<FocusOut>', self.entry_height_chang) self.entry_height.entry.bind('<FocusIn>', self.entry_height_FocusIn) self.labelhunit = TLabel(size_frameV, style='FlatLabel', text = unit) self.labelhunit.pack(side = LEFT, padx=5) self.vflip=BooleanVar(root) self.vflip.set(0) button = TCheckbutton(size_frameV, image = "pstrip_vflip", style='ToolBarCheckButton', variable = self.vflip, command = None) button.pack(side = LEFT) #--------------------------------------------------------- # Proportional chek self.proportional_check = TCheckbutton(top, text = _("Proportional"), variable = self.var_proportional, command = self.proportional) self.proportional_check.pack(side = TOP, anchor=W, padx=5,pady=5) #--------------------------------------------------------- # Basepoint check label = TLabel(top, style='FlatLabel', text = _("Basepoint:")) label.pack(side = TOP, fill = BOTH, padx=5) basepoint_frame=TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=4) basepoint_frame.pack(side = TOP, fill=X, padx=5, pady=2) self.Basepoint = BasePointSelector(basepoint_frame, anchor=self.var_basepoint) self.Basepoint.pack(side = LEFT, fill = BOTH, padx=5) label = TLabel(basepoint_frame, style='FlatLabel', image = 'coordinate_sys') label.pack(side = LEFT, fill = BOTH, padx=10) #--------------------------------------------------------- # Button frame button_frame = TFrame(top, style='FlatFrame', borderwidth=5) button_frame.pack(side = BOTTOM, fill = BOTH) self.update_buttons = [] self.button = UpdatedButton(top, text = _("Apply"), command = self.apply_scale) self.button.pack(in_ = button_frame, side = BOTTOM, expand = 1, fill = X, pady=3) self.button_copy = UpdatedButton(top, text = _("Apply to Copy"), command = self.apply_to_copy) self.button_copy.pack(in_ = button_frame, side = BOTTOM, expand = 1, fill = X) 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, *arg): self.Update() def Update(self, *arg): if self.is_selection(): self.entry_width.set_state(NORMAL) self.entry_height.set_state(NORMAL) self.proportional_check['state']=NORMAL self.button['state']=NORMAL self.button_copy['state']=NORMAL else: self.entry_width.set_state(DISABLED) self.entry_height.set_state(DISABLED) self.proportional_check['state']=DISABLED self.button['state']=DISABLED self.button_copy['state']=DISABLED def entry_width_FocusIn(self, *arg): self.width_priority=1 def entry_height_FocusIn(self, *arg): self.width_priority=0 def ScaleSelected(self, h, v, cnt_x=None, cnt_y=None): text = _("Scale") if self.document.selection: self.document.begin_transaction(text) try: try: br=self.document.selection.coord_rect hor_sel=br.right - br.left ver_sel=br.top - br.bottom if cnt_x is None: cnt_x=hor_sel/2+br.left if cnt_y is None: cnt_y=ver_sel/2+br.bottom trafo = Trafo(h, 0, 0, v, cnt_x-cnt_x*h, cnt_y-cnt_y*v) self.document.TransformSelected(trafo, text) except: self.document.abort_transaction() finally: self.document.end_transaction() def ScaleAndCopy(self, h, v, cnt_x=None, cnt_y=None): text = _("Scale&Copy") if self.document.selection: self.document.begin_transaction(text) try: try: br=self.document.selection.coord_rect hor_sel=br.right - br.left ver_sel=br.top - br.bottom if cnt_x is None: cnt_x=hor_sel/2+br.left if cnt_y is None: cnt_y=ver_sel/2+br.bottom trafo = Trafo(h, 0, 0, v, cnt_x-cnt_x*h, cnt_y-cnt_y*v) self.document.ApplyToDuplicate() self.document.TransformSelected(trafo, text) except: self.document.abort_transaction() finally: self.document.end_transaction() def entry_height_chang(self, *arg): if self.var_proportional.get(): self.var_width.set(self.var_height.get()) def entry_width_chang(self, *arg): if self.var_proportional.get(): self.var_height.set(self.var_width.get()) def proportional(self): if self.width_priority: self.entry_width_chang() else: self.entry_height_chang() def apply_scale(self, *arg): if self.button["state"]==DISABLED: return self.proportional() width=self.var_width.get() height=self.var_height.get() br=self.document.selection.coord_rect hor_sel=br.right - br.left ver_sel=br.top - br.bottom cnt_x,cnt_y=self.Basepoint.get_basepoint(hor_sel,ver_sel,br.left,br.bottom) h=width/100 if h==0: h=1 if self.hflip.get(): h=-1*h v=height/100 if v==0: v=1 if self.vflip.get(): v=-1*v if arg and arg[0] == 'Duplicate': self.ScaleAndCopy(h, v, cnt_x, cnt_y) else: self.ScaleSelected(h, v, cnt_x, cnt_y) def apply_to_copy(self): self.apply_scale('Duplicate') def is_selection(self): return (len(self.document.selection) > 0)