class ResizePlugin(ActionPlugin): def __init__(self, mw): ActionPlugin.__init__(self, mw) events.connect(events.NO_DOCS, self.set_state) events.connect(events.DOC_CHANGED, self.set_state) events.connect(events.SELECTION_CHANGED, self.set_state) def build(self): label = gtk.Label('Size:') self.pack_start(label, False, False, 2) self.width_spin = UnitSpin(self.user_changes) self.pack_start(self.width_spin, False, False, 0) label = gtk.Label('x') self.pack_start(label, False, False, 0) self.height_spin = UnitSpin(self.user_changes) self.pack_start(self.height_spin, False, False, 0) label = UnitLabel() self.pack_start(label, False, False, 2) self.keep_ratio = KeepRatioLabel() self.pack_start(self.keep_ratio, False, False, 5) def set_state(self, *args): if self.app.current_doc is None: self.deactivate() else: if self.app.current_doc.selection.objs: self.activate() else: self.deactivate() def deactivate(self): self.width_spin.set_point_value(0) self.height_spin.set_point_value(0) self.set_sensitive(False) def activate(self): bbox = self.app.current_doc.selection.bbox w = bbox[2] - bbox[0] h = bbox[3] - bbox[1] self.width_spin.set_point_value(w) self.height_spin.set_point_value(h) self.set_sensitive(True) def user_changes(self, *args): doc = self.app.current_doc if not doc is None and doc.selection.objs: bbox = doc.selection.bbox w = bbox[2] - bbox[0] h = bbox[3] - bbox[1] center_x = bbox[0] + w / 2.0 center_y = bbox[1] + h / 2.0 new_w = self.width_spin.get_point_value() new_h = self.height_spin.get_point_value() if not round(w, 4) == round(new_w, 4) or not round(h, 4) == round(new_h, 4): if not new_w: self.width_spin.set_point_value(w);return if not new_h: self.height_spin.set_point_value(h);return m11 = round(new_w / w, 4) m22 = round(new_h / h, 4) if m11 == m22 == 1.0:return trafo = [] if self.keep_ratio.value: if m11 == 1.0: dx = center_x * (1 - m22) dy = center_y * (1 - m22) trafo = [m22, 0.0, 0.0, m22, dx, dy] if m22 == 1.0: dx = center_x * (1 - m11) dy = center_y * (1 - m11) trafo = [m11, 0.0, 0.0, m11, dx, dy] else: dx = center_x * (1 - m11) dy = center_y * (1 - m22) trafo = [m11, 0.0, 0.0, m22, dx, dy] if trafo: doc.api.transform_selected(trafo)
class PlotterTab(gtk.VBox): name = "Plotter Setup" caption = _("Plotter Setup") caption_label = None def __init__(self, app): gtk.VBox.__init__(self) self.app = app self.caption_label = gtk.Label(self.caption) spacer = gtk.VBox() self.add(spacer) self.set_border_width(15) self.set_size_request(385, 220) tab = gtk.Table(3, 2, False) tab.set_row_spacings(10) tab.set_col_spacings(10) spacer.add(tab) #--------------------------- label = gtk.Label(_('Plotter model:')) label.set_alignment(0, 0.5) tab.attach(label, 0, 1, 0, 1, gtk.FILL | gtk.EXPAND, gtk.SHRINK) self.combo = gtk.combo_box_new_text() self.combo.connect('changed', self.combo_changed) items = plt_data.keys() items.sort() for item in items: self.combo.append_text(item) tab.attach(self.combo, 1, 2, 0, 1, gtk.SHRINK, gtk.SHRINK) #--------------------------- self.radiobut1 = gtk.RadioButton(None, _("Predefined model")) tab.attach(self.radiobut1, 0, 1, 1, 2, gtk.SHRINK, gtk.SHRINK) self.radiobut1.connect("toggled", self.radio_changed) self.radiobut2 = gtk.RadioButton(self.radiobut1, _("Custom model")) tab.attach(self.radiobut2, 1, 2, 1, 2, gtk.SHRINK, gtk.SHRINK) self.radiobut2.connect("toggled", self.radio_changed) #--------------------------- self.data_frame = gtk.Frame(_('Plotter data')) tab.attach(self.data_frame, 0, 2, 2, 3, gtk.FILL | gtk.EXPAND, gtk.SHRINK) data_tab = gtk.Table(3, 3, False) data_tab.set_border_width(15) data_tab.set_row_spacings(10) data_tab.set_col_spacings(10) self.data_frame.add(data_tab) #=========================== label = gtk.Label(_('Plotter model:')) label.set_alignment(1, 0.5) data_tab.attach(label, 0, 1, 0, 1, gtk.FILL , gtk.SHRINK) self.plt_name = gtk.Entry() self.plt_name.set_text(config.plotter_name) data_tab.attach(self.plt_name, 1, 3, 0, 1, gtk.FILL | gtk.EXPAND, gtk.SHRINK) #=========================== label = gtk.Label(_('Cutting width:')) label.set_alignment(1, 0.5) data_tab.attach(label, 0, 1, 1, 2, gtk.FILL , gtk.SHRINK) self.height_spin = UnitSpin(self.user_changes) self.height_spin.set_point_value(config.plotter_page_height) data_tab.attach(self.height_spin, 1, 2, 1, 2, gtk.SHRINK, gtk.SHRINK) unit_label = UnitLabel() unit_label.set_alignment(0, 0.5) data_tab.attach(unit_label, 2, 3, 1, 2, gtk.FILL | gtk.EXPAND, gtk.SHRINK) #=========================== label = gtk.Label(_('Cutting length:')) label.set_alignment(1, 0.5) data_tab.attach(label, 0, 1, 2, 3, gtk.FILL , gtk.SHRINK) self.width_spin = UnitSpin(self.user_changes) self.width_spin.set_point_value(config.plotter_page_width) data_tab.attach(self.width_spin, 1, 2, 2, 3, gtk.SHRINK, gtk.SHRINK) unit_label = UnitLabel() unit_label.set_alignment(0, 0.5) data_tab.attach(unit_label, 2, 3, 2, 3, gtk.FILL | gtk.EXPAND, gtk.SHRINK) #=========================== if config.plotter_name in items and \ round(plt_data[config.plotter_name][0], 6) == round(config.plotter_page_height, 6) and \ round(plt_data[config.plotter_name][1], 6) == round(config.plotter_page_width, 6): self.combo.set_active(items.index(config.plotter_name)) self.radiobut1.set_active(True) self.data_frame.set_sensitive(False) else: self.radiobut2.set_active(True) def user_changes(self, *args):pass def radio_changed(self, *args): if self.radiobut1.get_active(): self.combo_changed() else: self.data_frame.set_sensitive(True) def combo_changed(self, *args): items = plt_data.keys() items.sort() index = self.combo.get_active() if index == -1: index = items.index('Generic plotter') self.combo.set_active(index) value = items[index] self.plt_name.set_text(value) self.height_spin.set_point_value(plt_data[value][0]) self.width_spin.set_point_value(plt_data[value][1]) self.radiobut1.set_active(True) self.data_frame.set_sensitive(False) def do_apply(self): config.plotter_name = self.plt_name.get_text() config.plotter_page_height = self.height_spin.get_point_value() config.plotter_page_width = self.width_spin.get_point_value()
class ResizePlugin(ActionPlugin): def __init__(self, mw): ActionPlugin.__init__(self, mw) events.connect(events.NO_DOCS, self.set_state) events.connect(events.DOC_CHANGED, self.set_state) events.connect(events.SELECTION_CHANGED, self.set_state) def build(self): label = gtk.Label('Size:') self.pack_start(label, False, False, 2) self.width_spin = UnitSpin(self.user_changes) self.pack_start(self.width_spin, False, False, 0) label = gtk.Label('x') self.pack_start(label, False, False, 0) self.height_spin = UnitSpin(self.user_changes) self.pack_start(self.height_spin, False, False, 0) label = UnitLabel() self.pack_start(label, False, False, 2) self.keep_ratio = KeepRatioLabel() self.pack_start(self.keep_ratio, False, False, 5) def set_state(self, *args): if self.app.current_doc is None: self.deactivate() else: if self.app.current_doc.selection.objs: self.activate() else: self.deactivate() def deactivate(self): self.width_spin.set_point_value(0) self.height_spin.set_point_value(0) self.set_sensitive(False) def activate(self): bbox = self.app.current_doc.selection.bbox w = bbox[2] - bbox[0] h = bbox[3] - bbox[1] self.width_spin.set_point_value(w) self.height_spin.set_point_value(h) self.set_sensitive(True) def user_changes(self, *args): doc = self.app.current_doc if not doc is None and doc.selection.objs: bbox = doc.selection.bbox w = bbox[2] - bbox[0] h = bbox[3] - bbox[1] center_x = bbox[0] + w / 2.0 center_y = bbox[1] + h / 2.0 new_w = self.width_spin.get_point_value() new_h = self.height_spin.get_point_value() if not round(w, 4) == round(new_w, 4) or not round(h, 4) == round( new_h, 4): if not new_w: self.width_spin.set_point_value(w) return if not new_h: self.height_spin.set_point_value(h) return m11 = round(new_w / w, 4) m22 = round(new_h / h, 4) if m11 == m22 == 1.0: return trafo = [] if self.keep_ratio.value: if m11 == 1.0: dx = center_x * (1 - m22) dy = center_y * (1 - m22) trafo = [m22, 0.0, 0.0, m22, dx, dy] if m22 == 1.0: dx = center_x * (1 - m11) dy = center_y * (1 - m11) trafo = [m11, 0.0, 0.0, m11, dx, dy] else: dx = center_x * (1 - m11) dy = center_y * (1 - m22) trafo = [m11, 0.0, 0.0, m22, dx, dy] if trafo: doc.api.transform_selected(trafo)
class PlotterTab(gtk.VBox): name = "Plotter Setup" caption = _("Plotter Setup") caption_label = None def __init__(self, app): gtk.VBox.__init__(self) self.app = app self.caption_label = gtk.Label(self.caption) spacer = gtk.VBox() self.add(spacer) self.set_border_width(15) self.set_size_request(385, 220) tab = gtk.Table(3, 2, False) tab.set_row_spacings(10) tab.set_col_spacings(10) spacer.add(tab) #--------------------------- label = gtk.Label(_('Plotter model:')) label.set_alignment(0, 0.5) tab.attach(label, 0, 1, 0, 1, gtk.FILL | gtk.EXPAND, gtk.SHRINK) self.combo = gtk.combo_box_new_text() self.combo.connect('changed', self.combo_changed) items = plt_data.keys() items.sort() for item in items: self.combo.append_text(item) tab.attach(self.combo, 1, 2, 0, 1, gtk.SHRINK, gtk.SHRINK) #--------------------------- self.radiobut1 = gtk.RadioButton(None, _("Predefined model")) tab.attach(self.radiobut1, 0, 1, 1, 2, gtk.SHRINK, gtk.SHRINK) self.radiobut1.connect("toggled", self.radio_changed) self.radiobut2 = gtk.RadioButton(self.radiobut1, _("Custom model")) tab.attach(self.radiobut2, 1, 2, 1, 2, gtk.SHRINK, gtk.SHRINK) self.radiobut2.connect("toggled", self.radio_changed) #--------------------------- self.data_frame = gtk.Frame(_('Plotter data')) tab.attach(self.data_frame, 0, 2, 2, 3, gtk.FILL | gtk.EXPAND, gtk.SHRINK) data_tab = gtk.Table(3, 3, False) data_tab.set_border_width(15) data_tab.set_row_spacings(10) data_tab.set_col_spacings(10) self.data_frame.add(data_tab) #=========================== label = gtk.Label(_('Plotter model:')) label.set_alignment(1, 0.5) data_tab.attach(label, 0, 1, 0, 1, gtk.FILL, gtk.SHRINK) self.plt_name = gtk.Entry() self.plt_name.set_text(config.plotter_name) data_tab.attach(self.plt_name, 1, 3, 0, 1, gtk.FILL | gtk.EXPAND, gtk.SHRINK) #=========================== label = gtk.Label(_('Cutting width:')) label.set_alignment(1, 0.5) data_tab.attach(label, 0, 1, 1, 2, gtk.FILL, gtk.SHRINK) self.height_spin = UnitSpin(self.user_changes) self.height_spin.set_point_value(config.plotter_page_height) data_tab.attach(self.height_spin, 1, 2, 1, 2, gtk.SHRINK, gtk.SHRINK) unit_label = UnitLabel() unit_label.set_alignment(0, 0.5) data_tab.attach(unit_label, 2, 3, 1, 2, gtk.FILL | gtk.EXPAND, gtk.SHRINK) #=========================== label = gtk.Label(_('Cutting length:')) label.set_alignment(1, 0.5) data_tab.attach(label, 0, 1, 2, 3, gtk.FILL, gtk.SHRINK) self.width_spin = UnitSpin(self.user_changes) self.width_spin.set_point_value(config.plotter_page_width) data_tab.attach(self.width_spin, 1, 2, 2, 3, gtk.SHRINK, gtk.SHRINK) unit_label = UnitLabel() unit_label.set_alignment(0, 0.5) data_tab.attach(unit_label, 2, 3, 2, 3, gtk.FILL | gtk.EXPAND, gtk.SHRINK) #=========================== if config.plotter_name in items and \ round(plt_data[config.plotter_name][0], 6) == round(config.plotter_page_height, 6) and \ round(plt_data[config.plotter_name][1], 6) == round(config.plotter_page_width, 6): self.combo.set_active(items.index(config.plotter_name)) self.radiobut1.set_active(True) self.data_frame.set_sensitive(False) else: self.radiobut2.set_active(True) def user_changes(self, *args): pass def radio_changed(self, *args): if self.radiobut1.get_active(): self.combo_changed() else: self.data_frame.set_sensitive(True) def combo_changed(self, *args): items = plt_data.keys() items.sort() index = self.combo.get_active() if index == -1: index = items.index('Generic plotter') self.combo.set_active(index) value = items[index] self.plt_name.set_text(value) self.height_spin.set_point_value(plt_data[value][0]) self.width_spin.set_point_value(plt_data[value][1]) self.radiobut1.set_active(True) self.data_frame.set_sensitive(False) def do_apply(self): config.plotter_name = self.plt_name.get_text() config.plotter_page_height = self.height_spin.get_point_value() config.plotter_page_width = self.width_spin.get_point_value()